From 31b8409120cf528df45ded8d42ea2d486c46a38f Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sun, 31 May 2026 15:06:00 -0700 Subject: [PATCH] fix(parser): chunked WASM scan, op coalescing, and benchmark runtime paths The WASM scanner could fill its fixed 4096-op buffer on large inputs (e.g. 5MB of newlines or OSC traffic) and previously failed or appeared hung. ESC op coalescing also corrupted the lengths field used for dispatch, causing millions of redundant handler invocations on OSC benchmark data. WASM scanner (parser.c / parser.h): - Add scan_offset to ParserScanHeader; scan(offset, length) resumes after a partial fill instead of returning -1 for the whole buffer. - Return early from scan when the op buffer is full; all emit sites use emit_or_stop() so scan_offset records where to continue. - Coalesce consecutive OP_EXECUTE and OP_ESC ops with the same code/ident; lengths holds repeat count, starts holds the input index for ESC. - Keep CSI/DCS hook layout unchanged (lengths = final byte index, starts = param arena offset). TypeScript dispatch (EscapeSequenceParserWasm.ts): - Drive parsing via runWasmScanChunks(): scan a slice, dispatch ops, advance inputOffset to nextOffset until the chunk is consumed. - Fix ESC dispatch: chunkPos uses starts (input index); escCount uses lengths (repeat count). Avoid treating the CSI-style final-byte index as a loop bound. - Throw if nextOffset does not advance to catch stuck scans. EscapeSequenceParser.ts: - Extend _scanCache for chunked scan state; reset() clears inputOffset and cached scan data so later parses are not skipped. Benchmarks: - Import compiled modules from ../../out/common and ../../out/browser so npm run benchmark works without NODE_PATH after path-mapping removal. - Update benchmark skill notes accordingly. Build: - build_parser_wasm.sh selects a clang with wasm32 support (Homebrew LLVM on macOS when Xcode clang lacks the target). Co-authored-by: Cursor --- .agents/skills/benchmark/SKILL.md | 2 +- bin/build_parser_wasm.sh | 43 ++++++- src/common/parser/EscapeSequenceParser.ts | 14 ++- src/common/parser/EscapeSequenceParserWasm.ts | 112 +++++++++++++----- src/common/parser/ScanTypes.ts | 1 + src/common/parser/WasmEscapeScanner.ts | 13 +- src/common/parser/wasm/parser.c | 103 ++++++++++++---- src/common/parser/wasm/parser.h | 1 + src/common/parser/wasm/parser.wasm | Bin 14456 -> 15166 bytes src/common/parser/wasm/parser.wasm.embed.ts | 2 +- test/benchmark/DecorationService.benchmark.ts | 4 +- .../EscapeSequenceParser.benchmark.ts | 12 +- test/benchmark/Event.benchmark.ts | 2 +- test/benchmark/Terminal.benchmark.ts | 4 +- 14 files changed, 241 insertions(+), 72 deletions(-) diff --git a/.agents/skills/benchmark/SKILL.md b/.agents/skills/benchmark/SKILL.md index e87c285d9..d74333808 100644 --- a/.agents/skills/benchmark/SKILL.md +++ b/.agents/skills/benchmark/SKILL.md @@ -25,4 +25,4 @@ When writing benchmark instructions: ## Notes - Benchmarks run from built JS in `out-test/benchmark/*.benchmark.js`. -- Keep `NODE_PATH=./out` (handled by the npm script). +- Benchmark sources import compiled modules from `../../out/common/` and `../../out/browser/` (run `npm run build` first). diff --git a/bin/build_parser_wasm.sh b/bin/build_parser_wasm.sh index 5ae81eb83..6558d8c7e 100755 --- a/bin/build_parser_wasm.sh +++ b/bin/build_parser_wasm.sh @@ -13,7 +13,48 @@ fi WASM_DIR=src/common/parser/wasm OUT="$WASM_DIR/parser.wasm" -clang --target=wasm32-unknown-unknown -O2 -nostdlib -fuse-ld=lld \ +# Apple Clang (Xcode CLT) has no wasm32 target; prefer Homebrew LLVM when needed. +wasm_clang_has_target() { + "$1" --print-targets 2>/dev/null | grep -q 'wasm32' +} + +resolve_wasm_toolchain() { + local clang_bin=clang + if wasm_clang_has_target clang; then + : + else + local llvm_prefix="" + if command -v brew >/dev/null 2>&1; then + llvm_prefix="$(brew --prefix llvm 2>/dev/null || true)" + fi + for prefix in "$llvm_prefix" /opt/homebrew/opt/llvm /usr/local/opt/llvm; do + if [[ -n "$prefix" && -x "$prefix/bin/clang" ]] && wasm_clang_has_target "$prefix/bin/clang"; then + clang_bin="$prefix/bin/clang" + local lld_prefix="" + if command -v brew >/dev/null 2>&1; then + lld_prefix="$(brew --prefix lld 2>/dev/null || true)" + fi + for lld_dir in "$lld_prefix/bin" /opt/homebrew/opt/lld/bin /usr/local/opt/lld/bin; do + if [[ -n "$lld_dir" && -x "$lld_dir/lld" ]]; then + PATH="$lld_dir:$(dirname "$clang_bin"):$PATH" + break + fi + done + PATH="$(dirname "$clang_bin"):$PATH" + break + fi + done + if ! wasm_clang_has_target "$clang_bin"; then + echo "error: no clang with wasm32 support found (macOS: brew install llvm lld)" >&2 + exit 1 + fi + fi + WASM_CLANG="$clang_bin" +} + +resolve_wasm_toolchain + +"$WASM_CLANG" --target=wasm32-unknown-unknown -O2 -nostdlib -fuse-ld=lld \ -Wl,--no-entry \ -Wl,--export-memory \ -Wl,--export=reset \ diff --git a/src/common/parser/EscapeSequenceParser.ts b/src/common/parser/EscapeSequenceParser.ts index 6256aec48..770e76912 100644 --- a/src/common/parser/EscapeSequenceParser.ts +++ b/src/common/parser/EscapeSequenceParser.ts @@ -302,7 +302,14 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP chunkPos: 0 }; - protected _scanCache: { opIndex: number, stateBeforeScan?: number } = { opIndex: 0 }; + protected _scanCache: { + opIndex: number; + stateBeforeScan?: number; + inputOffset?: number; + chunkStart?: number; + scan?: import('./ScanTypes').ScanResult; + data?: Uint32Array; + } = { opIndex: 0 }; constructor( protected readonly _transitions: TransitionTable = VT500_TRANSITION_TABLE @@ -510,6 +517,11 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP this._collect = 0; this.precedingJoinState = 0; this._scanCache.opIndex = 0; + this._scanCache.inputOffset = 0; + this._scanCache.chunkStart = undefined; + this._scanCache.scan = undefined; + this._scanCache.data = undefined; + this._scanCache.stateBeforeScan = undefined; // abort pending continuation from async handler // Here the RESET type indicates, that the next parse call will // ignore any saved stack, instead continues sync with next codepoint from GROUND diff --git a/src/common/parser/EscapeSequenceParserWasm.ts b/src/common/parser/EscapeSequenceParserWasm.ts index 449e8d65f..3fcbf9f62 100644 --- a/src/common/parser/EscapeSequenceParserWasm.ts +++ b/src/common/parser/EscapeSequenceParserWasm.ts @@ -76,7 +76,7 @@ export function parseWithWasmScanner( data: Uint32Array, length: number, promiseResult: boolean | undefined, - scanCache: { scan?: ScanResult; data?: Uint32Array; opIndex: number; stateBeforeScan?: number } + scanCache: IWasmScanCache ): void | Promise { ensureWasm(); @@ -85,18 +85,62 @@ export function parseWithWasmScanner( return resumeWasmParse(host, data, length, promiseResult, scanCache); } - const stateBeforeScan = host.currentState; - scanCache.stateBeforeScan = stateBeforeScan; - WasmEscapeScanner.syncParserState(host.currentState, host.collect, host._params); - const scan = WasmEscapeScanner.scan(data, length); - scanCache.scan = scan; - scanCache.data = data; + scanCache.stateBeforeScan = host.currentState; + scanCache.inputOffset = 0; + scanCache.scan = undefined; scanCache.opIndex = 0; + return runWasmScanChunks(host, data, length, promiseResult, scanCache); +} - host.currentState = WasmEscapeScanner.currentState; - host.collect = WasmEscapeScanner.collect; +interface IWasmScanCache { + scan?: ScanResult; + data?: Uint32Array; + opIndex: number; + stateBeforeScan?: number; + inputOffset?: number; + chunkStart?: number; +} - return dispatchScanOps(host, data, scan, 0, scanCache, promiseResult, stateBeforeScan); +function runWasmScanChunks( + host: IWasmParseHost, + data: Uint32Array, + length: number, + promiseResult: boolean | undefined, + scanCache: IWasmScanCache +): void | Promise { + let pos = scanCache.inputOffset ?? 0; + const stateBeforeScan = scanCache.stateBeforeScan ?? host.currentState; + + while (pos < length) { + if (!scanCache.scan || scanCache.data !== data || scanCache.chunkStart !== pos) { + WasmEscapeScanner.syncParserState(host.currentState, host.collect, host._params); + const scan = WasmEscapeScanner.scan(data, length, pos); + scanCache.scan = scan; + scanCache.data = data; + scanCache.chunkStart = pos; + scanCache.opIndex = 0; + host.currentState = WasmEscapeScanner.currentState; + host.collect = WasmEscapeScanner.collect; + } + + const result = dispatchScanOps(host, data, scanCache.scan, scanCache.opIndex, scanCache, promiseResult, stateBeforeScan); + if (result instanceof Promise) { + scanCache.inputOffset = pos; + return result; + } + + const nextOffset = scanCache.scan.nextOffset; + if (nextOffset <= pos) { + throw new Error(`Wasm parser scan did not advance (stuck at input offset ${pos})`); + } + pos = nextOffset; + scanCache.inputOffset = pos; + scanCache.scan = undefined; + scanCache.opIndex = 0; + } + + scanCache.inputOffset = length; + scanCache.scan = undefined; } function resumeWasmParse( @@ -104,7 +148,7 @@ function resumeWasmParse( data: Uint32Array, length: number, promiseResult: boolean | undefined, - scanCache: { scan?: ScanResult; data?: Uint32Array; opIndex: number; stateBeforeScan?: number } + scanCache: IWasmScanCache ): void | Promise { if (host._parseStack.state === ParserStackType.RESET) { host._parseStack.state = ParserStackType.NONE; @@ -113,7 +157,7 @@ function resumeWasmParse( if (!scanCache.scan || scanCache.data !== data) { return parseWithWasmScanner(host, data, length, promiseResult, scanCache); } - return dispatchScanOps(host, data, scanCache.scan, scanCache.opIndex, scanCache, promiseResult, scanCache.stateBeforeScan ?? host.currentState); + return runWasmScanChunks(host, data, length, promiseResult, scanCache); } if (promiseResult === undefined || host._parseStack.state === ParserStackType.FAIL) { @@ -194,7 +238,7 @@ function resumeWasmParse( host._parseStack.state = ParserStackType.NONE; host.precedingJoinState = 0; - return dispatchScanOps(host, data, scan, scanCache.opIndex, scanCache, promiseResult, scanCache.stateBeforeScan ?? host.currentState); + return runWasmScanChunks(host, data, length, promiseResult, scanCache); } function dispatchScanOps( @@ -202,7 +246,7 @@ function dispatchScanOps( data: Uint32Array, scan: ScanResult, fromOp: number, - scanCache: { scan?: ScanResult; data?: Uint32Array; opIndex: number }, + scanCache: IWasmScanCache, promiseResult: boolean | undefined, stateBeforeScan: number ): void | Promise { @@ -214,7 +258,7 @@ function dispatchScanOps( const start = scan.starts[o]; const len = scan.lengths[o]; const aux = scan.aux[o]; - const chunkPos = (kind === Op.Csi || kind === Op.Esc) ? len : start; + const chunkPos = kind === Op.Csi ? len : start; switch (kind) { case Op.Print: @@ -222,14 +266,17 @@ function dispatchScanOps( break; case Op.Execute: { const code = aux; - if (code < 0x18) { - const exe = host._executeHandlersArr[code]; - if (exe) exe(code); - else host._executeHandlerFb(code); - } else if (host._executeHandlers[code]) { - host._executeHandlers[code]!(); - } else { - host._executeHandlerFb(code); + const count = len > 0 ? len : 1; + for (let n = 0; n < count; n++) { + if (code < 0x18) { + const exe = host._executeHandlersArr[code]; + if (exe) exe(code); + else host._executeHandlerFb(code); + } else if (host._executeHandlers[code]) { + host._executeHandlers[code]!(); + } else { + host._executeHandlerFb(code); + } } host.precedingJoinState = 0; break; @@ -255,16 +302,19 @@ function dispatchScanOps( host.collect = aux >> 8; loadParams(host, scan, o); const handlersEsc = host._escHandlers[aux]; - let jj = handlersEsc ? handlersEsc.length - 1 : -1; - for (; jj >= 0; jj--) { - handlerResult = handlersEsc![jj](); - if (handlerResult === true) break; - if (handlerResult instanceof Promise) { - host._preserveStack(ParserStackType.ESC, handlersEsc!, jj, 0, chunkPos); - return handlerResult; + const escCount = len > 0 ? len : 1; + escLoop: for (let rep = 0; rep < escCount; rep++) { + let jj = handlersEsc ? handlersEsc.length - 1 : -1; + for (; jj >= 0; jj--) { + handlerResult = handlersEsc![jj](); + if (handlerResult === true) continue escLoop; + if (handlerResult instanceof Promise) { + host._preserveStack(ParserStackType.ESC, handlersEsc!, jj, 0, chunkPos); + return handlerResult; + } } + if (jj < 0) host._escHandlerFb(aux); } - if (jj < 0) host._escHandlerFb(aux); host.precedingJoinState = 0; break; } diff --git a/src/common/parser/ScanTypes.ts b/src/common/parser/ScanTypes.ts index 9df9989a4..cd24708ce 100644 --- a/src/common/parser/ScanTypes.ts +++ b/src/common/parser/ScanTypes.ts @@ -34,4 +34,5 @@ export type ScanResult = { paramStarts: Uint32Array; paramCounts: Uint16Array; opCount: number; + nextOffset: number; }; diff --git a/src/common/parser/WasmEscapeScanner.ts b/src/common/parser/WasmEscapeScanner.ts index fca504f3d..5824e5f39 100644 --- a/src/common/parser/WasmEscapeScanner.ts +++ b/src/common/parser/WasmEscapeScanner.ts @@ -19,7 +19,7 @@ let wasmModule: WebAssembly.Instance | undefined; let wasmExports: { memory: WebAssembly.Memory; reset: () => void; - scan: (length: number) => number; + scan: (offset: number, length: number) => number; set_state: (state: number, collect: number) => void; get_input_ptr: () => number; get_kinds_ptr: () => number; @@ -162,14 +162,14 @@ export class WasmEscapeScanner { } } - public static scan(data: Uint32Array, length: number): ScanResult { + public static scan(data: Uint32Array, length: number, offset = 0): ScanResult { const ex = ensureWasm(); const inputPtr = ex.get_input_ptr(); const mem = ex.memory.buffer; const inputView = new Uint32Array(mem, inputPtr, length); inputView.set(data.subarray(0, length)); - const opCount = ex.scan(length); + const opCount = ex.scan(offset, length); if (opCount < 0) { throw new Error('Wasm parser op buffer overflow'); } @@ -182,9 +182,9 @@ export class WasmEscapeScanner { const paramStarts = new Uint32Array(mem, ex.get_param_starts_ptr(), count); const paramCounts = new Uint16Array(mem, ex.get_param_counts_ptr(), count); - const headerPtr = ex.get_header_ptr() >> 2; - const headerView = new Uint32Array(mem, ex.get_header_ptr(), 3); + const headerView = new Uint32Array(mem, ex.get_header_ptr(), 4); const paramsLen = headerView[2]; + const nextOffset = headerView[3]; const params = new Uint32Array(mem, ex.get_params_ptr(), paramsLen); @@ -196,7 +196,8 @@ export class WasmEscapeScanner { params: params.slice(), paramStarts: paramStarts.slice(), paramCounts: paramCounts.slice(), - opCount: count + opCount: count, + nextOffset }; } } diff --git a/src/common/parser/wasm/parser.c b/src/common/parser/wasm/parser.c index 88cfdb23d..0eedaca61 100644 --- a/src/common/parser/wasm/parser.c +++ b/src/common/parser/wasm/parser.c @@ -110,16 +110,37 @@ static void copy_params_to_arena(uint32_t op_idx, ParserWasmState *s) { static int emit_op(uint8_t kind, uint32_t start, uint32_t length, uint32_t aux_val, ParserWasmState *s) { uint32_t idx = header()->op_count; + if (idx > 0) { + uint32_t prev = idx - 1; + if (kind == OP_EXECUTE && kinds()[prev] == OP_EXECUTE && aux()[prev] == aux_val) { + lengths()[prev]++; + return (int)prev; + } + if (kind == OP_ESC && kinds()[prev] == OP_ESC && aux()[prev] == aux_val) { + lengths()[prev]++; + return (int)prev; + } + } if (idx >= PARSER_MAX_OPS) return -1; kinds()[idx] = kind; starts()[idx] = start; - lengths()[idx] = length; + if ((kind == OP_EXECUTE || kind == OP_ESC) && length == 0) { + lengths()[idx] = 1; + } else { + lengths()[idx] = length; + } aux()[idx] = aux_val; - if (kind == OP_CSI || kind == OP_ESC || kind == OP_DCS_HOOK) { + if (kind == OP_CSI || kind == OP_DCS_HOOK) { uint32_t input_pos = start; copy_params_to_arena(idx, s); lengths()[idx] = input_pos; starts()[idx] = param_starts()[idx]; + } else if (kind == OP_ESC) { + uint32_t input_pos = start; + uint32_t repeat = lengths()[idx]; + copy_params_to_arena(idx, s); + starts()[idx] = input_pos; + lengths()[idx] = repeat; } else { param_starts()[idx] = 0; param_counts()[idx] = 0; @@ -145,6 +166,7 @@ void reset(void) { header()->op_count = 0; header()->input_len = 0; header()->params_arena_len = 0; + header()->scan_offset = 0; } __attribute__((export_name("get_input_ptr"))) @@ -233,14 +255,22 @@ uint32_t probe_action(uint32_t state_id, uint32_t code) { return tr >> PARSER_TABLE_ACTION_SHIFT; } +static int emit_or_stop(uint8_t kind, uint32_t start, uint32_t length, uint32_t aux_val, ParserWasmState *s, uint32_t stop_at) { + if (emit_op(kind, start, length, aux_val, s) < 0) { + header()->scan_offset = stop_at; + return 0; + } + return 1; +} + __attribute__((export_name("scan"))) -int32_t scan(uint32_t length) { +int32_t scan(uint32_t offset, uint32_t length) { ParserWasmState *s = state(); ParserScanHeader *h = header(); h->op_count = 0; h->params_arena_len = 0; h->input_len = length; - uint32_t i = 0; + uint32_t i = offset; uint32_t code; uint32_t transition; uint32_t action; @@ -250,7 +280,9 @@ int32_t scan(uint32_t length) { code = input()[i]; if (code < 0x18 && s->current_state <= PARSER_STATE_CSI_PARAM + 2) { - if (emit_op(OP_EXECUTE, i, 0, code, s) < 0) return -1; + if (!emit_or_stop(OP_EXECUTE, i, 0, code, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->preceding_join_state = 0; i++; continue; @@ -276,7 +308,9 @@ int32_t scan(uint32_t length) { params_add_subparam(s, -1); } else if (ch >= 0x40 && ch <= 0x7e) { uint32_t ident = (s->collect << 8) | ch; - if (emit_op(OP_CSI, k, 0, ident, s) < 0) return -1; + if (!emit_or_stop(OP_CSI, k, 0, ident, s, k)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->preceding_join_state = 0; i = k; s->current_state = PARSER_STATE_GROUND; @@ -300,7 +334,9 @@ int32_t scan(uint32_t length) { uint32_t next_state = transition & PARSER_TABLE_STATE_MASK; switch (action) { case 1: /* ERROR - report state before transition (matches TS parser) */ - if (emit_op(OP_ERROR, i, 0, (s->current_state << 16) | code, s) < 0) return -1; + if (!emit_or_stop(OP_ERROR, i, 0, (s->current_state << 16) | code, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->current_state = next_state; break; default: @@ -319,12 +355,16 @@ int32_t scan(uint32_t length) { c += 4; } while (c < length && is_printable(input()[c])) c++; - if (emit_op(OP_PRINT, print_start, c - print_start, 0, s) < 0) return -1; + if (!emit_or_stop(OP_PRINT, print_start, c - print_start, 0, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } i = c - 1; break; } case PARSER_ACTION_EXECUTE: - if (emit_op(OP_EXECUTE, i, 0, code, s) < 0) return -1; + if (!emit_or_stop(OP_EXECUTE, i, 0, code, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->preceding_join_state = 0; break; case PARSER_ACTION_IGNORE: @@ -333,7 +373,9 @@ int32_t scan(uint32_t length) { break; case PARSER_ACTION_CSI_DISPATCH: { uint32_t ident = (s->collect << 8) | code; - if (emit_op(OP_CSI, i, 0, ident, s) < 0) return -1; + if (!emit_or_stop(OP_CSI, i, 0, ident, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->preceding_join_state = 0; break; } @@ -353,7 +395,9 @@ int32_t scan(uint32_t length) { break; case PARSER_ACTION_ESC_DISPATCH: { uint32_t ident = (s->collect << 8) | code; - if (emit_op(OP_ESC, i, 0, ident, s) < 0) return -1; + if (!emit_or_stop(OP_ESC, i, 0, ident, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->preceding_join_state = 0; break; } @@ -362,21 +406,27 @@ int32_t scan(uint32_t length) { s->collect = 0; break; case 4: /* OSC_START */ - if (emit_op(OP_OSC_START, i, 0, 0, s) < 0) return -1; + if (!emit_or_stop(OP_OSC_START, i, 0, 0, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->osc_start = i + 1; break; case 5: /* OSC_PUT */ for (uint32_t j = i + 1; ; j++) { if (j >= length || (code = input()[j]) < 0x20 || (code > 0x7f && code < PARSER_NON_ASCII_PRINTABLE)) { - if (j > i && emit_op(OP_OSC_PUT, i, j - i, 0, s) < 0) return -1; + if (j > i && !emit_or_stop(OP_OSC_PUT, i, j - i, 0, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } i = j - 1; break; } } break; case PARSER_ACTION_OSC_END: { - if (emit_op(OP_OSC_END, i, 0, code, s) < 0) return -1; + if (!emit_or_stop(OP_OSC_END, i, 0, code, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->osc_term = code; if (code == 0x1b) s->current_state = PARSER_STATE_ESCAPE; params_reset_zdm(s); @@ -386,21 +436,27 @@ int32_t scan(uint32_t length) { } case 12: /* DCS_HOOK */ s->dcs_hook_ident = (s->collect << 8) | code; - if (emit_op(OP_DCS_HOOK, i, 0, s->dcs_hook_ident, s) < 0) return -1; + if (!emit_or_stop(OP_DCS_HOOK, i, 0, s->dcs_hook_ident, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->dcs_start = i + 1; break; case 13: /* DCS_PUT */ for (uint32_t j = i + 1; ; j++) { if (j >= length || (code = input()[j]) == 0x18 || code == 0x1a || code == 0x1b || (code > 0x7f && code < PARSER_NON_ASCII_PRINTABLE)) { - if (j > i && emit_op(OP_DCS_PUT, i, j - i, 0, s) < 0) return -1; + if (j > i && !emit_or_stop(OP_DCS_PUT, i, j - i, 0, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } i = j - 1; break; } } break; case PARSER_ACTION_DCS_UNHOOK: { - if (emit_op(OP_DCS_UNHOOK, i, 0, code, s) < 0) return -1; + if (!emit_or_stop(OP_DCS_UNHOOK, i, 0, code, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } if (code == 0x1b) s->current_state = PARSER_STATE_ESCAPE; params_reset_zdm(s); s->collect = 0; @@ -409,7 +465,9 @@ int32_t scan(uint32_t length) { } case 15: /* APC_START */ s->apc_hook_ident = (s->collect << 8) | code; - if (emit_op(OP_APC_START, i, 0, s->apc_hook_ident, s) < 0) return -1; + if (!emit_or_stop(OP_APC_START, i, 0, s->apc_hook_ident, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } s->apc_start = i + 1; break; case 16: /* APC_PUT */ @@ -419,13 +477,17 @@ int32_t scan(uint32_t length) { (input()[j] >= 0x08 && input()[j] < 0x0e) || input()[j] >= PARSER_NON_ASCII_PRINTABLE )) continue; - if (j > i && emit_op(OP_APC_PUT, i, j - i, 0, s) < 0) return -1; + if (j > i && !emit_or_stop(OP_APC_PUT, i, j - i, 0, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } i = j - 1; break; } break; case PARSER_ACTION_APC_END: { - if (emit_op(OP_APC_END, i, 0, code, s) < 0) return -1; + if (!emit_or_stop(OP_APC_END, i, 0, code, s, i)) { + return h->op_count > 0 ? (int32_t)h->op_count : -1; + } if (code == 0x1b) s->current_state = PARSER_STATE_ESCAPE; params_reset_zdm(s); s->collect = 0; @@ -437,5 +499,6 @@ int32_t scan(uint32_t length) { } i++; } + h->scan_offset = length; return (int32_t)h->op_count; } diff --git a/src/common/parser/wasm/parser.h b/src/common/parser/wasm/parser.h index c13a29153..ad75fe3a7 100644 --- a/src/common/parser/wasm/parser.h +++ b/src/common/parser/wasm/parser.h @@ -74,6 +74,7 @@ typedef struct { uint32_t op_count; uint32_t input_len; uint32_t params_arena_len; + uint32_t scan_offset; } ParserScanHeader; #endif diff --git a/src/common/parser/wasm/parser.wasm b/src/common/parser/wasm/parser.wasm index 19815c944c89c1d6d5b1b7e09d3e4ee520730b5b..b3a9ac1dc5436ac1e119ef6bc579a208be305e02 100755 GIT binary patch literal 15166 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 EC1*i+wg3PC diff --git a/src/common/parser/wasm/parser.wasm.embed.ts b/src/common/parser/wasm/parser.wasm.embed.ts index 29e6ddbce..a16cb5e55 100644 --- a/src/common/parser/wasm/parser.wasm.embed.ts +++ b/src/common/parser/wasm/parser.wasm.embed.ts @@ -3,4 +3,4 @@ * @license MIT */ /** Base64-encoded parser.wasm (generated by bin/build_parser_wasm.sh) */ -export const PARSER_WASM_BASE64 = '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ADsBACAEQcCwB2pBADYCAAtBAEEAKAKAkARBAWo2AoCQBCAFIQQLIAQLC8pCAQBBgAgLwkIAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMBCwADAAMAAwADAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwADAQMAAwELAQMBAwEDAQMCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoJCwAKAAoACgAKAAoACgAKBwAACgAKAwsACggEBwAOCwAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAQAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAAMCAwADAQsCAwIDAgMCAwIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoCAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMDAAMBCwMDAwMDAwMDBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkECAQIBAgECAQIBAgECAQIBAgECAQIBAgECQQJBAkECQAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwMAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwADBAMAAwELBAMEAwQDBAMFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQQIBAgECAQIBAgECAQIBAgECAQIBAgECAYABgAGAAYAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHBAAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDAAMFAwADAQsFAwUDBQMFAwUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcFAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMAAwYDAAMBCwYDBgMGAwYDBgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwYAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAADBwAAAwELBwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABCAAIAAgACAAIAAgACAAABggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAAAYIAAAGAAYIAAgACAAIAAgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAYIBAcADgsIBQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAAAwkAAAMBCwkACQAJAAkADAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkKCAoICggKCAoICggKCAoICggKCAoICggKCQoJCgkKCQ0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDAkAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAADCgAAAwELCgAKAAoACgAMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQoICggKCAoICggKCAoICggKCAoICggKCAsACwALAAsADQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MCgAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABCwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsAAAMLAAADAQsLAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsLAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAwwAAAMBCwwADAAMAAwADAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkLAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDAwAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQAODQ0ADgAODQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAOCAQHAA4LDQ0AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABDgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAMOAAADAQsOAA4ADgAOAA8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8OAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAAAw8AAAMBCw8ADwAPAA8ADwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkQDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDw8AAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAARAAEAAQABAAEAAQABAAEAAQEBAQEBAQEBAQEBAQABAAEAAQABAAEAAQABAAEAAQAAAREAAAEQAREAAQABAAEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwARCAQHAA4LEBAA/gIEbmFtZQAMC3BhcnNlci53YXNtAcgCFQAFcmVzZXQBDWdldF9pbnB1dF9wdHICDWdldF9raW5kc19wdHIDDmdldF9zdGFydHNfcHRyBA9nZXRfbGVuZ3Roc19wdHIFC2dldF9hdXhfcHRyBhRnZXRfcGFyYW1fc3RhcnRzX3B0cgcUZ2V0X3BhcmFtX2NvdW50c19wdHIIDmdldF9wYXJhbXNfcHRyCQ1nZXRfc3RhdGVfcHRyCg5nZXRfaGVhZGVyX3B0cgsJc2V0X3N0YXRlDBBleHBvcnRfcGFyYW1zX3RvDQ5nZXRfcGFyYW1zX2xlbg4RZ2V0X3N1YnBhcmFtc19sZW4PEWdldF9zdWJwYXJhbXNfcHRyEBVnZXRfc3VicGFyYW1zX2lkeF9wdHIREHN5bmNfcGFyYW1zX2Zyb20SDHByb2JlX2FjdGlvbhMEc2NhbhQHZW1pdF9vcAcSAQAPX19zdGFja19wb2ludGVyCQoBAAcucm9kYXRhADgJcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkBDFVidW50dSBjbGFuZxExOC4xLjMgKDF1YnVudHUxKQAsD3RhcmdldF9mZWF0dXJlcwIrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQ='; +export const PARSER_WASM_BASE64 = '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AAIAAgACAAIAAgACAAIAAgABAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwEDAQMBAwADAQMAAwELAQMBAwEDAQMCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoJCwAKAAoACgAKAAoACgAKBwAACgAKAwsACggEBwAOCwAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAQAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAAMCAwADAQsCAwIDAgMCAwIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAgkCCQIJAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoCAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwMDAAMBCwMDAwMDAwMDBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkECAQIBAgECAQIBAgECAQIBAgECAQIBAgECQQJBAkECQAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwMAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwQDBAMEAwADBAMAAwELBAMEAwQDBAMFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQQIBAgECAQIBAgECAQIBAgECAQIBAgECAYABgAGAAYAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHBAAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDBQMFAwUDAAMFAwADAQsFAwUDBQMFAwUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBQkFCQUJBgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcFAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMGAwYDBgMAAwYDAAMBCwYDBgMGAwYDBgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwYAAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAADBwAAAwELBwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABCAAIAAgACAAIAAgACAAABggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAAAYIAAAGAAYIAAgACAAIAAgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAYIBAcADgsIBQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAAAwkAAAMBCwkACQAJAAkADAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkKCAoICggKCAoICggKCAoICggKCAoICggKCQoJCgkKCQ0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDAkAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAADCgAAAwELCgAKAAoACgAMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQoICggKCAoICggKCAoICggKCAoICggKCAsACwALAAsADQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MCgAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAACAQHAA4LAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABCwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsAAAMLAAADAQsLAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsLAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAwwAAAMBCwwADAAMAAwADAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkLAAsACwALAAsACwALAAsACwALAAsACwALAAsACwALAA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDAwAAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQAODQ0ADgAODQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwAOCAQHAA4LDQ0AAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABDgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAMOAAADAQsOAA4ADgAOAA8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8OAAADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADCQsAAwADAAMAAwADAAMAAwcAAAMAAwMLAAAIBAcADgsAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAAAw8AAAMBCw8ADwAPAA8ADwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkPCQ8JDwkQDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDxAPEA8QDw8AAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMJCwADAAMAAwADAAMAAwADBwAAAwADAwsAAAgEBwAOCwABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAARAAEAAQABAAEAAQABAAEAAQEBAQEBAQEBAQEBAQABAAEAAQABAAEAAQABAAEAAQAAAREAAAEQAREAAQABAAEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwkLAAMAAwADAAMAAwADAAMHAAADAAMDCwARCAQHAA4LEBAAgwMEbmFtZQAMC3BhcnNlci53YXNtAc0CFQAFcmVzZXQBDWdldF9pbnB1dF9wdHICDWdldF9raW5kc19wdHIDDmdldF9zdGFydHNfcHRyBA9nZXRfbGVuZ3Roc19wdHIFC2dldF9hdXhfcHRyBhRnZXRfcGFyYW1fc3RhcnRzX3B0cgcUZ2V0X3BhcmFtX2NvdW50c19wdHIIDmdldF9wYXJhbXNfcHRyCQ1nZXRfc3RhdGVfcHRyCg5nZXRfaGVhZGVyX3B0cgsJc2V0X3N0YXRlDBBleHBvcnRfcGFyYW1zX3RvDQ5nZXRfcGFyYW1zX2xlbg4RZ2V0X3N1YnBhcmFtc19sZW4PEWdldF9zdWJwYXJhbXNfcHRyEBVnZXRfc3VicGFyYW1zX2lkeF9wdHIREHN5bmNfcGFyYW1zX2Zyb20SDHByb2JlX2FjdGlvbhMEc2NhbhQMZW1pdF9vcl9zdG9wBxIBAA9fX3N0YWNrX3BvaW50ZXIJCgEABy5yb2RhdGEALwlwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQEOSG9tZWJyZXcgY2xhbmcGMjIuMS42AJQBD3RhcmdldF9mZWF0dXJlcwgrC2J1bGstbWVtb3J5Kw9idWxrLW1lbW9yeS1vcHQrFmNhbGwtaW5kaXJlY3Qtb3ZlcmxvbmcrCm11bHRpdmFsdWUrD211dGFibGUtZ2xvYmFscysTbm9udHJhcHBpbmctZnB0b2ludCsPcmVmZXJlbmNlLXR5cGVzKwhzaWduLWV4dA=='; diff --git a/test/benchmark/DecorationService.benchmark.ts b/test/benchmark/DecorationService.benchmark.ts index 534a1fa30..c03acb2bb 100644 --- a/test/benchmark/DecorationService.benchmark.ts +++ b/test/benchmark/DecorationService.benchmark.ts @@ -4,8 +4,8 @@ */ import { perfContext, before, RuntimeCase } from 'xterm-benchmark'; -import { DecorationService } from '../../src/common/services/DecorationService'; -import { MockLogService, MockBufferService, MockOptionsService } from '../../src/common/TestUtils.test'; +import { DecorationService } from '../../out/common/services/DecorationService'; +import { MockLogService, MockBufferService, MockOptionsService } from '../../out/common/TestUtils.test'; const enum Constants { COLS = 80, ROWS = 30, diff --git a/test/benchmark/EscapeSequenceParser.benchmark.ts b/test/benchmark/EscapeSequenceParser.benchmark.ts index c2cecfdbb..a5e8165b8 100644 --- a/test/benchmark/EscapeSequenceParser.benchmark.ts +++ b/test/benchmark/EscapeSequenceParser.benchmark.ts @@ -4,12 +4,12 @@ */ import { perfContext, before, beforeEach, ThroughputRuntimeCase } from 'xterm-benchmark'; -import { EscapeSequenceParser } from '../../src/common/parser/EscapeSequenceParser'; -import { C0, C1 } from '../../src/common/data/EscapeSequences'; -import { IDcsHandler, IOscHandler, IApcHandler, IParams } from '../../src/common/parser/Types'; -import { OscHandler } from '../../src/common/parser/OscParser'; -import { DcsHandler } from '../../src/common/parser/DcsParser'; -import { ApcHandler } from '../../src/common/parser/ApcParser'; +import { EscapeSequenceParser } from '../../out/common/parser/EscapeSequenceParser'; +import { C0, C1 } from '../../out/common/data/EscapeSequences'; +import { IDcsHandler, IOscHandler, IApcHandler, IParams } from '../../out/common/parser/Types'; +import { OscHandler } from '../../out/common/parser/OscParser'; +import { DcsHandler } from '../../out/common/parser/DcsParser'; +import { ApcHandler } from '../../out/common/parser/ApcParser'; const SIZE = 5000000; diff --git a/test/benchmark/Event.benchmark.ts b/test/benchmark/Event.benchmark.ts index ba3f8de9c..fb710a9f6 100644 --- a/test/benchmark/Event.benchmark.ts +++ b/test/benchmark/Event.benchmark.ts @@ -4,7 +4,7 @@ */ import { perfContext, before, RuntimeCase } from 'xterm-benchmark'; -import { Emitter } from '../../src/common/Event'; +import { Emitter } from '../../out/common/Event'; const ITERATIONS = 1_000_000; diff --git a/test/benchmark/Terminal.benchmark.ts b/test/benchmark/Terminal.benchmark.ts index 97579cb30..6f746d629 100644 --- a/test/benchmark/Terminal.benchmark.ts +++ b/test/benchmark/Terminal.benchmark.ts @@ -6,8 +6,8 @@ import { perfContext, before, ThroughputRuntimeCase } from 'xterm-benchmark'; import { spawn } from 'node-pty'; -import { Utf8ToUtf32, stringFromCodePoint } from '../../src/common/input/TextDecoder'; -import { CoreBrowserTerminal } from '../../src/browser/CoreBrowserTerminal'; +import { Utf8ToUtf32, stringFromCodePoint } from '../../out/common/input/TextDecoder'; +import { CoreBrowserTerminal } from '../../out/browser/CoreBrowserTerminal'; perfContext('Terminal: ls -lR /usr/lib', () => { let content = '';