diff --git a/packages/cli/package.json b/packages/cli/package.json
index c6333a572..10d4f77ff 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -77,6 +77,7 @@
"@octokit/request-error": "catalog:",
"@octokit/rest": "catalog:",
"@socketaddon/iocraft": "file:../package-builder/build/dev/out/socketaddon-iocraft",
+ "@socketaddon/opentui": "file:../package-builder/build/dev/out/socketaddon-opentui",
"@socketregistry/hyrious__bun.lockb": "catalog:",
"@socketregistry/indent-string": "catalog:",
"@socketregistry/is-interactive": "catalog:",
diff --git a/packages/cli/scripts/download-assets.mjs b/packages/cli/scripts/download-assets.mjs
index d9fa65f99..aea139f35 100644
--- a/packages/cli/scripts/download-assets.mjs
+++ b/packages/cli/scripts/download-assets.mjs
@@ -59,6 +59,18 @@ const ASSETS = {
name: 'iocraft',
type: 'multi-platform',
},
+ opentui: {
+ description: 'opentui native bindings (.node files)',
+ download: {
+ asset: 'opentui-*.node',
+ cwd: rootPath,
+ downloadDir: '../../packages/build-infra/build/downloaded/opentui',
+ quiet: false,
+ tool: 'opentui',
+ },
+ name: 'opentui',
+ type: 'multi-platform',
+ },
models: {
description: 'AI models (MiniLM-L6-v2, CodeT5)',
download: {
diff --git a/packages/cli/src/utils/terminal/iocraft.mts b/packages/cli/src/utils/terminal/iocraft.mts
index 510172a16..b54d249c4 100644
--- a/packages/cli/src/utils/terminal/iocraft.mts
+++ b/packages/cli/src/utils/terminal/iocraft.mts
@@ -22,13 +22,20 @@ function getIocraft(): typeof iocraft {
try {
// Use createRequire to load native .node module from ESM.
const require = createRequire(import.meta.url)
- const loaded = require('@socketaddon/iocraft')
+ // Try opentui first (yoga-layout + opentui.node renderer),
+ // fall back to iocraft if not available.
+ let loaded
+ try {
+ loaded = require('@socketaddon/opentui')
+ } catch {
+ loaded = require('@socketaddon/iocraft')
+ }
// Handle ESM default export when loaded via require().
iocraftInstance = loaded.default || loaded
} catch (e) {
throw new Error(
- `Failed to load iocraft native module: ${e}\n` +
- `Make sure @socketaddon/iocraft is installed and your platform is supported.`,
+ `Failed to load terminal UI module: ${e}\n` +
+ `Make sure @socketaddon/opentui or @socketaddon/iocraft is installed and your platform is supported.`,
)
}
}
diff --git a/packages/cli/test/unit/commands/analytics/__snapshots__/AnalyticsRenderer.test.mts.snap b/packages/cli/test/unit/commands/analytics/__snapshots__/AnalyticsRenderer.test.mts.snap
index c071da946..165df31df 100644
--- a/packages/cli/test/unit/commands/analytics/__snapshots__/AnalyticsRenderer.test.mts.snap
+++ b/packages/cli/test/unit/commands/analytics/__snapshots__/AnalyticsRenderer.test.mts.snap
@@ -3,39 +3,38 @@
exports[`AnalyticsRenderer > data rendering > should render analytics with fixture data 1`] = `
"Socket Analytics
-┌─────────────────────────┐
-│ │
-│ Top 5 Alert Types: │
-│ │
-│ envVars: 2533 │
-│ unmaintained: 532 │
-│ filesystemAccess: 514 │
-│ networkAccess: 434 │
-│ dynamicRequire: 274 │
-│ │
-└─────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────┐
+│ │
+│ Top 5 Alert Types: │
+│ │
+│ envVars: 2533 │
+│ unmaintained: 532 │
+│ filesystemAccess: 514 │
+│ networkAccess: 434 │
+│ dynamicRequire: 274 │
+│ │
+└──────────────────────────────────────────────────────────────────────────────┘
-┌─────────────────────────┐
-│ │
-│ Critical Alerts │
-│ │
-│ Apr 19: 0 │
-│ Apr 21: 0 │
-│ Apr 20: 0 │
-│ Apr 22: 0 │
-│ │
-└─────────────────────────┘
-
-┌─────────────────────────┐
-│ │
-│ High Alerts │
-│ │
-│ Apr 19: 13 │
-│ Apr 21: 13 │
-│ Apr 20: 13 │
-│ Apr 22: 10 │
-│ │
-└─────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────┐
+│ │
+│ Critical Alerts │
+│ │
+│ Apr 19: 0 │
+│ Apr 21: 0 │
+│ Apr 20: 0 │
+│ Apr 22: 0 │
+│ │
+└──────────────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────┐
+│ │
+│ High Alerts │
+│ │
+│ Apr 19: 13 │
+│ Apr 21: 13 │
+│ Apr 20: 13 │
+│ Apr 22: 10 │
+│ │
+└──────────────────────────────────────────────────────────────────────────────┘
"
`;
diff --git a/packages/cli/test/unit/commands/audit-log/__snapshots__/AuditLogRenderer.test.mts.snap b/packages/cli/test/unit/commands/audit-log/__snapshots__/AuditLogRenderer.test.mts.snap
index b9f12e5a2..68ab12e50 100644
--- a/packages/cli/test/unit/commands/audit-log/__snapshots__/AuditLogRenderer.test.mts.snap
+++ b/packages/cli/test/unit/commands/audit-log/__snapshots__/AuditLogRenderer.test.mts.snap
@@ -3,14 +3,13 @@
exports[`AuditLogRenderer > data rendering > should render audit log table with multiple entries 1`] = `
"Socket Audit Logs for test-org
-┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
-│ │
-│ Event ID Created At Event Type User Email │
-│ │
-│ evt_12345678901234 Apr 19, 2024 10:30 AM repository.created user@example.com │
-│ evt_23456789012345 Apr 19, 2024 11:00 AM settings.updated admin@example.com │
-│ │
-└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
-
+┌──────────────────────────────────────────────────────────────────────────────┐
+│ │
+│ Event ID Created At Event Type │
+│ │
+│ evt_12345678901234 Apr 19, 2024 10:30 AM repository.created │
+│ evt_23456789012345 Apr 19, 2024 11:00 AM settings.updated │
+│ │
+└──────────────────────────────────────────────────────────────────────────────┘
"
`;
diff --git a/packages/cli/test/unit/commands/threat-feed/__snapshots__/ThreatFeedRenderer.test.mts.snap b/packages/cli/test/unit/commands/threat-feed/__snapshots__/ThreatFeedRenderer.test.mts.snap
index 878be89e0..e07199164 100644
--- a/packages/cli/test/unit/commands/threat-feed/__snapshots__/ThreatFeedRenderer.test.mts.snap
+++ b/packages/cli/test/unit/commands/threat-feed/__snapshots__/ThreatFeedRenderer.test.mts.snap
@@ -3,14 +3,13 @@
exports[`ThreatFeedRenderer > data rendering > should render threat feed table with multiple threats 1`] = `
"Socket Threat Feed
-┌─────────────────────────────────────────────────────────────────────────────────────────────────────┐
-│ │
-│ Ecosystem Name Version Type Detected │
-│ │
-│ npm malicious-pkg 1.0.0 malware test-date │
-│ npm suspicious-lib 2.1.0 obfuscation test-date │
-│ │
-└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
-
+┌──────────────────────────────────────────────────────────────────────────────┐
+│ │
+│ Ecosystem Name Version Type │
+│ │
+│ npm malicious-pkg 1.0.0 malware │
+│ npm suspicious-lib 2.1.0 obfuscation │
+│ │
+└──────────────────────────────────────────────────────────────────────────────┘
"
`;
diff --git a/packages/package-builder/templates/socketaddon-opentui-main/index.d.ts b/packages/package-builder/templates/socketaddon-opentui-main/index.d.ts
new file mode 100644
index 000000000..896b106b0
--- /dev/null
+++ b/packages/package-builder/templates/socketaddon-opentui-main/index.d.ts
@@ -0,0 +1,21 @@
+/**
+ * OpenTUI render engine — iocraft-compatible API.
+ */
+
+export interface ComponentNode {
+ type: 'Text' | 'View' | 'MixedText' | 'Fragment'
+ children?: ComponentNode[]
+ content?: string
+ [key: string]: unknown
+}
+
+export interface OpenTuiEngine {
+ renderToString(element: ComponentNode): string
+ renderToStringWithWidth(element: ComponentNode, maxWidth: number): string
+ printComponent(element: ComponentNode): void
+ eprintComponent(element: ComponentNode): void
+ getTerminalSize(): [number, number]
+}
+
+declare const engine: OpenTuiEngine
+export default engine
diff --git a/packages/package-builder/templates/socketaddon-opentui-main/index.mjs b/packages/package-builder/templates/socketaddon-opentui-main/index.mjs
new file mode 100644
index 000000000..66da6b58a
--- /dev/null
+++ b/packages/package-builder/templates/socketaddon-opentui-main/index.mjs
@@ -0,0 +1,129 @@
+/**
+ * @socketaddon/opentui - Node.js bindings for OpenTUI terminal UI library
+ *
+ * Platform detection, native addon loading, and high-level render engine.
+ * Automatically loads the correct .node binary for the current platform
+ * and provides iocraft-compatible renderToString/printComponent/eprintComponent API.
+ */
+
+import { createRequire } from 'node:module'
+import { platform, arch } from 'node:os'
+
+const require = createRequire(import.meta.url)
+
+/**
+ * Detect the current platform and architecture.
+ * @returns {string} Platform identifier (e.g., 'darwin-arm64', 'linux-x64-musl')
+ */
+function getPlatformIdentifier() {
+ const platformName = platform()
+ const archName = arch()
+
+ const platformMap = {
+ __proto__: null,
+ darwin: 'darwin',
+ linux: 'linux',
+ win32: 'win',
+ }
+
+ const archMap = {
+ __proto__: null,
+ arm64: 'arm64',
+ x64: 'x64',
+ }
+
+ const mappedPlatform = platformMap[platformName]
+ const mappedArch = archMap[archName]
+
+ if (!mappedPlatform || !mappedArch) {
+ throw new Error(
+ `Unsupported platform: ${platformName} ${archName}\n` +
+ `opentui native bindings are only available for:\n` +
+ ` - macOS (darwin): arm64, x64\n` +
+ ` - Linux (linux): arm64, x64 (glibc and musl)\n` +
+ ` - Windows (win32): arm64, x64`,
+ )
+ }
+
+ // Detect musl on Linux.
+ let libcSuffix = ''
+ if (platformName === 'linux') {
+ try {
+ const { spawnSync } = require('node:child_process')
+ const lddResult = spawnSync('ldd', ['--version'], {
+ encoding: 'utf8',
+ stdio: ['ignore', 'pipe', 'ignore'],
+ })
+ const output = lddResult.stdout || ''
+ if (output.includes('musl')) {
+ libcSuffix = '-musl'
+ }
+ } catch {
+ // If ldd fails, assume glibc.
+ }
+ }
+
+ return `${mappedPlatform}-${mappedArch}${libcSuffix}`
+}
+
+/**
+ * Load the native addon for the current platform.
+ * @returns {object} The loaded opentui native module
+ */
+function loadNativeAddon() {
+ const platformId = getPlatformIdentifier()
+ const packageName = `@socketaddon/opentui-${platformId}`
+
+ try {
+ // Try to load from optionalDependencies first.
+ return require(packageName)
+ } catch (e) {
+ // Fallback for development: resolve based on actual package location.
+ try {
+ const { dirname, join } = require('node:path')
+ const { fileURLToPath } = require('node:url')
+ const { realpathSync, existsSync } = require('node:fs')
+
+ const __dirname = dirname(fileURLToPath(import.meta.url))
+ const realDir = realpathSync(__dirname)
+
+ let buildOutDir
+
+ if (realDir.includes('/build/') && realDir.includes('/out/socketaddon-opentui')) {
+ buildOutDir = realDir.split('/socketaddon-opentui')[0]
+ } else if (realDir.includes('@socketaddon+opentui@file+packages+package-builder+build+dev+out+socketaddon-opentui')) {
+ const match = realDir.match(/^(.+?)\/node_modules\/\.pnpm\/@socketaddon/)
+ if (match) {
+ const projectRoot = match[1]
+ buildOutDir = join(projectRoot, 'packages/package-builder/build/dev/out')
+ }
+ }
+
+ if (buildOutDir) {
+ const siblingPath = join(buildOutDir, `socketaddon-opentui-${platformId}`, 'opentui.node')
+ if (existsSync(siblingPath)) {
+ return require(siblingPath)
+ }
+ }
+
+ throw new Error('Not in development build structure')
+ } catch {
+ if (e.code === 'MODULE_NOT_FOUND') {
+ throw new Error(
+ `Failed to load opentui native addon for ${platformId}.\n` +
+ `The package ${packageName} is not installed.\n` +
+ `This usually means your platform is not supported or the optionalDependencies were not installed correctly.\n\n` +
+ `Try reinstalling with: npm install --force @socketaddon/opentui`,
+ )
+ }
+ throw e
+ }
+ }
+}
+
+// Load native addon and create render engine.
+const native = loadNativeAddon()
+const { createRenderEngine } = require('./render-engine.mjs')
+const engine = createRenderEngine(native)
+
+export default engine
diff --git a/packages/package-builder/templates/socketaddon-opentui-main/package.json b/packages/package-builder/templates/socketaddon-opentui-main/package.json
new file mode 100644
index 000000000..3292ea9e6
--- /dev/null
+++ b/packages/package-builder/templates/socketaddon-opentui-main/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "@socketaddon/opentui",
+ "version": "1.0.0-pre.0",
+ "description": "Node.js bindings for OpenTUI - a Zig-based terminal UI library with flexbox layout",
+ "license": "MIT",
+ "type": "module",
+ "main": "./index.mjs",
+ "types": "./index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./index.d.ts",
+ "default": "./index.mjs"
+ },
+ "./react": {
+ "default": "./react.mjs"
+ }
+ },
+ "files": [
+ "LICENSE",
+ "README.md",
+ "index.d.ts",
+ "index.mjs",
+ "react.mjs",
+ "render-engine.mjs",
+ "yoga-sync.cjs"
+ ],
+ "optionalDependencies": {
+ "@socketaddon/opentui-darwin-arm64": "1.0.0-pre.0",
+ "@socketaddon/opentui-darwin-x64": "1.0.0-pre.0",
+ "@socketaddon/opentui-linux-arm64": "1.0.0-pre.0",
+ "@socketaddon/opentui-linux-arm64-musl": "1.0.0-pre.0",
+ "@socketaddon/opentui-linux-x64": "1.0.0-pre.0",
+ "@socketaddon/opentui-linux-x64-musl": "1.0.0-pre.0",
+ "@socketaddon/opentui-win-arm64": "1.0.0-pre.0",
+ "@socketaddon/opentui-win-x64": "1.0.0-pre.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/SocketDev/socket-cli.git"
+ },
+ "author": {
+ "name": "Socket Inc",
+ "email": "eng@socket.dev",
+ "url": "https://socket.dev"
+ },
+ "homepage": "https://github.com/SocketDev/socket-cli",
+ "publishConfig": {
+ "access": "public",
+ "registry": "https://registry.npmjs.org/"
+ }
+}
diff --git a/packages/package-builder/templates/socketaddon-opentui-main/react.mjs b/packages/package-builder/templates/socketaddon-opentui-main/react.mjs
new file mode 100644
index 000000000..e17f441e3
--- /dev/null
+++ b/packages/package-builder/templates/socketaddon-opentui-main/react.mjs
@@ -0,0 +1,351 @@
+/**
+ * @fileoverview React reconciler for OpenTUI terminal UI.
+ *
+ * Provides a React renderer that maps JSX components to the OpenTUI
+ * render engine's Element tree format. Uses react-reconciler to bridge
+ * React's component model to our yoga-layout + opentui.node pipeline.
+ *
+ * Usage:
+ * import { render, Box, Text } from '@socketaddon/opentui/react'
+ *
+ * render(
+ *
+ * Hello from React!
+ *
+ * )
+ */
+
+import { createRequire } from 'node:module'
+import process from 'node:process'
+
+const require = createRequire(import.meta.url)
+
+const Reconciler = require('react-reconciler')
+
+// ---------------------------------------------------------------------------
+// Element tree node (same shape as render-engine.mjs expects)
+// ---------------------------------------------------------------------------
+
+function createElementNode(type, props) {
+ const node = { type, children: [] }
+
+ if (type === 'Text') {
+ // Text content comes from children prop.
+ if (typeof props.children === 'string') {
+ node.content = props.children
+ } else if (Array.isArray(props.children)) {
+ node.content = props.children.join('')
+ }
+ // Style props.
+ if (props.color) node.color = props.color
+ if (props.bold) node.bold = true
+ if (props.dimColor) node.dim_color = true
+ if (props.italic) node.italic = true
+ if (props.underline) node.underline = true
+ if (props.strikethrough) node.strikethrough = true
+ if (props.weight) node.weight = props.weight
+ if (props.align) node.align = props.align
+ if (props.wrap) node.wrap = props.wrap
+ } else if (type === 'View') {
+ // Layout props → snake_case for render engine.
+ if (props.flexDirection) node.flex_direction = props.flexDirection
+ if (props.justifyContent) node.justify_content = props.justifyContent
+ if (props.alignItems) node.align_items = props.alignItems
+ if (props.alignContent) node.align_content = props.alignContent
+ if (props.flexGrow !== undefined) node.flex_grow = props.flexGrow
+ if (props.flexShrink !== undefined) node.flex_shrink = props.flexShrink
+ if (props.flexBasis !== undefined) node.flex_basis = props.flexBasis
+ if (props.flexWrap) node.flex_wrap = props.flexWrap
+ if (props.gap !== undefined) node.gap = props.gap
+ if (props.rowGap !== undefined) node.row_gap = props.rowGap
+ if (props.columnGap !== undefined) node.column_gap = props.columnGap
+ if (props.width !== undefined) node.width = props.width
+ if (props.height !== undefined) node.height = props.height
+ if (props.minWidth !== undefined) node.min_width = props.minWidth
+ if (props.minHeight !== undefined) node.min_height = props.minHeight
+ if (props.maxWidth !== undefined) node.max_width = props.maxWidth
+ if (props.maxHeight !== undefined) node.max_height = props.maxHeight
+ if (props.padding !== undefined) node.padding = props.padding
+ if (props.paddingX !== undefined) node.padding_x = props.paddingX
+ if (props.paddingY !== undefined) node.padding_y = props.paddingY
+ if (props.paddingTop !== undefined) node.padding_top = props.paddingTop
+ if (props.paddingRight !== undefined) node.padding_right = props.paddingRight
+ if (props.paddingBottom !== undefined) node.padding_bottom = props.paddingBottom
+ if (props.paddingLeft !== undefined) node.padding_left = props.paddingLeft
+ if (props.margin !== undefined) node.margin = props.margin
+ if (props.marginX !== undefined) node.margin_x = props.marginX
+ if (props.marginY !== undefined) node.margin_y = props.marginY
+ if (props.marginTop !== undefined) node.margin_top = props.marginTop
+ if (props.marginRight !== undefined) node.margin_right = props.marginRight
+ if (props.marginBottom !== undefined) node.margin_bottom = props.marginBottom
+ if (props.marginLeft !== undefined) node.margin_left = props.marginLeft
+ if (props.borderStyle) node.border_style = props.borderStyle
+ if (props.borderColor) node.border_color = props.borderColor
+ if (props.borderEdges) node.border_edges = props.borderEdges
+ if (props.backgroundColor) node.background_color = props.backgroundColor
+ if (props.display) node.display = props.display
+ if (props.position) node.position = props.position
+ if (props.top !== undefined) node.top = props.top
+ if (props.right !== undefined) node.right = props.right
+ if (props.bottom !== undefined) node.bottom = props.bottom
+ if (props.left !== undefined) node.left = props.left
+ if (props.inset !== undefined) node.inset = props.inset
+ if (props.overflow) {
+ node.overflow_x = props.overflow
+ node.overflow_y = props.overflow
+ }
+ if (props.overflowX) node.overflow_x = props.overflowX
+ if (props.overflowY) node.overflow_y = props.overflowY
+ } else if (type === 'MixedText') {
+ if (props.contents) {
+ node.mixed_text_contents = props.contents.map(s => ({
+ text: s.text,
+ color: s.color,
+ weight: s.weight,
+ decoration: s.decoration,
+ italic: s.italic,
+ }))
+ }
+ if (props.align) node.align = props.align
+ if (props.wrap) node.wrap = props.wrap
+ }
+
+ return node
+}
+
+// ---------------------------------------------------------------------------
+// React reconciler host config
+// ---------------------------------------------------------------------------
+
+// Map JSX element types to internal types.
+const TYPE_MAP = {
+ __proto__: null,
+ box: 'View',
+ text: 'Text',
+ 'mixed-text': 'MixedText',
+ br: 'Text', // line break → newline text node
+}
+
+const hostConfig = {
+ // Core
+ createInstance(type, props) {
+ const internalType = TYPE_MAP[type] || type
+ const node = createElementNode(internalType, props)
+ // Handle
as newline.
+ if (type === 'br') {
+ node.content = '\n'
+ }
+ return node
+ },
+
+ createTextInstance(text) {
+ return { type: 'Text', content: text, children: [] }
+ },
+
+ appendChildToContainer(container, child) {
+ container.children.push(child)
+ },
+
+ appendChild(parent, child) {
+ parent.children.push(child)
+ },
+
+ appendInitialChild(parent, child) {
+ parent.children.push(child)
+ },
+
+ removeChild(parent, child) {
+ const idx = parent.children.indexOf(child)
+ if (idx !== -1) parent.children.splice(idx, 1)
+ },
+
+ removeChildFromContainer(container, child) {
+ const idx = container.children.indexOf(child)
+ if (idx !== -1) container.children.splice(idx, 1)
+ },
+
+ insertBefore(parent, child, before) {
+ const idx = parent.children.indexOf(before)
+ if (idx !== -1) {
+ parent.children.splice(idx, 0, child)
+ } else {
+ parent.children.push(child)
+ }
+ },
+
+ insertInContainerBefore(container, child, before) {
+ const idx = container.children.indexOf(before)
+ if (idx !== -1) {
+ container.children.splice(idx, 0, child)
+ } else {
+ container.children.push(child)
+ }
+ },
+
+ // Updates
+ prepareUpdate(_instance, _type, _oldProps, _newProps) {
+ return true // Always update for now.
+ },
+
+ commitUpdate(instance, _payload, type, _oldProps, newProps) {
+ // Rebuild the node with new props.
+ const internalType = TYPE_MAP[type] || type
+ const updated = createElementNode(internalType, newProps)
+ Object.assign(instance, updated)
+ instance.children = instance.children || []
+ },
+
+ commitTextUpdate(node, _oldText, newText) {
+ node.content = newText
+ },
+
+ // Tree operations
+ getRootHostContext() {
+ return {}
+ },
+
+ getChildHostContext(parentContext) {
+ return parentContext
+ },
+
+ getPublicInstance(instance) {
+ return instance
+ },
+
+ finalizeInitialChildren() {
+ return false
+ },
+
+ prepareForCommit() {
+ return null
+ },
+
+ resetAfterCommit() {},
+
+ shouldSetTextContent(_type, props) {
+ return typeof props.children === 'string'
+ },
+
+ clearContainer(container) {
+ container.children = []
+ },
+
+ // Required but no-op for static rendering.
+ supportsMutation: true,
+ supportsPersistence: false,
+ supportsHydration: false,
+ isPrimaryRenderer: true,
+ scheduleTimeout: setTimeout,
+ cancelTimeout: clearTimeout,
+ noTimeout: -1,
+ getCurrentEventPriority() {
+ return 16 // DefaultEventPriority
+ },
+ getInstanceFromNode() {
+ return null
+ },
+ beforeActiveInstanceBlur() {},
+ afterActiveInstanceBlur() {},
+ prepareScopeUpdate() {},
+ getInstanceFromScope() {
+ return null
+ },
+ detachDeletedInstance() {},
+ preparePortalMount() {},
+ setCurrentUpdatePriority() {},
+ getCurrentUpdatePriority() {
+ return 16
+ },
+ resolveUpdatePriority() {
+ return 16
+ },
+ resetFormInstance() {},
+ requestPostPaintCallback() {},
+ maySuspendCommit() {
+ return false
+ },
+ preloadInstance() {
+ return true
+ },
+ completeSuspendedInstance() {},
+ resolveEventType() {
+ return null
+ },
+ resolveEventTimeStamp() {
+ return 0
+ },
+ shouldAttemptEagerTransition() {
+ return false
+ },
+ trackSchedulerEvent() {},
+ resolveUpdatePriority() {
+ return 16
+ },
+ setCurrentUpdatePriority() {},
+ getCurrentUpdatePriority() {
+ return 16
+ },
+ NotPendingTransition: null,
+}
+
+const reconciler = Reconciler(hostConfig)
+
+// ---------------------------------------------------------------------------
+// Public API
+// ---------------------------------------------------------------------------
+
+/**
+ * Render a React element tree to an Element node tree suitable for
+ * the OpenTUI render engine.
+ *
+ * @param {import('react').ReactElement} element - React element to render
+ * @returns {object} Element tree (View with children)
+ */
+export function renderToElementTree(element) {
+ const container = { type: 'View', children: [] }
+ const root = reconciler.createContainer(
+ container,
+ 0, // LegacyRoot — synchronous rendering
+ null,
+ false,
+ null,
+ '',
+ () => {},
+ null,
+ )
+ // Synchronous render: updateContainerSync + flushSyncWork ensures
+ // the tree is fully built before we return.
+ reconciler.updateContainerSync(element, root, null, () => {})
+ reconciler.flushSyncWork()
+ // If single child, return it directly.
+ if (container.children.length === 1) {
+ return container.children[0]
+ }
+ return container
+}
+
+/**
+ * Render a React element to stdout using the OpenTUI render engine.
+ *
+ * @param {import('react').ReactElement} element - React element
+ * @param {object} engine - OpenTUI render engine instance
+ */
+export function render(element, engine) {
+ const tree = renderToElementTree(element)
+ engine.printComponent(tree)
+}
+
+/**
+ * Render a React element to a plain text string.
+ *
+ * @param {import('react').ReactElement} element - React element
+ * @param {object} engine - OpenTUI render engine instance
+ * @returns {string} Plain text output
+ */
+export function renderToString(element, engine) {
+ const tree = renderToElementTree(element)
+ return engine.renderToString(tree)
+}
+
+// Re-export React.createElement for JSX usage without React import.
+export { createElement } from 'react'
diff --git a/packages/package-builder/templates/socketaddon-opentui-main/render-engine.mjs b/packages/package-builder/templates/socketaddon-opentui-main/render-engine.mjs
new file mode 100644
index 000000000..b7ac477b9
--- /dev/null
+++ b/packages/package-builder/templates/socketaddon-opentui-main/render-engine.mjs
@@ -0,0 +1,749 @@
+/**
+ * @fileoverview OpenTUI render engine with yoga-layout flexbox.
+ *
+ * Accepts the same Element tree that iocraft.mts produces and renders it
+ * using yoga-layout for flexbox computation and opentui.node for buffer
+ * drawing + ANSI output.
+ *
+ * Public API (iocraft-compatible):
+ * renderToString(element) → string (ANSI)
+ * renderToStringWithWidth(element, maxWidth) → string
+ * printComponent(element) → void (stdout)
+ * eprintComponent(element) → void (stderr)
+ * getTerminalSize() → [columns, rows]
+ */
+
+import { createRequire } from 'node:module'
+import process from 'node:process'
+
+const require = createRequire(import.meta.url)
+
+// ---------------------------------------------------------------------------
+// Constants
+// ---------------------------------------------------------------------------
+
+// Strip terminal control sequences from getLastOutputForTest output,
+// keeping only printable text and ANSI SGR (color/style) codes.
+// This makes renderToString output compatible with iocraft's cleaner format.
+// eslint-disable-next-line no-control-regex
+const CURSOR_CONTROL_RE = /\x1b\[\?[0-9;]*[a-zA-Z]|\x1b\[[0-9;]*[HJKfABCDEFGSTn]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b\[[0-9]+ q/g
+
+function stripCursorControls(s) {
+ return s.replace(CURSOR_CONTROL_RE, '')
+}
+
+const TEXT_ATTR_BOLD = 1
+const TEXT_ATTR_DIM = 2
+const TEXT_ATTR_ITALIC = 4
+const TEXT_ATTR_UNDERLINE = 8
+const TEXT_ATTR_STRIKETHROUGH = 128
+
+const BLACK = new Float32Array([0, 0, 0, 1])
+const WHITE = new Float32Array([1, 1, 1, 1])
+const TRANSPARENT = new Float32Array([0, 0, 0, 0])
+
+// Standard ANSI color names → RGBA floats.
+const NAMED_COLORS = {
+ __proto__: null,
+ black: [0, 0, 0, 1],
+ blue: [0, 0, 0.8, 1],
+ blueBright: [0.33, 0.33, 1, 1],
+ cyan: [0, 0.8, 0.8, 1],
+ cyanBright: [0.33, 1, 1, 1],
+ gray: [0.5, 0.5, 0.5, 1],
+ green: [0, 0.8, 0, 1],
+ greenBright: [0.33, 1, 0.33, 1],
+ grey: [0.5, 0.5, 0.5, 1],
+ magenta: [0.8, 0, 0.8, 1],
+ magentaBright: [1, 0.33, 1, 1],
+ red: [0.8, 0, 0, 1],
+ redBright: [1, 0.33, 0.33, 1],
+ white: [1, 1, 1, 1],
+ yellow: [0.8, 0.8, 0, 1],
+ yellowBright: [1, 1, 0.33, 1],
+}
+
+// Unicode box-drawing character sets for border styles.
+const BORDER_CHARS = {
+ __proto__: null,
+ bold: '\u250F\u2501\u2513\u2503\u2517\u2501\u251B\u2503', // ┏━┓┃┗━┛┃ (tl,t,tr,r,bl,b,br,l)
+ classic: '+-+|+-+|',
+ double: '\u2554\u2550\u2557\u2551\u255A\u2550\u255D\u2551', // ╔═╗║╚═╝║
+ 'double-left-right': '\u2553\u2500\u2556\u2551\u2559\u2500\u255C\u2551', // ╓─╖║╙─╜║
+ 'double-top-bottom': '\u2552\u2550\u2555\u2502\u2558\u2550\u255B\u2502', // ╒═╕│╘═╛│
+ rounded: '\u256D\u2500\u256E\u2502\u2570\u2500\u256F\u2502', // ╭─╮│╰─╯│
+ single: '\u250C\u2500\u2510\u2502\u2514\u2500\u2518\u2502', // ┌─┐│└─┘│
+}
+
+// ANSI 256-color palette → RGB (first 16 standard colors).
+const ANSI_STANDARD = [
+ [0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0],
+ [0, 0, 128], [128, 0, 128], [0, 128, 128], [192, 192, 192],
+ [128, 128, 128], [255, 0, 0], [0, 255, 0], [255, 255, 0],
+ [0, 0, 255], [255, 0, 255], [0, 255, 255], [255, 255, 255],
+]
+
+// ---------------------------------------------------------------------------
+// Color parsing
+// ---------------------------------------------------------------------------
+
+const colorCache = new Map()
+
+function parseColor(color) {
+ if (!color) return null
+ const cached = colorCache.get(color)
+ if (cached) return cached
+
+ let result
+ const named = NAMED_COLORS[color]
+ if (named) {
+ result = new Float32Array(named)
+ } else if (color.startsWith('#')) {
+ result = hexToRgba(color)
+ } else if (color.startsWith('ansi:')) {
+ result = ansi256ToRgba(parseInt(color.slice(5), 10))
+ } else if (/^\d+$/.test(color)) {
+ result = ansi256ToRgba(parseInt(color, 10))
+ } else {
+ result = null
+ }
+
+ if (result) colorCache.set(color, result)
+ return result
+}
+
+function hexToRgba(hex) {
+ const h = hex.replace('#', '')
+ const r = parseInt(h.substring(0, 2), 16) / 255
+ const g = parseInt(h.substring(2, 4), 16) / 255
+ const b = parseInt(h.substring(4, 6), 16) / 255
+ return new Float32Array([r, g, b, 1])
+}
+
+function ansi256ToRgba(n) {
+ if (n < 0 || n > 255) return new Float32Array(WHITE)
+ if (n < 16) {
+ const c = ANSI_STANDARD[n]
+ return new Float32Array([c[0] / 255, c[1] / 255, c[2] / 255, 1])
+ }
+ if (n < 232) {
+ // 6x6x6 color cube.
+ const idx = n - 16
+ const r = Math.floor(idx / 36)
+ const g = Math.floor((idx % 36) / 6)
+ const b = idx % 6
+ return new Float32Array([
+ r ? (r * 40 + 55) / 255 : 0,
+ g ? (g * 40 + 55) / 255 : 0,
+ b ? (b * 40 + 55) / 255 : 0,
+ 1,
+ ])
+ }
+ // Grayscale ramp.
+ const v = (8 + (n - 232) * 10) / 255
+ return new Float32Array([v, v, v, 1])
+}
+
+// ---------------------------------------------------------------------------
+// Text attributes
+// ---------------------------------------------------------------------------
+
+function buildAttributes(element) {
+ let attrs = 0
+ if (element.bold || element.weight === 'bold') attrs |= TEXT_ATTR_BOLD
+ if (element.dim_color || element.weight === 'light') attrs |= TEXT_ATTR_DIM
+ if (element.italic) attrs |= TEXT_ATTR_ITALIC
+ if (element.underline) attrs |= TEXT_ATTR_UNDERLINE
+ if (element.strikethrough) attrs |= TEXT_ATTR_STRIKETHROUGH
+ return attrs
+}
+
+function buildSectionAttributes(section) {
+ let attrs = 0
+ if (section.weight === 'bold') attrs |= TEXT_ATTR_BOLD
+ if (section.weight === 'light') attrs |= TEXT_ATTR_DIM
+ if (section.italic) attrs |= TEXT_ATTR_ITALIC
+ if (section.decoration === 'underline') attrs |= TEXT_ATTR_UNDERLINE
+ if (section.decoration === 'strikethrough') attrs |= TEXT_ATTR_STRIKETHROUGH
+ return attrs
+}
+
+// ---------------------------------------------------------------------------
+// Text measurement
+// ---------------------------------------------------------------------------
+
+function measureText(text) {
+ if (!text) return { width: 0, height: 0 }
+ const lines = text.split('\n')
+ let maxWidth = 0
+ for (let i = 0, len = lines.length; i < len; i += 1) {
+ const w = lines[i].length
+ if (w > maxWidth) maxWidth = w
+ }
+ return { width: maxWidth, height: lines.length }
+}
+
+function getMixedTextWidth(contents) {
+ if (!contents) return 0
+ let width = 0
+ for (let i = 0, len = contents.length; i < len; i += 1) {
+ width += (contents[i].text || '').length
+ }
+ return width
+}
+
+// ---------------------------------------------------------------------------
+// Yoga tree builder
+// ---------------------------------------------------------------------------
+
+function buildYogaTree(element, yoga, parentBg) {
+ if (!element) return null
+
+ // Fragment: transparent wrapper — return children directly.
+ if (element.type === 'Fragment') {
+ return {
+ children: (element.children || []).map(c => buildYogaTree(c, yoga, parentBg)).filter(Boolean),
+ element,
+ isFragment: true,
+ }
+ }
+
+ const node = yoga.Node.create()
+ const bg = parseColor(element.background_color) || parentBg || TRANSPARENT
+
+ if (element.type === 'Text' || element.type === 'MixedText') {
+ // Leaf node — measure text to determine dimensions.
+ const textContent = element.type === 'Text'
+ ? (element.content || '')
+ : ''
+ const mixedWidth = element.type === 'MixedText'
+ ? getMixedTextWidth(element.mixed_text_contents)
+ : 0
+
+ node.setMeasureFunc((width, widthMode, _height, _heightMode) => {
+ if (element.type === 'MixedText') {
+ return { width: mixedWidth, height: 1 }
+ }
+ const measured = measureText(textContent)
+ if (widthMode === yoga.MEASURE_MODE_AT_MOST && measured.width > width) {
+ // Wrap text to fit.
+ const wrappedHeight = Math.ceil(measured.width / Math.max(1, Math.floor(width)))
+ return { width: Math.min(measured.width, Math.floor(width)), height: wrappedHeight }
+ }
+ return measured
+ })
+
+ return { bg, children: [], element, node }
+ }
+
+ // View node — apply all flex properties.
+ if (element.display === 'none') node.setDisplay(yoga.DISPLAY_NONE)
+ if (element.position === 'absolute') node.setPositionType(yoga.POSITION_TYPE_ABSOLUTE)
+
+ // Flex direction (default: column).
+ if (element.flex_direction === 'row') {
+ node.setFlexDirection(yoga.FLEX_DIRECTION_ROW)
+ } else {
+ node.setFlexDirection(yoga.FLEX_DIRECTION_COLUMN)
+ }
+
+ // Justify content.
+ const justifyMap = {
+ __proto__: null,
+ center: yoga.JUSTIFY_CENTER,
+ 'flex-end': yoga.JUSTIFY_FLEX_END,
+ 'flex-start': yoga.JUSTIFY_FLEX_START,
+ 'space-around': yoga.JUSTIFY_SPACE_AROUND,
+ 'space-between': yoga.JUSTIFY_SPACE_BETWEEN,
+ }
+ if (element.justify_content && justifyMap[element.justify_content] !== undefined) {
+ node.setJustifyContent(justifyMap[element.justify_content])
+ }
+
+ // Align items.
+ const alignMap = {
+ __proto__: null,
+ center: yoga.ALIGN_CENTER,
+ 'flex-end': yoga.ALIGN_FLEX_END,
+ 'flex-start': yoga.ALIGN_FLEX_START,
+ stretch: yoga.ALIGN_STRETCH,
+ }
+ if (element.align_items && alignMap[element.align_items] !== undefined) {
+ node.setAlignItems(alignMap[element.align_items])
+ }
+
+ // Align content.
+ const alignContentMap = {
+ __proto__: null,
+ center: yoga.ALIGN_CENTER,
+ 'flex-end': yoga.ALIGN_FLEX_END,
+ 'flex-start': yoga.ALIGN_FLEX_START,
+ 'space-around': yoga.ALIGN_SPACE_AROUND,
+ 'space-between': yoga.ALIGN_SPACE_BETWEEN,
+ stretch: yoga.ALIGN_STRETCH,
+ }
+ if (element.align_content && alignContentMap[element.align_content] !== undefined) {
+ node.setAlignContent(alignContentMap[element.align_content])
+ }
+
+ // Flex properties.
+ if (element.flex_grow !== undefined) node.setFlexGrow(element.flex_grow)
+ if (element.flex_shrink !== undefined) node.setFlexShrink(element.flex_shrink)
+ if (element.flex_basis !== undefined) {
+ if (element.flex_basis === 'auto') {
+ node.setFlexBasisAuto()
+ } else if (typeof element.flex_basis === 'string' && element.flex_basis.endsWith('%')) {
+ node.setFlexBasisPercent(parseFloat(element.flex_basis))
+ } else {
+ node.setFlexBasis(element.flex_basis)
+ }
+ }
+ if (element.flex_wrap === 'wrap') node.setFlexWrap(yoga.WRAP_WRAP)
+
+ // Dimensions.
+ if (element.width !== undefined) node.setWidth(element.width)
+ if (element.height !== undefined) node.setHeight(element.height)
+ if (element.min_width !== undefined) node.setMinWidth(element.min_width)
+ if (element.min_height !== undefined) node.setMinHeight(element.min_height)
+ if (element.max_width !== undefined) node.setMaxWidth(element.max_width)
+ if (element.max_height !== undefined) node.setMaxHeight(element.max_height)
+
+ // Gap.
+ if (element.gap !== undefined) node.setGap(yoga.GUTTER_ALL, element.gap)
+ if (element.row_gap !== undefined) node.setGap(yoga.GUTTER_ROW, element.row_gap)
+ if (element.column_gap !== undefined) node.setGap(yoga.GUTTER_COLUMN, element.column_gap)
+
+ // Padding.
+ if (element.padding !== undefined) node.setPadding(yoga.EDGE_ALL, element.padding)
+ if (element.padding_x !== undefined) node.setPadding(yoga.EDGE_HORIZONTAL, element.padding_x)
+ if (element.padding_y !== undefined) node.setPadding(yoga.EDGE_VERTICAL, element.padding_y)
+ if (element.padding_top !== undefined) node.setPadding(yoga.EDGE_TOP, element.padding_top)
+ if (element.padding_right !== undefined) node.setPadding(yoga.EDGE_RIGHT, element.padding_right)
+ if (element.padding_bottom !== undefined) node.setPadding(yoga.EDGE_BOTTOM, element.padding_bottom)
+ if (element.padding_left !== undefined) node.setPadding(yoga.EDGE_LEFT, element.padding_left)
+
+ // Margin.
+ if (element.margin !== undefined) node.setMargin(yoga.EDGE_ALL, element.margin)
+ if (element.margin_x !== undefined) node.setMargin(yoga.EDGE_HORIZONTAL, element.margin_x)
+ if (element.margin_y !== undefined) node.setMargin(yoga.EDGE_VERTICAL, element.margin_y)
+ if (element.margin_top !== undefined) node.setMargin(yoga.EDGE_TOP, element.margin_top)
+ if (element.margin_right !== undefined) node.setMargin(yoga.EDGE_RIGHT, element.margin_right)
+ if (element.margin_bottom !== undefined) node.setMargin(yoga.EDGE_BOTTOM, element.margin_bottom)
+ if (element.margin_left !== undefined) node.setMargin(yoga.EDGE_LEFT, element.margin_left)
+
+ // Border (tell yoga about border width so it affects layout).
+ const hasBorder = element.border_style && element.border_style !== 'none'
+ if (hasBorder) {
+ const edges = element.border_edges || { top: true, right: true, bottom: true, left: true }
+ if (edges.top !== false) node.setBorder(yoga.EDGE_TOP, 1)
+ if (edges.right !== false) node.setBorder(yoga.EDGE_RIGHT, 1)
+ if (edges.bottom !== false) node.setBorder(yoga.EDGE_BOTTOM, 1)
+ if (edges.left !== false) node.setBorder(yoga.EDGE_LEFT, 1)
+ }
+
+ // Absolute positioning insets.
+ if (element.inset !== undefined) node.setPosition(yoga.EDGE_ALL, element.inset)
+ if (element.top !== undefined) node.setPosition(yoga.EDGE_TOP, element.top)
+ if (element.right !== undefined) node.setPosition(yoga.EDGE_RIGHT, element.right)
+ if (element.bottom !== undefined) node.setPosition(yoga.EDGE_BOTTOM, element.bottom)
+ if (element.left !== undefined) node.setPosition(yoga.EDGE_LEFT, element.left)
+
+ // Overflow.
+ if (element.overflow === 'hidden' || element.overflow_x === 'hidden' || element.overflow_y === 'hidden') {
+ node.setOverflow(yoga.OVERFLOW_HIDDEN)
+ }
+
+ // Build children (flatten fragments).
+ const children = []
+ const childElements = element.children || []
+ for (let i = 0, len = childElements.length; i < len; i += 1) {
+ const childTree = buildYogaTree(childElements[i], yoga, bg)
+ if (!childTree) continue
+ if (childTree.isFragment) {
+ // Flatten fragment children into this node.
+ for (let j = 0, flen = childTree.children.length; j < flen; j += 1) {
+ const fc = childTree.children[j]
+ node.insertChild(fc.node, children.length)
+ children.push(fc)
+ }
+ } else {
+ node.insertChild(childTree.node, children.length)
+ children.push(childTree)
+ }
+ }
+
+ return { bg, children, element, node }
+}
+
+// ---------------------------------------------------------------------------
+// Buffer drawing
+// ---------------------------------------------------------------------------
+
+function drawTree(tree, native, bufPtr, offsetX, offsetY, parentFg, parentBg) {
+ if (!tree || !tree.node) return
+
+ const { element, node, children, bg } = tree
+ const x = Math.round(offsetX + node.getComputedLeft())
+ const y = Math.round(offsetY + node.getComputedTop())
+ const w = Math.round(node.getComputedWidth())
+ const h = Math.round(node.getComputedHeight())
+
+ const elemBg = parseColor(element.background_color) || parentBg
+ const elemFg = parseColor(element.color) || parentFg
+
+ if (element.type === 'View') {
+ // Fill background.
+ if (element.background_color) {
+ const bgColor = parseColor(element.background_color) || TRANSPARENT
+ for (let row = 0; row < h; row += 1) {
+ for (let col = 0; col < w; col += 1) {
+ native.bufferSetCell(bufPtr, x + col, y + row, 32, // space
+ bgColor[0], bgColor[1], bgColor[2], bgColor[3],
+ bgColor[0], bgColor[1], bgColor[2], bgColor[3], 0)
+ }
+ }
+ }
+
+ // Draw border.
+ const hasBorder = element.border_style && element.border_style !== 'none'
+ if (hasBorder) {
+ drawBorder(native, bufPtr, x, y, w, h, element, elemBg)
+ }
+
+ // Compute inner offset (padding + border).
+ const borderTop = hasBorder && (element.border_edges?.top !== false) ? 1 : 0
+ const borderLeft = hasBorder && (element.border_edges?.left !== false) ? 1 : 0
+
+ const padTop = node.getComputedPadding(0) // EDGE_TOP = 0 in yoga
+ const padLeft = node.getComputedPadding(3) // EDGE_LEFT = 3
+
+ // Draw children.
+ for (let i = 0, len = children.length; i < len; i += 1) {
+ drawTree(children[i], native, bufPtr, x, y, elemFg || WHITE, elemBg || TRANSPARENT)
+ }
+ } else if (element.type === 'Text') {
+ const fg = elemFg || WHITE
+ const bg2 = elemBg || TRANSPARENT
+ const attrs = buildAttributes(element)
+ const content = element.content || ''
+ const lines = content.split('\n')
+
+ for (let lineIdx = 0, llen = lines.length; lineIdx < llen; lineIdx += 1) {
+ const line = lines[lineIdx]
+ if (line.length > 0) {
+ native.bufferDrawText(bufPtr, line, x, y + lineIdx,
+ fg[0], fg[1], fg[2], fg[3],
+ bg2[0], bg2[1], bg2[2], bg2[3], attrs)
+ }
+ }
+ } else if (element.type === 'MixedText') {
+ // Draw all sections as a single contiguous span by concatenating
+ // text and drawing it as one bufferDrawText call, then overwriting
+ // per-character colors/attributes with bufferSetCell for sections
+ // that differ from the first section's style.
+ const contents = element.mixed_text_contents || []
+ if (contents.length === 0) return
+ const defaultBg = elemBg || TRANSPARENT
+
+ // First pass: draw the full concatenated text with the first section's style.
+ let fullText = ''
+ for (let i = 0, len = contents.length; i < len; i += 1) {
+ fullText += contents[i].text || ''
+ }
+ if (fullText.length === 0) return
+
+ const firstFg = parseColor(contents[0].color) || elemFg || WHITE
+ const firstAttrs = buildSectionAttributes(contents[0])
+ native.bufferDrawText(bufPtr, fullText, x, y,
+ firstFg[0], firstFg[1], firstFg[2], firstFg[3],
+ defaultBg[0], defaultBg[1], defaultBg[2], defaultBg[3], firstAttrs)
+
+ // Second pass: overwrite cells for sections with different styles.
+ let curX = x + (contents[0].text || '').length
+ for (let i = 1, len = contents.length; i < len; i += 1) {
+ const section = contents[i]
+ const text = section.text || ''
+ if (text.length === 0) continue
+ const fg = parseColor(section.color) || elemFg || WHITE
+ const attrs = buildSectionAttributes(section)
+ // Only overwrite if style differs from first section.
+ for (let j = 0, tlen = text.length; j < tlen; j += 1) {
+ native.bufferSetCell(bufPtr, curX + j, y, text.codePointAt(j),
+ fg[0], fg[1], fg[2], fg[3],
+ defaultBg[0], defaultBg[1], defaultBg[2], defaultBg[3], attrs)
+ }
+ curX += text.length
+ }
+ }
+}
+
+function drawBorder(native, bufPtr, x, y, w, h, element, bg) {
+ const style = element.border_style
+ let chars
+ if (element.custom_border_chars) {
+ const c = element.custom_border_chars
+ chars = c.top_left + c.top + c.top_right + c.right + c.bottom_right + c.bottom + c.bottom_left + c.left
+ } else {
+ chars = BORDER_CHARS[style] || BORDER_CHARS.single
+ }
+
+ const edges = element.border_edges || { bottom: true, left: true, right: true, top: true }
+ const borderColor = parseColor(element.border_color) || WHITE
+ const bgColor = bg || TRANSPARENT
+
+ // Draw corners and edges manually using setCell.
+ // chars order: tl, t, tr, r, bl, b, br, l
+ const tl = chars.codePointAt(0)
+ const t = chars.codePointAt(1)
+ const tr = chars.codePointAt(2)
+ const r = chars.codePointAt(3)
+ const bl = chars.codePointAt(4)
+ const b = chars.codePointAt(5)
+ const br = chars.codePointAt(6)
+ const l = chars.codePointAt(7)
+
+ const fc = borderColor
+ const bc = bgColor
+
+ // Top edge.
+ if (edges.top !== false) {
+ if (edges.left !== false) {
+ native.bufferSetCell(bufPtr, x, y, tl, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ for (let col = 1; col < w - 1; col += 1) {
+ native.bufferSetCell(bufPtr, x + col, y, t, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ if (edges.right !== false && w > 1) {
+ native.bufferSetCell(bufPtr, x + w - 1, y, tr, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ }
+
+ // Bottom edge.
+ if (edges.bottom !== false && h > 1) {
+ if (edges.left !== false) {
+ native.bufferSetCell(bufPtr, x, y + h - 1, bl, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ for (let col = 1; col < w - 1; col += 1) {
+ native.bufferSetCell(bufPtr, x + col, y + h - 1, b, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ if (edges.right !== false && w > 1) {
+ native.bufferSetCell(bufPtr, x + w - 1, y + h - 1, br, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ }
+
+ // Left edge.
+ if (edges.left !== false) {
+ for (let row = 1; row < h - 1; row += 1) {
+ native.bufferSetCell(bufPtr, x, y + row, l, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ }
+
+ // Right edge.
+ if (edges.right !== false && w > 1) {
+ for (let row = 1; row < h - 1; row += 1) {
+ native.bufferSetCell(bufPtr, x + w - 1, y + row, r, fc[0], fc[1], fc[2], fc[3], bc[0], bc[1], bc[2], bc[3], 0)
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Buffer-to-ANSI serializer
+// ---------------------------------------------------------------------------
+
+/**
+ * Read the buffer's raw cell data and produce a plain-text string.
+ * This matches iocraft's renderToString behavior which returns
+ * unformatted text without ANSI escape codes.
+ */
+function serializeBufferPlain(native, bufPtr, width, height) {
+ const chars = new Uint32Array(native.bufferGetCharArrayBuffer(bufPtr))
+ const lines = []
+
+ for (let row = 0; row < height; row += 1) {
+ let line = ''
+ // Track last non-space column for trimming trailing spaces.
+ let lastNonSpace = -1
+ for (let col = 0; col < width; col += 1) {
+ const idx = row * width + col
+ if (chars[idx] !== 32) lastNonSpace = col
+ }
+
+ for (let col = 0; col <= lastNonSpace; col += 1) {
+ const idx = row * width + col
+ line += String.fromCodePoint(chars[idx])
+ }
+
+ lines.push(line)
+ }
+
+ // Trim trailing empty lines.
+ while (lines.length > 0 && lines[lines.length - 1] === '') {
+ lines.pop()
+ }
+
+ return lines.join('\n') + '\n'
+}
+
+/**
+ * Read the buffer's raw cell data and produce an ANSI-colored string.
+ * Used by printComponent/eprintComponent for terminal output with colors.
+ */
+function serializeBufferAnsi(native, bufPtr, width, height) {
+ const chars = new Uint32Array(native.bufferGetCharArrayBuffer(bufPtr))
+ const fgData = new Float32Array(native.bufferGetFgArrayBuffer(bufPtr))
+ const bgData = new Float32Array(native.bufferGetBgArrayBuffer(bufPtr))
+ const attrData = new Uint32Array(native.bufferGetAttributesArrayBuffer(bufPtr))
+
+ const lines = []
+ let prevFg = ''
+ let prevBg = ''
+ let prevAttr = 0
+
+ for (let row = 0; row < height; row += 1) {
+ let line = ''
+ let lastNonSpace = -1
+ for (let col = 0; col < width; col += 1) {
+ const idx = row * width + col
+ if (chars[idx] !== 32) lastNonSpace = col
+ }
+
+ for (let col = 0; col <= lastNonSpace; col += 1) {
+ const idx = row * width + col
+ const ch = chars[idx]
+ const fgIdx = idx * 4
+ const fgR = Math.round(fgData[fgIdx] * 255)
+ const fgG = Math.round(fgData[fgIdx + 1] * 255)
+ const fgB = Math.round(fgData[fgIdx + 2] * 255)
+ const bgR = Math.round(bgData[fgIdx] * 255)
+ const bgG = Math.round(bgData[fgIdx + 1] * 255)
+ const bgB = Math.round(bgData[fgIdx + 2] * 255)
+ const attr = attrData[idx] & 0xFF
+
+ const fgKey = `${fgR};${fgG};${fgB}`
+ const bgKey = `${bgR};${bgG};${bgB}`
+
+ const parts = []
+ if (attr !== prevAttr) {
+ const removed = prevAttr & ~attr
+ if (removed) {
+ parts.push('\x1b[0m')
+ prevFg = ''
+ prevBg = ''
+ }
+ if (attr & TEXT_ATTR_BOLD && !(prevAttr & TEXT_ATTR_BOLD)) parts.push('\x1b[1m')
+ if (attr & TEXT_ATTR_DIM && !(prevAttr & TEXT_ATTR_DIM)) parts.push('\x1b[2m')
+ if (attr & TEXT_ATTR_ITALIC && !(prevAttr & TEXT_ATTR_ITALIC)) parts.push('\x1b[3m')
+ if (attr & TEXT_ATTR_UNDERLINE && !(prevAttr & TEXT_ATTR_UNDERLINE)) parts.push('\x1b[4m')
+ if (attr & TEXT_ATTR_STRIKETHROUGH && !(prevAttr & TEXT_ATTR_STRIKETHROUGH)) parts.push('\x1b[9m')
+ prevAttr = attr
+ }
+ if (fgKey !== prevFg) {
+ parts.push(`\x1b[38;2;${fgR};${fgG};${fgB}m`)
+ prevFg = fgKey
+ }
+ if (bgKey !== prevBg && !(bgR === 0 && bgG === 0 && bgB === 0)) {
+ parts.push(`\x1b[48;2;${bgR};${bgG};${bgB}m`)
+ prevBg = bgKey
+ }
+
+ line += parts.join('') + String.fromCodePoint(ch)
+ }
+
+ lines.push(line)
+ prevFg = ''
+ prevBg = ''
+ prevAttr = 0
+ }
+
+ while (lines.length > 0 && lines[lines.length - 1] === '') {
+ lines.pop()
+ }
+
+ return lines.join('\n') + '\x1b[0m\n'
+}
+
+// ---------------------------------------------------------------------------
+// Public API
+// ---------------------------------------------------------------------------
+
+export function createRenderEngine(native) {
+ // Load yoga-layout synchronously (embedded WASM).
+ const yoga = require('./yoga-sync.cjs')
+
+ function renderToStringWithWidth(element, maxWidth) {
+ if (!element) return ''
+
+ const termWidth = maxWidth || process.stdout.columns || 80
+
+ // Wrap root fragments in an implicit View so yoga has a root node.
+ let rootElement = element
+ if (element.type === 'Fragment') {
+ rootElement = { type: 'View', children: element.children || [] }
+ }
+
+ // Build yoga tree from element tree.
+ const tree = buildYogaTree(rootElement, yoga, TRANSPARENT)
+ if (!tree || !tree.node) return ''
+
+ // Compute layout.
+ tree.node.calculateLayout(termWidth, undefined, yoga.DIRECTION_LTR)
+
+ const totalWidth = Math.round(tree.node.getComputedWidth())
+ const totalHeight = Math.round(tree.node.getComputedHeight())
+
+ if (totalWidth <= 0 || totalHeight <= 0) {
+ tree.node.freeRecursive()
+ return ''
+ }
+
+ // Create opentui buffer for drawing.
+ const bufPtr = native.createOptimizedBuffer(totalWidth, totalHeight, false, 0, 'render')
+
+ // Clear buffer.
+ native.bufferClear(bufPtr, 0, 0, 0, 1)
+
+ // Draw the element tree into the buffer.
+ drawTree(tree, native, bufPtr, 0, 0, WHITE, TRANSPARENT)
+
+ // Serialize buffer cells.
+ const plainOutput = serializeBufferPlain(native, bufPtr, totalWidth, totalHeight)
+ const ansiOutput = serializeBufferAnsi(native, bufPtr, totalWidth, totalHeight)
+
+ // Cleanup.
+ native.destroyOptimizedBuffer(bufPtr)
+ tree.node.freeRecursive()
+
+ return { ansi: ansiOutput, plain: plainOutput }
+ }
+
+ function renderToString(element) {
+ const result = renderToStringWithWidth(element, undefined)
+ return typeof result === 'string' ? result : result.plain
+ }
+
+ function printComponent(element) {
+ const result = renderToStringWithWidth(element, undefined)
+ if (!result) return
+ const output = typeof result === 'string' ? result : result.ansi
+ if (output) process.stdout.write(output)
+ }
+
+ function eprintComponent(element) {
+ const result = renderToStringWithWidth(element, undefined)
+ if (!result) return
+ const output = typeof result === 'string' ? result : result.ansi
+ if (output) process.stderr.write(output)
+ }
+
+ function getTerminalSize() {
+ return [process.stdout.columns || 80, process.stdout.rows || 24]
+ }
+
+ return {
+ eprintComponent,
+ getTerminalSize,
+ printComponent,
+ renderToString,
+ renderToStringWithWidth,
+ }
+}
diff --git a/packages/package-builder/templates/socketaddon-opentui-main/yoga-sync.cjs b/packages/package-builder/templates/socketaddon-opentui-main/yoga-sync.cjs
new file mode 100644
index 000000000..a8269e77e
--- /dev/null
+++ b/packages/package-builder/templates/socketaddon-opentui-main/yoga-sync.cjs
@@ -0,0 +1,4709 @@
+'use strict';
+
+/**
+ * Synchronous yoga-layout with embedded WASM binary.
+ *
+ * This file is AUTO-GENERATED by yoga-layout-builder.
+ * Built with official yoga-layout API via wrapAssembly wrapper.
+ *
+ * Source: yoga.mjs (147297 bytes)
+ * WASM: 152919 bytes (203892 bytes base64)
+ */
+
+// Polyfill for import.meta.url in CommonJS (converted from ESM).
+// Uses pathToFileURL for proper cross-platform file:// URL conversion.
+const __importMetaUrl = require('node:url').pathToFileURL(__filename).href;
+
+// Base64-encoded WASM binary (embedded at build time).
+const base64Wasm = 'AGFzbQEAAAAB5ARHYAF/AX9gAX8AYAJ/fwBgAn9/AX9gA39/fwBgA39/fwF/YAABf2AAAGAEf39/fwBgAn99AGACf3wAYAN/f3wAYAF/AX1gBn9/f39/fwBgBX9/f39/AGADf399AGAEf39/fwF/YAF/AXxgAn9/AX1gAn9/AXxgBH9/f30BfWAGf399f31/AGADf31/AGAFf39/f38Bf2ADf35/AX5gBX9/f399AGADf399AX1gBX9/f319AX1gCn9/f39/f39/f38AYAR/f31/AGADf39/AX1gBH98fH8AYAR/fX1/AGADf319AX1gBn98f39/fwF/YAJ+fwF/YAR/fn5/AGAGf39/f39/AX9gDX9/f39/f39/f39/f38AYAl/f39/f39/f38AYAV/f39/fwF8YAV/f399fQBgBn9/f399fQF9YAV/f39/fQF9YA5/f319f39/fX1/f39/fwF/YAp/f39/fX19fX9/AGAHf39/f319fQF9YAt/f39/fX1/f39/fwBgDH9/f39/f39/fX19fQF/YAV/f39+fgBgBH9+f38Bf2AGf399f31/AX9gBH9/f3wAYAN/f38BfGAFf398fH8AYA1/fX99f31/fX19fX1/AX9gCn9/f319f39/f38AYAh/f39/f399fQBgC39/f39/f399fX19AX9gDX99fX9/f319f39/f38Bf2ANf319f39/fX1/f39/fwBgBn9/f319fQF9YAl/f399fX19f38AYAR8fH9/AX1gA398fABgBH9/fX0AYAJ8fwF8YAd/f39/f39/AX9gA35/fwF/YAF8AX5gAn5+AXwCxws5A2VudhZfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzACYDZW52H19lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfZnVuY3Rpb24AHANlbnYlX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19jbGFzc19mdW5jdGlvbgAnA2VudiJfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yAA0DZW52HV9lbWJpbmRfcmVnaXN0ZXJfdmFsdWVfb2JqZWN0AA0DZW52I19lbWJpbmRfcmVnaXN0ZXJfdmFsdWVfb2JqZWN0X2ZpZWxkABwDZW52HV9lbWJpbmRfZmluYWxpemVfdmFsdWVfb2JqZWN0AAEDZW52JV9lbWJpbmRfY3JlYXRlX2luaGVyaXRpbmdfY29uc3RydWN0b3IABQNlbnYNX2VtdmFsX2RlY3JlZgABA2VudhVfZW12YWxfY3JlYXRlX2ludm9rZXIABQNlbnYNX2VtdmFsX2ludm9rZQAoA2VudhZfZW12YWxfcnVuX2Rlc3RydWN0b3JzAAEDZW52C19fY3hhX3Rocm93AAQDZW52CGludm9rZV9pAAADZW52G19fY3hhX2ZpbmRfbWF0Y2hpbmdfY2F0Y2hfMgAGA2VudhFfX3Jlc3VtZUV4Y2VwdGlvbgABA2VudgppbnZva2VfaWlpAAUDZW52CGludm9rZV92AAEDZW52CWludm9rZV9paQADA2VudgxpbnZva2VfdmlpaWkADgNlbnYJaW52b2tlX3ZpAAIDZW52CWludm9rZV9maQASA2VudgppbnZva2VfdmlpAAQDZW52DGludm9rZV92aWlmZgApA2VudgppbnZva2VfdmlmAA8DZW52DWludm9rZV9maWlpZmYAKgNlbnYMaW52b2tlX2ZpaWlmACsDZW52C2ludm9rZV9maWlmABQDZW52FWludm9rZV9paWZmaWlpZmZpaWlpaQAsA2VudhFpbnZva2VfdmlpaWZmZmZpaQAtA2VudgtpbnZva2VfdmlmaQAdA2VudgxpbnZva2VfaWlpaWkAFwNlbnYLaW52b2tlX3ZpaWkACANlbnYOaW52b2tlX2ZpaWlmZmYALgNlbnYKaW52b2tlX2ZpaQAeA2VudhJpbnZva2VfdmlpaWZmaWlpaWkALwNlbnYTaW52b2tlX2lpaWlpaWlpZmZmZgAwA2VudhFfX2N4YV9iZWdpbl9jYXRjaAAAA2VudhtfX2N4YV9maW5kX21hdGNoaW5nX2NhdGNoXzMAAANlbnYNX19jeGFfcmV0aHJvdwAHA2Vudg9fX2N4YV9lbmRfY2F0Y2gABwNlbnYNaW52b2tlX3ZpaWlpaQANA2VudhVfZW1iaW5kX3JlZ2lzdGVyX3ZvaWQAAgNlbnYVX2VtYmluZF9yZWdpc3Rlcl9ib29sAAgDZW52GF9lbWJpbmRfcmVnaXN0ZXJfaW50ZWdlcgAOA2VudhdfZW1iaW5kX3JlZ2lzdGVyX2JpZ2ludAAxA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0AAQDZW52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NgIIIAEgACgCBDYCDCAAQQA2AgQgAUHEKjYCACABC7YCAQZ/IwBBIGsiAyIHIz9LIAcjQElyBEAgBxA4CyAHJAACQCABKAIAIgRB+P///wdPDQACQAJAIARBCksNACADIAQ6ABcgA0EMaiEFDAELIARBB3IiBkEBahDFBCEFIAMgBkGBgICAeGo2AhQgAyAFNgIMIAMgBDYCECAFIQULIAUhBQJAIARFDQAgBEUNACAFIAFBBGogBPwKAAALIAUgBGpBADoAACADIAI2AgggAxCBBDYCBCADQRhqIANBDGogA0EEaiAAEQQAIAMoAhwhBCADQQA2AhwCQCADKAIIIgFBCUkNACABEAggA0EANgIICwJAIAMsABdBf0oNACADKAIMIAMoAhRB/////wdxEMkECyADQSBqIggjP0sgCCNASXIEQCAIEDgLIAgkACAEDwsQjwEACykAIAAgASgCACABIAEsAAtBAEgbQYAoIAIoAgQQBzYCBCAAEIEENgIACw0AIAAoAgBBfGooAgALFwACQCAARQ0AIAAgACgCACgCBBEBAAsLQgEBfyABIAAoAgQiAkEBdWohASAAKAIAIQACQAJAIAJBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASAAEQEACw0AIAAoAgBBfGooAgALBAAgAAsEACAACxcAAkAgAEUNACAAIAAoAgAoAgQRAQALCwkAIABBAToABAsMACABIAAoAgARAQALcwEDfyMAQRBrIgIiAyM/SyADI0BJcgRAIAMQOAsgAyQAIAIgATYCDCACEIEENgIIIAJBCGogABEAACEBAkAgAigCDCIAQQlJDQAgABAIIAJBADYCDAsgAkEQaiIEIz9LIAQjQElyBEAgBBA4CyAEJAAgAQs9AQF/QRAQxQQiAUEAOgAEIAFB4C42AgAgASAAKAIANgIIIAEgACgCBDYCDCAAQQA2AgQgAUHMLjYCACABCykAIAAgASgCACABIAEsAAtBAEgbQdQsIAIoAgQQBzYCBCAAEIEENgIACwUAQewuCxQAAkAgAEUNACAAEIECQQQQyQQLCwcAIAARBgALBwAgABEGAAsJACABIAARAQALRgEBfyABIAAoAgQiBEEBdWohASAAKAIAIQACQAJAIARBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASACIAMgABEEAAtEAQF/IAEgACgCBCIDQQF1aiEBIAAoAgAhAAJAAkAgA0EBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAIgABEJAAtEAQF/IAEgACgCBCIDQQF1aiEBIAAoAgAhAAJAAkAgA0EBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAIgABECAAtEAQF/IAEgACgCBCIDQQF1aiEBIAAoAgAhAAJAAkAgA0EBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAIgABECAAtEAQF/IAEgACgCBCIDQQF1aiEBIAAoAgAhAAJAAkAgA0EBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAIgABEDAAtCAQF/IAEgACgCBCICQQF1aiEBIAAoAgAhAAJAAkAgAkEBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAARAAALQgEBfyABIAAoAgQiAkEBdWohASAAKAIAIQACQAJAIAJBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASAAEQAACzUBAX9BMBDFBCIAQgA3AyggAEIANwMgIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAACxEAAkAgAEUNACAAQTAQyQQLCw0AIAEgACgCAGorAwALDwAgASAAKAIAaiACOQMACxkBAX9BEBDFBCIAQgA3AwggAEIANwMAIAALEQACQCAARQ0AIABBEBDJBAsLDQAgASAAKAIAaisDAAsPACABIAAoAgBqIAI5AwALGQEBf0EQEMUEIgBCADcDCCAAQQA2AgAgAAsRAAJAIABFDQAgAEEQEMkECwsNACABIAAoAgBqKwMACw8AIAEgACgCAGogAjkDAAsNACABIAAoAgBqKAIACw8AIAEgACgCAGogAjYCAAsFAEGkMQsUAAJAIABFDQAgABCaAUEMEMkECwsHACAAEQYACwcAIAARBgALCQAgASAAEQAACwkAIAEgABEBAAtCAQF/IAEgACgCBCICQQF1aiEBIAAoAgAhAAJAAkAgAkEBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAARAQALRAEBfyABIAAoAgQiA0EBdWohASAAKAIAIQACQAJAIANBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASACIAARAgALRAEBfyABIAAoAgQiA0EBdWohASAAKAIAIQACQAJAIANBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASACIAARAgALRgEBfyABIAAoAgQiBEEBdWohASAAKAIAIQACQAJAIARBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASACIAMgABELAAtEAQF/IAEgACgCBCIDQQF1aiEBIAAoAgAhAAJAAkAgA0EBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAIgABEKAAtCAQF/IAEgACgCBCICQQF1aiEBIAAoAgAhAAJAAkAgAkEBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAARAAALmQEBBH8jAEEQayIDIgUjP0sgBSNASXIEQCAFEDgLIAUkACABIAAoAgQiBEEBdWohASAAKAIAIQACQAJAIARBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgAyABIAIgABEEAEEQEMUEIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiIGIz9LIAYjQElyBEAgBhA4CyAGJAAgAAuXAQEEfyMAQRBrIgIiBCM/SyAEI0BJcgRAIAQQOAsgBCQAIAEgACgCBCIDQQF1aiEBIAAoAgAhAAJAAkAgA0EBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyACIAEgABECAEEQEMUEIgAgAikDCDcDCCAAIAIpAwA3AwAgAkEQaiIFIz9LIAUjQElyBEAgBRA4CyAFJAAgAAtCAQF/IAEgACgCBCICQQF1aiEBIAAoAgAhAAJAAkAgAkEBcUUNACABKAIAIABqKAIAIQAMAQsgACEACyABIAAREQALRAEBfyABIAAoAgQiA0EBdWohASAAKAIAIQACQAJAIANBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASACIAAREwALRAEBfyABIAAoAgQiA0EBdWohASAAKAIAIQACQAJAIANBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASACIAAREgALRgEBfyABIAAoAgQiBEEBdWohASAAKAIAIQACQAJAIARBAXFFDQAgASgCACAAaigCACEADAELIAAhAAsgASACIAMgABEEAAtEAQF/IAEgACgCBCIDQQF1aiEBIAAoAgAhAAJAAkAgA0EBcUUNACABKAIAIABq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AiEACyABQgA3AgQgASAAIgA2AgAgACABEKkCIAELYQEBfwJAIABFDQAgACgCABCbAiAAKAIIIQEgAEEANgIIAkAgAUUNACABIAEoAgAoAgQRAQALIAAoAgQhASAAQQA2AgQCQCABRQ0AIAEgASgCACgCBBEBAAsgAEEMEMkECwtUAQF/IAAoAgAQmwIgACgCCCEBIABBADYCCAJAIAFFDQAgASABKAIAKAIEEQEACyAAKAIEIQEgAEEANgIEAkAgAUUNACABIAEoAgAoAgQRAQALIAALUgEBfyAAKAIEIQEgAEEANgIEAkAgAUUNACABIAEoAgAoAgQRAQALIAAoAgghASAAQQA2AggCQCABRQ0AIAEgASgCACgCBBEBAAsgACgCABCdAgsPACAAKAIAIAEoAgAQvQILDAAgACgCACABEPUCCwwAIAAoAgAgARDLAgsPACAAKAIAIAEgArYQ3wILDwAgACgCACABIAK2EOECCwwAIAAoAgAgARDiAgsMACAAKAIAIAEQxQILDAAgACgCACABEMcCCwwAIAAoAgAgARDJAgsMACAAKAIAIAEQwQILDAAgACgCACABEL8CCwwAIAAoAgAgARDNAgsMACAAKAIAIAEQwwILDwAgACgCACABIAK2EOQCCw8AIAAoAgAgASACthDmAgsMACAAKAIAIAEQ5wILDAAgACgCACABEM8CCwwAIAAoAgAgARDRAgsNACAAKAIAIAG2ENMCCw0AIAAoAgAgAbYQ2gILDQAgACgCACABthDcAgsKACAAKAIAEN0CCw0AIAAoAgAgAbYQ1gILDQAgACgCACABthDYAgsNACAAKAIAIAG2EPcCCw0AIAAoAgAgAbYQ+QILCgAgACgCABD6AgsNACAAKAIAIAG2EPwCCw0AIAAoAgAgAbYQ/QILCgAgACgCABD+AgsNACAAKAIAIAG2EIADCw0AIAAoAgAgAbYQggMLDQAgACgCACABthCEAwsNACAAKAIAIAG2EIUDCw0AIAAoAgAgAbYQhwMLDQAgACgCACABthCJAwsNACAAKAIAIAG2EIsDCw0AIAAoAgAgAbYQjAMLDQAgACgCACABthDzAgsPACAAKAIAIAEgArYQ7QILDwAgACgCACABIAK2EOkCCw8AIAAoAgAgASACthDrAgsMACAAKAIAIAEQrAILDwAgACgCACAB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BSACKQIENwIEIAYgBTYCACAFIQYgAigCACICIANHDQALCyAFIAEoAgA2AgAgASAENgIAIAUPC0EAECYhBRC6BBogBRAlGgNAIAQoAgAhBSAEQQwQyQQgBSEEIAUNAAsjBCIFQQA2AgAjMxARIAUoAgAhBCAFQQA2AgACQAJAIARBAUcNACMEIQUQDiECELoEGiAFQQA2AgAjNBARIAUoAgAhBCAFQQA2AgAgBEEBRw0BQQAQJiEFELoEGiAFELwDCwALIAIQDwALnQMCAX4DfyABKQIAIQMgAEEANgIIIAAgAzcCACABKAIIIQQjBCIFQQA2AgAjCUH7AWogAEEIaiIGIAYgBEEAEB8aIAUoAgAhACAFQQA2AgACQAJAIABBAUcNABAOIQUQugQaIAYoAgAiAUUNAQNAIAEoAgAhACABQQwQyQQgACEBIAANAAwCCwALAkACQCABKAIEQQFqIgAgASgCACIFKALsAyAFKALoAyIFa0ECdUkNAANAAkAgASgCCCIADQAgAUIANwIADAMLIAEgACgCBDYCACABIAAoAgg2AgQgASAAKAIANgIIIABBDBDJBCABKAIEQQFqIgAgASgCACIFKALsAyAFKALoAyIFa0ECdU8NAAsLIAEgADYCBCAFIABBAnRqKAIAKAIUQYCAgOAAcUGAgIDAAEcNACMEIgBBADYCACMJQdUBaiABEBQgACgCACEBIABBADYCACABQQFHDQAQDiEFELoEGiAGKAIAIgFFDQEDQCABKAIAIQAgAUEMEMkEIAAhASAADQAMAgsACw8LIAZBADYCACAFEA8AC9sBAAJAAkACQAJAAkAgAg4EBAABAgMLAkAgAS8BICICQQdxRQ0AIAAgAUHoAGogAhC6Aw8LIAFB6ABqIQICQCABLwEsIgNBB3FFDQAgACACIAMQugMPCyAAIAIgAS8BLhC6Aw8LIAAgASABQR5qIAMQsgMPCwJAIAEvASQiAkEHcUUNACAAIAFB6ABqIAIQugMPCyABQegAaiECAkAgAS8BLCIDQQdxRQ0AIAAgAiADELoDDwsgACACIAEvAS4QugMPCyMGQcMbahDNAwALIAAgASABQR5qIAMQsQMLfwEBfQJAAkAgAkECTw0AQQEhAgwBCwJAIAJBA00NACADDwtBACECCyAAQRRqIgAgASACIAQgBRCnAyEGAkAC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ASAEKAIEIghLIgkbaiIFIAUoAgAgASAIQQAgCRtrIghqNgIAIARBDEEEIAkbaiIEIAQoAgAgCGs2AgAgBiABayEGIAUhBCAAKAI8IAUgByAJayIHIANBDGoQNBCuBEUNAAsLIAZBf0cNAQsgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACIQEMAQtBACEBIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAIAdBAkYNACACIAUoAgRrIQELIANBIGoiCyM/SyALI0BJcgRAIAsQOAsgCyQAIAELYAEDfyMAQRBrIgMiBCM/SyAEI0BJcgRAIAQQOAsgBCQAIAAgASACQf8BcSADQQhqEDUQrgQhAiADKQMIIQEgA0EQaiIFIz9LIAUjQElyBEAgBRA4CyAFJABCfyABIAIbCw4AIAAoAjwgASACEIkECxMAIAIEQCAAIAEgAvwKAAALIAALkQQBA38CQCACQYAESQ0AIAAgASACEIsEDwsgACACaiEDAkACQCABIABzQQNxDQACQAJAIABBA3ENACAAIQIMAQsCQCACDQAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLIANBfHEhBAJAIANBwABJDQAgAiAEQUBqIgVLDQADQCACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUHAAGohASACQcAAaiICIAVNDQALCyACIARPDQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAESQ0ADAILAAsCQCADQQRPDQAgACECDAELAkAgAkEETw0AIAAhAgwBCyADQXxqIQQgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLAkAgAiADTw0AA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0cNAAsLIAALJAECfwJAIAAQjgRB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ACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC70EAgd/An4jAEEgayICIgcjP0sgByNASXIEQCAHEDgLIAckACABQv///////z+DIQkCQAJAIAFCMIhC//8BgyIKpyIDQf+Hf2pB/Q9LDQAgAEI8iCAJQgSGhCEJIANBgIh/aq0hCgJAAkAgAEL//////////w+DIgBCgYCAgICAgIAIVA0AIAlCAXwhCQwBCyAAQoCAgICAgICACFINACAJQgGDIAl8IQkLQgAgCSAJQv////////8HViIDGyEAIAOtIAp8IQkMAQsCQCAAIAmEUA0AIApC//8BUg0AIABCPIggCUIEhoRCgICAgICAgASEIQBC/w8hCQwBCwJAIANB/ocBTQ0AQv8PIQlCACEADAELAkBBgPgAQYH4ACAKUCIEGyIFIANrIgZB8ABMDQBCACEAQgAhCQwBCyAJIAlCgICAgICAwACEIAQbIQlBACEEAkAgBSADRg0AIAJBEGogACAJQYABIAZrEL8EIAIpAxAgAikDGIRCAFIhBAsgAiAAIAkgBhDABCACKQMAIglCPIggAikDCEIEhoQhAAJAAkAgCUL//////////w+DIASthCIJQoGAgICAgICACFQNACAAQgF8IQAMAQsgCUKAgICAgICAgAhSDQAgAEIBgyAAfCEACyAAQoCAgICAgIAIhSAAIABC/////////wdWIgMbIQAgA60hCQsgAkEgaiIIIz9LIAgjQElyBEAgCBA4CyAIJAAgCUI0hiABQoCAgICAgICAgH+DhCAAhL8LBwAgABCOBQsMACAAEMIEQQQQyQQLBQBBihYLEwACQCAAEMYEIgANABDHBAsgAAsxAQJ/IABBASAAQQFLGyEBAkADQCABELMEIgINARDeBCIARQ0BIAARBwAMAAsACyACCwYAEMoEAAsHACAAELUECwcAIAAQyAQLCwBB2RtBABDXBAALEAAgAEHgxwBBCGo2AgAgAAtNAQJ/IAEQjgQiAkENahDFBCIDQQA2AgggAyACNgIEIAMgAjYCACADEM0EIQMCQCACQQFqIgJFDQAgAyABIAL8CgAACyAAIAM2AgAgAAsHACAAQQxqCyAAIAAQywQiAEHQyABBCGo2AgAgAEEEaiABEMwEGiAACwQA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bmx5IGxlYWYgbm9kZXMgd2l0aCBjdXN0b20gbWVhc3VyZSBmdW5jdGlvbnMgc2hvdWxkIG1hbnVhbGx5IG1hcmsgdGhlbXNlbHZlcyBhcyBkaXJ0eQBpc0RpcnR5AG1hcmtEaXJ0eQBkZXN0cm95AHNldERpc3BsYXkAZ2V0RGlzcGxheQBzZXRGbGV4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAc2V0RmxleEdyb3cAZ2V0RmxleEdyb3cAc2V0T3ZlcmZsb3cAZ2V0T3ZlcmZsb3cAaGFzTmV3TGF5b3V0AGNhbGN1bGF0ZUxheW91dABnZXRDb21wdXRlZExheW91dAB1bnNpZ25lZCBzaG9ydABnZXRDaGlsZENvdW50AHVuc2lnbmVkIGludABzZXRKdXN0aWZ5Q29udGVudABnZXRKdXN0aWZ5Q29udGVudABhdmFpbGFibGVIZWlnaHQgaXMgaW5kZWZpbml0ZSBzbyBoZWlnaHRTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABhdmFpbGFibGVXaWR0aCBpcyBpbmRlZmluaXRlIHNvIHdpZHRoU2l6aW5nTW9kZSBtdXN0IGJlIFNpemluZ01vZGU6Ok1heENvbnRlbnQAc2V0QWxpZ25Db250ZW50AGdldEFsaWduQ29udGVudABnZXRQYXJlbnQAaW1wbGVtZW50AHNldE1heEhlaWdodFBlcmNlbnQAc2V0SGVpZ2h0UGVyY2VudABzZXRNaW5IZWlnaHRQZXJjZW50AHNldEZsZXhCYXNpc1BlcmNlbnQAc2V0R2FwUGVyY2VudABzZXRQb3NpdGlvblBlcmNlbnQAc2V0TWFyZ2luUGVyY2VudABzZXRNYXhXaWR0aFBlcmNlbnQAc2V0V2lkdGhQZXJjZW50AHNldE1pbldpZHRoUGVyY2VudABzZXRQYWRkaW5nUGVyY2VudABjcmVhdGVEZWZhdWx0AHVuaXQAcmlnaHQAaGVpZ2h0AHNldE1heEhlaWdodABnZXRNYXhIZWlnaHQAc2V0SGVpZ2h0AGdldEhlaWdodABzZXRNaW5IZWlnaHQAZ2V0TWluSGVpZ2h0AGdldENvbXB1dGVkSGVpZ2h0AGdldENvbXB1dGVkUmlnaHQAbGVmdABnZXRDb21wdXRlZExlZnQAcmVzZXQAX19kZXN0cnVjdABmbG9hdAB1c2VXZWJEZWZhdWx0cwBzZXRVc2VXZWJEZWZhdWx0cwBzZXRBbGlnbkl0ZW1zAGdldEFsaWduSXRlbXMAc2V0RmxleEJhc2lzAGdldEZsZXhCYXNpcwBDYW5ub3QgZ2V0IGxheW91dCBwcm9wZXJ0aWVzIG9mIG11bHRpLWVkZ2Ugc2hvcnRoYW5kcwAlczolZDogJXMAdmVjdG9yAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAHVuc2lnbmVkIGNoYXIAL2Vtc2RrL2Vtc2NyaXB0ZW4vc3lzdGVtL2xpYi9saWJjeHhhYmkvc3JjL3ByaXZhdGVfdHlwZWluZm8uY3BwAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac3RkOjpleGNlcHRpb24Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBFeHBlY3RlZCBub2RlIHRvIGhhdmUgY3VzdG9tIG1lYXN1cmUgZnVuY3Rpb24Ac2V0RmxleERpcmVjdGlvbgBnZXRGbGV4RGlyZWN0aW9uAEludmFsaWQgRmxleERpcmVjdGlvbgBzZXREaXJlY3Rpb24AZ2V0RGlyZWN0aW9uAHNldE1hcmdpbgBnZXRNYXJnaW4AZ2V0Q29tcHV0ZWRNYXJnaW4AbWFya0xheW91dFNlZW4AbmFuAGJvdHRvbQBnZXRDb21wdXRlZEJvdHRvbQBib29sAHN0ZDo6YmFkX2Z1bmN0aW9uX2NhbGwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAYmFkX2FycmF5X25ld19sZW5ndGgAd2lkdGgAc2V0TWF4V2lkdGgAZ2V0TWF4V2lkdGgAc2V0V2lkdGgAZ2V0V2lkdGgAc2V0TWluV2lkdGgAZ2V0TWluV2lkdGgAZ2V0Q29tcHV0ZWRXaWR0aAB1bnNpZ25lZCBsb25nIGxvbmcAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHRlcm1pbmF0aW5nAHN0ZDo6d3N0cmluZwBiYXNpY19zdHJpbmcAc3RkOjpzdHJpbmcAc3RkOjp1MTZzdHJpbmcAc3RkOjp1MzJzdHJpbmcAc2V0UGFkZGluZwBnZXRQYWRkaW5nAGdldENvbXB1dGVkUGFkZGluZwBUcmllZCB0byBjb25zdHJ1Y3QgWUdOb2RlIHdpdGggbnVsbCBjb25maWcAQXR0ZW1wdGluZyB0byBjb25zdHJ1Y3QgTm9kZSB3aXRoIG51bGwgY29uZmlnAGNyZWF0ZVdpdGhDb25maWcAaW5mAHNldEFsaWduU2VsZgBnZXRBbGlnblNlbGYAU2l6ZQB2YWx1ZQBWYWx1ZQBjcmVhdGUAbWVhc3VyZQBzZXRQb3NpdGlvblR5cGUAZ2V0UG9zaXRpb25UeXBlAGlzUmVmZXJlbmNlQmFzZWxpbmUAc2V0SXNSZWZlcmVuY2VCYXNlbGluZQBjb3B5U3R5bGUAZG91YmxlAGJpdHNldCB0ZXN0IGFyZ3VtZW50IG91dCBvZiByYW5nZQBJbnZhbGlkIHBoeXNpY2FsIGVkZ2UAYmFkX2FsbG9jIHdhcyB0aHJvd24gaW4gLWZuby1leGNlcHRpb25zIG1vZGUATm9kZQBJbnZhbGlkIFNpemluZ01vZGUAZXh0ZW5kAGluc2VydENoaWxkAGdldENoaWxkAHJlbW92ZUNoaWxkAHZvaWQAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAHNldEV4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGlzRXhwZXJpbWVudGFsRmVhdHVyZUVuYWJsZWQAZGlydGllZABDYW5ub3QgcmVzZXQgYSBub2RlIHdoaWNoIHN0aWxsIGhhcyBjaGlsZHJlbiBhdHRhY2hlZABzdGQ6OmJhZF9hbGxvYwB1bnNldE1lYXN1cmVGdW5jAHVuc2V0RGlydGllZEZ1bmMAc2V0RXJyYXRhAGdldEVycmF0YQBNZWFzdXJlIGZ1bmN0aW9uIHJldHVybmVkIGFuIGludmFsaWQgZGltZW5zaW9uIHRvIFlvZ2E6IFt3aWR0aD0lZiwgaGVpZ2h0PSVmXQBFeHBlY3QgY3VzdG9tIGJhc2VsaW5lIGZ1bmN0aW9uIHRvIG5vdCByZXR1cm4gTmFOAE5BTgBJTkYAY2F0Y2hpbmcgYSBjbGFzcyB3aXRob3V0IGFuIG9iamVjdD8AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDhfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ2NF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ2NF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AQ2hpbGQgYWxyZWFkeSBoYXMgYSBvd25lciwgaXQgbXVzdCBiZSByZW1vdmVkIGZpcnN0LgBDYW5ub3Qgc2V0IG1lYXN1cmUgZnVuY3Rpb246IE5vZGVzIHdpdGggbWVhc3VyZSBmdW5jdGlvbnMgY2Fubm90IGhhdmUgY2hpbGRyZW4uAENhbm5vdCBhZGQgY2hpbGQ6IE5vZGVzIHdpdGggbWVhc3VyZSBmdW5jdGlvbnMgY2Fubm90IGhhdmUgY2hpbGRyZW4uAChudWxsKQBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQBsaWJjKythYmk6IAAlcwoAAADEIgAAaBMAADE1TWVhc3VyZUNhbGxiYWNrAAAApCMAAIwTAAAAAAAAYBMAAFAxNU1lYXN1cmVDYWxsYmFjawAApCMAALATAAABAAAAYBMAAFBLMTVNZWFzdXJlQ2FsbGJhY2sAcHAAdgB2cAAAAAAA6BMAAHwTAACkIgAAXCIAAKQiAABcIgAAxCIAAPATAAA0U2l6ZQBwcHBmaWZpAAAA7CIAAAwUAAAoFAAAMjJNZWFzdXJlQ2FsbGJhY2tXcmFwcGVyAAAAAEgjAABIFAAAAAAAAAIAAABgEwAAAgAAAHQUAAACBAAATjEwZW1zY3JpcHRlbjd3cmFwcGVySTE1TWVhc3VyZUNhbGxiYWNrRUUAAADEIgAAfBQAAE4xMGVtc2NyaXB0ZW44aW50ZXJuYWwxMVdyYXBwZXJCYXNlRQAAAACkIwAAtBQAAAAAAAAAFAAAUDIyTWVhc3VyZUNhbGxiYWNrV3JhcHBlcgAAAKQjAADgFAAAAQAAAAAUAABQSzIyTWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBwcABwcABwcAB2cAAA/CEAAAAUAAB2cHAApBQAABwVAADEIgAAJBUAAE4xMGVtc2NyaXB0ZW4zdmFsRQBwcHAAAAAAAAAAFAAAwQAAAMIAAADDAAAAAAAAACgUAADBAAAAxAAAAMUAAAD8IQAAAAAAAAAAAADoEwAApCIAAFwiAACkIgAAXCIAABwVAACQFQAAHBUAAMQiAACY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';
+
+// Decode base64 to Uint8Array.
+const wasmBinary = Uint8Array.from(atob(base64Wasm), c => c.charCodeAt(0));
+
+// Inlined Emscripten loader from yoga-layout build.
+// This code implements the `-sMODULARIZE` settings by taking the generated
+// JS program code (INNER_JS_CODE) and wrapping it in a factory function.
+
+// When targetting node and ES6 we use `await import ..` in the generated code
+// so the outer function needs to be marked as async.
+function Module(moduleArg = {}) {
+ var moduleRtn;
+
+// include: shell.js
+// include: minimum_runtime_check.js
+(function() {
+ // "30.0.0" -> 300000
+ function humanReadableVersionToPacked(str) {
+ str = str.split('-')[0]; // Remove any trailing part from e.g. "12.53.3-alpha"
+ var vers = str.split('.').slice(0, 3);
+ while(vers.length < 3) vers.push('00');
+ vers = vers.map((n, i, arr) => n.padStart(2, '0'));
+ return vers.join('');
+ }
+ // 300000 -> "30.0.0"
+ var packedVersionToHumanReadable = n => [n / 10000 | 0, (n / 100 | 0) % 100, n % 100].join('.');
+
+ var TARGET_NOT_SUPPORTED = 2147483647;
+
+ var currentNodeVersion = typeof process !== 'undefined' && process?.versions?.node ? humanReadableVersionToPacked(process.versions.node) : TARGET_NOT_SUPPORTED;
+ if (currentNodeVersion < 160000) {
+ throw new Error(`This emscripten-generated code requires node v${ packedVersionToHumanReadable(160000) } (detected v${packedVersionToHumanReadable(currentNodeVersion)})`);
+ }
+
+ var currentSafariVersion = typeof navigator !== 'undefined' && navigator?.userAgent?.includes("Safari/") && navigator.userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/) ? humanReadableVersionToPacked(navigator.userAgent.match(/Version\/(\d+\.?\d*\.?\d*)/)[1]) : TARGET_NOT_SUPPORTED;
+ if (currentSafariVersion < 150000) {
+ throw new Error(`This emscripten-generated code requires Safari v${ packedVersionToHumanReadable(150000) } (detected v${currentSafariVersion})`);
+ }
+
+ var currentFirefoxVersion = typeof navigator !== 'undefined' && navigator?.userAgent?.match(/Firefox\/(\d+(?:\.\d+)?)/) ? parseFloat(navigator.userAgent.match(/Firefox\/(\d+(?:\.\d+)?)/)[1]) : TARGET_NOT_SUPPORTED;
+ if (currentFirefoxVersion < 79) {
+ throw new Error(`This emscripten-generated code requires Firefox v79 (detected v${currentFirefoxVersion})`);
+ }
+
+ var currentChromeVersion = typeof navigator !== 'undefined' && navigator?.userAgent?.match(/Chrome\/(\d+(?:\.\d+)?)/) ? parseFloat(navigator.userAgent.match(/Chrome\/(\d+(?:\.\d+)?)/)[1]) : TARGET_NOT_SUPPORTED;
+ if (currentChromeVersion < 85) {
+ throw new Error(`This emscripten-generated code requires Chrome v85 (detected v${currentChromeVersion})`);
+ }
+})();
+
+// end include: minimum_runtime_check.js
+// The Module object: Our interface to the outside world. We import
+// and export values on it. There are various ways Module can be used:
+// 1. Not defined. We create it here
+// 2. A function parameter, function(moduleArg) => Promise
+// 3. pre-run appended it, var Module = {}; ..generated code..
+// 4. External script tag defines var Module.
+// We need to check if Module already exists (e.g. case 3 above).
+// Substitution will be replaced with actual code on later stage of the build,
+// this way Closure Compiler will not mangle it (e.g. case 4. above).
+// Note that if you want to run closure, and also to use Module
+// after the generated code, you will need to define var Module = {};
+// before the code. Then that object will be used in the code, and you
+// can continue to use Module afterwards as well.
+var Module = moduleArg;
+
+// Determine the runtime environment we are in. You can customize this by
+// setting the ENVIRONMENT setting at compile time (see settings.js).
+
+// Attempt to auto-detect the environment
+var ENVIRONMENT_IS_WEB = !!globalThis.window;
+var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;
+// N.b. Electron.js environment is simultaneously a NODE-environment, but
+// also a web environment.
+var ENVIRONMENT_IS_NODE = true;
+var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
+
+if (ENVIRONMENT_IS_NODE) {
+ // When building an ES module `require` is not normally available.
+ // We need to use `createRequire()` to construct the require()` function.
+ const { createRequire } = import('module');
+ /** @suppress{duplicate} */
+
+
+}
+
+// --pre-jses are emitted after the Module integration code, so that they can
+// refer to Module (if they choose; they can also define Module)
+
+
+var arguments_ = [];
+var thisProgram = './this.program';
+var quit_ = (status, toThrow) => {
+ throw toThrow;
+};
+
+var _scriptName = __importMetaUrl;
+
+// `/` should be present at the end if `scriptDirectory` is not empty
+var scriptDirectory = '';
+function locateFile(path) {
+ if (Module['locateFile']) {
+ return Module['locateFile'](path, scriptDirectory);
+ }
+ return scriptDirectory + path;
+}
+
+// Hooks that are implemented differently in different runtime environments.
+var readAsync, readBinary;
+
+if (ENVIRONMENT_IS_NODE) {
+ const isNode = globalThis.process?.versions?.node && globalThis.process?.type != 'renderer';
+ if (!isNode) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
+
+ // These modules will usually be used on Node.js. Load them eagerly to avoid
+ // the complexity of lazy-loading.
+ var fs = require("node:fs");
+
+ if (_scriptName.startsWith('file:')) {
+ scriptDirectory = require("node:path").dirname(require('url').fileURLToPath(_scriptName)) + '/';
+ }
+
+// include: node_shell_read.js
+readBinary = (filename) => {
+ // We need to re-wrap `file://` strings to URLs.
+ filename = isFileURI(filename) ? new URL(filename) : filename;
+ var ret = fs.readFileSync(filename);
+ assert(Buffer.isBuffer(ret));
+ return ret;
+};
+
+readAsync = (filename, binary = true) => {
+ // See the comment in the `readBinary` function.
+ filename = isFileURI(filename) ? new URL(filename) : filename;
+ var ret = fs.readFileSync(filename, binary ? undefined : 'utf8');
+ assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string');
+ return ret;
+};
+// end include: node_shell_read.js
+ if (process.argv.length > 1) {
+ thisProgram = process.argv[1].replace(/\\/g, '/');
+ }
+
+ arguments_ = process.argv.slice(2);
+
+ quit_ = (status, toThrow) => {
+ process.exitCode = status;
+ throw toThrow;
+ };
+
+} else
+if (ENVIRONMENT_IS_SHELL) {
+
+} else
+
+// Note that this includes Node.js workers when relevant (pthreads is enabled).
+// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
+// ENVIRONMENT_IS_NODE.
+if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
+ try {
+ scriptDirectory = new URL('.', _scriptName).href; // includes trailing slash
+ } catch {
+ // Must be a `blob:` or `data:` URL (e.g. `blob:http://site.com/etc/etc`), we cannot
+ // infer anything from them.
+ }
+
+ if (!(globalThis.window || globalThis.WorkerGlobalScope)) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
+
+ {
+// include: web_or_worker_shell_read.js
+if (ENVIRONMENT_IS_WORKER) {
+ readBinary = (url) => {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, false);
+ xhr.responseType = 'arraybuffer';
+ xhr.send(null);
+ return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));
+ };
+ }
+
+ readAsync = (url) => {
+ // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url.
+ // See https://github.com/github/fetch/pull/92#issuecomment-140665932
+ // Cordova or Electron apps are typically loaded from a file:// url.
+ // So use XHR on webview if URL is a file URL.
+ if (isFileURI(url)) {
+ return new Promise((resolve, reject) => {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, true);
+ xhr.responseType = 'arraybuffer';
+ xhr.onload = () => {
+ if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
+ resolve(xhr.response);
+ return;
+ }
+ reject(xhr.status);
+ };
+ xhr.onerror = reject;
+ xhr.send(null);
+ });
+ }
+ var response = fetch(url, { credentials: 'same-origin' });
+ if (response.ok) {
+ return response.arrayBuffer();
+ }
+ throw new Error(response.status + ' : ' + response.url);
+ };
+// end include: web_or_worker_shell_read.js
+ }
+} else
+{
+ throw new Error('environment detection error');
+}
+
+var out = console.log.bind(console);
+var err = console.error.bind(console);
+
+var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js';
+var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js';
+var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js';
+var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js';
+var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js';
+var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js';
+var OPFS = 'OPFS is no longer included by default; build with -lopfs.js';
+
+var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js';
+
+// perform assertions in shell.js after we set up out() and err(), as otherwise
+// if an assertion fails it cannot print the message
+
+assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.');
+
+// end include: shell.js
+
+// include: preamble.js
+// === Preamble library stuff ===
+
+// Documentation for the public APIs defined in this file must be updated in:
+// site/source/docs/api_reference/preamble.js.rst
+// A prebuilt local version of the documentation is available at:
+// site/build/text/docs/api_reference/preamble.js.txt
+// You can also build docs locally as HTML or other formats in site/
+// An online HTML version (which may be of a different version of Emscripten)
+// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
+
+var wasmBinary;
+
+if (!globalThis.WebAssembly) {
+ err('no native wasm support detected');
+}
+
+// Wasm globals
+
+//========================================
+// Runtime essentials
+//========================================
+
+// whether we are quitting the application. no code should run after this.
+// set in exit() and abort()
+var ABORT = false;
+
+// set by exit() and abort(). Passed to 'onExit' handler.
+// NOTE: This is also used as the process return code code in shell environments
+// but only when noExitRuntime is false.
+var EXITSTATUS;
+
+// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we
+// don't define it at all in release modes. This matches the behaviour of
+// MINIMAL_RUNTIME.
+// TODO(sbc): Make this the default even without STRICT enabled.
+/** @type {function(*, string=)} */
+function assert(condition, text) {
+ if (!condition) {
+ abort('Assertion failed' + (text ? ': ' + text : ''));
+ }
+}
+
+// We used to include malloc/free by default in the past. Show a helpful error in
+// builds with assertions.
+
+/**
+ * Indicates whether filename is delivered via file protocol (as opposed to http/https)
+ * @noinline
+ */
+var isFileURI = (filename) => filename.startsWith('file://');
+
+// include: runtime_common.js
+// include: runtime_stack_check.js
+// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
+function writeStackCookie() {
+ var max = _emscripten_stack_get_end();
+ assert((max & 3) == 0);
+ // If the stack ends at address zero we write our cookies 4 bytes into the
+ // stack. This prevents interference with SAFE_HEAP and ASAN which also
+ // monitor writes to address zero.
+ if (max == 0) {
+ max += 4;
+ }
+ // The stack grow downwards towards _emscripten_stack_get_end.
+ // We write cookies to the final two words in the stack and detect if they are
+ // ever overwritten.
+ HEAPU32[((max)>>2)] = 0x02135467;checkInt32(0x02135467);
+ HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE;checkInt32(0x89BACDFE);
+ // Also test the global address 0 for integrity.
+ HEAPU32[((0)>>2)] = 1668509029;checkInt32(1668509029);
+}
+
+function checkStackCookie() {
+ if (ABORT) return;
+ var max = _emscripten_stack_get_end();
+ // See writeStackCookie().
+ if (max == 0) {
+ max += 4;
+ }
+ var cookie1 = HEAPU32[((max)>>2)];
+ var cookie2 = HEAPU32[(((max)+(4))>>2)];
+ if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) {
+ abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`);
+ }
+ // Also test the global address 0 for integrity.
+ if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) {
+ abort('Runtime error: The application has corrupted its heap memory area (address zero)!');
+ }
+}
+// end include: runtime_stack_check.js
+// include: runtime_exceptions.js
+// end include: runtime_exceptions.js
+// include: runtime_debug.js
+var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times
+
+// Used by XXXXX_DEBUG settings to output debug messages.
+function dbg(...args) {
+ if (!runtimeDebug && typeof runtimeDebug != 'undefined') return;
+ // TODO(sbc): Make this configurable somehow. Its not always convenient for
+ // logging to show up as warnings.
+ console.warn(...args);
+}
+
+// Endianness check
+(() => {
+ var h16 = new Int16Array(1);
+ var h8 = new Int8Array(h16.buffer);
+ h16[0] = 0x6373;
+ if (h8[0] !== 0x73 || h8[1] !== 0x63) abort('Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)');
+})();
+
+function consumedModuleProp(prop) {
+ if (!Object.getOwnPropertyDescriptor(Module, prop)) {
+ Object.defineProperty(Module, prop, {
+ configurable: true,
+ set() {
+ abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`);
+
+ }
+ });
+ }
+}
+
+function makeInvalidEarlyAccess(name) {
+ return () => assert(false, `call to '${name}' via reference taken before Wasm module initialization`);
+
+}
+
+function ignoredModuleProp(prop) {
+ if (Object.getOwnPropertyDescriptor(Module, prop)) {
+ abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`);
+ }
+}
+
+// forcing the filesystem exports a few things by default
+function isExportedByForceFilesystem(name) {
+ return name === 'FS_createPath' ||
+ name === 'FS_createDataFile' ||
+ name === 'FS_createPreloadedFile' ||
+ name === 'FS_preloadFile' ||
+ name === 'FS_unlink' ||
+ name === 'addRunDependency' ||
+ // The old FS has some functionality that WasmFS lacks.
+ name === 'FS_createLazyFile' ||
+ name === 'FS_createDevice' ||
+ name === 'removeRunDependency';
+}
+
+function missingLibrarySymbol(sym) {
+
+ // Any symbol that is not included from the JS library is also (by definition)
+ // not exported on the Module object.
+ unexportedRuntimeSymbol(sym);
+}
+
+function unexportedRuntimeSymbol(sym) {
+ if (!Object.getOwnPropertyDescriptor(Module, sym)) {
+ Object.defineProperty(Module, sym, {
+ configurable: true,
+ get() {
+ var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;
+ if (isExportedByForceFilesystem(sym)) {
+ msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';
+ }
+ abort(msg);
+ },
+ });
+ }
+}
+
+var MAX_UINT8 = (2 ** 8) - 1;
+var MAX_UINT16 = (2 ** 16) - 1;
+var MAX_UINT32 = (2 ** 32) - 1;
+var MAX_UINT53 = (2 ** 53) - 1;
+var MAX_UINT64 = (2 ** 64) - 1;
+
+var MIN_INT8 = - (2 ** ( 8 - 1));
+var MIN_INT16 = - (2 ** (16 - 1));
+var MIN_INT32 = - (2 ** (32 - 1));
+var MIN_INT53 = - (2 ** (53 - 1));
+var MIN_INT64 = - (2 ** (64 - 1));
+
+function checkInt(value, bits, min, max) {
+ assert(Number.isInteger(Number(value)), `attempt to write non-integer (${value}) into integer heap`);
+ assert(value <= max, `value (${value}) too large to write as ${bits}-bit value`);
+ assert(value >= min, `value (${value}) too small to write as ${bits}-bit value`);
+}
+
+var checkInt1 = (value) => checkInt(value, 1, 1);
+var checkInt8 = (value) => checkInt(value, 8, MIN_INT8, MAX_UINT8);
+var checkInt16 = (value) => checkInt(value, 16, MIN_INT16, MAX_UINT16);
+var checkInt32 = (value) => checkInt(value, 32, MIN_INT32, MAX_UINT32);
+var checkInt53 = (value) => checkInt(value, 53, MIN_INT53, MAX_UINT53);
+var checkInt64 = (value) => checkInt(value, 64, MIN_INT64, MAX_UINT64);
+
+// end include: runtime_debug.js
+var readyPromiseResolve, readyPromiseReject;
+
+// Memory management
+var
+/** @type {!Int8Array} */
+ HEAP8,
+/** @type {!Uint8Array} */
+ HEAPU8,
+/** @type {!Int16Array} */
+ HEAP16,
+/** @type {!Uint16Array} */
+ HEAPU16,
+/** @type {!Int32Array} */
+ HEAP32,
+/** @type {!Uint32Array} */
+ HEAPU32,
+/** @type {!Float32Array} */
+ HEAPF32,
+/** @type {!Float64Array} */
+ HEAPF64;
+
+// BigInt64Array type is not correctly defined in closure
+var
+/** not-@type {!BigInt64Array} */
+ HEAP64,
+/* BigUint64Array type is not correctly defined in closure
+/** not-@type {!BigUint64Array} */
+ HEAPU64;
+
+var runtimeInitialized = false;
+
+
+
+function updateMemoryViews() {
+ var b = wasmMemory.buffer;
+ HEAP8 = new Int8Array(b);
+ HEAP16 = new Int16Array(b);
+ HEAPU8 = new Uint8Array(b);
+ HEAPU16 = new Uint16Array(b);
+ HEAP32 = new Int32Array(b);
+ HEAPU32 = new Uint32Array(b);
+ HEAPF32 = new Float32Array(b);
+ HEAPF64 = new Float64Array(b);
+ HEAP64 = new BigInt64Array(b);
+ HEAPU64 = new BigUint64Array(b);
+}
+
+// include: memoryprofiler.js
+// end include: memoryprofiler.js
+// end include: runtime_common.js
+assert(globalThis.Int32Array && globalThis.Float64Array && Int32Array.prototype.subarray && Int32Array.prototype.set,
+ 'JS engine does not provide full typed array support');
+
+function preRun() {
+ if (Module['preRun']) {
+ if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
+ while (Module['preRun'].length) {
+ addOnPreRun(Module['preRun'].shift());
+ }
+ }
+ consumedModuleProp('preRun');
+ // Begin ATPRERUNS hooks
+ callRuntimeCallbacks(onPreRuns);
+ // End ATPRERUNS hooks
+}
+
+function initRuntime() {
+ assert(!runtimeInitialized);
+ runtimeInitialized = true;
+
+ setStackLimits();
+
+ checkStackCookie();
+
+ // No ATINITS hooks
+
+ wasmExports['__wasm_call_ctors']();
+
+ // No ATPOSTCTORS hooks
+}
+
+function postRun() {
+ checkStackCookie();
+ // PThreads reuse the runtime from the main thread.
+
+ if (Module['postRun']) {
+ if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
+ while (Module['postRun'].length) {
+ addOnPostRun(Module['postRun'].shift());
+ }
+ }
+ consumedModuleProp('postRun');
+
+ // Begin ATPOSTRUNS hooks
+ callRuntimeCallbacks(onPostRuns);
+ // End ATPOSTRUNS hooks
+}
+
+/** @param {string|number=} what */
+function abort(what) {
+ Module['onAbort']?.(what);
+
+ what = 'Aborted(' + what + ')';
+ // TODO(sbc): Should we remove printing and leave it up to whoever
+ // catches the exception?
+ err(what);
+
+ ABORT = true;
+
+ // Use a wasm runtime error, because a JS error might be seen as a foreign
+ // exception, which means we'd run destructors on it. We need the error to
+ // simply make the program stop.
+ // FIXME This approach does not work in Wasm EH because it currently does not assume
+ // all RuntimeErrors are from traps; it decides whether a RuntimeError is from
+ // a trap or not based on a hidden field within the object. So at the moment
+ // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that
+ // allows this in the wasm spec.
+
+ // Suppress closure compiler warning here. Closure compiler's builtin extern
+ // definition for WebAssembly.RuntimeError claims it takes no arguments even
+ // though it can.
+ // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.
+ /** @suppress {checkTypes} */
+ var e = new WebAssembly.RuntimeError(what);
+
+ readyPromiseReject?.(e);
+ // Throw the error whether or not MODULARIZE is set because abort is used
+ // in code paths apart from instantiation where an exception is expected
+ // to be thrown when abort is called.
+ throw e;
+}
+
+// show errors on likely calls to FS when it was not included
+var FS = {
+ error() {
+ abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM');
+ },
+ init() { FS.error() },
+ createDataFile() { FS.error() },
+ createPreloadedFile() { FS.error() },
+ createLazyFile() { FS.error() },
+ open() { FS.error() },
+ mkdev() { FS.error() },
+ registerDevice() { FS.error() },
+ analyzePath() { FS.error() },
+
+ ErrnoError() { FS.error() },
+};
+
+
+function createExportWrapper(name, nargs) {
+ return (...args) => {
+ assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`);
+ var f = wasmExports[name];
+ assert(f, `exported native function \`${name}\` not found`);
+ // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled.
+ assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`);
+ return f(...args);
+ };
+}
+
+var wasmBinaryFile;
+
+
+
+function getBinarySync(file) {
+ if (file == wasmBinaryFile && wasmBinary) {
+ return new Uint8Array(wasmBinary);
+ }
+ if (readBinary) {
+ return readBinary(file);
+ }
+ // Throwing a plain string here, even though it not normally adviables since
+ // this gets turning into an `abort` in instantiateArrayBuffer.
+ throw 'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)';
+}
+
+function getWasmBinary(binaryFile) {
+ // If we don't have the binary yet, load it asynchronously using readAsync.
+ if (!wasmBinary) {
+ // Fetch the binary using readAsync
+ try {
+ var response = readAsync(binaryFile);
+ return new Uint8Array(response);
+ } catch {
+ // Fall back to getBinarySync below;
+ }
+ }
+
+ // Otherwise, getBinarySync should be able to get it synchronously
+ return getBinarySync(binaryFile);
+}
+
+function instantiateSync(file, info) {
+ var module;
+ var binary = getBinarySync(file);
+ module = new WebAssembly.Module(binary);
+ var instance = new WebAssembly.Instance(module, info);
+ return [instance, module];
+}
+
+function getWasmImports() {
+ // prepare imports
+ var imports = {
+ 'env': wasmImports,
+ 'wasi_snapshot_preview1': wasmImports,
+ };
+ return imports;
+}
+
+// Create the wasm instance.
+// Receives the wasm imports, returns the exports.
+function createWasm() {
+ // Load the wasm module and create an instance of using native support in the JS engine.
+ // handle a generated wasm instance, receiving its exports and
+ // performing other necessary setup
+ /** @param {WebAssembly.Module=} module*/
+ function receiveInstance(instance, module) {
+ wasmExports = instance.exports;
+
+ assignWasmExports(wasmExports);
+
+ updateMemoryViews();
+
+ return wasmExports;
+ }
+
+ // Prefer streaming instantiation if available.
+
+ var info = getWasmImports();
+
+ // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
+ // to manually instantiate the Wasm module themselves. This allows pages to
+ // run the instantiation parallel to any other async startup actions they are
+ // performing.
+ // Also pthreads and wasm workers initialize the wasm instance through this
+ // path.
+ if (Module['instantiateWasm']) {
+ return new Promise((resolve, reject) => {
+ try {
+ Module['instantiateWasm'](info, (inst, mod) => {
+ resolve(receiveInstance(inst, mod));
+ });
+ } catch(e) {
+ err(`Module.instantiateWasm callback failed with error: ${e}`);
+ reject(e);
+ }
+ });
+ }
+
+ wasmBinaryFile ??= '';
+ var result = instantiateSync(wasmBinaryFile, info);
+ // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193,
+ // the above line no longer optimizes out down to the following line.
+ // When the regression is fixed, we can remove this if/else.
+ return receiveInstance(result[0]);
+}
+
+// end include: preamble.js
+
+// Begin JS library code
+
+
+ class ExitStatus {
+ name = 'ExitStatus';
+ constructor(status) {
+ this.message = `Program terminated with exit(${status})`;
+ this.status = status;
+ }
+ }
+
+ var callRuntimeCallbacks = (callbacks) => {
+ while (callbacks.length > 0) {
+ // Pass the module as the first argument.
+ callbacks.shift()(Module);
+ }
+ };
+ var onPostRuns = [];
+ var addOnPostRun = (cb) => onPostRuns.push(cb);
+
+ var onPreRuns = [];
+ var addOnPreRun = (cb) => onPreRuns.push(cb);
+
+
+
+ /**
+ * @param {number} ptr
+ * @param {string} type
+ */
+ function getValue(ptr, type = 'i8') {
+ if (type.endsWith('*')) type = '*';
+ switch (type) {
+ case 'i1': return HEAP8[ptr];
+ case 'i8': return HEAP8[ptr];
+ case 'i16': return HEAP16[((ptr)>>1)];
+ case 'i32': return HEAP32[((ptr)>>2)];
+ case 'i64': return HEAP64[((ptr)>>3)];
+ case 'float': return HEAPF32[((ptr)>>2)];
+ case 'double': return HEAPF64[((ptr)>>3)];
+ case '*': return HEAPU32[((ptr)>>2)];
+ default: abort(`invalid type for getValue: ${type}`);
+ }
+ }
+
+ var noExitRuntime = true;
+
+ var ptrToString = (ptr) => {
+ assert(typeof ptr === 'number', `ptrToString expects a number, got ${typeof ptr}`);
+ // Convert to 32-bit unsigned value
+ ptr >>>= 0;
+ return '0x' + ptr.toString(16).padStart(8, '0');
+ };
+
+ var setStackLimits = () => {
+ var stackLow = _emscripten_stack_get_base();
+ var stackHigh = _emscripten_stack_get_end();
+ ___set_stack_limits(stackLow, stackHigh);
+ };
+
+
+ /**
+ * @param {number} ptr
+ * @param {number} value
+ * @param {string} type
+ */
+ function setValue(ptr, value, type = 'i8') {
+ if (type.endsWith('*')) type = '*';
+ switch (type) {
+ case 'i1': HEAP8[ptr] = value;checkInt8(value); break;
+ case 'i8': HEAP8[ptr] = value;checkInt8(value); break;
+ case 'i16': HEAP16[((ptr)>>1)] = value;checkInt16(value); break;
+ case 'i32': HEAP32[((ptr)>>2)] = value;checkInt32(value); break;
+ case 'i64': HEAP64[((ptr)>>3)] = BigInt(value);checkInt64(value); break;
+ case 'float': HEAPF32[((ptr)>>2)] = value; break;
+ case 'double': HEAPF64[((ptr)>>3)] = value; break;
+ case '*': HEAPU32[((ptr)>>2)] = value; break;
+ default: abort(`invalid type for setValue: ${type}`);
+ }
+ }
+
+ var stackRestore = (val) => __emscripten_stack_restore(val);
+
+ var stackSave = () => _emscripten_stack_get_current();
+
+ var warnOnce = (text) => {
+ warnOnce.shown ||= {};
+ if (!warnOnce.shown[text]) {
+ warnOnce.shown[text] = 1;
+ if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;
+ err(text);
+ }
+ };
+
+
+
+ var exceptionCaught = [];
+
+
+
+ var uncaughtExceptionCount = 0;
+ var ___cxa_begin_catch = (ptr) => {
+ var info = new ExceptionInfo(ptr);
+ if (!info.get_caught()) {
+ info.set_caught(true);
+ uncaughtExceptionCount--;
+ }
+ info.set_rethrown(false);
+ exceptionCaught.push(info);
+ ___cxa_increment_exception_refcount(ptr);
+ return ___cxa_get_exception_ptr(ptr);
+ };
+
+
+ var exceptionLast = 0;
+
+
+ var ___cxa_end_catch = () => {
+ // Clear state flag.
+ _setThrew(0, 0);
+ assert(exceptionCaught.length > 0);
+ // Call destructor if one is registered then clear it.
+ var info = exceptionCaught.pop();
+
+ ___cxa_decrement_exception_refcount(info.excPtr);
+ exceptionLast = 0; // XXX in decRef?
+ };
+
+
+ class ExceptionInfo {
+ // excPtr - Thrown object pointer to wrap. Metadata pointer is calculated from it.
+ constructor(excPtr) {
+ this.excPtr = excPtr;
+ this.ptr = excPtr - 24;
+ }
+
+ set_type(type) {
+ HEAPU32[(((this.ptr)+(4))>>2)] = type;
+ }
+
+ get_type() {
+ return HEAPU32[(((this.ptr)+(4))>>2)];
+ }
+
+ set_destructor(destructor) {
+ HEAPU32[(((this.ptr)+(8))>>2)] = destructor;
+ }
+
+ get_destructor() {
+ return HEAPU32[(((this.ptr)+(8))>>2)];
+ }
+
+ set_caught(caught) {
+ caught = caught ? 1 : 0;
+ HEAP8[(this.ptr)+(12)] = caught;checkInt8(caught);
+ }
+
+ get_caught() {
+ return HEAP8[(this.ptr)+(12)] != 0;
+ }
+
+ set_rethrown(rethrown) {
+ rethrown = rethrown ? 1 : 0;
+ HEAP8[(this.ptr)+(13)] = rethrown;checkInt8(rethrown);
+ }
+
+ get_rethrown() {
+ return HEAP8[(this.ptr)+(13)] != 0;
+ }
+
+ // Initialize native structure fields. Should be called once after allocated.
+ init(type, destructor) {
+ this.set_adjusted_ptr(0);
+ this.set_type(type);
+ this.set_destructor(destructor);
+ }
+
+ set_adjusted_ptr(adjustedPtr) {
+ HEAPU32[(((this.ptr)+(16))>>2)] = adjustedPtr;
+ }
+
+ get_adjusted_ptr() {
+ return HEAPU32[(((this.ptr)+(16))>>2)];
+ }
+ }
+
+
+ var setTempRet0 = (val) => __emscripten_tempret_set(val);
+ var findMatchingCatch = (args) => {
+ var thrown =
+ exceptionLast;
+ if (!thrown) {
+ // just pass through the null ptr
+ setTempRet0(0);
+ return 0;
+ }
+ var info = new ExceptionInfo(thrown);
+ info.set_adjusted_ptr(thrown);
+ var thrownType = info.get_type();
+ if (!thrownType) {
+ // just pass through the thrown ptr
+ setTempRet0(0);
+ return thrown;
+ }
+
+ // can_catch receives a **, add indirection
+ // The different catch blocks are denoted by different types.
+ // Due to inheritance, those types may not precisely match the
+ // type of the thrown object. Find one which matches, and
+ // return the type of the catch block which should be called.
+ for (var caughtType of args) {
+ if (caughtType === 0 || caughtType === thrownType) {
+ // Catch all clause matched or exactly the same type is caught
+ break;
+ }
+ var adjusted_ptr_addr = info.ptr + 16;
+ if (___cxa_can_catch(caughtType, thrownType, adjusted_ptr_addr)) {
+ setTempRet0(caughtType);
+ return thrown;
+ }
+ }
+ setTempRet0(thrownType);
+ return thrown;
+ };
+ var ___cxa_find_matching_catch_2 = () => findMatchingCatch([]);
+
+ var ___cxa_find_matching_catch_3 = (arg0) => findMatchingCatch([arg0]);
+
+
+
+ var ___cxa_rethrow = () => {
+ var info = exceptionCaught.pop();
+ if (!info) {
+ abort('no exception to throw');
+ }
+ var ptr = info.excPtr;
+ if (!info.get_rethrown()) {
+ // Only pop if the corresponding push was through rethrow_primary_exception
+ exceptionCaught.push(info);
+ info.set_rethrown(true);
+ info.set_caught(false);
+ uncaughtExceptionCount++;
+ }
+ exceptionLast = ptr;
+ assert(false, 'Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.');
+ };
+
+
+
+ var ___cxa_throw = (ptr, type, destructor) => {
+ var info = new ExceptionInfo(ptr);
+ // Initialize ExceptionInfo content after it was allocated in __cxa_allocate_exception.
+ info.init(type, destructor);
+ exceptionLast = ptr;
+ uncaughtExceptionCount++;
+ assert(false, 'Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.');
+ };
+
+
+
+ var ___handle_stack_overflow = (requested) => {
+ var base = _emscripten_stack_get_base();
+ var end = _emscripten_stack_get_end();
+ abort(`stack overflow (Attempt to set SP to ${ptrToString(requested)}` +
+ `, with stack limits [${ptrToString(end)} - ${ptrToString(base)}` +
+ ']). If you require more stack space build with -sSTACK_SIZE=');
+ };
+
+ var ___resumeException = (ptr) => {
+ if (!exceptionLast) {
+ exceptionLast = ptr;
+ }
+ assert(false, 'Exception thrown, but exception catching is not enabled. Compile with -sNO_DISABLE_EXCEPTION_CATCHING or -sEXCEPTION_CATCHING_ALLOWED=[..] to catch.');
+ };
+
+ var __abort_js = () =>
+ abort('native code called abort()');
+
+ var createNamedFunction = (name, func) => Object.defineProperty(func, 'name', { value: name });
+
+ var emval_freelist = [];
+
+ var emval_handles = [0,1,,1,null,1,true,1,false,1];
+
+ var BindingError = class BindingError extends Error { constructor(message) { super(message); this.name = 'BindingError'; }};
+ var throwBindingError = (message) => { throw new BindingError(message); };
+ var Emval = {
+ toValue:(handle) => {
+ if (!handle) {
+ throwBindingError(`Cannot use deleted val. handle = ${handle}`);
+ }
+ // handle 2 is supposed to be `undefined`.
+ assert(handle === 2 || emval_handles[handle] !== undefined && handle % 2 === 0, `invalid handle: ${handle}`);
+ return emval_handles[handle];
+ },
+ toHandle:(value) => {
+ switch (value) {
+ case undefined: return 2;
+ case null: return 4;
+ case true: return 6;
+ case false: return 8;
+ default:{
+ const handle = emval_freelist.pop() || emval_handles.length;
+ emval_handles[handle] = value;
+ emval_handles[handle + 1] = 1;
+ return handle;
+ }
+ }
+ },
+ };
+
+ class PureVirtualError extends Error {}
+
+ var AsciiToString = (ptr) => {
+ var str = '';
+ while (1) {
+ var ch = HEAPU8[ptr++];
+ if (!ch) return str;
+ str += String.fromCharCode(ch);
+ }
+ };
+
+ var registeredInstances = {
+ };
+
+ var getBasestPointer = (class_, ptr) => {
+ if (ptr === undefined) {
+ throwBindingError('ptr should not be undefined');
+ }
+ while (class_.baseClass) {
+ ptr = class_.upcast(ptr);
+ class_ = class_.baseClass;
+ }
+ return ptr;
+ };
+
+ var registerInheritedInstance = (class_, ptr, instance) => {
+ ptr = getBasestPointer(class_, ptr);
+ if (registeredInstances.hasOwnProperty(ptr)) {
+ throwBindingError(`Tried to register registered instance: ${ptr}`);
+ } else {
+ registeredInstances[ptr] = instance;
+ }
+ };
+
+ var registeredTypes = {
+ };
+
+
+
+ var getTypeName = (type) => {
+ var ptr = ___getTypeName(type);
+ var rv = AsciiToString(ptr);
+ _free(ptr);
+ return rv;
+ };
+
+ var requireRegisteredType = (rawType, humanName) => {
+ var impl = registeredTypes[rawType];
+ if (undefined === impl) {
+ throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`);
+ }
+ return impl;
+ };
+
+
+
+
+ var unregisterInheritedInstance = (class_, ptr) => {
+ ptr = getBasestPointer(class_, ptr);
+ if (registeredInstances.hasOwnProperty(ptr)) {
+ delete registeredInstances[ptr];
+ } else {
+ throwBindingError(`Tried to unregister unregistered instance: ${ptr}`);
+ }
+ };
+
+ var detachFinalizer = (handle) => {};
+
+ var finalizationRegistry = false;
+
+
+ var runDestructor = ($$) => {
+ if ($$.smartPtr) {
+ $$.smartPtrType.rawDestructor($$.smartPtr);
+ } else {
+ $$.ptrType.registeredClass.rawDestructor($$.ptr);
+ }
+ };
+ var releaseClassHandle = ($$) => {
+ $$.count.value -= 1;
+ var toDelete = 0 === $$.count.value;
+ if (toDelete) {
+ runDestructor($$);
+ }
+ };
+
+ var downcastPointer = (ptr, ptrClass, desiredClass) => {
+ if (ptrClass === desiredClass) {
+ return ptr;
+ }
+ if (undefined === desiredClass.baseClass) {
+ return null; // no conversion
+ }
+
+ var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass);
+ if (rv === null) {
+ return null;
+ }
+ return desiredClass.downcast(rv);
+ };
+
+ var registeredPointers = {
+ };
+
+
+ var getInheritedInstance = (class_, ptr) => {
+ ptr = getBasestPointer(class_, ptr);
+ return registeredInstances[ptr];
+ };
+
+ var InternalError = class InternalError extends Error { constructor(message) { super(message); this.name = 'InternalError'; }};
+ var throwInternalError = (message) => { throw new InternalError(message); };
+
+ var makeClassHandle = (prototype, record) => {
+ if (!record.ptrType || !record.ptr) {
+ throwInternalError('makeClassHandle requires ptr and ptrType');
+ }
+ var hasSmartPtrType = !!record.smartPtrType;
+ var hasSmartPtr = !!record.smartPtr;
+ if (hasSmartPtrType !== hasSmartPtr) {
+ throwInternalError('Both smartPtrType and smartPtr must be specified');
+ }
+ record.count = { value: 1 };
+ return attachFinalizer(Object.create(prototype, {
+ $$: {
+ value: record,
+ writable: true,
+ },
+ }));
+ };
+ /** @suppress {globalThis} */
+ function RegisteredPointer_fromWireType(ptr) {
+ // ptr is a raw pointer (or a raw smartpointer)
+
+ // rawPointer is a maybe-null raw pointer
+ var rawPointer = this.getPointee(ptr);
+ if (!rawPointer) {
+ this.destructor(ptr);
+ return null;
+ }
+
+ var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);
+ if (undefined !== registeredInstance) {
+ // JS object has been neutered, time to repopulate it
+ if (0 === registeredInstance.$$.count.value) {
+ registeredInstance.$$.ptr = rawPointer;
+ registeredInstance.$$.smartPtr = ptr;
+ return registeredInstance['clone']();
+ } else {
+ // else, just increment reference count on existing object
+ // it already has a reference to the smart pointer
+ var rv = registeredInstance['clone']();
+ this.destructor(ptr);
+ return rv;
+ }
+ }
+
+ function makeDefaultHandle() {
+ if (this.isSmartPointer) {
+ return makeClassHandle(this.registeredClass.instancePrototype, {
+ ptrType: this.pointeeType,
+ ptr: rawPointer,
+ smartPtrType: this,
+ smartPtr: ptr,
+ });
+ } else {
+ return makeClassHandle(this.registeredClass.instancePrototype, {
+ ptrType: this,
+ ptr,
+ });
+ }
+ }
+
+ var actualType = this.registeredClass.getActualType(rawPointer);
+ var registeredPointerRecord = registeredPointers[actualType];
+ if (!registeredPointerRecord) {
+ return makeDefaultHandle.call(this);
+ }
+
+ var toType;
+ if (this.isConst) {
+ toType = registeredPointerRecord.constPointerType;
+ } else {
+ toType = registeredPointerRecord.pointerType;
+ }
+ var dp = downcastPointer(
+ rawPointer,
+ this.registeredClass,
+ toType.registeredClass);
+ if (dp === null) {
+ return makeDefaultHandle.call(this);
+ }
+ if (this.isSmartPointer) {
+ return makeClassHandle(toType.registeredClass.instancePrototype, {
+ ptrType: toType,
+ ptr: dp,
+ smartPtrType: this,
+ smartPtr: ptr,
+ });
+ } else {
+ return makeClassHandle(toType.registeredClass.instancePrototype, {
+ ptrType: toType,
+ ptr: dp,
+ });
+ }
+ }
+ var attachFinalizer = (handle) => {
+ if (!globalThis.FinalizationRegistry) {
+ attachFinalizer = (handle) => handle;
+ return handle;
+ }
+ // If the running environment has a FinalizationRegistry (see
+ // https://github.com/tc39/proposal-weakrefs), then attach finalizers
+ // for class handles. We check for the presence of FinalizationRegistry
+ // at run-time, not build-time.
+ finalizationRegistry = new FinalizationRegistry((info) => {
+ console.warn(info.leakWarning);
+ releaseClassHandle(info.$$);
+ });
+ attachFinalizer = (handle) => {
+ var $$ = handle.$$;
+ var hasSmartPtr = !!$$.smartPtr;
+ if (hasSmartPtr) {
+ // We should not call the destructor on raw pointers in case other code expects the pointee to live
+ var info = { $$: $$ };
+ // Create a warning as an Error instance in advance so that we can store
+ // the current stacktrace and point to it when / if a leak is detected.
+ // This is more useful than the empty stacktrace of `FinalizationRegistry`
+ // callback.
+ var cls = $$.ptrType.registeredClass;
+ var err = new Error(`Embind found a leaked C++ instance ${cls.name} <${ptrToString($$.ptr)}>.\n` +
+ "We'll free it automatically in this case, but this functionality is not reliable across various environments.\n" +
+ "Make sure to invoke .delete() manually once you're done with the instance instead.\n" +
+ "Originally allocated"); // `.stack` will add "at ..." after this sentence
+ if ('captureStackTrace' in Error) {
+ Error.captureStackTrace(err, RegisteredPointer_fromWireType);
+ }
+ info.leakWarning = err.stack.replace(/^Error: /, '');
+ finalizationRegistry.register(handle, info, handle);
+ }
+ return handle;
+ };
+ detachFinalizer = (handle) => finalizationRegistry.unregister(handle);
+ return attachFinalizer(handle);
+ };
+ var __embind_create_inheriting_constructor = (constructorName, wrapperType, properties) => {
+ constructorName = AsciiToString(constructorName);
+ wrapperType = requireRegisteredType(wrapperType, 'wrapper');
+ properties = Emval.toValue(properties);
+
+ var registeredClass = wrapperType.registeredClass;
+ var wrapperPrototype = registeredClass.instancePrototype;
+ var baseClass = registeredClass.baseClass;
+ var baseClassPrototype = baseClass.instancePrototype;
+ var baseConstructor = registeredClass.baseClass.constructor;
+ var ctor = createNamedFunction(constructorName, function(...args) {
+ registeredClass.baseClass.pureVirtualFunctions.forEach(function(name) {
+ if (this[name] === baseClassPrototype[name]) {
+ throw new PureVirtualError(`Pure virtual function ${name} must be implemented in JavaScript`);
+ }
+ }.bind(this));
+
+ Object.defineProperty(this, '__parent', {
+ value: wrapperPrototype
+ });
+ this['__construct'](...args);
+ });
+
+ // It's a little nasty that we're modifying the wrapper prototype here.
+
+ wrapperPrototype['__construct'] = function __construct(...args) {
+ if (this === wrapperPrototype) {
+ throwBindingError("Pass correct 'this' to __construct");
+ }
+
+ var inner = baseConstructor['implement'](this, ...args);
+ detachFinalizer(inner);
+ var $$ = inner.$$;
+ inner['notifyOnDestruction']();
+ $$.preservePointerOnDelete = true;
+ Object.defineProperties(this, { $$: {
+ value: $$
+ }});
+ attachFinalizer(this);
+ registerInheritedInstance(registeredClass, $$.ptr, this);
+ };
+
+ wrapperPrototype['__destruct'] = function __destruct() {
+ if (this === wrapperPrototype) {
+ throwBindingError("Pass correct 'this' to __destruct");
+ }
+
+ detachFinalizer(this);
+ unregisterInheritedInstance(registeredClass, this.$$.ptr);
+ };
+
+ ctor.prototype = Object.create(wrapperPrototype);
+ Object.assign(ctor.prototype, properties);
+ return Emval.toHandle(ctor);
+ };
+
+ var structRegistrations = {
+ };
+
+ var runDestructors = (destructors) => {
+ while (destructors.length) {
+ var ptr = destructors.pop();
+ var del = destructors.pop();
+ del(ptr);
+ }
+ };
+
+ /** @suppress {globalThis} */
+ function readPointer(pointer) {
+ return this.fromWireType(HEAPU32[((pointer)>>2)]);
+ }
+
+ var awaitingDependencies = {
+ };
+
+
+ var typeDependencies = {
+ };
+
+ var whenDependentTypesAreResolved = (myTypes, dependentTypes, getTypeConverters) => {
+ myTypes.forEach((type) => typeDependencies[type] = dependentTypes);
+
+ function onComplete(typeConverters) {
+ var myTypeConverters = getTypeConverters(typeConverters);
+ if (myTypeConverters.length !== myTypes.length) {
+ throwInternalError('Mismatched type converter count');
+ }
+ for (var i = 0; i < myTypes.length; ++i) {
+ registerType(myTypes[i], myTypeConverters[i]);
+ }
+ }
+
+ var typeConverters = new Array(dependentTypes.length);
+ var unregisteredTypes = [];
+ var registered = 0;
+ dependentTypes.forEach((dt, i) => {
+ if (registeredTypes.hasOwnProperty(dt)) {
+ typeConverters[i] = registeredTypes[dt];
+ } else {
+ unregisteredTypes.push(dt);
+ if (!awaitingDependencies.hasOwnProperty(dt)) {
+ awaitingDependencies[dt] = [];
+ }
+ awaitingDependencies[dt].push(() => {
+ typeConverters[i] = registeredTypes[dt];
+ ++registered;
+ if (registered === unregisteredTypes.length) {
+ onComplete(typeConverters);
+ }
+ });
+ }
+ });
+ if (0 === unregisteredTypes.length) {
+ onComplete(typeConverters);
+ }
+ };
+ var __embind_finalize_value_object = (structType) => {
+ var reg = structRegistrations[structType];
+ delete structRegistrations[structType];
+
+ var rawConstructor = reg.rawConstructor;
+ var rawDestructor = reg.rawDestructor;
+ var fieldRecords = reg.fields;
+ var fieldTypes = fieldRecords.map((field) => field.getterReturnType).
+ concat(fieldRecords.map((field) => field.setterArgumentType));
+ whenDependentTypesAreResolved([structType], fieldTypes, (fieldTypes) => {
+ var fields = {};
+ fieldRecords.forEach((field, i) => {
+ var fieldName = field.fieldName;
+ var getterReturnType = fieldTypes[i];
+ var optional = fieldTypes[i].optional;
+ var getter = field.getter;
+ var getterContext = field.getterContext;
+ var setterArgumentType = fieldTypes[i + fieldRecords.length];
+ var setter = field.setter;
+ var setterContext = field.setterContext;
+ fields[fieldName] = {
+ read: (ptr) => getterReturnType.fromWireType(getter(getterContext, ptr)),
+ write: (ptr, o) => {
+ var destructors = [];
+ setter(setterContext, ptr, setterArgumentType.toWireType(destructors, o));
+ runDestructors(destructors);
+ },
+ optional,
+ };
+ });
+
+ return [{
+ name: reg.name,
+ fromWireType: (ptr) => {
+ var rv = {};
+ for (var i in fields) {
+ rv[i] = fields[i].read(ptr);
+ }
+ rawDestructor(ptr);
+ return rv;
+ },
+ toWireType: (destructors, o) => {
+ // todo: Here we have an opportunity for -O3 level "unsafe" optimizations:
+ // assume all fields are present without checking.
+ for (var fieldName in fields) {
+ if (!(fieldName in o) && !fields[fieldName].optional) {
+ throw new TypeError(`Missing field: "${fieldName}"`);
+ }
+ }
+ var ptr = rawConstructor();
+ for (fieldName in fields) {
+ fields[fieldName].write(ptr, o[fieldName]);
+ }
+ if (destructors !== null) {
+ destructors.push(rawDestructor, ptr);
+ }
+ return ptr;
+ },
+ readValueFromPointer: readPointer,
+ destructorFunction: rawDestructor,
+ }];
+ });
+ };
+
+
+
+
+
+ /** @param {Object=} options */
+ function sharedRegisterType(rawType, registeredInstance, options = {}) {
+ var name = registeredInstance.name;
+ if (!rawType) {
+ throwBindingError(`type "${name}" must have a positive integer typeid pointer`);
+ }
+ if (registeredTypes.hasOwnProperty(rawType)) {
+ if (options.ignoreDuplicateRegistrations) {
+ return;
+ } else {
+ throwBindingError(`Cannot register type '${name}' twice`);
+ }
+ }
+
+ registeredTypes[rawType] = registeredInstance;
+ delete typeDependencies[rawType];
+
+ if (awaitingDependencies.hasOwnProperty(rawType)) {
+ var callbacks = awaitingDependencies[rawType];
+ delete awaitingDependencies[rawType];
+ callbacks.forEach((cb) => cb());
+ }
+ }
+ /** @param {Object=} options */
+ function registerType(rawType, registeredInstance, options = {}) {
+ return sharedRegisterType(rawType, registeredInstance, options);
+ }
+
+ var integerReadValueFromPointer = (name, width, signed) => {
+ // integers are quite common, so generate very specialized functions
+ switch (width) {
+ case 1: return signed ?
+ (pointer) => HEAP8[pointer] :
+ (pointer) => HEAPU8[pointer];
+ case 2: return signed ?
+ (pointer) => HEAP16[((pointer)>>1)] :
+ (pointer) => HEAPU16[((pointer)>>1)]
+ case 4: return signed ?
+ (pointer) => HEAP32[((pointer)>>2)] :
+ (pointer) => HEAPU32[((pointer)>>2)]
+ case 8: return signed ?
+ (pointer) => HEAP64[((pointer)>>3)] :
+ (pointer) => HEAPU64[((pointer)>>3)]
+ default:
+ throw new TypeError(`invalid integer width (${width}): ${name}`);
+ }
+ };
+
+ var embindRepr = (v) => {
+ if (v === null) {
+ return 'null';
+ }
+ var t = typeof v;
+ if (t === 'object' || t === 'array' || t === 'function') {
+ return v.toString();
+ } else {
+ return '' + v;
+ }
+ };
+
+ var assertIntegerRange = (typeName, value, minRange, maxRange) => {
+ if (value < minRange || value > maxRange) {
+ throw new TypeError(`Passing a number "${embindRepr(value)}" from JS side to C/C++ side to an argument of type "${typeName}", which is outside the valid range [${minRange}, ${maxRange}]!`);
+ }
+ };
+ /** @suppress {globalThis} */
+ var __embind_register_bigint = (primitiveType, name, size, minRange, maxRange) => {
+ name = AsciiToString(name);
+
+ const isUnsignedType = minRange === 0n;
+
+ let fromWireType = (value) => value;
+ if (isUnsignedType) {
+ // uint64 get converted to int64 in ABI, fix them up like we do for 32-bit integers.
+ const bitSize = size * 8;
+ fromWireType = (value) => {
+ return BigInt.asUintN(bitSize, value);
+ }
+ maxRange = fromWireType(maxRange);
+ }
+
+ registerType(primitiveType, {
+ name,
+ fromWireType: fromWireType,
+ toWireType: (destructors, value) => {
+ if (typeof value == "number") {
+ value = BigInt(value);
+ }
+ else if (typeof value != "bigint") {
+ throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${this.name}`);
+ }
+ assertIntegerRange(name, value, minRange, maxRange);
+ return value;
+ },
+ readValueFromPointer: integerReadValueFromPointer(name, size, !isUnsignedType),
+ destructorFunction: null, // This type does not need a destructor
+ });
+ };
+
+
+ /** @suppress {globalThis} */
+ var __embind_register_bool = (rawType, name, trueValue, falseValue) => {
+ name = AsciiToString(name);
+ registerType(rawType, {
+ name,
+ fromWireType: function(wt) {
+ // ambiguous emscripten ABI: sometimes return values are
+ // true or false, and sometimes integers (0 or 1)
+ return !!wt;
+ },
+ toWireType: function(destructors, o) {
+ return o ? trueValue : falseValue;
+ },
+ readValueFromPointer: function(pointer) {
+ return this.fromWireType(HEAPU8[pointer]);
+ },
+ destructorFunction: null, // This type does not need a destructor
+ });
+ };
+
+
+
+ var shallowCopyInternalPointer = (o) => {
+ return {
+ count: o.count,
+ deleteScheduled: o.deleteScheduled,
+ preservePointerOnDelete: o.preservePointerOnDelete,
+ ptr: o.ptr,
+ ptrType: o.ptrType,
+ smartPtr: o.smartPtr,
+ smartPtrType: o.smartPtrType,
+ };
+ };
+
+ var throwInstanceAlreadyDeleted = (obj) => {
+ function getInstanceTypeName(handle) {
+ return handle.$$.ptrType.registeredClass.name;
+ }
+ throwBindingError(getInstanceTypeName(obj) + ' instance already deleted');
+ };
+
+
+
+
+
+ var deletionQueue = [];
+ var flushPendingDeletes = () => {
+ while (deletionQueue.length) {
+ var obj = deletionQueue.pop();
+ obj.$$.deleteScheduled = false;
+ obj['delete']();
+ }
+ };
+
+ var delayFunction;
+ var init_ClassHandle = () => {
+ let proto = ClassHandle.prototype;
+
+ Object.assign(proto, {
+ "isAliasOf"(other) {
+ if (!(this instanceof ClassHandle)) {
+ return false;
+ }
+ if (!(other instanceof ClassHandle)) {
+ return false;
+ }
+
+ var leftClass = this.$$.ptrType.registeredClass;
+ var left = this.$$.ptr;
+ other.$$ = /** @type {Object} */ (other.$$);
+ var rightClass = other.$$.ptrType.registeredClass;
+ var right = other.$$.ptr;
+
+ while (leftClass.baseClass) {
+ left = leftClass.upcast(left);
+ leftClass = leftClass.baseClass;
+ }
+
+ while (rightClass.baseClass) {
+ right = rightClass.upcast(right);
+ rightClass = rightClass.baseClass;
+ }
+
+ return leftClass === rightClass && left === right;
+ },
+
+ "clone"() {
+ if (!this.$$.ptr) {
+ throwInstanceAlreadyDeleted(this);
+ }
+
+ if (this.$$.preservePointerOnDelete) {
+ this.$$.count.value += 1;
+ return this;
+ } else {
+ var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), {
+ $$: {
+ value: shallowCopyInternalPointer(this.$$),
+ }
+ }));
+
+ clone.$$.count.value += 1;
+ clone.$$.deleteScheduled = false;
+ return clone;
+ }
+ },
+
+ "delete"() {
+ if (!this.$$.ptr) {
+ throwInstanceAlreadyDeleted(this);
+ }
+
+ if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {
+ throwBindingError('Object already scheduled for deletion');
+ }
+
+ detachFinalizer(this);
+ releaseClassHandle(this.$$);
+
+ if (!this.$$.preservePointerOnDelete) {
+ this.$$.smartPtr = undefined;
+ this.$$.ptr = undefined;
+ }
+ },
+
+ "isDeleted"() {
+ return !this.$$.ptr;
+ },
+
+ "deleteLater"() {
+ if (!this.$$.ptr) {
+ throwInstanceAlreadyDeleted(this);
+ }
+ if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {
+ throwBindingError('Object already scheduled for deletion');
+ }
+ deletionQueue.push(this);
+ if (deletionQueue.length === 1 && delayFunction) {
+ delayFunction(flushPendingDeletes);
+ }
+ this.$$.deleteScheduled = true;
+ return this;
+ },
+ });
+
+ // Support `using ...` from https://github.com/tc39/proposal-explicit-resource-management.
+ const symbolDispose = Symbol.dispose;
+ if (symbolDispose) {
+ proto[symbolDispose] = proto['delete'];
+ }
+ };
+ /** @constructor */
+ function ClassHandle() {
+ }
+
+
+
+ var ensureOverloadTable = (proto, methodName, humanName) => {
+ if (undefined === proto[methodName].overloadTable) {
+ var prevFunc = proto[methodName];
+ // Inject an overload resolver function that routes to the appropriate overload based on the number of arguments.
+ proto[methodName] = function(...args) {
+ // TODO This check can be removed in -O3 level "unsafe" optimizations.
+ if (!proto[methodName].overloadTable.hasOwnProperty(args.length)) {
+ throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`);
+ }
+ return proto[methodName].overloadTable[args.length].apply(this, args);
+ };
+ // Move the previous function into the overload table.
+ proto[methodName].overloadTable = [];
+ proto[methodName].overloadTable[prevFunc.argCount] = prevFunc;
+ }
+ };
+
+ /** @param {number=} numArguments */
+ var exposePublicSymbol = (name, value, numArguments) => {
+ if (Module.hasOwnProperty(name)) {
+ if (undefined === numArguments || (undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments])) {
+ throwBindingError(`Cannot register public name '${name}' twice`);
+ }
+
+ // We are exposing a function with the same name as an existing function. Create an overload table and a function selector
+ // that routes between the two.
+ ensureOverloadTable(Module, name, name);
+ if (Module[name].overloadTable.hasOwnProperty(numArguments)) {
+ throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`);
+ }
+ // Add the new function into the overload table.
+ Module[name].overloadTable[numArguments] = value;
+ } else {
+ Module[name] = value;
+ Module[name].argCount = numArguments;
+ }
+ };
+
+ var char_0 = 48;
+
+ var char_9 = 57;
+ var makeLegalFunctionName = (name) => {
+ assert(typeof name === 'string');
+ name = name.replace(/[^a-zA-Z0-9_]/g, '$');
+ var f = name.charCodeAt(0);
+ if (f >= char_0 && f <= char_9) {
+ return `_${name}`;
+ }
+ return name;
+ };
+
+
+ /** @constructor */
+ function RegisteredClass(name,
+ constructor,
+ instancePrototype,
+ rawDestructor,
+ baseClass,
+ getActualType,
+ upcast,
+ downcast) {
+ this.name = name;
+ this.constructor = constructor;
+ this.instancePrototype = instancePrototype;
+ this.rawDestructor = rawDestructor;
+ this.baseClass = baseClass;
+ this.getActualType = getActualType;
+ this.upcast = upcast;
+ this.downcast = downcast;
+ this.pureVirtualFunctions = [];
+ }
+
+
+ var upcastPointer = (ptr, ptrClass, desiredClass) => {
+ while (ptrClass !== desiredClass) {
+ if (!ptrClass.upcast) {
+ throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`);
+ }
+ ptr = ptrClass.upcast(ptr);
+ ptrClass = ptrClass.baseClass;
+ }
+ return ptr;
+ };
+
+ /** @suppress {globalThis} */
+ function constNoSmartPtrRawPointerToWireType(destructors, handle) {
+ if (handle === null) {
+ if (this.isReference) {
+ throwBindingError(`null is not a valid ${this.name}`);
+ }
+ return 0;
+ }
+
+ if (!handle.$$) {
+ throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
+ }
+ if (!handle.$$.ptr) {
+ throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
+ }
+ var handleClass = handle.$$.ptrType.registeredClass;
+ var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
+ return ptr;
+ }
+
+
+ /** @suppress {globalThis} */
+ function genericPointerToWireType(destructors, handle) {
+ var ptr;
+ if (handle === null) {
+ if (this.isReference) {
+ throwBindingError(`null is not a valid ${this.name}`);
+ }
+
+ if (this.isSmartPointer) {
+ ptr = this.rawConstructor();
+ if (destructors !== null) {
+ destructors.push(this.rawDestructor, ptr);
+ }
+ return ptr;
+ } else {
+ return 0;
+ }
+ }
+
+ if (!handle || !handle.$$) {
+ throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
+ }
+ if (!handle.$$.ptr) {
+ throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
+ }
+ if (!this.isConst && handle.$$.ptrType.isConst) {
+ throwBindingError(`Cannot convert argument of type ${(handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name)} to parameter type ${this.name}`);
+ }
+ var handleClass = handle.$$.ptrType.registeredClass;
+ ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
+
+ if (this.isSmartPointer) {
+ // TODO: this is not strictly true
+ // We could support BY_EMVAL conversions from raw pointers to smart pointers
+ // because the smart pointer can hold a reference to the handle
+ if (undefined === handle.$$.smartPtr) {
+ throwBindingError('Passing raw pointer to smart pointer is illegal');
+ }
+
+ switch (this.sharingPolicy) {
+ case 0: // NONE
+ // no upcasting
+ if (handle.$$.smartPtrType === this) {
+ ptr = handle.$$.smartPtr;
+ } else {
+ throwBindingError(`Cannot convert argument of type ${(handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name)} to parameter type ${this.name}`);
+ }
+ break;
+
+ case 1: // INTRUSIVE
+ ptr = handle.$$.smartPtr;
+ break;
+
+ case 2: // BY_EMVAL
+ if (handle.$$.smartPtrType === this) {
+ ptr = handle.$$.smartPtr;
+ } else {
+ var clonedHandle = handle['clone']();
+ ptr = this.rawShare(
+ ptr,
+ Emval.toHandle(() => clonedHandle['delete']())
+ );
+ if (destructors !== null) {
+ destructors.push(this.rawDestructor, ptr);
+ }
+ }
+ break;
+
+ default:
+ throwBindingError('Unsupporting sharing policy');
+ }
+ }
+ return ptr;
+ }
+
+
+
+ /** @suppress {globalThis} */
+ function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {
+ if (handle === null) {
+ if (this.isReference) {
+ throwBindingError(`null is not a valid ${this.name}`);
+ }
+ return 0;
+ }
+
+ if (!handle.$$) {
+ throwBindingError(`Cannot pass "${embindRepr(handle)}" as a ${this.name}`);
+ }
+ if (!handle.$$.ptr) {
+ throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`);
+ }
+ if (handle.$$.ptrType.isConst) {
+ throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`);
+ }
+ var handleClass = handle.$$.ptrType.registeredClass;
+ var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);
+ return ptr;
+ }
+
+
+
+ var init_RegisteredPointer = () => {
+ Object.assign(RegisteredPointer.prototype, {
+ getPointee(ptr) {
+ if (this.rawGetPointee) {
+ ptr = this.rawGetPointee(ptr);
+ }
+ return ptr;
+ },
+ destructor(ptr) {
+ this.rawDestructor?.(ptr);
+ },
+ readValueFromPointer: readPointer,
+ fromWireType: RegisteredPointer_fromWireType,
+ });
+ };
+ /** @constructor
+ @param {*=} pointeeType,
+ @param {*=} sharingPolicy,
+ @param {*=} rawGetPointee,
+ @param {*=} rawConstructor,
+ @param {*=} rawShare,
+ @param {*=} rawDestructor,
+ */
+ function RegisteredPointer(
+ name,
+ registeredClass,
+ isReference,
+ isConst,
+
+ // smart pointer properties
+ isSmartPointer,
+ pointeeType,
+ sharingPolicy,
+ rawGetPointee,
+ rawConstructor,
+ rawShare,
+ rawDestructor
+ ) {
+ this.name = name;
+ this.registeredClass = registeredClass;
+ this.isReference = isReference;
+ this.isConst = isConst;
+
+ // smart pointer properties
+ this.isSmartPointer = isSmartPointer;
+ this.pointeeType = pointeeType;
+ this.sharingPolicy = sharingPolicy;
+ this.rawGetPointee = rawGetPointee;
+ this.rawConstructor = rawConstructor;
+ this.rawShare = rawShare;
+ this.rawDestructor = rawDestructor;
+
+ if (!isSmartPointer && registeredClass.baseClass === undefined) {
+ if (isConst) {
+ this.toWireType = constNoSmartPtrRawPointerToWireType;
+ this.destructorFunction = null;
+ } else {
+ this.toWireType = nonConstNoSmartPtrRawPointerToWireType;
+ this.destructorFunction = null;
+ }
+ } else {
+ this.toWireType = genericPointerToWireType;
+ // Here we must leave this.destructorFunction undefined, since whether genericPointerToWireType returns
+ // a pointer that needs to be freed up is runtime-dependent, and cannot be evaluated at registration time.
+ // TODO: Create an alternative mechanism that allows removing the use of var destructors = []; array in
+ // craftInvokerFunction altogether.
+ }
+ }
+
+ /** @param {number=} numArguments */
+ var replacePublicSymbol = (name, value, numArguments) => {
+ if (!Module.hasOwnProperty(name)) {
+ throwInternalError('Replacing nonexistent public symbol');
+ }
+ // If there's an overload table for this symbol, replace the symbol in the overload table instead.
+ if (undefined !== Module[name].overloadTable && undefined !== numArguments) {
+ Module[name].overloadTable[numArguments] = value;
+ } else {
+ Module[name] = value;
+ Module[name].argCount = numArguments;
+ }
+ };
+
+
+
+ var wasmTableMirror = [];
+
+
+ var getWasmTableEntry = (funcPtr) => {
+ var func = wasmTableMirror[funcPtr];
+ if (!func) {
+ /** @suppress {checkTypes} */
+ wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);
+ }
+ /** @suppress {checkTypes} */
+ assert(wasmTable.get(funcPtr) == func, 'JavaScript-side Wasm function table mirror is out of date!');
+ return func;
+ };
+ var embind__requireFunction = (signature, rawFunction, isAsync = false) => {
+ assert(!isAsync, 'Async bindings are only supported with JSPI.');
+
+ signature = AsciiToString(signature);
+
+ function makeDynCaller() {
+ var rtn = getWasmTableEntry(rawFunction);
+ return rtn;
+ }
+
+ var fp = makeDynCaller();
+ if (typeof fp != 'function') {
+ throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`);
+ }
+ return fp;
+ };
+
+
+
+ class UnboundTypeError extends Error {}
+
+ var throwUnboundTypeError = (message, types) => {
+ var unboundTypes = [];
+ var seen = {};
+ function visit(type) {
+ if (seen[type]) {
+ return;
+ }
+ if (registeredTypes[type]) {
+ return;
+ }
+ if (typeDependencies[type]) {
+ typeDependencies[type].forEach(visit);
+ return;
+ }
+ unboundTypes.push(type);
+ seen[type] = true;
+ }
+ types.forEach(visit);
+
+ throw new UnboundTypeError(`${message}: ` + unboundTypes.map(getTypeName).join([', ']));
+ };
+
+ var __embind_register_class = (rawType,
+ rawPointerType,
+ rawConstPointerType,
+ baseClassRawType,
+ getActualTypeSignature,
+ getActualType,
+ upcastSignature,
+ upcast,
+ downcastSignature,
+ downcast,
+ name,
+ destructorSignature,
+ rawDestructor) => {
+ name = AsciiToString(name);
+ getActualType = embind__requireFunction(getActualTypeSignature, getActualType);
+ upcast &&= embind__requireFunction(upcastSignature, upcast);
+ downcast &&= embind__requireFunction(downcastSignature, downcast);
+ rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);
+ var legalFunctionName = makeLegalFunctionName(name);
+
+ exposePublicSymbol(legalFunctionName, function() {
+ // this code cannot run if baseClassRawType is zero
+ throwUnboundTypeError(`Cannot construct ${name} due to unbound types`, [baseClassRawType]);
+ });
+
+ whenDependentTypesAreResolved(
+ [rawType, rawPointerType, rawConstPointerType],
+ baseClassRawType ? [baseClassRawType] : [],
+ (base) => {
+ base = base[0];
+
+ var baseClass;
+ var basePrototype;
+ if (baseClassRawType) {
+ baseClass = base.registeredClass;
+ basePrototype = baseClass.instancePrototype;
+ } else {
+ basePrototype = ClassHandle.prototype;
+ }
+
+ var constructor = createNamedFunction(name, function(...args) {
+ if (Object.getPrototypeOf(this) !== instancePrototype) {
+ throw new BindingError(`Use 'new' to construct ${name}`);
+ }
+ if (undefined === registeredClass.constructor_body) {
+ throw new BindingError(`${name} has no accessible constructor`);
+ }
+ var body = registeredClass.constructor_body[args.length];
+ if (undefined === body) {
+ throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`);
+ }
+ return body.apply(this, args);
+ });
+
+ var instancePrototype = Object.create(basePrototype, {
+ constructor: { value: constructor },
+ });
+
+ constructor.prototype = instancePrototype;
+
+ var registeredClass = new RegisteredClass(name,
+ constructor,
+ instancePrototype,
+ rawDestructor,
+ baseClass,
+ getActualType,
+ upcast,
+ downcast);
+
+ if (registeredClass.baseClass) {
+ // Keep track of class hierarchy. Used to allow sub-classes to inherit class functions.
+ registeredClass.baseClass.__derivedClasses ??= [];
+
+ registeredClass.baseClass.__derivedClasses.push(registeredClass);
+ }
+
+ var referenceConverter = new RegisteredPointer(name,
+ registeredClass,
+ true,
+ false,
+ false);
+
+ var pointerConverter = new RegisteredPointer(name + '*',
+ registeredClass,
+ false,
+ false,
+ false);
+
+ var constPointerConverter = new RegisteredPointer(name + ' const*',
+ registeredClass,
+ false,
+ true,
+ false);
+
+ registeredPointers[rawType] = {
+ pointerType: pointerConverter,
+ constPointerType: constPointerConverter
+ };
+
+ replacePublicSymbol(legalFunctionName, constructor);
+
+ return [referenceConverter, pointerConverter, constPointerConverter];
+ }
+ );
+ };
+
+
+
+
+ function usesDestructorStack(argTypes) {
+ // Skip return value at index 0 - it's not deleted here.
+ for (var i = 1; i < argTypes.length; ++i) {
+ // The type does not define a destructor function - must use dynamic stack
+ if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ function checkArgCount(numArgs, minArgs, maxArgs, humanName, throwBindingError) {
+ if (numArgs < minArgs || numArgs > maxArgs) {
+ var argCountMessage = minArgs == maxArgs ? minArgs : `${minArgs} to ${maxArgs}`;
+ throwBindingError(`function ${humanName} called with ${numArgs} arguments, expected ${argCountMessage}`);
+ }
+ }
+ function createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync) {
+ var needsDestructorStack = usesDestructorStack(argTypes);
+ var argCount = argTypes.length - 2;
+ var argsList = [];
+ var argsListWired = ['fn'];
+ if (isClassMethodFunc) {
+ argsListWired.push('thisWired');
+ }
+ for (var i = 0; i < argCount; ++i) {
+ argsList.push(`arg${i}`)
+ argsListWired.push(`arg${i}Wired`)
+ }
+ argsList = argsList.join(',')
+ argsListWired = argsListWired.join(',')
+
+ var invokerFnBody = `return function (${argsList}) {\n`;
+
+ invokerFnBody += "checkArgCount(arguments.length, minArgs, maxArgs, humanName, throwBindingError);\n";
+
+ if (needsDestructorStack) {
+ invokerFnBody += "var destructors = [];\n";
+ }
+
+ var dtorStack = needsDestructorStack ? "destructors" : "null";
+ var args1 = ["humanName", "throwBindingError", "invoker", "fn", "runDestructors", "fromRetWire", "toClassParamWire"];
+
+ if (isClassMethodFunc) {
+ invokerFnBody += `var thisWired = toClassParamWire(${dtorStack}, this);\n`;
+ }
+
+ for (var i = 0; i < argCount; ++i) {
+ var argName = `toArg${i}Wire`;
+ invokerFnBody += `var arg${i}Wired = ${argName}(${dtorStack}, arg${i});\n`;
+ args1.push(argName);
+ }
+
+ invokerFnBody += (returns || isAsync ? "var rv = ":"") + `invoker(${argsListWired});\n`;
+
+ var returnVal = returns ? "rv" : "";
+
+ if (needsDestructorStack) {
+ invokerFnBody += "runDestructors(destructors);\n";
+ } else {
+ for (var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method.
+ var paramName = (i === 1 ? "thisWired" : ("arg"+(i - 2)+"Wired"));
+ if (argTypes[i].destructorFunction !== null) {
+ invokerFnBody += `${paramName}_dtor(${paramName});\n`;
+ args1.push(`${paramName}_dtor`);
+ }
+ }
+ }
+
+ if (returns) {
+ invokerFnBody += "var ret = fromRetWire(rv);\n" +
+ "return ret;\n";
+ } else {
+ }
+
+ invokerFnBody += "}\n";
+
+ args1.push('checkArgCount', 'minArgs', 'maxArgs');
+ invokerFnBody = `if (arguments.length !== ${args1.length}){ throw new Error(humanName + "Expected ${args1.length} closure arguments " + arguments.length + " given."); }\n${invokerFnBody}`;
+ return new Function(args1, invokerFnBody);
+ }
+
+ function getRequiredArgCount(argTypes) {
+ var requiredArgCount = argTypes.length - 2;
+ for (var i = argTypes.length - 1; i >= 2; --i) {
+ if (!argTypes[i].optional) {
+ break;
+ }
+ requiredArgCount--;
+ }
+ return requiredArgCount;
+ }
+
+ function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc, /** boolean= */ isAsync) {
+ // humanName: a human-readable string name for the function to be generated.
+ // argTypes: An array that contains the embind type objects for all types in the function signature.
+ // argTypes[0] is the type object for the function return value.
+ // argTypes[1] is the type object for function this object/class type, or null if not crafting an invoker for a class method.
+ // argTypes[2...] are the actual function parameters.
+ // classType: The embind type object for the class to be bound, or null if this is not a method of a class.
+ // cppInvokerFunc: JS Function object to the C++-side function that interops into C++ code.
+ // cppTargetFunc: Function pointer (an integer to FUNCTION_TABLE) to the target C++ function the cppInvokerFunc will end up calling.
+ // isAsync: Optional. If true, returns an async function. Async bindings are only supported with JSPI.
+ var argCount = argTypes.length;
+
+ if (argCount < 2) {
+ throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!");
+ }
+
+ assert(!isAsync, 'Async bindings are only supported with JSPI.');
+ var isClassMethodFunc = (argTypes[1] !== null && classType !== null);
+
+ // Free functions with signature "void function()" do not need an invoker that marshalls between wire types.
+ // TODO: This omits argument count check - enable only at -O3 or similar.
+ // if (ENABLE_UNSAFE_OPTS && argCount == 2 && argTypes[0].name == "void" && !isClassMethodFunc) {
+ // return FUNCTION_TABLE[fn];
+ // }
+
+ // Determine if we need to use a dynamic stack to store the destructors for the function parameters.
+ // TODO: Remove this completely once all function invokers are being dynamically generated.
+ var needsDestructorStack = usesDestructorStack(argTypes);
+
+ var returns = !argTypes[0].isVoid;
+
+ var expectedArgCount = argCount - 2;
+ var minArgs = getRequiredArgCount(argTypes);
+ // Builld the arguments that will be passed into the closure around the invoker
+ // function.
+ var retType = argTypes[0];
+ var instType = argTypes[1];
+ var closureArgs = [humanName, throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, retType.fromWireType.bind(retType), instType?.toWireType.bind(instType)];
+ for (var i = 2; i < argCount; ++i) {
+ var argType = argTypes[i];
+ closureArgs.push(argType.toWireType.bind(argType));
+ }
+ if (!needsDestructorStack) {
+ // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method.
+ for (var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) {
+ if (argTypes[i].destructorFunction !== null) {
+ closureArgs.push(argTypes[i].destructorFunction);
+ }
+ }
+ }
+ closureArgs.push(checkArgCount, minArgs, expectedArgCount);
+
+ let invokerFactory = createJsInvoker(argTypes, isClassMethodFunc, returns, isAsync);
+ var invokerFn = invokerFactory(...closureArgs);
+ return createNamedFunction(humanName, invokerFn);
+ }
+
+
+ var heap32VectorToArray = (count, firstElement) => {
+ var array = [];
+ for (var i = 0; i < count; i++) {
+ // TODO(https://github.com/emscripten-core/emscripten/issues/17310):
+ // Find a way to hoist the `>> 2` or `>> 3` out of this loop.
+ array.push(HEAPU32[(((firstElement)+(i * 4))>>2)]);
+ }
+ return array;
+ };
+
+
+
+
+
+ var getFunctionName = (signature) => {
+ signature = signature.trim();
+ const argsIndex = signature.indexOf("(");
+ if (argsIndex === -1) return signature;
+ assert(signature.endsWith(")"), "Parentheses for argument names should match.");
+ return signature.slice(0, argsIndex);
+ };
+ var __embind_register_class_class_function = (rawClassType,
+ methodName,
+ argCount,
+ rawArgTypesAddr,
+ invokerSignature,
+ rawInvoker,
+ fn,
+ isAsync,
+ isNonnullReturn) => {
+ var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
+ methodName = AsciiToString(methodName);
+ methodName = getFunctionName(methodName);
+ rawInvoker = embind__requireFunction(invokerSignature, rawInvoker, isAsync);
+ whenDependentTypesAreResolved([], [rawClassType], (classType) => {
+ classType = classType[0];
+ var humanName = `${classType.name}.${methodName}`;
+
+ function unboundTypesHandler() {
+ throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`, rawArgTypes);
+ }
+
+ if (methodName.startsWith('@@')) {
+ methodName = Symbol[methodName.substring(2)];
+ }
+
+ var proto = classType.registeredClass.constructor;
+ if (undefined === proto[methodName]) {
+ // This is the first function to be registered with this name.
+ unboundTypesHandler.argCount = argCount-1;
+ proto[methodName] = unboundTypesHandler;
+ } else {
+ // There was an existing function with the same name registered. Set up
+ // a function overload routing table.
+ ensureOverloadTable(proto, methodName, humanName);
+ proto[methodName].overloadTable[argCount-1] = unboundTypesHandler;
+ }
+
+ whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
+ // Replace the initial unbound-types-handler stub with the proper
+ // function. If multiple overloads are registered, the function handlers
+ // go into an overload table.
+ var invokerArgsArray = [argTypes[0] /* return value */, null /* no class 'this'*/].concat(argTypes.slice(1) /* actual params */);
+ var func = craftInvokerFunction(humanName, invokerArgsArray, null /* no class 'this'*/, rawInvoker, fn, isAsync);
+ if (undefined === proto[methodName].overloadTable) {
+ func.argCount = argCount-1;
+ proto[methodName] = func;
+ } else {
+ proto[methodName].overloadTable[argCount-1] = func;
+ }
+
+ if (classType.registeredClass.__derivedClasses) {
+ for (const derivedClass of classType.registeredClass.__derivedClasses) {
+ if (!derivedClass.constructor.hasOwnProperty(methodName)) {
+ // TODO: Add support for overloads
+ derivedClass.constructor[methodName] = func;
+ }
+ }
+ }
+
+ return [];
+ });
+ return [];
+ });
+ };
+
+
+
+
+ var __embind_register_class_constructor = (
+ rawClassType,
+ argCount,
+ rawArgTypesAddr,
+ invokerSignature,
+ invoker,
+ rawConstructor
+ ) => {
+ assert(argCount > 0);
+ var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
+ invoker = embind__requireFunction(invokerSignature, invoker);
+ var args = [rawConstructor];
+ var destructors = [];
+
+ whenDependentTypesAreResolved([], [rawClassType], (classType) => {
+ classType = classType[0];
+ var humanName = `constructor ${classType.name}`;
+
+ if (undefined === classType.registeredClass.constructor_body) {
+ classType.registeredClass.constructor_body = [];
+ }
+ if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) {
+ throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);
+ }
+ classType.registeredClass.constructor_body[argCount - 1] = () => {
+ throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`, rawArgTypes);
+ };
+
+ whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
+ // Insert empty slot for context type (argTypes[1]).
+ argTypes.splice(1, 0, null);
+ classType.registeredClass.constructor_body[argCount - 1] = craftInvokerFunction(humanName, argTypes, null, invoker, rawConstructor);
+ return [];
+ });
+ return [];
+ });
+ };
+
+
+
+
+
+
+
+ var __embind_register_class_function = (rawClassType,
+ methodName,
+ argCount,
+ rawArgTypesAddr, // [ReturnType, ThisType, Args...]
+ invokerSignature,
+ rawInvoker,
+ context,
+ isPureVirtual,
+ isAsync,
+ isNonnullReturn) => {
+ var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);
+ methodName = AsciiToString(methodName);
+ methodName = getFunctionName(methodName);
+ rawInvoker = embind__requireFunction(invokerSignature, rawInvoker, isAsync);
+
+ whenDependentTypesAreResolved([], [rawClassType], (classType) => {
+ classType = classType[0];
+ var humanName = `${classType.name}.${methodName}`;
+
+ if (methodName.startsWith("@@")) {
+ methodName = Symbol[methodName.substring(2)];
+ }
+
+ if (isPureVirtual) {
+ classType.registeredClass.pureVirtualFunctions.push(methodName);
+ }
+
+ function unboundTypesHandler() {
+ throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`, rawArgTypes);
+ }
+
+ var proto = classType.registeredClass.instancePrototype;
+ var method = proto[methodName];
+ if (undefined === method || (undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2)) {
+ // This is the first overload to be registered, OR we are replacing a
+ // function in the base class with a function in the derived class.
+ unboundTypesHandler.argCount = argCount - 2;
+ unboundTypesHandler.className = classType.name;
+ proto[methodName] = unboundTypesHandler;
+ } else {
+ // There was an existing function with the same name registered. Set up
+ // a function overload routing table.
+ ensureOverloadTable(proto, methodName, humanName);
+ proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler;
+ }
+
+ whenDependentTypesAreResolved([], rawArgTypes, (argTypes) => {
+ var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context, isAsync);
+
+ // Replace the initial unbound-handler-stub function with the
+ // appropriate member function, now that all types are resolved. If
+ // multiple overloads are registered for this function, the function
+ // goes into an overload table.
+ if (undefined === proto[methodName].overloadTable) {
+ // Set argCount in case an overload is registered later
+ memberFunction.argCount = argCount - 2;
+ proto[methodName] = memberFunction;
+ } else {
+ proto[methodName].overloadTable[argCount - 2] = memberFunction;
+ }
+
+ return [];
+ });
+ return [];
+ });
+ };
+
+
+
+ var __emval_decref = (handle) => {
+ if (handle > 9 && 0 === --emval_handles[handle + 1]) {
+ assert(emval_handles[handle] !== undefined, `Decref for unallocated handle.`);
+ emval_handles[handle] = undefined;
+ emval_freelist.push(handle);
+ }
+ };
+
+
+ var EmValType = {
+ name: 'emscripten::val',
+ fromWireType: (handle) => {
+ var rv = Emval.toValue(handle);
+ __emval_decref(handle);
+ return rv;
+ },
+ toWireType: (destructors, value) => Emval.toHandle(value),
+ readValueFromPointer: readPointer,
+ destructorFunction: null, // This type does not need a destructor
+
+ // TODO: do we need a deleteObject here? write a test where
+ // emval is passed into JS via an interface
+ };
+ var __embind_register_emval = (rawType) => registerType(rawType, EmValType);
+
+ var floatReadValueFromPointer = (name, width) => {
+ switch (width) {
+ case 4: return function(pointer) {
+ return this.fromWireType(HEAPF32[((pointer)>>2)]);
+ };
+ case 8: return function(pointer) {
+ return this.fromWireType(HEAPF64[((pointer)>>3)]);
+ };
+ default:
+ throw new TypeError(`invalid float width (${width}): ${name}`);
+ }
+ };
+
+
+
+ var __embind_register_float = (rawType, name, size) => {
+ name = AsciiToString(name);
+ registerType(rawType, {
+ name,
+ fromWireType: (value) => value,
+ toWireType: (destructors, value) => {
+ if (typeof value != "number" && typeof value != "boolean") {
+ throw new TypeError(`Cannot convert ${embindRepr(value)} to ${this.name}`);
+ }
+ // The VM will perform JS to Wasm value conversion, according to the spec:
+ // https://www.w3.org/TR/wasm-js-api-1/#towebassemblyvalue
+ return value;
+ },
+ readValueFromPointer: floatReadValueFromPointer(name, size),
+ destructorFunction: null, // This type does not need a destructor
+ });
+ };
+
+
+
+
+
+ /** @suppress {globalThis} */
+ var __embind_register_integer = (primitiveType, name, size, minRange, maxRange) => {
+ name = AsciiToString(name);
+
+ const isUnsignedType = minRange === 0;
+
+ let fromWireType = (value) => value;
+ if (isUnsignedType) {
+ var bitshift = 32 - 8*size;
+ fromWireType = (value) => (value << bitshift) >>> bitshift;
+ maxRange = fromWireType(maxRange);
+ }
+
+ registerType(primitiveType, {
+ name,
+ fromWireType: fromWireType,
+ toWireType: (destructors, value) => {
+ if (typeof value != "number" && typeof value != "boolean") {
+ throw new TypeError(`Cannot convert "${embindRepr(value)}" to ${name}`);
+ }
+ assertIntegerRange(name, value, minRange, maxRange);
+ // The VM will perform JS to Wasm value conversion, according to the spec:
+ // https://www.w3.org/TR/wasm-js-api-1/#towebassemblyvalue
+ return value;
+ },
+ readValueFromPointer: integerReadValueFromPointer(name, size, minRange !== 0),
+ destructorFunction: null, // This type does not need a destructor
+ });
+ };
+
+
+ var __embind_register_memory_view = (rawType, dataTypeIndex, name) => {
+ var typeMapping = [
+ Int8Array,
+ Uint8Array,
+ Int16Array,
+ Uint16Array,
+ Int32Array,
+ Uint32Array,
+ Float32Array,
+ Float64Array,
+ BigInt64Array,
+ BigUint64Array,
+ ];
+
+ var TA = typeMapping[dataTypeIndex];
+
+ function decodeMemoryView(handle) {
+ var size = HEAPU32[((handle)>>2)];
+ var data = HEAPU32[(((handle)+(4))>>2)];
+ return new TA(HEAP8.buffer, data, size);
+ }
+
+ name = AsciiToString(name);
+ registerType(rawType, {
+ name,
+ fromWireType: decodeMemoryView,
+ readValueFromPointer: decodeMemoryView,
+ }, {
+ ignoreDuplicateRegistrations: true,
+ });
+ };
+
+
+
+
+
+ var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {
+ assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`);
+ // Parameter maxBytesToWrite is not optional. Negative values, 0, null,
+ // undefined and false each don't write out any bytes.
+ if (!(maxBytesToWrite > 0))
+ return 0;
+
+ var startIdx = outIdx;
+ var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.
+ for (var i = 0; i < str.length; ++i) {
+ // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description
+ // and https://www.ietf.org/rfc/rfc2279.txt
+ // and https://tools.ietf.org/html/rfc3629
+ var u = str.codePointAt(i);
+ if (u <= 0x7F) {
+ if (outIdx >= endIdx) break;
+ heap[outIdx++] = u;
+ } else if (u <= 0x7FF) {
+ if (outIdx + 1 >= endIdx) break;
+ heap[outIdx++] = 0xC0 | (u >> 6);
+ heap[outIdx++] = 0x80 | (u & 63);
+ } else if (u <= 0xFFFF) {
+ if (outIdx + 2 >= endIdx) break;
+ heap[outIdx++] = 0xE0 | (u >> 12);
+ heap[outIdx++] = 0x80 | ((u >> 6) & 63);
+ heap[outIdx++] = 0x80 | (u & 63);
+ } else {
+ if (outIdx + 3 >= endIdx) break;
+ if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).');
+ heap[outIdx++] = 0xF0 | (u >> 18);
+ heap[outIdx++] = 0x80 | ((u >> 12) & 63);
+ heap[outIdx++] = 0x80 | ((u >> 6) & 63);
+ heap[outIdx++] = 0x80 | (u & 63);
+ // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16.
+ // We need to manually skip over the second code unit for correct iteration.
+ i++;
+ }
+ }
+ // Null-terminate the pointer to the buffer.
+ heap[outIdx] = 0;
+ return outIdx - startIdx;
+ };
+ var stringToUTF8 = (str, outPtr, maxBytesToWrite) => {
+ assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
+ return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
+ };
+
+ var lengthBytesUTF8 = (str) => {
+ var len = 0;
+ for (var i = 0; i < str.length; ++i) {
+ // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
+ // unit, not a Unicode code point of the character! So decode
+ // UTF16->UTF32->UTF8.
+ // See http://unicode.org/faq/utf_bom.html#utf16-3
+ var c = str.charCodeAt(i); // possibly a lead surrogate
+ if (c <= 0x7F) {
+ len++;
+ } else if (c <= 0x7FF) {
+ len += 2;
+ } else if (c >= 0xD800 && c <= 0xDFFF) {
+ len += 4; ++i;
+ } else {
+ len += 3;
+ }
+ }
+ return len;
+ };
+
+
+
+ var UTF8Decoder = globalThis.TextDecoder && new TextDecoder();
+
+ var findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {
+ var maxIdx = idx + maxBytesToRead;
+ if (ignoreNul) return maxIdx;
+ // TextDecoder needs to know the byte length in advance, it doesn't stop on
+ // null terminator by itself.
+ // As a tiny code save trick, compare idx against maxIdx using a negation,
+ // so that maxBytesToRead=undefined/NaN means Infinity.
+ while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;
+ return idx;
+ };
+
+
+ /**
+ * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given
+ * array that contains uint8 values, returns a copy of that string as a
+ * Javascript String object.
+ * heapOrArray is either a regular array, or a JavaScript typed array view.
+ * @param {number=} idx
+ * @param {number=} maxBytesToRead
+ * @param {boolean=} ignoreNul - If true, the function will not stop on a NUL character.
+ * @return {string}
+ */
+ var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {
+
+ var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);
+
+ // When using conditional TextDecoder, skip it for short strings as the overhead of the native call is not worth it.
+ if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
+ return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
+ }
+ var str = '';
+ while (idx < endPtr) {
+ // For UTF8 byte structure, see:
+ // http://en.wikipedia.org/wiki/UTF-8#Description
+ // https://www.ietf.org/rfc/rfc2279.txt
+ // https://tools.ietf.org/html/rfc3629
+ var u0 = heapOrArray[idx++];
+ if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
+ var u1 = heapOrArray[idx++] & 63;
+ if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
+ var u2 = heapOrArray[idx++] & 63;
+ if ((u0 & 0xF0) == 0xE0) {
+ u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
+ } else {
+ if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!');
+ u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);
+ }
+
+ if (u0 < 0x10000) {
+ str += String.fromCharCode(u0);
+ } else {
+ var ch = u0 - 0x10000;
+ str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
+ }
+ }
+ return str;
+ };
+
+ /**
+ * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the
+ * emscripten HEAP, returns a copy of that string as a Javascript String object.
+ *
+ * @param {number} ptr
+ * @param {number=} maxBytesToRead - An optional length that specifies the
+ * maximum number of bytes to read. You can omit this parameter to scan the
+ * string until the first 0 byte. If maxBytesToRead is passed, and the string
+ * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the
+ * string will cut short at that byte index.
+ * @param {boolean=} ignoreNul - If true, the function will not stop on a NUL character.
+ * @return {string}
+ */
+ var UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {
+ assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`);
+ return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : '';
+ };
+ var __embind_register_std_string = (rawType, name) => {
+ name = AsciiToString(name);
+ var stdStringIsUTF8 = true;
+
+ registerType(rawType, {
+ name,
+ // For some method names we use string keys here since they are part of
+ // the public/external API and/or used by the runtime-generated code.
+ fromWireType(value) {
+ var length = HEAPU32[((value)>>2)];
+ var payload = value + 4;
+
+ var str;
+ if (stdStringIsUTF8) {
+ str = UTF8ToString(payload, length, true);
+ } else {
+ str = '';
+ for (var i = 0; i < length; ++i) {
+ str += String.fromCharCode(HEAPU8[payload + i]);
+ }
+ }
+
+ _free(value);
+
+ return str;
+ },
+ toWireType(destructors, value) {
+ if (value instanceof ArrayBuffer) {
+ value = new Uint8Array(value);
+ }
+
+ var length;
+ var valueIsOfTypeString = (typeof value == 'string');
+
+ // We accept `string` or array views with single byte elements
+ if (!(valueIsOfTypeString || (ArrayBuffer.isView(value) && value.BYTES_PER_ELEMENT == 1))) {
+ throwBindingError('Cannot pass non-string to std::string');
+ }
+ if (stdStringIsUTF8 && valueIsOfTypeString) {
+ length = lengthBytesUTF8(value);
+ } else {
+ length = value.length;
+ }
+
+ // assumes POINTER_SIZE alignment
+ var base = _malloc(4 + length + 1);
+ var ptr = base + 4;
+ HEAPU32[((base)>>2)] = length;checkInt32(length);
+ if (valueIsOfTypeString) {
+ if (stdStringIsUTF8) {
+ stringToUTF8(value, ptr, length + 1);
+ } else {
+ for (var i = 0; i < length; ++i) {
+ var charCode = value.charCodeAt(i);
+ if (charCode > 255) {
+ _free(base);
+ throwBindingError('String has UTF-16 code units that do not fit in 8 bits');
+ }
+ HEAPU8[ptr + i] = charCode;
+ }
+ }
+ } else {
+ HEAPU8.set(value, ptr);
+ }
+
+ if (destructors !== null) {
+ destructors.push(_free, base);
+ }
+ return base;
+ },
+ readValueFromPointer: readPointer,
+ destructorFunction(ptr) {
+ _free(ptr);
+ },
+ });
+ };
+
+
+
+
+ var UTF16Decoder = globalThis.TextDecoder ? new TextDecoder('utf-16le') : undefined;;
+
+ var UTF16ToString = (ptr, maxBytesToRead, ignoreNul) => {
+ assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');
+ var idx = ((ptr)>>1);
+ var endIdx = findStringEnd(HEAPU16, idx, maxBytesToRead / 2, ignoreNul);
+
+ // When using conditional TextDecoder, skip it for short strings as the overhead of the native call is not worth it.
+ if (endIdx - idx > 16 && UTF16Decoder)
+ return UTF16Decoder.decode(HEAPU16.subarray(idx, endIdx));
+
+ // Fallback: decode without UTF16Decoder
+ var str = '';
+
+ // If maxBytesToRead is not passed explicitly, it will be undefined, and the
+ // for-loop's condition will always evaluate to true. The loop is then
+ // terminated on the first null char.
+ for (var i = idx; i < endIdx; ++i) {
+ var codeUnit = HEAPU16[i];
+ // fromCharCode constructs a character from a UTF-16 code unit, so we can
+ // pass the UTF16 string right through.
+ str += String.fromCharCode(codeUnit);
+ }
+
+ return str;
+ };
+
+ var stringToUTF16 = (str, outPtr, maxBytesToWrite) => {
+ assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');
+ assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
+ // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
+ maxBytesToWrite ??= 0x7FFFFFFF;
+ if (maxBytesToWrite < 2) return 0;
+ maxBytesToWrite -= 2; // Null terminator.
+ var startPtr = outPtr;
+ var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;
+ for (var i = 0; i < numCharsToWrite; ++i) {
+ // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
+ var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
+ HEAP16[((outPtr)>>1)] = codeUnit;checkInt16(codeUnit);
+ outPtr += 2;
+ }
+ // Null-terminate the pointer to the HEAP.
+ HEAP16[((outPtr)>>1)] = 0;checkInt16(0);
+ return outPtr - startPtr;
+ };
+
+ var lengthBytesUTF16 = (str) => str.length*2;
+
+ var UTF32ToString = (ptr, maxBytesToRead, ignoreNul) => {
+ assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!');
+ var str = '';
+ var startIdx = ((ptr)>>2);
+ // If maxBytesToRead is not passed explicitly, it will be undefined, and this
+ // will always evaluate to true. This saves on code size.
+ for (var i = 0; !(i >= maxBytesToRead / 4); i++) {
+ var utf32 = HEAPU32[startIdx + i];
+ if (!utf32 && !ignoreNul) break;
+ str += String.fromCodePoint(utf32);
+ }
+ return str;
+ };
+
+ var stringToUTF32 = (str, outPtr, maxBytesToWrite) => {
+ assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!');
+ assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
+ // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
+ maxBytesToWrite ??= 0x7FFFFFFF;
+ if (maxBytesToWrite < 4) return 0;
+ var startPtr = outPtr;
+ var endPtr = startPtr + maxBytesToWrite - 4;
+ for (var i = 0; i < str.length; ++i) {
+ var codePoint = str.codePointAt(i);
+ // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16.
+ // We need to manually skip over the second code unit for correct iteration.
+ if (codePoint > 0xFFFF) {
+ i++;
+ }
+ HEAP32[((outPtr)>>2)] = codePoint;checkInt32(codePoint);
+ outPtr += 4;
+ if (outPtr + 4 > endPtr) break;
+ }
+ // Null-terminate the pointer to the HEAP.
+ HEAP32[((outPtr)>>2)] = 0;checkInt32(0);
+ return outPtr - startPtr;
+ };
+
+ var lengthBytesUTF32 = (str) => {
+ var len = 0;
+ for (var i = 0; i < str.length; ++i) {
+ var codePoint = str.codePointAt(i);
+ // Gotcha: if codePoint is over 0xFFFF, it is represented as a surrogate pair in UTF-16.
+ // We need to manually skip over the second code unit for correct iteration.
+ if (codePoint > 0xFFFF) {
+ i++;
+ }
+ len += 4;
+ }
+
+ return len;
+ };
+ var __embind_register_std_wstring = (rawType, charSize, name) => {
+ name = AsciiToString(name);
+ var decodeString, encodeString, lengthBytesUTF;
+ if (charSize === 2) {
+ decodeString = UTF16ToString;
+ encodeString = stringToUTF16;
+ lengthBytesUTF = lengthBytesUTF16;
+ } else {
+ assert(charSize === 4, 'only 2-byte and 4-byte strings are currently supported');
+ decodeString = UTF32ToString;
+ encodeString = stringToUTF32;
+ lengthBytesUTF = lengthBytesUTF32;
+ }
+ registerType(rawType, {
+ name,
+ fromWireType: (value) => {
+ // Code mostly taken from _embind_register_std_string fromWireType
+ var length = HEAPU32[((value)>>2)];
+ var str = decodeString(value + 4, length * charSize, true);
+
+ _free(value);
+
+ return str;
+ },
+ toWireType: (destructors, value) => {
+ if (!(typeof value == 'string')) {
+ throwBindingError(`Cannot pass non-string to C++ string type ${name}`);
+ }
+
+ // assumes POINTER_SIZE alignment
+ var length = lengthBytesUTF(value);
+ var ptr = _malloc(4 + length + charSize);
+ HEAPU32[((ptr)>>2)] = length / charSize;checkInt32(length / charSize);
+
+ encodeString(value, ptr + 4, length + charSize);
+
+ if (destructors !== null) {
+ destructors.push(_free, ptr);
+ }
+ return ptr;
+ },
+ readValueFromPointer: readPointer,
+ destructorFunction(ptr) {
+ _free(ptr);
+ }
+ });
+ };
+
+
+
+ var __embind_register_value_object = (
+ rawType,
+ name,
+ constructorSignature,
+ rawConstructor,
+ destructorSignature,
+ rawDestructor
+ ) => {
+ structRegistrations[rawType] = {
+ name: AsciiToString(name),
+ rawConstructor: embind__requireFunction(constructorSignature, rawConstructor),
+ rawDestructor: embind__requireFunction(destructorSignature, rawDestructor),
+ fields: [],
+ };
+ };
+
+
+
+ var __embind_register_value_object_field = (
+ structType,
+ fieldName,
+ getterReturnType,
+ getterSignature,
+ getter,
+ getterContext,
+ setterArgumentType,
+ setterSignature,
+ setter,
+ setterContext
+ ) => {
+ structRegistrations[structType].fields.push({
+ fieldName: AsciiToString(fieldName),
+ getterReturnType,
+ getter: embind__requireFunction(getterSignature, getter),
+ getterContext,
+ setterArgumentType,
+ setter: embind__requireFunction(setterSignature, setter),
+ setterContext,
+ });
+ };
+
+
+ var __embind_register_void = (rawType, name) => {
+ name = AsciiToString(name);
+ registerType(rawType, {
+ isVoid: true, // void return values can be optimized out sometimes
+ name,
+ fromWireType: () => undefined,
+ // TODO: assert if anything else is given?
+ toWireType: (destructors, o) => undefined,
+ });
+ };
+
+ var emval_methodCallers = [];
+ var emval_addMethodCaller = (caller) => {
+ var id = emval_methodCallers.length;
+ emval_methodCallers.push(caller);
+ return id;
+ };
+
+ var emval_lookupTypes = (argCount, argTypes) => {
+ var a = new Array(argCount);
+ for (var i = 0; i < argCount; ++i) {
+ a[i] = requireRegisteredType(HEAPU32[(((argTypes)+(i*4))>>2)],
+ `parameter ${i}`);
+ }
+ return a;
+ };
+
+
+ var emval_returnValue = (toReturnWire, destructorsRef, handle) => {
+ var destructors = [];
+ var result = toReturnWire(destructors, handle);
+ if (destructors.length) {
+ // void, primitives and any other types w/o destructors don't need to allocate a handle
+ HEAPU32[((destructorsRef)>>2)] = Emval.toHandle(destructors);
+ }
+ return result;
+ };
+
+
+ var emval_symbols = {
+ };
+
+ var getStringOrSymbol = (address) => {
+ var symbol = emval_symbols[address];
+ if (symbol === undefined) {
+ return AsciiToString(address);
+ }
+ return symbol;
+ };
+ var __emval_create_invoker = (argCount, argTypesPtr, kind) => {
+ var GenericWireTypeSize = 8;
+
+ var [retType, ...argTypes] = emval_lookupTypes(argCount, argTypesPtr);
+ var toReturnWire = retType.toWireType.bind(retType);
+ var argFromPtr = argTypes.map(type => type.readValueFromPointer.bind(type));
+ argCount--; // remove the extracted return type
+
+ var captures = {'toValue': Emval.toValue};
+ var args = argFromPtr.map((argFromPtr, i) => {
+ var captureName = `argFromPtr${i}`;
+ captures[captureName] = argFromPtr;
+ return `${captureName}(args${i ? '+' + i * GenericWireTypeSize : ''})`;
+ });
+ var functionBody;
+ switch (kind){
+ case 0:
+ functionBody = 'toValue(handle)';
+ break;
+ case 2:
+ functionBody = 'new (toValue(handle))';
+ break;
+ case 3:
+ functionBody = '';
+ break;
+ case 1:
+ captures['getStringOrSymbol'] = getStringOrSymbol;
+ functionBody = 'toValue(handle)[getStringOrSymbol(methodName)]';
+ break;
+ }
+ functionBody += `(${args})`;
+ if (!retType.isVoid) {
+ captures['toReturnWire'] = toReturnWire;
+ captures['emval_returnValue'] = emval_returnValue;
+ functionBody = `return emval_returnValue(toReturnWire, destructorsRef, ${functionBody})`;
+ }
+ functionBody = `return function (handle, methodName, destructorsRef, args) {
+ ${functionBody}
+ }`;
+
+ var invokerFunction = new Function(Object.keys(captures), functionBody)(...Object.values(captures));
+ var functionName = `methodCaller<(${argTypes.map(t => t.name)}) => ${retType.name}>`;
+ return emval_addMethodCaller(createNamedFunction(functionName, invokerFunction));
+ };
+
+
+
+
+ var __emval_invoke = (caller, handle, methodName, destructorsRef, args) => {
+ return emval_methodCallers[caller](handle, methodName, destructorsRef, args);
+ };
+
+
+
+ var __emval_run_destructors = (handle) => {
+ var destructors = Emval.toValue(handle);
+ runDestructors(destructors);
+ __emval_decref(handle);
+ };
+
+ var _emscripten_get_now = () => performance.now();
+
+ var getHeapMax = () =>
+ // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate
+ // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side
+ // for any code that deals with heap sizes, which would require special
+ // casing all heap size related code to treat 0 specially.
+ 2147483648;
+
+ var alignMemory = (size, alignment) => {
+ assert(alignment, "alignment argument is required");
+ return Math.ceil(size / alignment) * alignment;
+ };
+
+ var growMemory = (size) => {
+ var oldHeapSize = wasmMemory.buffer.byteLength;
+ var pages = ((size - oldHeapSize + 65535) / 65536) | 0;
+ try {
+ // round size grow request up to wasm page size (fixed 64KB per spec)
+ wasmMemory.grow(pages); // .grow() takes a delta compared to the previous size
+ updateMemoryViews();
+ return 1 /*success*/;
+ } catch(e) {
+ err(`growMemory: Attempted to grow heap from ${oldHeapSize} bytes to ${size} bytes, but got error: ${e}`);
+ }
+ // implicit 0 return to save code size (caller will cast "undefined" into 0
+ // anyhow)
+ };
+ var _emscripten_resize_heap = (requestedSize) => {
+ var oldSize = HEAPU8.length;
+ // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned.
+ requestedSize >>>= 0;
+ // With multithreaded builds, races can happen (another thread might increase the size
+ // in between), so return a failure, and let the caller retry.
+ assert(requestedSize > oldSize);
+
+ // Memory resize rules:
+ // 1. Always increase heap size to at least the requested size, rounded up
+ // to next page multiple.
+ // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap
+ // geometrically: increase the heap size according to
+ // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most
+ // overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).
+ // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap
+ // linearly: increase the heap size by at least
+ // MEMORY_GROWTH_LINEAR_STEP bytes.
+ // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by
+ // MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest
+ // 4. If we were unable to allocate as much memory, it may be due to
+ // over-eager decision to excessively reserve due to (3) above.
+ // Hence if an allocation fails, cut down on the amount of excess
+ // growth, in an attempt to succeed to perform a smaller allocation.
+
+ // A limit is set for how much we can grow. We should not exceed that
+ // (the wasm binary specifies it, so if we tried, we'd fail anyhow).
+ var maxHeapSize = getHeapMax();
+ if (requestedSize > maxHeapSize) {
+ err(`Cannot enlarge memory, requested ${requestedSize} bytes, but the limit is ${maxHeapSize} bytes!`);
+ return false;
+ }
+
+ // Loop through potential heap size increases. If we attempt a too eager
+ // reservation that fails, cut down on the attempted size and reserve a
+ // smaller bump instead. (max 3 times, chosen somewhat arbitrarily)
+ for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
+ var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth
+ // but limit overreserving (default to capping at +96MB overgrowth at most)
+ overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 );
+
+ var newSize = Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536));
+
+ var t0 = _emscripten_get_now();
+ var replacement = growMemory(newSize);
+ var t1 = _emscripten_get_now();
+ dbg(`Heap resize call from ${oldSize} to ${newSize} took ${(t1 - t0)} msecs. Success: ${!!replacement}`);
+ if (replacement) {
+
+ return true;
+ }
+ }
+ err(`Failed to grow the heap from ${oldSize} bytes to ${newSize} bytes, not enough memory!`);
+ return false;
+ };
+
+ var SYSCALLS = {
+ varargs:undefined,
+ getStr(ptr) {
+ var ret = UTF8ToString(ptr);
+ return ret;
+ },
+ };
+ var _fd_close = (fd) => {
+ abort('fd_close called without SYSCALLS_REQUIRE_FILESYSTEM');
+ };
+
+ var INT53_MAX = 9007199254740992;
+
+ var INT53_MIN = -9007199254740992;
+ var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num);
+ function _fd_seek(fd, offset, whence, newOffset) {
+ offset = bigintToI53Checked(offset);
+
+
+ return 70;
+ ;
+ }
+
+ var printCharBuffers = [null,[],[]];
+
+ var printChar = (stream, curr) => {
+ var buffer = printCharBuffers[stream];
+ assert(buffer);
+ if (curr === 0 || curr === 10) {
+ (stream === 1 ? out : err)(UTF8ArrayToString(buffer));
+ buffer.length = 0;
+ } else {
+ buffer.push(curr);
+ }
+ };
+
+ var flush_NO_FILESYSTEM = () => {
+ // flush anything remaining in the buffers during shutdown
+ _fflush(0);
+ if (printCharBuffers[1].length) printChar(1, 10);
+ if (printCharBuffers[2].length) printChar(2, 10);
+ };
+
+
+ var _fd_write = (fd, iov, iovcnt, pnum) => {
+ // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0
+ var num = 0;
+ for (var i = 0; i < iovcnt; i++) {
+ var ptr = HEAPU32[((iov)>>2)];
+ var len = HEAPU32[(((iov)+(4))>>2)];
+ iov += 8;
+ for (var j = 0; j < len; j++) {
+ printChar(fd, HEAPU8[ptr+j]);
+ }
+ num += len;
+ }
+ HEAPU32[((pnum)>>2)] = num;checkInt32(num);
+ return 0;
+ };
+
+assert(emval_handles.length === 5 * 2);
+init_ClassHandle();
+init_RegisteredPointer();
+// End JS library code
+
+// include: postlibrary.js
+// This file is included after the automatically-generated JS library code
+// but before the wasm module is created.
+
+{
+
+ // Begin ATMODULES hooks
+ if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];
+if (Module['print']) out = Module['print'];
+if (Module['printErr']) err = Module['printErr'];
+if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];
+
+Module['FS_createDataFile'] = FS.createDataFile;
+Module['FS_createPreloadedFile'] = FS.createPreloadedFile;
+
+ // End ATMODULES hooks
+
+ checkIncomingModuleAPI();
+
+ if (Module['arguments']) arguments_ = Module['arguments'];
+ if (Module['thisProgram']) thisProgram = Module['thisProgram'];
+
+ // Assertions on removed incoming Module JS APIs.
+ assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');
+ assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');
+ assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');
+ assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');
+ assert(typeof Module['read'] == 'undefined', 'Module.read option was removed');
+ assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)');
+ assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');
+ assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)');
+ assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');
+ assert(typeof Module['ENVIRONMENT'] == 'undefined', 'Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)');
+ assert(typeof Module['STACK_SIZE'] == 'undefined', 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time')
+ // If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY
+ assert(typeof Module['wasmMemory'] == 'undefined', 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally');
+ assert(typeof Module['INITIAL_MEMORY'] == 'undefined', 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically');
+
+ if (Module['preInit']) {
+ if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
+ while (Module['preInit'].length > 0) {
+ Module['preInit'].shift()();
+ }
+ }
+ consumedModuleProp('preInit');
+}
+
+// Begin runtime exports
+ var missingLibrarySymbols = [
+ 'writeI53ToI64',
+ 'writeI53ToI64Clamped',
+ 'writeI53ToI64Signaling',
+ 'writeI53ToU64Clamped',
+ 'writeI53ToU64Signaling',
+ 'readI53FromI64',
+ 'readI53FromU64',
+ 'convertI32PairToI53',
+ 'convertI32PairToI53Checked',
+ 'convertU32PairToI53',
+ 'stackAlloc',
+ 'getTempRet0',
+ 'zeroMemory',
+ 'exitJS',
+ 'withStackSave',
+ 'strError',
+ 'inetPton4',
+ 'inetNtop4',
+ 'inetPton6',
+ 'inetNtop6',
+ 'readSockaddr',
+ 'writeSockaddr',
+ 'readEmAsmArgs',
+ 'jstoi_q',
+ 'getExecutableName',
+ 'autoResumeAudioContext',
+ 'getDynCaller',
+ 'dynCall',
+ 'handleException',
+ 'keepRuntimeAlive',
+ 'runtimeKeepalivePush',
+ 'runtimeKeepalivePop',
+ 'callUserCallback',
+ 'maybeExit',
+ 'asyncLoad',
+ 'asmjsMangle',
+ 'mmapAlloc',
+ 'HandleAllocator',
+ 'getUniqueRunDependency',
+ 'addRunDependency',
+ 'removeRunDependency',
+ 'addOnInit',
+ 'addOnPostCtor',
+ 'addOnPreMain',
+ 'addOnExit',
+ 'STACK_SIZE',
+ 'STACK_ALIGN',
+ 'POINTER_SIZE',
+ 'ASSERTIONS',
+ 'ccall',
+ 'cwrap',
+ 'convertJsFunctionToWasm',
+ 'getEmptyTableSlot',
+ 'updateTableMap',
+ 'getFunctionAddress',
+ 'addFunction',
+ 'removeFunction',
+ 'intArrayFromString',
+ 'intArrayToString',
+ 'stringToAscii',
+ 'stringToNewUTF8',
+ 'stringToUTF8OnStack',
+ 'writeArrayToMemory',
+ 'registerKeyEventCallback',
+ 'maybeCStringToJsString',
+ 'findEventTarget',
+ 'getBoundingClientRect',
+ 'fillMouseEventData',
+ 'registerMouseEventCallback',
+ 'registerWheelEventCallback',
+ 'registerUiEventCallback',
+ 'registerFocusEventCallback',
+ 'fillDeviceOrientationEventData',
+ 'registerDeviceOrientationEventCallback',
+ 'fillDeviceMotionEventData',
+ 'registerDeviceMotionEventCallback',
+ 'screenOrientation',
+ 'fillOrientationChangeEventData',
+ 'registerOrientationChangeEventCallback',
+ 'fillFullscreenChangeEventData',
+ 'registerFullscreenChangeEventCallback',
+ 'JSEvents_requestFullscreen',
+ 'JSEvents_resizeCanvasForFullscreen',
+ 'registerRestoreOldStyle',
+ 'hideEverythingExceptGivenElement',
+ 'restoreHiddenElements',
+ 'setLetterbox',
+ 'softFullscreenResizeWebGLRenderTarget',
+ 'doRequestFullscreen',
+ 'fillPointerlockChangeEventData',
+ 'registerPointerlockChangeEventCallback',
+ 'registerPointerlockErrorEventCallback',
+ 'requestPointerLock',
+ 'fillVisibilityChangeEventData',
+ 'registerVisibilityChangeEventCallback',
+ 'registerTouchEventCallback',
+ 'fillGamepadEventData',
+ 'registerGamepadEventCallback',
+ 'registerBeforeUnloadEventCallback',
+ 'fillBatteryEventData',
+ 'registerBatteryEventCallback',
+ 'setCanvasElementSize',
+ 'getCanvasElementSize',
+ 'jsStackTrace',
+ 'getCallstack',
+ 'convertPCtoSourceLocation',
+ 'getEnvStrings',
+ 'checkWasiClock',
+ 'wasiRightsToMuslOFlags',
+ 'wasiOFlagsToMuslOFlags',
+ 'initRandomFill',
+ 'randomFill',
+ 'safeSetTimeout',
+ 'setImmediateWrapped',
+ 'safeRequestAnimationFrame',
+ 'clearImmediateWrapped',
+ 'registerPostMainLoop',
+ 'registerPreMainLoop',
+ 'getPromise',
+ 'makePromise',
+ 'idsToPromises',
+ 'makePromiseCallback',
+ 'Browser_asyncPrepareDataCounter',
+ 'isLeapYear',
+ 'ydayFromDate',
+ 'arraySum',
+ 'addDays',
+ 'getSocketFromFD',
+ 'getSocketAddress',
+ 'heapObjectForWebGLType',
+ 'toTypedArrayIndex',
+ 'webgl_enable_ANGLE_instanced_arrays',
+ 'webgl_enable_OES_vertex_array_object',
+ 'webgl_enable_WEBGL_draw_buffers',
+ 'webgl_enable_WEBGL_multi_draw',
+ 'webgl_enable_EXT_polygon_offset_clamp',
+ 'webgl_enable_EXT_clip_control',
+ 'webgl_enable_WEBGL_polygon_mode',
+ 'emscriptenWebGLGet',
+ 'computeUnpackAlignedImageSize',
+ 'colorChannelsInGlTextureFormat',
+ 'emscriptenWebGLGetTexPixelData',
+ 'emscriptenWebGLGetUniform',
+ 'webglGetUniformLocation',
+ 'webglPrepareUniformLocationsBeforeFirstUse',
+ 'webglGetLeftBracePos',
+ 'emscriptenWebGLGetVertexAttrib',
+ '__glGetActiveAttribOrUniform',
+ 'writeGLArray',
+ 'registerWebGlEventCallback',
+ 'runAndAbortIfError',
+ 'ALLOC_NORMAL',
+ 'ALLOC_STACK',
+ 'allocate',
+ 'writeStringToMemory',
+ 'writeAsciiToMemory',
+ 'allocateUTF8',
+ 'allocateUTF8OnStack',
+ 'demangle',
+ 'stackTrace',
+ 'getNativeTypeSize',
+ 'getFunctionArgsName',
+ 'createJsInvokerSignature',
+ 'getInheritedInstanceCount',
+ 'getLiveInheritedInstances',
+ 'enumReadValueFromPointer',
+ 'setDelayFunction',
+ 'validateThis',
+ 'count_emval_handles',
+];
+missingLibrarySymbols.forEach(missingLibrarySymbol)
+
+ var unexportedSymbols = [
+ 'run',
+ 'out',
+ 'err',
+ 'callMain',
+ 'abort',
+ 'wasmExports',
+ 'HEAPF32',
+ 'HEAPF64',
+ 'HEAP8',
+ 'HEAPU8',
+ 'HEAP16',
+ 'HEAPU16',
+ 'HEAP32',
+ 'HEAPU32',
+ 'HEAP64',
+ 'HEAPU64',
+ 'writeStackCookie',
+ 'checkStackCookie',
+ 'INT53_MAX',
+ 'INT53_MIN',
+ 'bigintToI53Checked',
+ 'stackSave',
+ 'stackRestore',
+ 'setTempRet0',
+ 'createNamedFunction',
+ 'ptrToString',
+ 'getHeapMax',
+ 'growMemory',
+ 'ENV',
+ 'setStackLimits',
+ 'ERRNO_CODES',
+ 'DNS',
+ 'Protocols',
+ 'Sockets',
+ 'timers',
+ 'warnOnce',
+ 'readEmAsmArgsArray',
+ 'alignMemory',
+ 'wasmTable',
+ 'wasmMemory',
+ 'noExitRuntime',
+ 'addOnPreRun',
+ 'addOnPostRun',
+ 'freeTableIndexes',
+ 'functionsInTableMap',
+ 'setValue',
+ 'getValue',
+ 'PATH',
+ 'PATH_FS',
+ 'UTF8Decoder',
+ 'UTF8ArrayToString',
+ 'UTF8ToString',
+ 'stringToUTF8Array',
+ 'stringToUTF8',
+ 'lengthBytesUTF8',
+ 'AsciiToString',
+ 'UTF16Decoder',
+ 'UTF16ToString',
+ 'stringToUTF16',
+ 'lengthBytesUTF16',
+ 'UTF32ToString',
+ 'stringToUTF32',
+ 'lengthBytesUTF32',
+ 'JSEvents',
+ 'specialHTMLTargets',
+ 'findCanvasEventTarget',
+ 'currentFullscreenStrategy',
+ 'restoreOldWindowedStyle',
+ 'UNWIND_CACHE',
+ 'ExitStatus',
+ 'flush_NO_FILESYSTEM',
+ 'emSetImmediate',
+ 'emClearImmediate_deps',
+ 'emClearImmediate',
+ 'promiseMap',
+ 'uncaughtExceptionCount',
+ 'exceptionLast',
+ 'exceptionCaught',
+ 'ExceptionInfo',
+ 'findMatchingCatch',
+ 'Browser',
+ 'requestFullscreen',
+ 'requestFullScreen',
+ 'setCanvasSize',
+ 'getUserMedia',
+ 'createContext',
+ 'getPreloadedImageData__data',
+ 'wget',
+ 'MONTH_DAYS_REGULAR',
+ 'MONTH_DAYS_LEAP',
+ 'MONTH_DAYS_REGULAR_CUMULATIVE',
+ 'MONTH_DAYS_LEAP_CUMULATIVE',
+ 'SYSCALLS',
+ 'tempFixedLengthArray',
+ 'miniTempWebGLFloatBuffers',
+ 'miniTempWebGLIntBuffers',
+ 'GL',
+ 'AL',
+ 'GLUT',
+ 'EGL',
+ 'GLEW',
+ 'IDBStore',
+ 'SDL',
+ 'SDL_gfx',
+ 'print',
+ 'printErr',
+ 'jstoi_s',
+ 'InternalError',
+ 'BindingError',
+ 'throwInternalError',
+ 'throwBindingError',
+ 'registeredTypes',
+ 'awaitingDependencies',
+ 'typeDependencies',
+ 'tupleRegistrations',
+ 'structRegistrations',
+ 'sharedRegisterType',
+ 'whenDependentTypesAreResolved',
+ 'getTypeName',
+ 'getFunctionName',
+ 'heap32VectorToArray',
+ 'requireRegisteredType',
+ 'usesDestructorStack',
+ 'checkArgCount',
+ 'getRequiredArgCount',
+ 'createJsInvoker',
+ 'UnboundTypeError',
+ 'PureVirtualError',
+ 'EmValType',
+ 'EmValOptionalType',
+ 'throwUnboundTypeError',
+ 'ensureOverloadTable',
+ 'exposePublicSymbol',
+ 'replacePublicSymbol',
+ 'embindRepr',
+ 'registeredInstances',
+ 'getBasestPointer',
+ 'registerInheritedInstance',
+ 'unregisterInheritedInstance',
+ 'getInheritedInstance',
+ 'registeredPointers',
+ 'registerType',
+ 'integerReadValueFromPointer',
+ 'floatReadValueFromPointer',
+ 'assertIntegerRange',
+ 'readPointer',
+ 'runDestructors',
+ 'craftInvokerFunction',
+ 'embind__requireFunction',
+ 'genericPointerToWireType',
+ 'constNoSmartPtrRawPointerToWireType',
+ 'nonConstNoSmartPtrRawPointerToWireType',
+ 'init_RegisteredPointer',
+ 'RegisteredPointer',
+ 'RegisteredPointer_fromWireType',
+ 'runDestructor',
+ 'releaseClassHandle',
+ 'finalizationRegistry',
+ 'detachFinalizer_deps',
+ 'detachFinalizer',
+ 'attachFinalizer',
+ 'makeClassHandle',
+ 'init_ClassHandle',
+ 'ClassHandle',
+ 'throwInstanceAlreadyDeleted',
+ 'deletionQueue',
+ 'flushPendingDeletes',
+ 'delayFunction',
+ 'RegisteredClass',
+ 'shallowCopyInternalPointer',
+ 'downcastPointer',
+ 'upcastPointer',
+ 'char_0',
+ 'char_9',
+ 'makeLegalFunctionName',
+ 'emval_freelist',
+ 'emval_handles',
+ 'emval_symbols',
+ 'getStringOrSymbol',
+ 'Emval',
+ 'emval_returnValue',
+ 'emval_lookupTypes',
+ 'emval_methodCallers',
+ 'emval_addMethodCaller',
+];
+unexportedSymbols.forEach(unexportedRuntimeSymbol);
+
+ // End runtime exports
+ // Begin JS library exports
+ // End JS library exports
+
+// end include: postlibrary.js
+
+function checkIncomingModuleAPI() {
+ ignoredModuleProp('fetchSettings');
+}
+
+// Imports from the Wasm binary.
+var ___getTypeName = makeInvalidEarlyAccess('___getTypeName');
+var _fflush = makeInvalidEarlyAccess('_fflush');
+var _emscripten_stack_get_end = makeInvalidEarlyAccess('_emscripten_stack_get_end');
+var _emscripten_stack_get_base = makeInvalidEarlyAccess('_emscripten_stack_get_base');
+var _malloc = makeInvalidEarlyAccess('_malloc');
+var _free = makeInvalidEarlyAccess('_free');
+var _setThrew = makeInvalidEarlyAccess('_setThrew');
+var __emscripten_tempret_set = makeInvalidEarlyAccess('__emscripten_tempret_set');
+var _emscripten_stack_init = makeInvalidEarlyAccess('_emscripten_stack_init');
+var _emscripten_stack_get_free = makeInvalidEarlyAccess('_emscripten_stack_get_free');
+var __emscripten_stack_restore = makeInvalidEarlyAccess('__emscripten_stack_restore');
+var __emscripten_stack_alloc = makeInvalidEarlyAccess('__emscripten_stack_alloc');
+var _emscripten_stack_get_current = makeInvalidEarlyAccess('_emscripten_stack_get_current');
+var ___cxa_increment_exception_refcount = makeInvalidEarlyAccess('___cxa_increment_exception_refcount');
+var ___cxa_decrement_exception_refcount = makeInvalidEarlyAccess('___cxa_decrement_exception_refcount');
+var ___cxa_can_catch = makeInvalidEarlyAccess('___cxa_can_catch');
+var ___cxa_get_exception_ptr = makeInvalidEarlyAccess('___cxa_get_exception_ptr');
+var ___set_stack_limits = Module['___set_stack_limits'] = makeInvalidEarlyAccess('___set_stack_limits');
+var memory = makeInvalidEarlyAccess('memory');
+var __indirect_function_table = makeInvalidEarlyAccess('__indirect_function_table');
+var wasmMemory = makeInvalidEarlyAccess('wasmMemory');
+var wasmTable = makeInvalidEarlyAccess('wasmTable');
+
+function assignWasmExports(wasmExports) {
+ assert(typeof wasmExports['__getTypeName'] != 'undefined', 'missing Wasm export: __getTypeName');
+ ___getTypeName = createExportWrapper('__getTypeName', 1);
+ assert(typeof wasmExports['fflush'] != 'undefined', 'missing Wasm export: fflush');
+ _fflush = createExportWrapper('fflush', 1);
+ assert(typeof wasmExports['emscripten_stack_get_end'] != 'undefined', 'missing Wasm export: emscripten_stack_get_end');
+ _emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'];
+ assert(typeof wasmExports['emscripten_stack_get_base'] != 'undefined', 'missing Wasm export: emscripten_stack_get_base');
+ _emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'];
+ assert(typeof wasmExports['malloc'] != 'undefined', 'missing Wasm export: malloc');
+ _malloc = createExportWrapper('malloc', 1);
+ assert(typeof wasmExports['free'] != 'undefined', 'missing Wasm export: free');
+ _free = createExportWrapper('free', 1);
+ assert(typeof wasmExports['setThrew'] != 'undefined', 'missing Wasm export: setThrew');
+ _setThrew = createExportWrapper('setThrew', 2);
+ assert(typeof wasmExports['_emscripten_tempret_set'] != 'undefined', 'missing Wasm export: _emscripten_tempret_set');
+ __emscripten_tempret_set = createExportWrapper('_emscripten_tempret_set', 1);
+ assert(typeof wasmExports['emscripten_stack_init'] != 'undefined', 'missing Wasm export: emscripten_stack_init');
+ _emscripten_stack_init = wasmExports['emscripten_stack_init'];
+ assert(typeof wasmExports['emscripten_stack_get_free'] != 'undefined', 'missing Wasm export: emscripten_stack_get_free');
+ _emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'];
+ assert(typeof wasmExports['_emscripten_stack_restore'] != 'undefined', 'missing Wasm export: _emscripten_stack_restore');
+ __emscripten_stack_restore = wasmExports['_emscripten_stack_restore'];
+ assert(typeof wasmExports['_emscripten_stack_alloc'] != 'undefined', 'missing Wasm export: _emscripten_stack_alloc');
+ __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'];
+ assert(typeof wasmExports['emscripten_stack_get_current'] != 'undefined', 'missing Wasm export: emscripten_stack_get_current');
+ _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'];
+ assert(typeof wasmExports['__cxa_increment_exception_refcount'] != 'undefined', 'missing Wasm export: __cxa_increment_exception_refcount');
+ ___cxa_increment_exception_refcount = createExportWrapper('__cxa_increment_exception_refcount', 1);
+ assert(typeof wasmExports['__cxa_decrement_exception_refcount'] != 'undefined', 'missing Wasm export: __cxa_decrement_exception_refcount');
+ ___cxa_decrement_exception_refcount = createExportWrapper('__cxa_decrement_exception_refcount', 1);
+ assert(typeof wasmExports['__cxa_can_catch'] != 'undefined', 'missing Wasm export: __cxa_can_catch');
+ ___cxa_can_catch = createExportWrapper('__cxa_can_catch', 3);
+ assert(typeof wasmExports['__cxa_get_exception_ptr'] != 'undefined', 'missing Wasm export: __cxa_get_exception_ptr');
+ ___cxa_get_exception_ptr = createExportWrapper('__cxa_get_exception_ptr', 1);
+ assert(typeof wasmExports['__set_stack_limits'] != 'undefined', 'missing Wasm export: __set_stack_limits');
+ ___set_stack_limits = Module['___set_stack_limits'] = createExportWrapper('__set_stack_limits', 2);
+ assert(typeof wasmExports['memory'] != 'undefined', 'missing Wasm export: memory');
+ memory = wasmMemory = wasmExports['memory'];
+ assert(typeof wasmExports['__indirect_function_table'] != 'undefined', 'missing Wasm export: __indirect_function_table');
+ __indirect_function_table = wasmTable = wasmExports['__indirect_function_table'];
+}
+
+var wasmImports = {
+ /** @export */
+ __cxa_begin_catch: ___cxa_begin_catch,
+ /** @export */
+ __cxa_end_catch: ___cxa_end_catch,
+ /** @export */
+ __cxa_find_matching_catch_2: ___cxa_find_matching_catch_2,
+ /** @export */
+ __cxa_find_matching_catch_3: ___cxa_find_matching_catch_3,
+ /** @export */
+ __cxa_rethrow: ___cxa_rethrow,
+ /** @export */
+ __cxa_throw: ___cxa_throw,
+ /** @export */
+ __handle_stack_overflow: ___handle_stack_overflow,
+ /** @export */
+ __resumeException: ___resumeException,
+ /** @export */
+ _abort_js: __abort_js,
+ /** @export */
+ _embind_create_inheriting_constructor: __embind_create_inheriting_constructor,
+ /** @export */
+ _embind_finalize_value_object: __embind_finalize_value_object,
+ /** @export */
+ _embind_register_bigint: __embind_register_bigint,
+ /** @export */
+ _embind_register_bool: __embind_register_bool,
+ /** @export */
+ _embind_register_class: __embind_register_class,
+ /** @export */
+ _embind_register_class_class_function: __embind_register_class_class_function,
+ /** @export */
+ _embind_register_class_constructor: __embind_register_class_constructor,
+ /** @export */
+ _embind_register_class_function: __embind_register_class_function,
+ /** @export */
+ _embind_register_emval: __embind_register_emval,
+ /** @export */
+ _embind_register_float: __embind_register_float,
+ /** @export */
+ _embind_register_integer: __embind_register_integer,
+ /** @export */
+ _embind_register_memory_view: __embind_register_memory_view,
+ /** @export */
+ _embind_register_std_string: __embind_register_std_string,
+ /** @export */
+ _embind_register_std_wstring: __embind_register_std_wstring,
+ /** @export */
+ _embind_register_value_object: __embind_register_value_object,
+ /** @export */
+ _embind_register_value_object_field: __embind_register_value_object_field,
+ /** @export */
+ _embind_register_void: __embind_register_void,
+ /** @export */
+ _emval_create_invoker: __emval_create_invoker,
+ /** @export */
+ _emval_decref: __emval_decref,
+ /** @export */
+ _emval_invoke: __emval_invoke,
+ /** @export */
+ _emval_run_destructors: __emval_run_destructors,
+ /** @export */
+ emscripten_resize_heap: _emscripten_resize_heap,
+ /** @export */
+ fd_close: _fd_close,
+ /** @export */
+ fd_seek: _fd_seek,
+ /** @export */
+ fd_write: _fd_write,
+ /** @export */
+ invoke_fi,
+ /** @export */
+ invoke_fii,
+ /** @export */
+ invoke_fiif,
+ /** @export */
+ invoke_fiiif,
+ /** @export */
+ invoke_fiiiff,
+ /** @export */
+ invoke_fiiifff,
+ /** @export */
+ invoke_i,
+ /** @export */
+ invoke_ii,
+ /** @export */
+ invoke_iiffiiiffiiiii,
+ /** @export */
+ invoke_iii,
+ /** @export */
+ invoke_iiiii,
+ /** @export */
+ invoke_iiiiiiiiffff,
+ /** @export */
+ invoke_v,
+ /** @export */
+ invoke_vi,
+ /** @export */
+ invoke_vif,
+ /** @export */
+ invoke_vifi,
+ /** @export */
+ invoke_vii,
+ /** @export */
+ invoke_viiff,
+ /** @export */
+ invoke_viii,
+ /** @export */
+ invoke_viiiffffii,
+ /** @export */
+ invoke_viiiffiiiii,
+ /** @export */
+ invoke_viiii,
+ /** @export */
+ invoke_viiiii
+};
+
+function invoke_i(index) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)();
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_iii(index,a1,a2) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_v(index) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)();
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_ii(index,a1) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_viiii(index,a1,a2,a3,a4) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2,a3,a4);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_vi(index,a1) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_fi(index,a1) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_vii(index,a1,a2) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_viiff(index,a1,a2,a3,a4) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2,a3,a4);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_vif(index,a1,a2) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_fiiiff(index,a1,a2,a3,a4,a5) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2,a3,a4,a5);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_fiiif(index,a1,a2,a3,a4) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2,a3,a4);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_fiif(index,a1,a2,a3) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2,a3);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_iiffiiiffiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_viiiffffii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_vifi(index,a1,a2,a3) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2,a3);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_iiiii(index,a1,a2,a3,a4) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2,a3,a4);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_viii(index,a1,a2,a3) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2,a3);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_fiiifff(index,a1,a2,a3,a4,a5,a6) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_fii(index,a1,a2) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_viiiffiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_iiiiiiiiffff(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) {
+ var sp = stackSave();
+ try {
+ return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+function invoke_viiiii(index,a1,a2,a3,a4,a5) {
+ var sp = stackSave();
+ try {
+ getWasmTableEntry(index)(a1,a2,a3,a4,a5);
+ } catch(e) {
+ stackRestore(sp);
+ if (e !== e+0) throw e;
+ _setThrew(1, 0);
+ }
+}
+
+
+// include: postamble.js
+// === Auto-generated postamble setup entry stuff ===
+
+var calledRun;
+
+function stackCheckInit() {
+ // This is normally called automatically during __wasm_call_ctors but need to
+ // get these values before even running any of the ctors so we call it redundantly
+ // here.
+ _emscripten_stack_init();
+ // TODO(sbc): Move writeStackCookie to native to to avoid this.
+ writeStackCookie();
+}
+
+function run() {
+
+ stackCheckInit();
+
+ preRun();
+
+ function doRun() {
+ // run may have just been called through dependencies being fulfilled just in this very frame,
+ // or while the async setStatus time below was happening
+ assert(!calledRun);
+ calledRun = true;
+ Module['calledRun'] = true;
+
+ if (ABORT) return;
+
+ initRuntime();
+
+ (moduleRtn = Module);
+ Module['onRuntimeInitialized']?.();
+ consumedModuleProp('onRuntimeInitialized');
+
+ assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');
+
+ postRun();
+ }
+
+ if (Module['setStatus']) {
+ Module['setStatus']('Running...');
+ setTimeout(() => {
+ setTimeout(() => Module['setStatus'](''), 1);
+ doRun();
+ }, 1);
+ } else
+ {
+ doRun();
+ }
+ checkStackCookie();
+}
+
+function checkUnflushedContent() {
+ // Compiler settings do not allow exiting the runtime, so flushing
+ // the streams is not possible. but in ASSERTIONS mode we check
+ // if there was something to flush, and if so tell the user they
+ // should request that the runtime be exitable.
+ // Normally we would not even include flush() at all, but in ASSERTIONS
+ // builds we do so just for this check, and here we see if there is any
+ // content to flush, that is, we check if there would have been
+ // something a non-ASSERTIONS build would have not seen.
+ // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0
+ // mode (which has its own special function for this; otherwise, all
+ // the code is inside libc)
+ var oldOut = out;
+ var oldErr = err;
+ var has = false;
+ out = err = (x) => {
+ has = true;
+ }
+ try { // it doesn't matter if it fails
+ flush_NO_FILESYSTEM();
+ } catch(e) {}
+ out = oldOut;
+ err = oldErr;
+ if (has) {
+ warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.');
+ warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)');
+ }
+}
+
+var wasmExports;
+
+wasmExports = createWasm();
+
+run();
+
+// end include: postamble.js
+
+// include: postamble_modularize.js
+// In MODULARIZE mode we wrap the generated code in a factory function
+// and return either the Module itself, or a promise of the module.
+//
+// We assign to the `moduleRtn` global here and configure closure to see
+// this as and extern so it won't get minified.
+
+if (runtimeInitialized) {
+ moduleRtn = Module;
+} else {
+ // Set up the promise that indicates the Module is initialized
+ moduleRtn = new Promise((resolve, reject) => {
+ readyPromiseResolve = resolve;
+ readyPromiseReject = reject;
+ });
+}
+
+// Assertion for attempting to access module properties on the incoming
+// moduleArg. In the past we used this object as the prototype of the module
+// and assigned properties to it, but now we return a distinct object. This
+// keeps the instance private until it is ready (i.e the promise has been
+// resolved).
+for (const prop of Object.keys(Module)) {
+ if (!(prop in moduleArg)) {
+ Object.defineProperty(moduleArg, prop, {
+ configurable: true,
+ get() {
+ abort(`Access to module property ('${prop}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)
+ }
+ });
+ }
+}
+// end include: postamble_modularize.js
+
+
+
+ return moduleRtn;
+}
+
+// Export using a UMD style export, or ES6 exports if selected
+
+
+
+
+// Initialize yoga-layout with embedded WASM.
+// Pass wasmBinary directly - Emscripten will use instantiateSync for synchronous loading.
+// Note: Despite Emscripten's async API, this is synchronous (-sWASM_ASYNC_COMPILATION=0).
+const yogaModule = Module({
+ wasmBinary
+});
+
+// CommonJS export - the initialized module (synchronous).
+// ============================================
+// Inlined YGEnums (CJS)
+// ============================================
+/**
+ * Yoga Layout Enums
+ *
+ * Converted from upstream yoga/javascript/src/generated/YGEnums.ts
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ * MIT License
+ */
+
+const Align = {
+ Auto: 0,
+ FlexStart: 1,
+ Center: 2,
+ FlexEnd: 3,
+ Stretch: 4,
+ Baseline: 5,
+ SpaceBetween: 6,
+ SpaceAround: 7,
+ SpaceEvenly: 8,
+}
+
+const BoxSizing = {
+ BorderBox: 0,
+ ContentBox: 1,
+}
+
+const Dimension = {
+ Width: 0,
+ Height: 1,
+}
+
+const Direction = {
+ Inherit: 0,
+ LTR: 1,
+ RTL: 2,
+}
+
+const Display = {
+ Flex: 0,
+ None: 1,
+ Contents: 2,
+}
+
+const Edge = {
+ Left: 0,
+ Top: 1,
+ Right: 2,
+ Bottom: 3,
+ Start: 4,
+ End: 5,
+ Horizontal: 6,
+ Vertical: 7,
+ All: 8,
+}
+
+const Errata = {
+ None: 0,
+ StretchFlexBasis: 1,
+ AbsolutePositionWithoutInsetsExcludesPadding: 2,
+ AbsolutePercentAgainstInnerSize: 4,
+ All: 2147483647,
+ Classic: 2147483646,
+}
+
+const ExperimentalFeature = {
+ WebFlexBasis: 0,
+}
+
+const FlexDirection = {
+ Column: 0,
+ ColumnReverse: 1,
+ Row: 2,
+ RowReverse: 3,
+}
+
+const Gutter = {
+ Column: 0,
+ Row: 1,
+ All: 2,
+}
+
+const Justify = {
+ FlexStart: 0,
+ Center: 1,
+ FlexEnd: 2,
+ SpaceBetween: 3,
+ SpaceAround: 4,
+ SpaceEvenly: 5,
+}
+
+const LogLevel = {
+ Error: 0,
+ Warn: 1,
+ Info: 2,
+ Debug: 3,
+ Verbose: 4,
+ Fatal: 5,
+}
+
+const MeasureMode = {
+ Undefined: 0,
+ Exactly: 1,
+ AtMost: 2,
+}
+
+const NodeType = {
+ Default: 0,
+ Text: 1,
+}
+
+const Overflow = {
+ Visible: 0,
+ Hidden: 1,
+ Scroll: 2,
+}
+
+const PositionType = {
+ Static: 0,
+ Relative: 1,
+ Absolute: 2,
+}
+
+const Unit = {
+ Undefined: 0,
+ Point: 1,
+ Percent: 2,
+ Auto: 3,
+}
+
+const Wrap = {
+ NoWrap: 0,
+ Wrap: 1,
+ WrapReverse: 2,
+}
+
+// Flat constant exports for compatibility with yoga-layout npm package API.
+const constants = {
+ ALIGN_AUTO: Align.Auto,
+ ALIGN_FLEX_START: Align.FlexStart,
+ ALIGN_CENTER: Align.Center,
+ ALIGN_FLEX_END: Align.FlexEnd,
+ ALIGN_STRETCH: Align.Stretch,
+ ALIGN_BASELINE: Align.Baseline,
+ ALIGN_SPACE_BETWEEN: Align.SpaceBetween,
+ ALIGN_SPACE_AROUND: Align.SpaceAround,
+ ALIGN_SPACE_EVENLY: Align.SpaceEvenly,
+ BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,
+ BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,
+ DIMENSION_WIDTH: Dimension.Width,
+ DIMENSION_HEIGHT: Dimension.Height,
+ DIRECTION_INHERIT: Direction.Inherit,
+ DIRECTION_LTR: Direction.LTR,
+ DIRECTION_RTL: Direction.RTL,
+ DISPLAY_FLEX: Display.Flex,
+ DISPLAY_NONE: Display.None,
+ DISPLAY_CONTENTS: Display.Contents,
+ EDGE_LEFT: Edge.Left,
+ EDGE_TOP: Edge.Top,
+ EDGE_RIGHT: Edge.Right,
+ EDGE_BOTTOM: Edge.Bottom,
+ EDGE_START: Edge.Start,
+ EDGE_END: Edge.End,
+ EDGE_HORIZONTAL: Edge.Horizontal,
+ EDGE_VERTICAL: Edge.Vertical,
+ EDGE_ALL: Edge.All,
+ ERRATA_NONE: Errata.None,
+ ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,
+ ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING:
+ Errata.AbsolutePositionWithoutInsetsExcludesPadding,
+ ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE:
+ Errata.AbsolutePercentAgainstInnerSize,
+ ERRATA_ALL: Errata.All,
+ ERRATA_CLASSIC: Errata.Classic,
+ EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,
+ FLEX_DIRECTION_COLUMN: FlexDirection.Column,
+ FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,
+ FLEX_DIRECTION_ROW: FlexDirection.Row,
+ FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,
+ GUTTER_COLUMN: Gutter.Column,
+ GUTTER_ROW: Gutter.Row,
+ GUTTER_ALL: Gutter.All,
+ JUSTIFY_FLEX_START: Justify.FlexStart,
+ JUSTIFY_CENTER: Justify.Center,
+ JUSTIFY_FLEX_END: Justify.FlexEnd,
+ JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,
+ JUSTIFY_SPACE_AROUND: Justify.SpaceAround,
+ JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,
+ LOG_LEVEL_ERROR: LogLevel.Error,
+ LOG_LEVEL_WARN: LogLevel.Warn,
+ LOG_LEVEL_INFO: LogLevel.Info,
+ LOG_LEVEL_DEBUG: LogLevel.Debug,
+ LOG_LEVEL_VERBOSE: LogLevel.Verbose,
+ LOG_LEVEL_FATAL: LogLevel.Fatal,
+ MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,
+ MEASURE_MODE_EXACTLY: MeasureMode.Exactly,
+ MEASURE_MODE_AT_MOST: MeasureMode.AtMost,
+ NODE_TYPE_DEFAULT: NodeType.Default,
+ NODE_TYPE_TEXT: NodeType.Text,
+ OVERFLOW_VISIBLE: Overflow.Visible,
+ OVERFLOW_HIDDEN: Overflow.Hidden,
+ OVERFLOW_SCROLL: Overflow.Scroll,
+ POSITION_TYPE_STATIC: PositionType.Static,
+ POSITION_TYPE_RELATIVE: PositionType.Relative,
+ POSITION_TYPE_ABSOLUTE: PositionType.Absolute,
+ UNIT_UNDEFINED: Unit.Undefined,
+ UNIT_POINT: Unit.Point,
+ UNIT_PERCENT: Unit.Percent,
+ UNIT_AUTO: Unit.Auto,
+ WRAP_NO_WRAP: Wrap.NoWrap,
+ WRAP_WRAP: Wrap.Wrap,
+ WRAP_WRAP_REVERSE: Wrap.WrapReverse,
+}
+
+const YGEnums = constants;
+
+
+// ============================================
+// Inlined wrapAssembly (CJS)
+// ============================================
+/**
+ * Yoga Layout Assembly Wrapper
+ *
+ * Converted from upstream yoga/javascript/src/wrapAssembly.ts
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ * MIT License
+ *
+ * This wrapper provides a nicer JavaScript API on top of the raw
+ * Emscripten bindings, adding conveniences like:
+ * - Node.create() factory method
+ * - node.free() for cleanup
+ * - Patched setters that accept strings like "100%" or "auto"
+ * - calculateLayout with default parameters
+ */
+
+
+
+
+/**
+ * Wrap raw Emscripten yoga module with convenience API.
+ *
+ * @param {object} lib - Raw Emscripten module
+ * @returns {object} Wrapped Yoga API
+ */
+function wrapAssembly(lib) {
+ function patch(prototype, name, fn) {
+ const original = prototype[name]
+
+ prototype[name] = function (...args) {
+ return fn.call(this, original, ...args)
+ }
+ }
+
+ for (const fnName of [
+ 'setPosition',
+ 'setMargin',
+ 'setFlexBasis',
+ 'setWidth',
+ 'setHeight',
+ 'setMinWidth',
+ 'setMinHeight',
+ 'setMaxWidth',
+ 'setMaxHeight',
+ 'setPadding',
+ 'setGap',
+ ]) {
+ const methods = {
+ [Unit.Point]: lib.Node.prototype[fnName],
+ [Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],
+ [Unit.Auto]: lib.Node.prototype[`${fnName}Auto`],
+ }
+
+ patch(lib.Node.prototype, fnName, function (original, ...args) {
+ // We patch all these functions to add support for the following calls:
+ // .setWidth(100) / .setWidth("100%") / .setWidth(.getWidth()) / .setWidth("auto")
+
+ const value = args.pop()
+ let unit, asNumber
+
+ if (value === 'auto') {
+ unit = Unit.Auto
+ asNumber = undefined
+ } else if (typeof value === 'object') {
+ unit = value.unit
+ asNumber = value.valueOf()
+ } else {
+ unit =
+ typeof value === 'string' && value.endsWith('%')
+ ? Unit.Percent
+ : Unit.Point
+ asNumber = parseFloat(value)
+ if (
+ value !== undefined &&
+ !Number.isNaN(value) &&
+ Number.isNaN(asNumber)
+ ) {
+ throw new Error(`Invalid value ${value} for ${fnName}`)
+ }
+ }
+
+ if (!methods[unit])
+ throw new Error(
+ `Failed to execute "${fnName}": Unsupported unit '${value}'`
+ )
+
+ if (asNumber !== undefined) {
+ return methods[unit].call(this, ...args, asNumber)
+ } else {
+ return methods[unit].call(this, ...args)
+ }
+ })
+ }
+
+ function wrapMeasureFunction(measureFunction) {
+ return lib.MeasureCallback.implement({
+ measure: (...args) => {
+ const { width, height } = measureFunction(...args)
+ return {
+ width: width ?? NaN,
+ height: height ?? NaN,
+ }
+ },
+ })
+ }
+
+ patch(lib.Node.prototype, 'setMeasureFunc', function (original, measureFunc) {
+ // This patch is just a convenience patch, since it helps write more
+ // idiomatic source code (such as .setMeasureFunc(null))
+ if (measureFunc) {
+ return original.call(this, wrapMeasureFunction(measureFunc))
+ } else {
+ return this.unsetMeasureFunc()
+ }
+ })
+
+ function wrapDirtiedFunc(dirtiedFunction) {
+ return lib.DirtiedCallback.implement({ dirtied: dirtiedFunction })
+ }
+
+ patch(lib.Node.prototype, 'setDirtiedFunc', function (original, dirtiedFunc) {
+ original.call(this, wrapDirtiedFunc(dirtiedFunc))
+ })
+
+ patch(lib.Config.prototype, 'free', function () {
+ // Since we handle the memory allocation ourselves (via lib.Config.create),
+ // we also need to handle the deallocation
+ lib.Config.destroy(this)
+ })
+
+ patch(lib.Node, 'create', (_, config) => {
+ // We decide the constructor we want to call depending on the parameters
+ return config ? lib.Node.createWithConfig(config) : lib.Node.createDefault()
+ })
+
+ patch(lib.Node.prototype, 'free', function () {
+ // Since we handle the memory allocation ourselves (via lib.Node.create),
+ // we also need to handle the deallocation
+ lib.Node.destroy(this)
+ })
+
+ patch(lib.Node.prototype, 'freeRecursive', function () {
+ for (let t = 0, T = this.getChildCount(); t < T; ++t) {
+ this.getChild(0).freeRecursive()
+ }
+ this.free()
+ })
+
+ patch(
+ lib.Node.prototype,
+ 'calculateLayout',
+ function (original, width = NaN, height = NaN, direction = Direction.LTR) {
+ // Just a small patch to add support for the function default parameters
+ return original.call(this, width, height, direction)
+ }
+ )
+
+ return {
+ Config: lib.Config,
+ Node: lib.Node,
+ ...YGEnums,
+ }
+}
+
+
+// Apply wrapper to get official yoga-layout API.
+module.exports = wrapAssembly(yogaModule);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 81ec7323b..1cf54d6c6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -804,6 +804,9 @@ importers:
'@socketaddon/iocraft':
specifier: file:../package-builder/build/dev/out/socketaddon-iocraft
version: file:packages/package-builder/build/dev/out/socketaddon-iocraft
+ '@socketaddon/opentui':
+ specifier: file:../package-builder/build/dev/out/socketaddon-opentui
+ version: file:packages/package-builder/build/dev/out/socketaddon-opentui
'@socketregistry/hyrious__bun.lockb':
specifier: 'catalog:'
version: 1.0.19
@@ -2346,6 +2349,10 @@ packages:
resolution: {directory: packages/package-builder/build/dev/out/socketaddon-iocraft, type: directory}
engines: {node: '>=18'}
+ '@socketaddon/opentui@file:packages/package-builder/build/dev/out/socketaddon-opentui':
+ resolution: {directory: packages/package-builder/build/dev/out/socketaddon-opentui, type: directory}
+ engines: {node: '>=18'}
+
'@socketregistry/es-set-tostringtag@1.0.10':
resolution: {integrity: sha512-btXmvw1JpA8WtSoXx9mTapo9NAyIDKRRzK84i48d8zc0X09M6ORfobVnHbgwhXf7CFhkRzhYrHG9dqbI9vpELQ==}
engines: {node: '>=18'}
@@ -5874,6 +5881,8 @@ snapshots:
'@socketaddon/iocraft@file:packages/package-builder/build/dev/out/socketaddon-iocraft': {}
+ '@socketaddon/opentui@file:packages/package-builder/build/dev/out/socketaddon-opentui': {}
+
'@socketregistry/es-set-tostringtag@1.0.10': {}
'@socketregistry/hasown@1.0.7': {}