diff --git a/.github/workflows/web-codestyle.yml b/.github/workflows/web-codestyle.yml index 3a8e9582..69e085b1 100644 --- a/.github/workflows/web-codestyle.yml +++ b/.github/workflows/web-codestyle.yml @@ -27,9 +27,6 @@ jobs: with: node-version: lts/* - - name: Pre-build dependencies - run: npm install yarn - - name: Run Binding Linter run: yarn && yarn lint working-directory: binding/web diff --git a/.github/workflows/web-demos.yml b/.github/workflows/web-demos.yml index 496f2ca9..b206cfd2 100644 --- a/.github/workflows/web-demos.yml +++ b/.github/workflows/web-demos.yml @@ -25,7 +25,7 @@ jobs: strategy: matrix: - node-version: [ 18.x, 20.x, 22.x ] + node-version: [ 18.x, 20.x, 22.x, 24.x ] steps: - uses: actions/checkout@v3 @@ -35,8 +35,11 @@ jobs: with: node-version: ${{ matrix.node-version }} - - name: Pre-build dependencies - run: npm install yarn +# ************** REMOVE AFTER RELEASE ******************** + - name: Build Web SDK + run: yarn && yarn copywasm && yarn build + working-directory: binding/web +# ******************************************************** - name: Install dependencies run: yarn install diff --git a/.github/workflows/web-perf.yml b/.github/workflows/web-perf.yml index 55a00d14..e794372c 100644 --- a/.github/workflows/web-perf.yml +++ b/.github/workflows/web-perf.yml @@ -26,6 +26,7 @@ jobs: strategy: matrix: node-version: [ lts/* ] + device: [ cpu:1 ] include: - node-version: lts/* num_test_iterations: 10 @@ -39,9 +40,6 @@ jobs: with: node-version: lts/* - - name: Pre-build dependencies - run: npm install yarn - - name: Install dependencies run: yarn install @@ -55,4 +53,4 @@ jobs: run: yarn setup-test - name: Test - run: yarn test-perf --env ACCESS_KEY=${{secrets.PV_VALID_ACCESS_KEY}},NUM_TEST_ITERATIONS=${{matrix.num_test_iterations}},PROC_PERFORMANCE_THRESHOLD_SEC=${{matrix.proc_performance_threshold_sec}} + run: yarn test-perf --env ACCESS_KEY=${{secrets.PV_VALID_ACCESS_KEY}},DEVICE=${{matrix.device}},NUM_TEST_ITERATIONS=${{matrix.num_test_iterations}},PROC_PERFORMANCE_THRESHOLD_SEC=${{matrix.proc_performance_threshold_sec}} diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 007beda6..77c51371 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -29,7 +29,8 @@ jobs: strategy: matrix: - node-version: [ 18.x, 20.x, 22.x ] + device: [ cpu, cpu:1 ] + node-version: [ 18.x, 20.x, 22.x, 24.x ] steps: - uses: actions/checkout@v3 @@ -39,9 +40,6 @@ jobs: with: node-version: ${{ matrix.node-version }} - - name: Pre-build dependencies - run: npm install yarn - - name: Install dependencies run: yarn install @@ -55,4 +53,4 @@ jobs: run: yarn setup-test - name: Test - run: yarn test --env ACCESS_KEY=${{secrets.PV_VALID_ACCESS_KEY}} + run: yarn test --env ACCESS_KEY=${{secrets.PV_VALID_ACCESS_KEY}},DEVICE=${{matrix.device}} diff --git a/binding/web/README.md b/binding/web/README.md index 0497cf67..f9467e37 100644 --- a/binding/web/README.md +++ b/binding/web/README.md @@ -20,11 +20,30 @@ voice assistants. Orca is: - Firefox - Safari +## Requirements + +Orca Web Binding uses [SharedArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) +for processing speaker diarization. + +Include the following headers in the response to enable the use of `SharedArrayBuffers`: + +``` +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp +``` + +Refer to our [Web demo](../../demo/web) for an example on creating a server with the corresponding response headers. + +Browsers that lack support for `SharedArrayBuffers` or required headers will fall back to using standard `ArrayBuffers`, +which disables multithreaded performance. + ### Restrictions IndexedDB is required to use `Orca` in a worker thread. Browsers without IndexedDB support (i.e. Firefox Incognito Mode) should use `Orca` in the main thread. +Multi-threading is only enabled for `Orca` when using on a web worker. + ## Installation ### Package diff --git a/binding/web/cypress.config.ts b/binding/web/cypress.config.ts index fe3f2682..b6f479a1 100644 --- a/binding/web/cypress.config.ts +++ b/binding/web/cypress.config.ts @@ -12,4 +12,12 @@ export default defineConfig({ video: false, screenshotOnRunFailure: false, }, + setupNodeEvents(on) { + on('before:browser:launch', (browser, launchOptions) => { + if (browser.name === 'chrome') { + launchOptions.args.push('--enable-features=SharedArrayBuffer'); + } + return launchOptions; + }); + }, }); diff --git a/binding/web/package.json b/binding/web/package.json index 4b7c8297..3163bc40 100644 --- a/binding/web/package.json +++ b/binding/web/package.json @@ -3,7 +3,7 @@ "description": "Orca Text-to-Speech engine for web browsers (via WebAssembly)", "author": "Picovoice Inc", "license": "Apache-2.0", - "version": "1.2.1", + "version": "2.0.0", "keywords": [ "orca", "web", @@ -29,8 +29,8 @@ "format": "prettier --write \"**/*.{js,ts,json}\"", "copywasm": "node scripts/copy_wasm.js", "setup-test": "node scripts/setup_test.js && npx pvbase64 -i ./test/orca_params_en_male.pv -o ./test/orca_params_en_male.js && npx pvbase64 -i ./test/orca_params_en_female.pv -o ./test/orca_params_en_female.js", - "test": "cypress run --spec test/orca.test.ts", - "test-perf": "cypress run --spec test/orca_perf.test.ts" + "test": "cypress run --spec test/orca.test.ts --browser chrome", + "test-perf": "cypress run --spec test/orca_perf.test.ts --browser chrome" }, "dependencies": { "@picovoice/web-utils": "=1.4.3" diff --git a/binding/web/rollup.config.js b/binding/web/rollup.config.js index ba9a2076..5bcf1390 100644 --- a/binding/web/rollup.config.js +++ b/binding/web/rollup.config.js @@ -69,7 +69,7 @@ export default { exclude: '**/node_modules/**', }), base64({ - include: ['./**/*.wasm', './**/*.txt'], + include: ['./src/lib/*.wasm', './src/lib/*.txt'], }) ], }; diff --git a/binding/web/scripts/copy_wasm.js b/binding/web/scripts/copy_wasm.js index 2d022815..083ec34f 100644 --- a/binding/web/scripts/copy_wasm.js +++ b/binding/web/scripts/copy_wasm.js @@ -2,10 +2,10 @@ const fs = require("fs"); const { join, extname } = require("path"); const wasmFiles = [ - "pv_orca.wasm", - "pv_orca.js", "pv_orca_simd.wasm", "pv_orca_simd.js", + "pv_orca_pthread.wasm", + "pv_orca_pthread.js", ] console.log("Copying the WASM model..."); diff --git a/binding/web/src/index.ts b/binding/web/src/index.ts index 01f5630f..b2131505 100644 --- a/binding/web/src/index.ts +++ b/binding/web/src/index.ts @@ -2,6 +2,7 @@ import { Orca, OrcaStream } from './orca'; import { OrcaWorker, OrcaStreamWorker } from './orca_worker'; import { + OrcaOptions, OrcaModel, OrcaSynthesizeParams, OrcaPhoneme, @@ -20,24 +21,25 @@ import { import * as OrcaErrors from './orca_errors'; -import orcaWasm from './lib/pv_orca.wasm'; -import orcaWasmLib from './lib/pv_orca.txt'; import orcaWasmSimd from './lib/pv_orca_simd.wasm'; import orcaWasmSimdLib from './lib/pv_orca_simd.txt'; +import orcaWasmPThread from './lib/pv_orca_pthread.wasm'; +import orcaWasmPThreadLib from './lib/pv_orca_pthread.txt'; -Orca.setWasm(orcaWasm); -Orca.setWasmLib(orcaWasmLib); Orca.setWasmSimd(orcaWasmSimd); Orca.setWasmSimdLib(orcaWasmSimdLib); -OrcaWorker.setWasm(orcaWasm); -OrcaWorker.setWasmLib(orcaWasmLib); +Orca.setWasmPThread(orcaWasmPThread); +Orca.setWasmPThreadLib(orcaWasmPThreadLib); OrcaWorker.setWasmSimd(orcaWasmSimd); OrcaWorker.setWasmSimdLib(orcaWasmSimdLib); +OrcaWorker.setWasmPThread(orcaWasmPThread); +OrcaWorker.setWasmPThreadLib(orcaWasmPThreadLib); export { Orca, OrcaStream, OrcaErrors, + OrcaOptions, OrcaModel, OrcaSynthesizeParams, OrcaPhoneme, diff --git a/binding/web/src/orca.ts b/binding/web/src/orca.ts index c89e87c5..2614f915 100644 --- a/binding/web/src/orca.ts +++ b/binding/web/src/orca.ts @@ -22,11 +22,12 @@ import { loadModel, } from '@picovoice/web-utils'; -import createModule from "./lib/pv_orca"; import createModuleSimd from "./lib/pv_orca_simd"; +import createModulePThread from "./lib/pv_orca_pthread"; import { OrcaAlignment, + OrcaOptions, OrcaModel, OrcaPhoneme, OrcaStreamSynthesizeResult, @@ -44,6 +45,7 @@ import { pvStatusToException } from './orca_errors'; type pv_orca_init_type = ( accessKey: number, modelPath: number, + device: number, object: number ) => Promise; type pv_orca_delete_type = (object: number) => void; @@ -91,6 +93,8 @@ type pv_orca_version_type = () => number; type pv_set_sdk_type = (sdk: number) => void; type pv_get_error_stack_type = (messageStack: number, messageStackDepth: number) => number; type pv_free_error_stack_type = (messageStack: number) => void; +type pv_orca_list_hardware_devices_type = (hardwareDevices: number, numHardwareDevices: number) => number; +type pv_orca_free_hardware_devices_type = (hardwareDevices: number, numHardwareDevices: number) => number; type OrcaModule = EmscriptenModule & { _pv_free: (address: number) => void; @@ -113,6 +117,8 @@ type OrcaModule = EmscriptenModule & { _pv_set_sdk: pv_set_sdk_type; _pv_get_error_stack: pv_get_error_stack_type; _pv_free_error_stack: pv_free_error_stack_type; + _pv_orca_list_hardware_devices: pv_orca_list_hardware_devices_type; + _pv_orca_free_hardware_devices: pv_orca_free_hardware_devices_type; // em default functions addFunction: typeof addFunction; @@ -138,6 +144,12 @@ type OrcaWasmOutput = { streamPcmAddressAddress: number; }; +export interface OrcaStream { + synthesize(text: string): Promise + flush(): Promise; + close(): Promise +} + /** * OrcaStream object that converts a stream of text to a stream of audio. */ @@ -335,12 +347,6 @@ class Stream implements OrcaStream { } } -export interface OrcaStream { - synthesize(text: string): Promise - flush(): Promise; - close(): Promise -} - /** * JavaScript/WebAssembly Binding for Orca */ @@ -363,10 +369,11 @@ export class Orca { private readonly _messageStackDepthAddress: number; private readonly _streamPcmAddressAddress: number; - private static _wasm: string; - private static _wasmLib: string; private static _wasmSimd: string; private static _wasmSimdLib: string; + private static _wasmPThread: string; + private static _wasmPThreadLib: string; + private static _sdk: string = 'web'; private static _orcaMutex = new Mutex(); @@ -419,26 +426,6 @@ export class Orca { return this._maxCharacterLimit; } - /** - * Set base64 wasm file. - * @param wasm Base64'd wasm file to use to initialize wasm. - */ - public static setWasm(wasm: string): void { - if (this._wasm === undefined) { - this._wasm = wasm; - } - } - - /** - * Set base64 wasm file in text format. - * @param wasmLib Base64'd wasm file in text format. - */ - public static setWasmLib(wasmLib: string): void { - if (this._wasmLib === undefined) { - this._wasmLib = wasmLib; - } - } - /** * Set base64 wasm file with SIMD feature. * @param wasmSimd Base64'd wasm file to use to initialize wasm. @@ -459,6 +446,26 @@ export class Orca { } } + /** + * Set base64 wasm file with SIMD and pthread feature. + * @param wasmPThread Base64'd wasm file to use to initialize wasm. + */ + public static setWasmPThread(wasmPThread: string): void { + if (this._wasmPThread === undefined) { + this._wasmPThread = wasmPThread; + } + } + + /** + * Set base64 SIMD and thread wasm file in text format. + * @param wasmPThreadLib Base64'd wasm file in text format. + */ + public static setWasmPThreadLib(wasmPThreadLib: string): void { + if (this._wasmPThreadLib === undefined) { + this._wasmPThreadLib = wasmPThreadLib; + } + } + public static setSdk(sdk: string): void { Orca._sdk = sdk; } @@ -476,37 +483,66 @@ export class Orca { * Set to a different name to use multiple models across `orca` instances. * @param model.forceWrite Flag to overwrite the model in storage even if it exists. * @param model.version Version of the model file. Increment to update the model file in storage. + * @param options Optional configuration arguments. + * @param options.device String representation of the device (e.g., CPU or GPU) to use. If set to `best`, the most + * suitable device is selected automatically. If set to `gpu`, the engine uses the first available GPU device. To + * select a specific GPU device, set this argument to `gpu:${GPU_INDEX}`, where `${GPU_INDEX}` is the index of the + * target GPU. If set to `cpu`, the engine will run on the CPU with the default number of threads. To specify the + * number of threads, set this argument to `cpu:${NUM_THREADS}`, where `${NUM_THREADS}` is the desired number of + * threads. * * @returns An instance of the Orca engine. */ public static async create( accessKey: string, model: OrcaModel, + options: OrcaOptions = {} ): Promise { const customWritePath = (model.customWritePath) ? model.customWritePath : 'orca_model'; const modelPath = await loadModel({ ...model, customWritePath }); - return Orca._init(accessKey, modelPath); + return Orca._init(accessKey, modelPath, options); } public static async _init( accessKey: string, modelPath: string, + options: OrcaOptions = {} ): Promise { if (!isAccessKeyValid(accessKey)) { throw new OrcaErrors.OrcaInvalidArgumentError('Invalid AccessKey'); } + let { device = 'best' } = options; + + const isSimd = await simd(); + if (!isSimd) { + throw new OrcaErrors.OrcaRuntimeError('Browser not supported.'); + } + + const isWorkerScope = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; + if ( + !isWorkerScope && + (device === 'best' || (device.startsWith('cpu') && device !== 'cpu:1')) + ) { + // eslint-disable-next-line no-console + console.warn('Multi-threading is not supported on main thread.'); + device = 'cpu:1'; + } + + const sabDefined = typeof SharedArrayBuffer !== 'undefined' + && (device !== "cpu:1"); + return new Promise((resolve, reject) => { Orca._orcaMutex .runExclusive(async () => { - const isSimd = await simd(); const wasmOutput = await Orca.initWasm( accessKey.trim(), modelPath.trim(), - (isSimd) ? this._wasmSimd : this._wasm, - (isSimd) ? this._wasmSimdLib : this._wasmLib, - (isSimd) ? createModuleSimd : createModule); + device.trim(), + (sabDefined) ? this._wasmPThread : this._wasmSimd, + (sabDefined) ? this._wasmPThreadLib : this._wasmSimdLib, + (sabDefined) ? createModulePThread : createModuleSimd); return new Orca(wasmOutput); }) .then((result: Orca) => { @@ -897,6 +933,7 @@ export class Orca { private static async initWasm( accessKey: string, modelPath: string, + device: string, wasmBase64: string, wasmLibBase64: string, createModuleFunc: any @@ -913,7 +950,7 @@ export class Orca { const pv_orca_init: pv_orca_init_type = this.wrapAsyncFunction( module, "pv_orca_init", - 3); + 4); const pv_orca_synthesize: pv_orca_synthesize_type = this.wrapAsyncFunction( module, "pv_orca_synthesize", @@ -949,6 +986,16 @@ export class Orca { module.HEAPU8.set(modelPathEncoded, modelPathAddress); module.HEAPU8[modelPathAddress + modelPathEncoded.length] = 0; + const deviceEncoded = new TextEncoder().encode(device); + const deviceAddress = module._malloc((device.length + 1) * Uint8Array.BYTES_PER_ELEMENT); + if (deviceAddress === 0) { + throw new OrcaErrors.OrcaOutOfMemoryError( + 'malloc failed: Cannot allocate memory' + ); + } + module.HEAP8.set(deviceEncoded, deviceAddress); + module.HEAPU8[deviceAddress + device.length] = 0; + const sdkEncoded = new TextEncoder().encode(this._sdk); const sdkAddress = module._malloc((sdkEncoded.length + 1) * Uint8Array.BYTES_PER_ELEMENT); if (!sdkAddress) { @@ -972,9 +1019,11 @@ export class Orca { const initStatus = await pv_orca_init( accessKeyAddress, modelPathAddress, + deviceAddress, objectAddressAddress); module._pv_free(accessKeyAddress); module._pv_free(modelPathAddress); + module._pv_free(deviceAddress); if (initStatus !== PvStatus.SUCCESS) { const messageStack = Orca.getMessageStack( @@ -1142,6 +1191,111 @@ export class Orca { return messageStack; } + /** + * Lists all available devices that Orca can use for inference. + * Each entry in the list can be the used as the `device` argument when calling the `.create` method. + * + * @returns List of all available devices that Orca can use for inference. + */ + public static async listAvailableDevices(): Promise { + return new Promise((resolve, reject) => { + Orca._orcaMutex + .runExclusive(async () => { + const isSimd = await simd(); + if (!isSimd) { + throw new OrcaErrors.OrcaRuntimeError('Unsupported Browser'); + } + + const blob = new Blob( + [base64ToUint8Array(this._wasmSimdLib)], + { type: 'application/javascript' } + ); + const module: OrcaModule = await createModuleSimd({ + mainScriptUrlOrBlob: blob, + wasmBinary: base64ToUint8Array(this._wasmSimd), + }); + + const hardwareDevicesAddressAddress = module._malloc(Int32Array.BYTES_PER_ELEMENT); + if (hardwareDevicesAddressAddress === 0) { + throw new OrcaErrors.OrcaOutOfMemoryError( + 'malloc failed: Cannot allocate memory for hardwareDevices' + ); + } + + const numHardwareDevicesAddress = module._malloc(Int32Array.BYTES_PER_ELEMENT); + if (numHardwareDevicesAddress === 0) { + throw new OrcaErrors.OrcaOutOfMemoryError( + 'malloc failed: Cannot allocate memory for numHardwareDevices' + ); + } + + const status: PvStatus = module._pv_orca_list_hardware_devices( + hardwareDevicesAddressAddress, + numHardwareDevicesAddress + ); + + const messageStackDepthAddress = module._malloc(Int32Array.BYTES_PER_ELEMENT); + if (!messageStackDepthAddress) { + throw new OrcaErrors.OrcaOutOfMemoryError( + 'malloc failed: Cannot allocate memory for messageStackDepth' + ); + } + + const messageStackAddressAddressAddress = module._malloc(Int32Array.BYTES_PER_ELEMENT); + if (!messageStackAddressAddressAddress) { + throw new OrcaErrors.OrcaOutOfMemoryError( + 'malloc failed: Cannot allocate memory messageStack' + ); + } + + if (status !== PvStatus.SUCCESS) { + const messageStack = Orca.getMessageStack( + module._pv_get_error_stack, + module._pv_free_error_stack, + messageStackAddressAddressAddress, + messageStackDepthAddress, + module.HEAP32, + module.HEAPU8, + ); + module._pv_free(messageStackAddressAddressAddress); + module._pv_free(messageStackDepthAddress); + + throw pvStatusToException( + status, + 'List devices failed', + messageStack + ); + } + module._pv_free(messageStackAddressAddressAddress); + module._pv_free(messageStackDepthAddress); + + const numHardwareDevices: number = module.HEAP32[numHardwareDevicesAddress / Int32Array.BYTES_PER_ELEMENT]; + module._pv_free(numHardwareDevicesAddress); + + const hardwareDevicesAddress = module.HEAP32[hardwareDevicesAddressAddress / Int32Array.BYTES_PER_ELEMENT]; + + const hardwareDevices: string[] = []; + for (let i = 0; i < numHardwareDevices; i++) { + const deviceAddress = module.HEAP32[hardwareDevicesAddress / Int32Array.BYTES_PER_ELEMENT + i]; + hardwareDevices.push(arrayBufferToStringAtIndex(module.HEAPU8, deviceAddress)); + } + module._pv_orca_free_hardware_devices( + hardwareDevicesAddress, + numHardwareDevices + ); + module._pv_free(hardwareDevicesAddressAddress); + + return hardwareDevices; + }) + .then((result: string[]) => { + resolve(result); + }) + .catch((error: any) => { + reject(error); + }); + }); + } + private static wrapAsyncFunction(module: OrcaModule, functionName: string, numArgs: number): (...args: any[]) => any { // @ts-ignore return module.cwrap( diff --git a/binding/web/src/orca_worker.ts b/binding/web/src/orca_worker.ts index 204f7b23..19fe7ab7 100644 --- a/binding/web/src/orca_worker.ts +++ b/binding/web/src/orca_worker.ts @@ -12,6 +12,7 @@ import PvWorker from 'web-worker:./orca_worker_handler.ts'; import { + OrcaOptions, OrcaModel, OrcaSynthesizeParams, OrcaSynthesizeResult, @@ -185,10 +186,11 @@ export class OrcaWorker { private readonly _maxCharacterLimit: number; private readonly _validCharacters: string[]; - private static _wasm: string; - private static _wasmLib: string; private static _wasmSimd: string; private static _wasmSimdLib: string; + private static _wasmPThread: string; + private static _wasmPThreadLib: string; + private static _sdk: string = 'web'; private constructor( @@ -240,26 +242,6 @@ export class OrcaWorker { return this._worker; } - /** - * Set base64 wasm file. - * @param wasm Base64'd wasm file to use to initialize wasm. - */ - public static setWasm(wasm: string): void { - if (this._wasm === undefined) { - this._wasm = wasm; - } - } - - /** - * Set base64 wasm lib file in text format. - * @param wasmLib Base64'd wasm lib file in text format. - */ - public static setWasmLib(wasmLib: string): void { - if (this._wasmLib === undefined) { - this._wasmLib = wasmLib; - } - } - /** * Set base64 wasm file with SIMD feature. * @param wasmSimd Base64'd wasm SIMD file to use to initialize wasm. @@ -280,6 +262,26 @@ export class OrcaWorker { } } + /** + * Set base64 wasm file with SIMD and pthread feature. + * @param wasmPThread Base64'd wasm file to use to initialize wasm. + */ + public static setWasmPThread(wasmPThread: string): void { + if (this._wasmPThread === undefined) { + this._wasmPThread = wasmPThread; + } + } + + /** + * Set base64 SIMD and thread wasm file in text format. + * @param wasmPThreadLib Base64'd wasm file in text format. + */ + public static setWasmPThreadLib(wasmPThreadLib: string): void { + if (this._wasmPThreadLib === undefined) { + this._wasmPThreadLib = wasmPThreadLib; + } + } + public static setSdk(sdk: string): void { OrcaWorker._sdk = sdk; } @@ -297,12 +299,19 @@ export class OrcaWorker { * Set to a different name to use multiple models across `orca` instances. * @param model.forceWrite Flag to overwrite the model in storage even if it exists. * @param model.version Version of the model file. Increment to update the model file in storage. - * + * @param options Optional configuration arguments. + * @param options.device String representation of the device (e.g., CPU or GPU) to use. If set to `best`, the most + * suitable device is selected automatically. If set to `gpu`, the engine uses the first available GPU device. To + * select a specific GPU device, set this argument to `gpu:${GPU_INDEX}`, where `${GPU_INDEX}` is the index of the + * target GPU. If set to `cpu`, the engine will run on the CPU with the default number of threads. To specify the + * number of threads, set this argument to `cpu:${NUM_THREADS}`, where `${NUM_THREADS}` is the desired number of + * threads. * @returns An instance of OrcaWorker. */ public static async create( accessKey: string, model: OrcaModel, + options: OrcaOptions ): Promise { const customWritePath = model.customWritePath ? model.customWritePath @@ -354,11 +363,12 @@ export class OrcaWorker { command: 'init', accessKey: accessKey, modelPath: modelPath, - wasm: this._wasm, - wasmLib: this._wasmLib, wasmSimd: this._wasmSimd, wasmSimdLib: this._wasmSimdLib, + wasmPThread: this._wasmPThread, + wasmPThreadLib: this._wasmPThreadLib, sdk: this._sdk, + options: options }); return returnPromise; diff --git a/binding/web/src/orca_worker_handler.ts b/binding/web/src/orca_worker_handler.ts index 347fde12..8e197a8b 100644 --- a/binding/web/src/orca_worker_handler.ts +++ b/binding/web/src/orca_worker_handler.ts @@ -36,13 +36,16 @@ self.onmessage = async function( return; } try { - Orca.setWasm(event.data.wasm); Orca.setWasmSimd(event.data.wasmSimd); - Orca.setWasmLib(event.data.wasmLib); Orca.setWasmSimdLib(event.data.wasmSimdLib); + Orca.setWasmPThread(event.data.wasmPThread); + Orca.setWasmPThreadLib(event.data.wasmPThreadLib); + Orca.setSdk(event.data.sdk); + orca = await Orca._init( event.data.accessKey, event.data.modelPath, + event.data.options ); self.postMessage({ command: 'ok', diff --git a/binding/web/src/types.ts b/binding/web/src/types.ts index 41b6ff55..96b2afce 100644 --- a/binding/web/src/types.ts +++ b/binding/web/src/types.ts @@ -1,5 +1,5 @@ /* - Copyright 2024 Picovoice Inc. + Copyright 2024-2025 Picovoice Inc. You may not use this file except in compliance with the license. A copy of the license is located in the "LICENSE" file accompanying this source. @@ -57,15 +57,21 @@ export type OrcaSynthesizeResult = { export type OrcaStreamSynthesizeResult = Int16Array | null +export type OrcaOptions = { + /** @defaultValue 'best' */ + device?: string; +}; + export type OrcaWorkerInitRequest = { command: 'init'; accessKey: string; modelPath: string; - wasm: string; - wasmLib: string; wasmSimd: string; wasmSimdLib: string; + wasmPThread: string; + wasmPThreadLib: string; sdk: string; + options: OrcaOptions; }; export type OrcaWorkerSynthesizeRequest = { diff --git a/binding/web/test/orca.test.ts b/binding/web/test/orca.test.ts index b08ad742..43be80f7 100644 --- a/binding/web/test/orca.test.ts +++ b/binding/web/test/orca.test.ts @@ -25,17 +25,22 @@ import orcaParamsFemale from './orca_params_en_female'; import testData from '../cypress/fixtures/resources/.test/test_data.json'; const ACCESS_KEY = Cypress.env('ACCESS_KEY'); +const DEVICE: string = Cypress.env('DEVICE'); const EXPECTED_MAX_CHARACTER_LIMIT = 2000; const EXPECTED_SAMPLE_RATE = 22050; const getAudioFileName = (model: string, synthesis_type: string): string => model.replace(".pv", `_${synthesis_type}.wav`); -const compareArrays = (arr1: Int16Array, arr2: Int16Array, step: number) => { - expect(arr1.length).eq(arr2.length); - for (let i = 0; i < arr1.length - step; i += step) { - expect(arr1[i]).closeTo(arr2[i], 1); - } +const PCM_OUTLIER_THRESHOLD = 400; +const PCM_OUTLIER_COUNT_THRESHOLD = 0.05; + +const validatePcm = (pcm: Int16Array, groundTruth: Int16Array) => { + expect(pcm.length).gt(0); + expect(pcm.length).eq(groundTruth.length); + const diffPcm = pcm.map((a, i) => Math.abs(a - groundTruth[i])); + const diffOutliers = diffPcm.filter(d => d > PCM_OUTLIER_THRESHOLD).length / diffPcm.length; + expect(diffOutliers).lte(PCM_OUTLIER_COUNT_THRESHOLD); }; const runInitTest = async ( @@ -43,12 +48,14 @@ const runInitTest = async ( params: { accessKey?: string; model?: PvModel; + device?: string; expectFailure?: boolean; } = {}, ) => { const { accessKey = ACCESS_KEY, model = { publicPath: `/test/orca_params_en_male.pv`, forceWrite: true }, + device = DEVICE, expectFailure = false, } = params; @@ -56,7 +63,7 @@ const runInitTest = async ( let isFailed = false; try { - orca = await instance.create(accessKey, model); + orca = await instance.create(accessKey, model, { device }); expect(typeof orca.version).eq('string'); expect(orca.version.length).gt(0); expect(orca.maxCharacterLimit).eq(EXPECTED_MAX_CHARACTER_LIMIT); @@ -111,6 +118,13 @@ describe('Orca Binding', function() { }); }); + it(`should be able to handle invalid device (${testCaseString})`, async () => { + await runInitTest(instance, { + device: "cloud:9", + expectFailure: true, + }); + }); + it(`should be able to init with public path (${testCaseString})`, async () => { await runInitTest(instance, { model: { publicPath, forceWrite: true }, @@ -133,6 +147,7 @@ describe('Orca Binding', function() { const orca = await Orca.create( ACCESS_KEY, { publicPath: publicPath, forceWrite: true }, + { device: DEVICE } ); // @ts-ignore @@ -166,7 +181,8 @@ describe('Orca Binding', function() { const orca = await instance.create('invalidAccessKey', { publicPath, forceWrite: true, - }); + }, + { device: DEVICE }); expect(orca).to.be.undefined; } catch (e: any) { messageStack = e.messageStack; @@ -179,12 +195,18 @@ describe('Orca Binding', function() { const orca = await instance.create('invalidAccessKey', { publicPath, forceWrite: true, - }); + }, + { device: DEVICE }); expect(orca).to.be.undefined; } catch (e: any) { expect(messageStack.length).to.be.eq(e.messageStack.length); } }); + it('List hardware devices', async () => { + const hardwareDevices: string[] = await Orca.listAvailableDevices(); + expect(Array.isArray(hardwareDevices)).to.be.true; + expect(hardwareDevices).length.to.be.greaterThan(0); + }); } }); @@ -204,6 +226,7 @@ describe('Sentence Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); try { @@ -222,7 +245,7 @@ describe('Sentence Tests', function() { streamPcm.push(...endPcm); } - compareArrays(new Int16Array(streamPcm), rawPcm, 500); + validatePcm(new Int16Array(streamPcm), rawPcm); await orcaStream.close(); } catch (e) { expect(e).to.be.undefined; @@ -245,6 +268,7 @@ describe('Sentence Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); const { pcm } = await orca.synthesize(testCase.text_no_punctuation); @@ -267,13 +291,14 @@ describe('Sentence Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); const { pcm } = await orca.synthesize( testCase.text, { speechRate: 1, randomState: testCase.random_state }, ); - compareArrays(pcm, rawPcm, 500); + validatePcm(pcm, rawPcm); if (orca instanceof OrcaWorker) { orca.terminate(); @@ -292,6 +317,7 @@ describe('Sentence Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); const { pcm } = await orca.synthesize(testCase.text_custom_pronunciation); @@ -312,6 +338,7 @@ describe('Sentence Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); const { pcm: pcmSlow } = await orca.synthesize(testCase.text, { speechRate: 0.7 }); @@ -342,9 +369,15 @@ describe('Sentence Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); - const maxNumChars = orca.maxCharacterLimit; + let maxNumChars = orca.maxCharacterLimit; + if (model === "orca_params_ko_female.pv") { + maxNumChars /= 2; + return; + } + const { pcm } = await orca.synthesize('a'.repeat(maxNumChars)); expect(pcm.length).gt(0); @@ -375,6 +408,7 @@ describe('Alignment Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); const { @@ -422,6 +456,7 @@ describe('Invalid Tests', function() { const orca = await instance.create( ACCESS_KEY, { publicPath, forceWrite: true }, + { device: DEVICE } ); for (const failureCase of testCase.text_invalid) { diff --git a/binding/web/test/orca_perf.test.ts b/binding/web/test/orca_perf.test.ts index 9393fc1f..4dee77a1 100644 --- a/binding/web/test/orca_perf.test.ts +++ b/binding/web/test/orca_perf.test.ts @@ -14,6 +14,7 @@ import { Orca, OrcaWorker } from '../'; import testData from '../cypress/fixtures/resources/.test/test_data.json'; const ACCESS_KEY = Cypress.env('ACCESS_KEY'); +const DEVICE = Cypress.env('DEVICE'); const NUM_TEST_ITERATIONS = Number(Cypress.env('NUM_TEST_ITERATIONS')); const PROC_PERFORMANCE_THRESHOLD_SEC = Number(Cypress.env('PROC_PERFORMANCE_THRESHOLD_SEC')); @@ -28,6 +29,7 @@ async function testPerformance( const orca = await instance.create( ACCESS_KEY, { publicPath: publicPath, forceWrite: true }, + { device: DEVICE } ); let start = Date.now(); diff --git a/demo/web/package.json b/demo/web/package.json index 5a04f300..1b88eaf9 100644 --- a/demo/web/package.json +++ b/demo/web/package.json @@ -1,6 +1,6 @@ { "name": "orca-web-demo", - "version": "1.2.1", + "version": "2.0.0", "description": "A basic demo to show how to use Orca for web browsers, using the IIFE version of the library", "main": "index.js", "private": true, @@ -17,7 +17,8 @@ "author": "Picovoice Inc", "license": "Apache-2.0", "dependencies": { - "@picovoice/orca-web": "1.2.1" + "@picovoice/orca-web": "file:../../binding/web", + "mime-types": "^2.1.35" }, "devDependencies": { "@eslint/js": "^9.22.0", diff --git a/demo/web/scripts/run_demo.js b/demo/web/scripts/run_demo.js index fecbdf17..cd897b28 100644 --- a/demo/web/scripts/run_demo.js +++ b/demo/web/scripts/run_demo.js @@ -96,9 +96,7 @@ fs.writeFileSync( })();`, ); -const command = process.platform === "win32" ? "npx.cmd" : "npx"; - -child_process.execSync(`${command} http-server -c-1 -a localhost -p 5000`, { +child_process.execSync(`node server.js -a localhost -p 5000`, { shell: true, stdio: "inherit", }); diff --git a/demo/web/server.js b/demo/web/server.js new file mode 100644 index 00000000..9c81bd87 --- /dev/null +++ b/demo/web/server.js @@ -0,0 +1,42 @@ +const http = require('http'); +const fs = require('fs'); +const path = require('path'); +const mime = require('mime-types'); + +const PORT = process.env.PORT || 5000; +const HOST = '127.0.0.1'; // Listen on localhost +const publicDir = path.join(__dirname); + +const server = http.createServer((req, res) => { + const urlPath = req.url.split('?')[0]; + const url = (urlPath === '/') ? '/index.html' : urlPath; + const filePath = path.join(publicDir, url); + const contentType = mime.lookup(filePath) || 'application/octet-stream'; + + fs.readFile(filePath, (err, content) => { + if (err) { + if (err.code === 'ENOENT') { + // File not found + res.writeHead(404, { 'Content-Type': 'text/plain' }); + res.end('404 Not Found'); + } else { + // Server error + res.writeHead(500, { 'Content-Type': 'text/plain' }); + res.end(`500 Internal Server Error: ${err.code}`); + } + } else { + // Success + res.writeHead(200, { + 'Content-Type': contentType, + 'Content-Length': content.length, + 'Cross-Origin-Opener-Policy': 'same-origin', + 'Cross-Origin-Embedder-Policy': 'require-corp' + }); + res.end(content); + } + }); +}); + +server.listen(PORT, HOST, () => { + console.log(`Server is running on http://${HOST}:${PORT}`); +}); \ No newline at end of file diff --git a/demo/web/yarn.lock b/demo/web/yarn.lock index 27ce2bba..3baaeb18 100644 --- a/demo/web/yarn.lock +++ b/demo/web/yarn.lock @@ -96,10 +96,8 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== -"@picovoice/orca-web@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@picovoice/orca-web/-/orca-web-1.2.1.tgz#cea3e78c9d3e17623d838c7ecf62518c408764fb" - integrity sha512-RGlhLAWeP/OmG9RHC9gfRMCnuV6XDDJGPhMMXaUC34oWnlIH//jVtjk4Fr0SKQARY532D9Mw18pPWGUPmnzBGQ== +"@picovoice/orca-web@file:../../binding/web": + version "2.0.0" dependencies: "@picovoice/web-utils" "=1.4.3" @@ -648,6 +646,18 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mime@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" diff --git a/lib/wasm/pv_orca_pthread.js b/lib/wasm/pv_orca_pthread.js index 503d7386..e095e107 100644 --- a/lib/wasm/pv_orca_pthread.js +++ b/lib/wasm/pv_orca_pthread.js @@ -6,7 +6,7 @@ var pv_orca_pthread = (() => { function(moduleArg = {}) { var moduleRtn; -function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF64}var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&self.name=="em-pthread";function _typeof$2(o){null;return _typeof$2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof$2(o)}function toPrimitive(t,r){if("object"!=_typeof$2(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof$2(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function toPropertyKey(t){var i=toPrimitive(t,"string");return"symbol"==_typeof$2(i)?i:i+""}function _defineProperty(e,r,t){return(r=toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x["default"]:x}var regeneratorRuntime$3={exports:{}};var _typeof$1={exports:{}};var _typeof_1=_typeof$1.exports;(function(module){function _typeof(o){null;return module.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},module.exports.__esModule=true,module.exports["default"]=module.exports,_typeof(o)}module.exports=_typeof,module.exports.__esModule=true,module.exports["default"]=module.exports})(_typeof$1);var _typeofExports=_typeof$1.exports;var _typeof=getDefaultExportFromCjs(_typeofExports);var regeneratorRuntime$1=regeneratorRuntime$3.exports;(function(module){var _typeof=_typeofExports["default"];function _regeneratorRuntime(){"use strict";module.exports=_regeneratorRuntime=function _regeneratorRuntime(){return e},module.exports.__esModule=true,module.exports["default"]=module.exports;var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{define({},"")}catch(t){define=function define(t,e,r){return t[e]=r}}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,a=Object.create(i.prototype),c=new Context(n||[]);return o(a,"_invoke",{value:makeInvokeMethod(t,r,c)}),a}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=wrap;var h="suspendedStart",l="suspendedYield",f="executing",s="completed",y={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var p={};define(p,a,function(){return this});var d=Object.getPrototypeOf,v=d&&d(d(values([])));v&&v!==r&&n.call(v,a)&&(p=v);var g=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(p);function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){define(t,e,function(t){return this._invoke(e,t)})})}function AsyncIterator(t,e){function invoke(r,o,i,a){var c=tryCatch(t[r],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==_typeof(h)&&n.call(h,"__await")?e.resolve(h.__await).then(function(t){invoke("next",t,i,a)},function(t){invoke("throw",t,i,a)}):e.resolve(h).then(function(t){u.value=t,i(u)},function(t){return invoke("throw",t,i,a)})}a(c.arg)}var r;o(this,"_invoke",{value:function value(t,n){function callInvokeWithMethodAndArg(){return new e(function(e,r){invoke(t,n,e,r)})}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(e,r,n){var o=h;return function(i,a){if(o===f)throw Error("Generator is already running");if(o===s){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=maybeInvokeDelegate(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=s,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=f;var p=tryCatch(e,r,n);if("normal"===p.type){if(o=n.done?s:l,p.arg===y)continue;return{value:p.arg,done:n.done}}"throw"===p.type&&(o=s,n.method="throw",n.arg=p.arg)}}}function maybeInvokeDelegate(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator["return"]&&(r.method="return",r.arg=t,maybeInvokeDelegate(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=tryCatch(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function next(){for(;++o=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),y}},catch:function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function delegateYield(e,r,n){return this.delegate={iterator:values(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y}},e}module.exports=_regeneratorRuntime,module.exports.__esModule=true,module.exports["default"]=module.exports})(regeneratorRuntime$3);var regeneratorRuntimeExports=regeneratorRuntime$3.exports;var regeneratorRuntime$2=getDefaultExportFromCjs(regeneratorRuntimeExports);var runtime=regeneratorRuntimeExports();var regenerator=runtime;try{regeneratorRuntime=runtime}catch(accidentalStrictMode){if(typeof globalThis==="object"){globalThis.regeneratorRuntime=runtime}else{Function("r","regeneratorRuntime = r")(runtime)}}var _regeneratorRuntime=getDefaultExportFromCjs(regenerator);const BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};const BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};const PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};const OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};const ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};class Utils{static getFirstMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>0&&match[1]||""}static getSecondMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>1&&match[2]||""}static matchAndReturnConst(regexp,ua,_const){if(regexp.test(ua)){return _const}return void 0}static getWindowsVersionName(version){switch(version){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return undefined}}static getMacOSVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]!==10)return undefined;switch(v[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return undefined}}static getAndroidVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]===1&&v[1]<5)return undefined;if(v[0]===1&&v[1]<6)return"Cupcake";if(v[0]===1&&v[1]>=6)return"Donut";if(v[0]===2&&v[1]<2)return"Eclair";if(v[0]===2&&v[1]===2)return"Froyo";if(v[0]===2&&v[1]>2)return"Gingerbread";if(v[0]===3)return"Honeycomb";if(v[0]===4&&v[1]<1)return"Ice Cream Sandwich";if(v[0]===4&&v[1]<4)return"Jelly Bean";if(v[0]===4&&v[1]>=4)return"KitKat";if(v[0]===5)return"Lollipop";if(v[0]===6)return"Marshmallow";if(v[0]===7)return"Nougat";if(v[0]===8)return"Oreo";if(v[0]===9)return"Pie";return undefined}static getVersionPrecision(version){return version.split(".").length}static compareVersions(versionA,versionB,isLoose=false){const versionAPrecision=Utils.getVersionPrecision(versionA);const versionBPrecision=Utils.getVersionPrecision(versionB);let precision=Math.max(versionAPrecision,versionBPrecision);let lastPrecision=0;const chunks=Utils.map([versionA,versionB],version=>{const delta=precision-Utils.getVersionPrecision(version);const _version=version+new Array(delta+1).join(".0");return Utils.map(_version.split("."),chunk=>new Array(20-chunk.length).join("0")+chunk).reverse()});if(isLoose){lastPrecision=precision-Math.min(versionAPrecision,versionBPrecision)}precision-=1;while(precision>=lastPrecision){if(chunks[0][precision]>chunks[1][precision]){return 1}if(chunks[0][precision]===chunks[1][precision]){if(precision===lastPrecision){return 0}precision-=1}else if(chunks[0][precision]{result[key]=assigner[key]})}}return obj}static getBrowserAlias(browserName){return BROWSER_ALIASES_MAP[browserName]}static getBrowserTypeByAlias(browserAlias){return BROWSER_MAP[browserAlias]||""}}const commonVersionIdentifier=/version\/(\d+(\.?_?\d+)+)/i;const browsersList=[{test:[/googlebot/i],describe(ua){const browser={name:"Googlebot"};const version=Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/opera/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opr\/|opios/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/SamsungBrowser/i],describe(ua){const browser={name:"Samsung Internet for Android"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Whale/i],describe(ua){const browser={name:"NAVER Whale Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MZBrowser/i],describe(ua){const browser={name:"MZ Browser"};const version=Utils.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/focus/i],describe(ua){const browser={name:"Focus"};const version=Utils.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/swing/i],describe(ua){const browser={name:"Swing"};const version=Utils.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/coast/i],describe(ua){const browser={name:"Opera Coast"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(ua){const browser={name:"Opera Touch"};const version=Utils.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/yabrowser/i],describe(ua){const browser={name:"Yandex Browser"};const version=Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/ucbrowser/i],describe(ua){const browser={name:"UC Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Maxthon|mxios/i],describe(ua){const browser={name:"Maxthon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/epiphany/i],describe(ua){const browser={name:"Epiphany"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/puffin/i],describe(ua){const browser={name:"Puffin"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sleipnir/i],describe(ua){const browser={name:"Sleipnir"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/k-meleon/i],describe(ua){const browser={name:"K-Meleon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/micromessenger/i],describe(ua){const browser={name:"WeChat"};const version=Utils.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qqbrowser/i],describe(ua){const browser={name:/qqbrowserlite/i.test(ua)?"QQ Browser Lite":"QQ Browser"};const version=Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/msie|trident/i],describe(ua){const browser={name:"Internet Explorer"};const version=Utils.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/\sedg\//i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/edg([ea]|ios)/i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/vivaldi/i],describe(ua){const browser={name:"Vivaldi"};const version=Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/seamonkey/i],describe(ua){const browser={name:"SeaMonkey"};const version=Utils.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sailfish/i],describe(ua){const browser={name:"Sailfish"};const version=Utils.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,ua);if(version){browser.version=version}return browser}},{test:[/silk/i],describe(ua){const browser={name:"Amazon Silk"};const version=Utils.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/phantom/i],describe(ua){const browser={name:"PhantomJS"};const version=Utils.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/slimerjs/i],describe(ua){const browser={name:"SlimerJS"};const version=Utils.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const browser={name:"BlackBerry"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/(web|hpw)[o0]s/i],describe(ua){const browser={name:"WebOS Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/bada/i],describe(ua){const browser={name:"Bada"};const version=Utils.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/tizen/i],describe(ua){const browser={name:"Tizen"};const version=Utils.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qupzilla/i],describe(ua){const browser={name:"QupZilla"};const version=Utils.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/firefox|iceweasel|fxios/i],describe(ua){const browser={name:"Firefox"};const version=Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/electron/i],describe(ua){const browser={name:"Electron"};const version=Utils.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MiuiBrowser/i],describe(ua){const browser={name:"Miui"};const version=Utils.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/chromium/i],describe(ua){const browser={name:"Chromium"};const version=Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/chrome|crios|crmo/i],describe(ua){const browser={name:"Chrome"};const version=Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/GSA/i],describe(ua){const browser={name:"Google Search"};const version=Utils.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const browser={name:"Android Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/playstation 4/i],describe(ua){const browser={name:"PlayStation 4"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/safari|applewebkit/i],describe(ua){const browser={name:"Safari"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/.*/i],describe(ua){const regexpWithoutDeviceSpec=/^(.*)\/(.*) /;const regexpWithDeviceSpec=/^(.*)\/(.*)[ \t]\((.*)/;const hasDeviceSpec=ua.search("\\(")!==-1;const regexp=hasDeviceSpec?regexpWithDeviceSpec:regexpWithoutDeviceSpec;return{name:Utils.getFirstMatch(regexp,ua),version:Utils.getSecondMatch(regexp,ua)}}}];var osParsersList=[{test:[/Roku\/DVP/],describe(ua){const version=Utils.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,ua);return{name:OS_MAP.Roku,version:version}}},{test:[/windows phone/i],describe(ua){const version=Utils.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.WindowsPhone,version:version}}},{test:[/windows /i],describe(ua){const version=Utils.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,ua);const versionName=Utils.getWindowsVersionName(version);return{name:OS_MAP.Windows,version:version,versionName:versionName}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(ua){const result={name:OS_MAP.iOS};const version=Utils.getSecondMatch(/(Version\/)(\d[\d.]+)/,ua);if(version){result.version=version}return result}},{test:[/macintosh/i],describe(ua){const version=Utils.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,ua).replace(/[_\s]/g,".");const versionName=Utils.getMacOSVersionName(version);const os={name:OS_MAP.MacOS,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(ipod|iphone|ipad)/i],describe(ua){const version=Utils.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,ua).replace(/[_\s]/g,".");return{name:OS_MAP.iOS,version:version}}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const version=Utils.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,ua);const versionName=Utils.getAndroidVersionName(version);const os={name:OS_MAP.Android,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(web|hpw)[o0]s/i],describe(ua){const version=Utils.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,ua);const os={name:OS_MAP.WebOS};if(version&&version.length){os.version=version}return os}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const version=Utils.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,ua)||Utils.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,ua)||Utils.getFirstMatch(/\bbb(\d+)/i,ua);return{name:OS_MAP.BlackBerry,version:version}}},{test:[/bada/i],describe(ua){const version=Utils.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Bada,version:version}}},{test:[/tizen/i],describe(ua){const version=Utils.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Tizen,version:version}}},{test:[/linux/i],describe(){return{name:OS_MAP.Linux}}},{test:[/CrOS/],describe(){return{name:OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe(ua){const version=Utils.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.PlayStation4,version:version}}}];var platformParsersList=[{test:[/googlebot/i],describe(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe(ua){const model=Utils.getFirstMatch(/(can-l01)/i,ua)&&"Nova";const platform={type:PLATFORMS_MAP.mobile,vendor:"Huawei"};if(model){platform.model=model}return platform}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){const iDevice=parser.test(/ipod|iphone/i);const likeIDevice=parser.test(/like (ipod|iphone)/i);return iDevice&&!likeIDevice},describe(ua){const model=Utils.getFirstMatch(/(ipod|iphone)/i,ua);return{type:PLATFORMS_MAP.mobile,vendor:"Apple",model:model}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName(true)==="blackberry"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test(parser){return parser.getBrowserName(true)==="bada"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName()==="windows phone"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test(parser){const osMajorVersion=Number(String(parser.getOSVersion()).split(".")[0]);return parser.getOSName(true)==="android"&&osMajorVersion>=3},describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){return parser.getOSName(true)==="android"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getOSName(true)==="macos"},describe(){return{type:PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test(parser){return parser.getOSName(true)==="windows"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="linux"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="playstation 4"},describe(){return{type:PLATFORMS_MAP.tv}}},{test(parser){return parser.getOSName(true)==="roku"},describe(){return{type:PLATFORMS_MAP.tv}}}];var enginesParsersList=[{test(parser){return parser.getBrowserName(true)==="microsoft edge"},describe(ua){const isBlinkBased=/\sedg\//i.test(ua);if(isBlinkBased){return{name:ENGINE_MAP.Blink}}const version=Utils.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,ua);return{name:ENGINE_MAP.EdgeHTML,version:version}}},{test:[/trident/i],describe(ua){const engine={name:ENGINE_MAP.Trident};const version=Utils.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){return parser.test(/presto/i)},describe(ua){const engine={name:ENGINE_MAP.Presto};const version=Utils.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){const isGecko=parser.test(/gecko/i);const likeGecko=parser.test(/like gecko/i);return isGecko&&!likeGecko},describe(ua){const engine={name:ENGINE_MAP.Gecko};const version=Utils.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test:[/(apple)?webkit\/537\.36/i],describe(){return{name:ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe(ua){const engine={name:ENGINE_MAP.WebKit};const version=Utils.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}}];class Parser{constructor(UA,skipParsing=false){if(UA===void 0||UA===null||UA===""){throw new Error("UserAgent parameter can't be empty")}this._ua=UA;this.parsedResult={};if(skipParsing!==true){this.parse()}}getUA(){return this._ua}test(regex){return regex.test(this._ua)}parseBrowser(){this.parsedResult.browser={};const browserDescriptor=Utils.find(browsersList,_browser=>{if(typeof _browser.test==="function"){return _browser.test(this)}if(_browser.test instanceof Array){return _browser.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(browserDescriptor){this.parsedResult.browser=browserDescriptor.describe(this.getUA())}return this.parsedResult.browser}getBrowser(){if(this.parsedResult.browser){return this.parsedResult.browser}return this.parseBrowser()}getBrowserName(toLowerCase){if(toLowerCase){return String(this.getBrowser().name).toLowerCase()||""}return this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){if(this.parsedResult.os){return this.parsedResult.os}return this.parseOS()}parseOS(){this.parsedResult.os={};const os=Utils.find(osParsersList,_os=>{if(typeof _os.test==="function"){return _os.test(this)}if(_os.test instanceof Array){return _os.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(os){this.parsedResult.os=os.describe(this.getUA())}return this.parsedResult.os}getOSName(toLowerCase){const{name:name}=this.getOS();if(toLowerCase){return String(name).toLowerCase()||""}return name||""}getOSVersion(){return this.getOS().version}getPlatform(){if(this.parsedResult.platform){return this.parsedResult.platform}return this.parsePlatform()}getPlatformType(toLowerCase=false){const{type:type}=this.getPlatform();if(toLowerCase){return String(type).toLowerCase()||""}return type||""}parsePlatform(){this.parsedResult.platform={};const platform=Utils.find(platformParsersList,_platform=>{if(typeof _platform.test==="function"){return _platform.test(this)}if(_platform.test instanceof Array){return _platform.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(platform){this.parsedResult.platform=platform.describe(this.getUA())}return this.parsedResult.platform}getEngine(){if(this.parsedResult.engine){return this.parsedResult.engine}return this.parseEngine()}getEngineName(toLowerCase){if(toLowerCase){return String(this.getEngine().name).toLowerCase()||""}return this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};const engine=Utils.find(enginesParsersList,_engine=>{if(typeof _engine.test==="function"){return _engine.test(this)}if(_engine.test instanceof Array){return _engine.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(engine){this.parsedResult.engine=engine.describe(this.getUA())}return this.parsedResult.engine}parse(){this.parseBrowser();this.parseOS();this.parsePlatform();this.parseEngine();return this}getResult(){return Utils.assign({},this.parsedResult)}satisfies(checkTree){const platformsAndOSes={};let platformsAndOSCounter=0;const browsers={};let browsersCounter=0;const allDefinitions=Object.keys(checkTree);allDefinitions.forEach(key=>{const currentDefinition=checkTree[key];if(typeof currentDefinition==="string"){browsers[key]=currentDefinition;browsersCounter+=1}else if(typeof currentDefinition==="object"){platformsAndOSes[key]=currentDefinition;platformsAndOSCounter+=1}});if(platformsAndOSCounter>0){const platformsAndOSNames=Object.keys(platformsAndOSes);const OSMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isOS(name));if(OSMatchingDefinition){const osResult=this.satisfies(platformsAndOSes[OSMatchingDefinition]);if(osResult!==void 0){return osResult}}const platformMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isPlatform(name));if(platformMatchingDefinition){const platformResult=this.satisfies(platformsAndOSes[platformMatchingDefinition]);if(platformResult!==void 0){return platformResult}}}if(browsersCounter>0){const browserNames=Object.keys(browsers);const matchingDefinition=Utils.find(browserNames,name=>this.isBrowser(name,true));if(matchingDefinition!==void 0){return this.compareVersion(browsers[matchingDefinition])}}return undefined}isBrowser(browserName,includingAlias=false){const defaultBrowserName=this.getBrowserName().toLowerCase();let browserNameLower=browserName.toLowerCase();const alias=Utils.getBrowserTypeByAlias(browserNameLower);if(includingAlias&&alias){browserNameLower=alias.toLowerCase()}return browserNameLower===defaultBrowserName}compareVersion(version){let expectedResults=[0];let comparableVersion=version;let isLoose=false;const currentBrowserVersion=this.getBrowserVersion();if(typeof currentBrowserVersion!=="string"){return void 0}if(version[0]===">"||version[0]==="<"){comparableVersion=version.substr(1);if(version[1]==="="){isLoose=true;comparableVersion=version.substr(2)}else{expectedResults=[]}if(version[0]===">"){expectedResults.push(1)}else{expectedResults.push(-1)}}else if(version[0]==="="){comparableVersion=version.substr(1)}else if(version[0]==="~"){isLoose=true;comparableVersion=version.substr(1)}return expectedResults.indexOf(Utils.compareVersions(currentBrowserVersion,comparableVersion,isLoose))>-1}isOS(osName){return this.getOSName(true)===String(osName).toLowerCase()}isPlatform(platformType){return this.getPlatformType(true)===String(platformType).toLowerCase()}isEngine(engineName){return this.getEngineName(true)===String(engineName).toLowerCase()}is(anything,includingAlias=false){return this.isBrowser(anything,includingAlias)||this.isOS(anything)||this.isPlatform(anything)}some(anythings=[]){return anythings.some(anything=>this.is(anything))}}class Bowser{static getParser(UA,skipParsing=false){if(typeof UA!=="string"){throw new Error("UserAgent should be a string")}return new Parser(UA,skipParsing)}static parse(UA){return new Parser(UA).getResult()}static get BROWSER_MAP(){return BROWSER_MAP}static get ENGINE_MAP(){return ENGINE_MAP}static get OS_MAP(){return OS_MAP}static get PLATFORMS_MAP(){return PLATFORMS_MAP}}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t=this._data.length){return undefined}var res=this._data.slice(this._pos,this._pos+bytes);this._pos+=bytes;return res}},{key:"set",value:function set(pos,data){this._pos=pos;this._data=data}},{key:"clear",value:function clear(){this._pos=0;this._data=new Uint8Array}}])}();var PvFileIDB=function(_PvFile){function PvFileIDB(path,meta,db,mode){var _this;_classCallCheck(this,PvFileIDB);_this=_callSuper$1(this,PvFileIDB);_this._pageSize=512*1024;_this._pagePtr=0;_this._pageOffset=0;_this._path=path;_this._meta=meta;_this._db=db;_this._mode=mode;_this._cache=new PvCache;return _this}_inherits(PvFileIDB,_PvFile);return _createClass(PvFileIDB,[{key:"pageSize",get:function get(){return this._pageSize}},{key:"close",value:function(){var _close=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:this._db.close();case 1:case"end":return _context.stop()}},_callee,this)}));function close(){return _close.apply(this,arguments)}return close}()},{key:"read",value:function(){var _read=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(size,count){var _this2=this;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:return _context2.abrupt("return",new Promise(function(resolve,reject){if(!_this2.exists()){reject(new Error("'".concat(_this2._path,"' doesn't exist.")));return}if(_this2._isEOF){var err=new Error("EOF");err.name="EndOfFile";reject(err);return}var copied=0;var maxToCopy=Math.min(size*count,_this2._meta.size);var totalElems=maxToCopy-maxToCopy%size;var buffer=new Uint8Array(totalElems);var res=_this2._cache.get(totalElems);if(res){copied+=res.length;_this2._pageOffset+=res.length;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(totalElems===copied){resolve(res);return}buffer.set(res)}var keyRange=IDBKeyRange.bound("".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr)),"".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr+Math.floor(totalElems/_this2._pageSize)+1)));var store=_this2._store;var req=store.openCursor(keyRange);req.onsuccess=function(){var cursor=req.result;if(!cursor||_this2._isEOF){return}var toCopy=Math.min(totalElems-copied,cursor.value.length-_this2._pageOffset);buffer.set(cursor.value.slice(_this2._pageOffset,_this2._pageOffset+toCopy),copied);copied+=toCopy;_this2._pageOffset+=toCopy;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(copied1&&_args4[1]!==undefined?_args4[1]:1;return _context4.abrupt("return",new Promise(function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(resolve,reject){var _store$transaction3;var store,getCurrentPage,last,newContent,newSize,newMeta,pages,i,keyRange,_store$transaction4;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(_this3._mode==="readonly")){_context3.next=3;break}reject(new Error("Instance is readonly mode only."));return _context3.abrupt("return");case 3:if(!(typeof version!=="number"&&version<=0)){_context3.next=6;break}reject(new Error("Version should be a positive number"));return _context3.abrupt("return");case 6:store=_this3._store;getCurrentPage=function getCurrentPage(){return new Promise(function(res){var req=store.get("".concat(_this3._path,"-").concat(PvFileIDB.createPage(_this3._pagePtr)));req.onsuccess=function(){if(req.result!==undefined){res(req.result.slice(0,_this3._pageOffset))}else{res(new Uint8Array(0))}}})};_context3.next=10;return getCurrentPage();case 10:last=_context3.sent;newContent=new Uint8Array(last.length+content.length);newContent.set(last);newContent.set(content,last.length);newSize=_this3._pagePtr*_this3._pageSize+newContent.length;newMeta={size:newSize,numPages:Math.ceil(newSize/_this3._pageSize),version:version,pageSize:_this3._pageSize};store.put(newMeta,_this3._path);pages=Math.ceil(newContent.length/_this3._pageSize);for(i=0;i=this._meta.numPages-1&&this._pageOffset>=this._meta.size%this._pageSize}},{key:"_store",get:function get(){return this._db.transaction(PV_FILE_STORE,this._mode).objectStore(PV_FILE_STORE)}}],[{key:"open",value:function open(path,mode){if(!self.indexedDB){var error=new Error("IndexedDB is not supported");error.name="IndexedDBNotSupported";throw error}return new Promise(function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(resolve,reject){var db,req,_error2;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1)switch(_context7.prev=_context7.next){case 0:_context7.prev=0;_context7.next=3;return getDB();case 3:db=_context7.sent;req=db.transaction(PV_FILE_STORE,"readwrite").objectStore(PV_FILE_STORE).get(path);req.onerror=function(){reject(req.error)};req.onsuccess=function(){var meta=req.result;var dbMode=mode.includes("r")?"readonly":"readwrite";if(meta===undefined&&dbMode==="readonly"){var _error=new Error("'".concat(path,"' doesn't exist."));_error.name="FileNotExists";reject(_error);return}var fileIDB=new PvFileIDB(path,meta,db,dbMode);if(mode.includes("a")){fileIDB.seek(0,2)}resolve(fileIDB)};_context7.next=12;break;case 9:_context7.prev=9;_context7.t0=_context7["catch"](0);if(_context7.t0.name==="InvalidStateError"){_error2=new Error("IndexedDB is not supported");_error2.name="IndexedDBNotSupported";reject(_error2)}else{reject(_context7.t0)}case 12:case"end":return _context7.stop()}},_callee7,null,[[0,9]])}));return function(_x8,_x9){return _ref3.apply(this,arguments)}}())}},{key:"createPage",value:function createPage(page){return("00000"+page).slice(-6)}}])}(PvFile);function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}var PvFileMem=function(_PvFile){function PvFileMem(path,meta,db,mode){var _this;_classCallCheck(this,PvFileMem);_this=_callSuper(this,PvFileMem);_this._pos=0;_this._path=path;_this._meta=meta;_this._mode=mode;return _this}_inherits(PvFileMem,_PvFile);return _createClass(PvFileMem,[{key:"close",value:function close(){return}},{key:"read",value:function read(size,count){if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(this._isEOF){var err=new Error("EOF");err.name="EndOfFile";throw err}var toCopy=Math.min(size*count,this._file.length-this._pos);var totalElems=toCopy-toCopy%size;var buffer=new Uint8Array(totalElems);buffer.set(this._file.slice(this._pos,this._pos+totalElems),0);this._pos+=totalElems;return buffer}},{key:"write",value:function write(content){var version=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;var newFile=new Uint8Array(this._pos+content.length);if(this._file!==undefined){newFile.set(this._file.slice(0,this._pos));newFile.set(content,this._pos)}else{newFile.set(content)}this._file=newFile;this._pos+=content.length}},{key:"seek",value:function seek(offset,whence){if(!this.exists()&&this._mode==="readonly"){throw new Error("'".concat(this._path,"' doesn't exist."))}if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(offset<0){var err=new Error("EOF");err.name="EndOfFile";throw err}var newOffset;if(whence===0){newOffset=Math.min(offset,this._file.length)}else if(whence===1){newOffset=Math.min(this._pos+offset,this._file.length)}else if(whence===2){newOffset=Math.min(this._file.length+offset,this._file.length)}else{throw new Error("Invalid operation: ".concat(whence,"."))}this._pos=newOffset}},{key:"tell",value:function tell(){if(!this.exists()){return-1}return this._pos}},{key:"remove",value:function(){var _remove=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(this.exists()){_context.next=2;break}throw new Error("ENOENT");case 2:PvFileMem._memFiles["delete"](this._path);this._pos=0;case 4:case"end":return _context.stop()}},_callee,this)}));function remove(){return _remove.apply(this,arguments)}return remove}()},{key:"exists",value:function exists(){return this._file!==undefined}},{key:"_isEOF",get:function get(){return this._pos>=this._file.length}},{key:"_file",get:function get(){return PvFileMem._memFiles.get(this._path)},set:function set(content){PvFileMem._memFiles.set(this._path,content)}}],[{key:"open",value:function open(path,mode){var file=PvFileMem._memFiles.get(path);var dbMode=mode.includes("r")?"readonly":"readwrite";if(file===undefined&&dbMode==="readonly"){var error=new Error("'".concat(path,"' doesn't exist."));error.name="FileNotExists";throw error}var fileMem=new PvFileMem(path,undefined,undefined,dbMode);if(mode.includes("a")){fileMem.seek(0,2)}return fileMem}}])}(PvFile);PvFileMem._memFiles=new Map;function unsignedAddress(address){if(address<0){return address>>>0}return address}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayLikeToArray$2(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray$1(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray$1(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray$1(r,a):void 0}}function _arrayLikeToArray$1(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=16){this.endComputePass();this.flushCommandEncoder()}}},{key:"endComputePass",value:function endComputePass(){if(this._passEncoder){this._passEncoder.end();this._passEncoder=null}}},{key:"getBuffer",value:function getBuffer(sizeBytes,usage){var mappedAtCreation=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var label=arguments.length>3?arguments[3]:undefined;var key=this.getBufferKey(sizeBytes,usage);if(this.bufferReusePool.has(key)){var buffers=this.bufferReusePool.get(key);if(buffers&&buffers.length>0){return buffers.pop()}}return this.device.createBuffer({size:sizeBytes*Uint8Array.BYTES_PER_ELEMENT,usage:usage,mappedAtCreation:mappedAtCreation,label:label})}},{key:"scheduleUniformBufferForRelease",value:function scheduleUniformBufferForRelease(buffer){this._uniformBuffersPendingRelease.push(buffer)}},{key:"releaseBuffer",value:function releaseBuffer(buffer){var clearBuffer=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(clearBuffer){this.endComputePass();this.commandEncoder.clearBuffer(buffer,0,buffer.size)}var key=this.getBufferKey(buffer.size,buffer.usage);if(!this.bufferReusePool.has(key)){this.bufferReusePool.set(key,[])}this.bufferReusePool.get(key).push(buffer)}},{key:"sync",value:function(){var _sync=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){var _this=this;var _iterator,_step,k,buffers,_iterator3,_step3,b,_loop,_i,_Object$entries;return _regeneratorRuntime.wrap(function _callee$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:this.endComputePass();this.flushCommandEncoder();_context3.next=4;return this.device.queue.onSubmittedWorkDone();case 4:_iterator=_createForOfIteratorHelper$1(this.bufferReusePool.keys());try{for(_iterator.s();!(_step=_iterator.n()).done;){k=_step.value;buffers=this.bufferReusePool.get(k);if(buffers&&buffers.length>0){_iterator3=_createForOfIteratorHelper$1(buffers);try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){b=_step3.value;b===null||b===void 0||b.destroy()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}}catch(err){_iterator.e(err)}finally{_iterator.f()}this.bufferReusePool.clear();_loop=_regeneratorRuntime.mark(function _loop(){var _Object$entries$_i,shaderName,timestampBuffers,_iterator2,_step2,_loop2;return _regeneratorRuntime.wrap(function _loop$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_Object$entries$_i=_slicedToArray(_Object$entries[_i],2),shaderName=_Object$entries$_i[0],timestampBuffers=_Object$entries$_i[1];if(!_this.shaderTimes[shaderName]){_this.shaderTimes[shaderName]=[]}_iterator2=_createForOfIteratorHelper$1(timestampBuffers);_context2.prev=3;_loop2=_regeneratorRuntime.mark(function _loop2(){var timestampBuffer;return _regeneratorRuntime.wrap(function _loop2$(_context){while(1)switch(_context.prev=_context.next){case 0:timestampBuffer=_step2.value;timestampBuffer.mapAsync(GPUMapMode.READ).then(function(){var times=new BigInt64Array(timestampBuffer.getMappedRange());var timeDif=times[1]-times[0];timestampBuffer.unmap();timestampBuffer.destroy();_this.shaderTimes[shaderName].push(timeDif)});case 2:case"end":return _context.stop()}},_loop2)});_iterator2.s();case 6:if((_step2=_iterator2.n()).done){_context2.next=10;break}return _context2.delegateYield(_loop2(),"t0",8);case 8:_context2.next=6;break;case 10:_context2.next=15;break;case 12:_context2.prev=12;_context2.t1=_context2["catch"](3);_iterator2.e(_context2.t1);case 15:_context2.prev=15;_iterator2.f();return _context2.finish(15);case 18:case"end":return _context2.stop()}},_loop,null,[[3,12,15,18]])});_i=0,_Object$entries=Object.entries(this.timestampBuffers);case 9:if(!(_i<_Object$entries.length)){_context3.next=14;break}return _context3.delegateYield(_loop(),"t0",11);case 11:_i++;_context3.next=9;break;case 14:this.timestampBuffers={};case 15:case"end":return _context3.stop()}},_callee,this)}));function sync(){return _sync.apply(this,arguments)}return sync}()},{key:"reportShaderTimes",value:function reportShaderTimes(){for(var _i2=0,_Object$entries2=Object.entries(this.shaderTimes);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i2],2),shaderName=_Object$entries2$_i[0],shaderTimes=_Object$entries2$_i[1];var timeSum=0n;var _iterator4=_createForOfIteratorHelper$1(shaderTimes),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var shaderTime=_step4.value;timeSum=timeSum+shaderTime}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}var totalSeconds=Number(timeSum)*1e-9;var avgSeconds=(totalSeconds/shaderTimes.length).toFixed(7);console.log("".concat(shaderName,", ").concat(totalSeconds.toFixed(5),", ").concat(avgSeconds))}this.shaderTimes={}}},{key:"flushCommandEncoder",value:function flushCommandEncoder(){var _this2=this;this.device.queue.submit([this.commandEncoder.finish()]);this._commandEncoder=null;this._numCommandsEncoded=0;this._stageBuffersPendingMap.forEach(function(buffer){buffer.destroy()});this._stageBuffersPendingMap=[];this._uniformBuffersPendingRelease.forEach(function(buffer){_this2.releaseBuffer(buffer,false)});this._uniformBuffersPendingRelease=[]}},{key:"writeBuffer",value:function writeBuffer(sizeBytes,offset,srcArray,dstBuffer){var stagingBuffer=this.getBuffer(sizeBytes,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,true);new Uint8Array(stagingBuffer.getMappedRange()).set(srcArray);stagingBuffer.unmap();this._stageBuffersPendingMap.push(stagingBuffer);this.endComputePass();this.commandEncoder.copyBufferToBuffer(stagingBuffer,0,dstBuffer,offset,sizeBytes);this.numCommandsEncoded++}},{key:"dispatchComputerShader",value:function dispatchComputerShader(bindGroup,pipeline,shaderName,workgroupCountX,workgroupCountY,workgroupCountZ){if(this.isTimerEnabled){var querySet=this.device.createQuerySet({type:"timestamp",count:2});var timestampWrites={querySet:querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1};this.endComputePass();this._passEncoder=this.commandEncoder.beginComputePass({timestampWrites:timestampWrites});this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.endComputePass();var size=2*BigInt64Array.BYTES_PER_ELEMENT;var resolveBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC});this.commandEncoder.resolveQuerySet(querySet,0,2,resolveBuffer,0);var resultBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});this.commandEncoder.copyBufferToBuffer(resolveBuffer,0,resultBuffer,0,size);if(!this.timestampBuffers[shaderName]){this.timestampBuffers[shaderName]=[]}this.timestampBuffers[shaderName].push(resultBuffer);this.numCommandsEncoded+=3}else{if(!this._passEncoder){this._passEncoder=this.commandEncoder.beginComputePass()}this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.numCommandsEncoded++}}}])}();var PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE=256;var gpuDevices=new Map;var gpuBuffers=new Map;var emptyShader="\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main_empty() {}\n";var shaderEntryPoint="main";var PRECOMPUTE_ENCODING_SHADER_NAME="pv_picollm_attention_precompute_encoding_shader";var attentionPrecomputeEncodingShaderSource="\nstruct argsStruct {\n dimension: u32,\n steps: u32,\n theta: f32,\n encoding_offset: u32,\n rope_scale: f32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar rope_scales: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let ds = local_id.x;\n \n for (var t = ts; t < args.steps; t += num_workgroups.x) {\n for (var d = ds; d < (args.dimension / 2u); d += workgroup_size_x) {\n let f = 2u * d;\n let x = f32(t) / (f32(rope_scales[f >> 1]) * pow(args.theta, f32(f) / f32(args.dimension)));\n let encoding_idx = args.encoding_offset + (t * args.dimension) + f;\n encoding[encoding_idx] = cos(x) * args.rope_scale;\n encoding[encoding_idx + 1] = sin(x) * args.rope_scale;\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionPrecomputeEncodingShader=function loadAttentionPrecomputeEncodingShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention precompute encoding bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention precompute encoding pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention precompute encoding shader module",code:attentionPrecomputeEncodingShaderSource});var computePipeline=device.createComputePipeline({label:"attention precompute encoding pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_ROPE_INTERLEAVED_SHADER_NAME="pv_picollm_attention_encode_rope_interleaved_shader";var attentionEncodeRopeInterleavedShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let x_start = args.x_offset + (t * args.num_heads + h) * args.head_dimension;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < (args.head_dimension / 2u); d += workgroup_size_x) {\n let i = 2u * d;\n let x_idx = x_start + i;\n let encoding_idx = encoding_start + i;\n \n let re = x[x_idx];\n let im = x[x_idx + 1];\n x[x_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[x_idx + 1] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeRopeInterleavedShader=function loadAttentionEncodeRopeInterleavedShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode rope interleave bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode rope interleave pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode rope interleave shader module",code:attentionEncodeRopeInterleavedShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode rope interleave pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_SHADER_NAME="pv_picollm_attention_encode_shader";var attentionEncodeShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let half_rope = (args.rope_dimension / 2);\n let xr_start = args.x_offset + ((t * args.num_heads + h) * args.head_dimension);\n let xi_start = xr_start + half_rope;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < half_rope; d += workgroup_size_x) {\n let xr_idx = xr_start + d;\n let xi_idx = xi_start + d;\n let encoding_idx = encoding_start + (2 * d);\n\n let re = x[xr_idx];\n let im = x[xi_idx];\n x[xr_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[xi_idx] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeShader=function loadAttentionEncodeShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode bind layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode shader",code:attentionEncodeShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var DOT_PRODUCT_SHADER_NAME="pv_picollm_attention_dot_product_shader";var attentionDotProductShaderSource="\nstruct argsStruct { \n n: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n norm: f32,\n length1: u32,\n num_keys: u32,\n query_offset: u32,\n keys_offset: u32,\n key_intercepts_offset: u32,\n key_slopes_offset: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar query: array;\n\n@group(0) @binding(2)\nvar keys: array;\n\n@group(0) @binding(3)\nvar key_intercepts: array;\n\n@group(0) @binding(4)\nvar key_slopes: array;\n\n@group(0) @binding(5)\nvar scores: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n \n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n \n let keys_local_a = args.keys_offset + (start_index * args.head_dimension);\n let key_intercepts_local_a = args.key_intercepts_offset + start_index; \n let key_slopes_local_a = args.key_slopes_offset + start_index;\n \n let keys_local_b = args.keys_offset + (head_offset * args.head_dimension);\n let key_intercepts_local_b = args.key_intercepts_offset + head_offset; \n let key_slopes_local_b = args.key_slopes_offset + head_offset;\n \n let scores_local = args.scores_offset + (global_id.x * args.num_keys);\n let query_local = args.query_offset + (((global_id.x * args.n) + args.tq) * args.head_dimension);\n \n for (var i = 0u; i < args.head_dimension; i++) { \n for (var k = 0u; k < args.num_keys; k++) {\n if (k < args.length1) { \n let key_idx = keys_local_a + (k * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_a + k] + (key_slopes[key_slopes_local_a + k] * key_val));\n scores[scores_local + k] += tmp;\n }\n else {\n let j = k - args.length1;\n let key_idx = keys_local_b + (j * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_b + j] + (key_slopes[key_slopes_local_b + j] * key_val));\n scores[scores_local + k] += tmp;\n }\n } \n }\n \n for (var k = 0u; k < args.num_keys; k++) {\n scores[scores_local + k] *= args.norm;\n }\n}\n\n".concat(emptyShader);var loadAttentionDotProductShader=function loadAttentionDotProductShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention dot product bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention dot product pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention dot product shader module",code:attentionDotProductShaderSource});var computePipeline=device.createComputePipeline({label:"attention dot product pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var SOFTMAX_SHADER_NAME="pv_picollm_attention_softmax_shader";var attentionSoftmaxShaderSource="\nstruct argsStruct { \n num_heads: u32,\n num_keys: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar scores: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let scores_start = args.scores_offset + (global_id.x * args.num_keys);\n \n var max_index: u32 = 0;\n for (var i = 1u; i < args.num_keys; i++) {\n if (scores[scores_start + i] > scores[scores_start + max_index]) {\n max_index = i;\n }\n }\n let max: f32 = scores[scores_start + max_index];\n\n var sum: f32 = 0.0;\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] = exp(scores[scores_start + i] - max);\n sum += scores[scores_start + i];\n }\n\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] /= sum;\n }\n}\n\n".concat(emptyShader);var loadAttentionSoftmaxShader=function loadAttentionSoftmaxShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention softmax bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention softmax pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention softmax shader module",code:attentionSoftmaxShaderSource});var computePipeline=device.createComputePipeline({label:"attention softmax pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var FIR_SHADER_NAME="pv_picollm_attention_fir_shader";var attentionFirShaderSource="\nstruct argsStruct { \n length1: u32,\n length2: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n values_offset: u32,\n value_intercepts_offset: u32,\n value_slopes_offset: u32,\n scores_offset: u32,\n output_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar values: array;\n\n@group(0) @binding(2)\nvar value_intercepts: array;\n\n@group(0) @binding(3)\nvar value_slopes: array;\n\n@group(0) @binding(4)\nvar scores: array;\n\n@group(0) @binding(5)\nvar output: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n\n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n\n let values_local_a = args.values_offset + (start_index * args.head_dimension);\n let value_intercepts_local_a = args.value_intercepts_offset + start_index;\n let value_slopes_local_a = args.value_slopes_offset + start_index;\n let values_local_b = args.values_offset + (head_offset * args.head_dimension);\n let value_intercepts_local_b = args.value_intercepts_offset + head_offset;\n let value_slopes_local_b = args.value_slopes_offset + head_offset;\n let scores_local = args.scores_offset + (global_id.x * (args.length1 + args.length2));\n let output_local = args.output_offset + (((args.tq * args.num_heads) + global_id.x) * args.head_dimension);\n\n for (var i = 0u; i < args.head_dimension; i++) {\n var tmp: f32 = 0.0;\n for (var k = 0u; k < args.length1; k++) {\n let value_idx = values_local_a + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + k] * (value_intercepts[value_intercepts_local_a + k] + (value_slopes[value_slopes_local_a + k] * value_val)); \n }\n for (var k = 0u; k < args.length2; k++) {\n let value_idx = values_local_b + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + args.length1 + k] * (value_intercepts[value_intercepts_local_b + k] + (value_slopes[value_slopes_local_b + k] * value_val)); \n }\n output[output_local + i] = tmp;\n }\n}\n\n".concat(emptyShader);var loadAttentionFirShader=function loadAttentionFirShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention fir bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention fir pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention fir shader module",code:attentionFirShaderSource});var computePipeline=device.createComputePipeline({label:"attention fir pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var UPDATE_KV_SHADER_NAME="pv_picollm_attention_update_kv_shader";var attentionUpdateKvShaderSource="\nstruct argsStruct {\n n: u32,\n num_kv_heads: u32,\n window_length: u32,\n position: u32,\n head_dimension: u32,\n tf_offset: u32,\n kv_offset: u32,\n kv_intercepts_offset: u32,\n kv_slopes_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar kv: array;\n\n@group(0) @binding(3)\nvar kv_intercepts: array;\n\n@group(0) @binding(4)\nvar kv_slopes: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x >= args.num_kv_heads) {\n return;\n }\n \n for (var i = 0u; i < args.n; i++) {\n let index = (global_id.x * args.window_length) + ((args.position + i) % args.window_length);\n let tf_start = args.tf_offset + (((i * args.num_kv_heads) + global_id.x) * args.head_dimension);\n let kv_start = args.kv_offset + ((index * args.head_dimension) / 4);\n let kv_intercepts_start = args.kv_intercepts_offset + index;\n let kv_slopes_start = args.kv_slopes_offset + index;\n \n var xmax = tf[tf_start]; \n var xmin = tf[tf_start]; \n \n for (var j = 1u; j < args.head_dimension; j++) {\n xmax = max(xmax, tf[tf_start + j]);\n xmin = min(xmin, tf[tf_start + j]);\n }\n\n kv_intercepts[kv_intercepts_start] = xmin;\n kv_slopes[kv_slopes_start] = f32(xmax - xmin) / 255.0;\n\n for (var j = 0u; j < args.head_dimension; j++) {\n let kv_idx = kv_start + (j / 4);\n let kv_val = u32(round((tf[tf_start + j] - xmin) / kv_slopes[kv_slopes_start])); \n kv[kv_idx] = insertBits(kv[kv_idx], extractBits(kv_val, 0u, 8u), (j * 8u) % 32u, 8u); \n }\n }\n}\n\n".concat(emptyShader);var loadAttentionUpdateKvShader=function loadAttentionUpdateKvShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention update kv bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention update kv pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention update kv shader module",code:attentionUpdateKvShaderSource});var computePipeline=device.createComputePipeline({label:"attention update kv pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var TRANSPOSE_QUERY_SHADER_NAME="pv_picollm_attention_transpose_query_shader";var attentionTransposeQueryShaderSource="\nstruct argsStruct {\n n: u32,\n num_heads: u32,\n head_dimension: u32,\n tf_offset: u32,\n hf_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar hf: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n\n if (workgroup_id.x >= args.num_heads || workgroup_id.y >= args.n || local_id.x >= args.head_dimension) {\n return;\n }\n \n let tf_idx = args.tf_offset + (workgroup_id.y * args.num_heads * args.head_dimension) + (workgroup_id.x * args.head_dimension) + local_id.x; \n let hf_idx = args.hf_offset + (workgroup_id.x * args.n * args.head_dimension) + (workgroup_id.y * args.head_dimension) + local_id.x; \n hf[hf_idx] = tf[tf_idx];\n}\n\n".concat(emptyShader);var loadAttentionTransposeQueryShader=function loadAttentionTransposeQueryShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention transpose query bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention transpose query pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention transpose query shader module",code:attentionTransposeQueryShaderSource});var computePipeline=device.createComputePipeline({label:"attention transpose query pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var attentionShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},PRECOMPUTE_ENCODING_SHADER_NAME,loadAttentionPrecomputeEncodingShader),ENCODE_ROPE_INTERLEAVED_SHADER_NAME,loadAttentionEncodeRopeInterleavedShader),ENCODE_SHADER_NAME,loadAttentionEncodeShader),DOT_PRODUCT_SHADER_NAME,loadAttentionDotProductShader),SOFTMAX_SHADER_NAME,loadAttentionSoftmaxShader),FIR_SHADER_NAME,loadAttentionFirShader),UPDATE_KV_SHADER_NAME,loadAttentionUpdateKvShader),TRANSPOSE_QUERY_SHADER_NAME,loadAttentionTransposeQueryShader);var SILU_SHADER_NAME="pv_picollm_feed_forward_silu_shader";var feedForwardSiluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = x[global_id.x] / (1.0 + exp(-x[global_id.x]));\n}\n\n".concat(emptyShader);var loadFeedForwardSiluShader=function loadFeedForwardSiluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff silu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff silu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff silu shader module",code:feedForwardSiluShaderSource});var computePipeline=device.createComputePipeline({label:"ff silu pipline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var GELU_SHADER_NAME="pv_picollm_feed_forward_gelu_shader";var feedForwardGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\nconst a1: f32 = 0.254829592;\nconst a2: f32 = -0.284496736;\nconst a3: f32 = 1.421413741;\nconst a4: f32 = -1.453152027;\nconst a5: f32 = 1.061405429;\nconst p: f32 = 0.3275911;\n\n// A&S formula 7.1.26\nfn erf(x: f32) -> f32 { \n var sign: f32 = 1.0;\n if (x < 0) {\n sign = -1.0;\n }\n var x_abs: f32 = abs(x);\n \n let t: f32 = 1.0 / fma(p, x_abs, 1.0);\n let y: f32 = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-x_abs * x_abs);\n\n return sign * y;\n}\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1.0 + erf(x[global_id.x] * 0.7071067811865475));\n}\n\n".concat(emptyShader);var loadFeedForwardGeluShader=function loadFeedForwardGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff gelu shader module",code:feedForwardGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ALMOST_GELU_SHADER_NAME="pv_picollm_feed_forward_almost_gelu_shader";var feedForwardAlmostGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1 + tanh(0.7978845608028654 * (x[global_id.x] + (0.044715f * x[global_id.x] * x[global_id.x] * x[global_id.x]))));\n}\n\n".concat(emptyShader);var loadFeedForwardAlmostGeluShader=function loadFeedForwardAlmostGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff almost gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff almost gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff almost gelu shader module",code:feedForwardAlmostGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff almost gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var MULTIPLY_BUFFERS_SHADER_NAME="pv_picollm_feed_forward_multiply_buffers_shader";var feedForwardMultiplyBuffersShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n y[global_id.x] *= x[global_id.x];\n}\n\n".concat(emptyShader);var loadFeedForwardMultiplyBuffersShader=function loadFeedForwardMultiplyBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff multiply buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff multiply buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff multiply buffers shader module",code:feedForwardMultiplyBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"ff multiply buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var feedForwardShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SILU_SHADER_NAME,loadFeedForwardSiluShader),GELU_SHADER_NAME,loadFeedForwardGeluShader),ALMOST_GELU_SHADER_NAME,loadFeedForwardAlmostGeluShader),MULTIPLY_BUFFERS_SHADER_NAME,loadFeedForwardMultiplyBuffersShader);var FORWARD_SHADER_NAME$1="pv_picollm_gate_forward_shader";var gateForwardShaderSource="\n\nstruct pv_picollm_gate_ix_t {\n i: u32,\n x: f32,\n}\n\n@group(0) @binding(0)\nvar y: array;\n\n@group(0) @binding(1)\nvar indices: array;\n\n@group(0) @binding(2)\nvar weights: array;\n\noverride n: u32 = 0;\noverride k: u32 = 0;\noverride num_experts: u32 = 0;\n\noverride y_offset: u32 = 0;\noverride indices_offset: u32 = 0;\noverride weights_offset: u32 = 0;\n\nvar ixs: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(global_invocation_id) global_id : vec3\n) {\n if (global_id.x >= n) {\n return;\n }\n \n var y_start: u32 = y_offset + global_id.x * num_experts;\n for (var j = 0u; j < num_experts; j++) {\n ixs[j].i = j;\n ixs[j].x = y[y_start + j];\n }\n\n for (var i = 0u; i < num_experts - 1; i++) {\n for (var j = 0u; j < num_experts - i - 1; j++) {\n if (ixs[j].x < ixs[j + 1].x) {\n let tmp = ixs[j];\n ixs[j] = ixs[j + 1];\n ixs[j + 1] = tmp;\n }\n }\n }\n\n for (var j = 0u; j < k; j++) {\n indices[indices_offset + (global_id.x * k) + j] = ixs[j].i;\n weights[weights_offset + (global_id.x * k) + j] = ixs[j].x;\n }\n\n var max_weight: f32 = weights[weights_offset + (global_id.x * k)];\n for (var j = 1u; j < k; j++) {\n max_weight = max(max_weight, weights[weights_offset + (global_id.x * k) + j]);\n }\n\n var sum_weight: f32 = 0.0;\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] = exp(weights[weights_offset + (global_id.x * k) + j] - max_weight);\n sum_weight += weights[weights_offset + (global_id.x * k) + j];\n }\n\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] /= sum_weight;\n }\n}\n\n".concat(emptyShader);var loadGateForwardShader=function loadGateForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"gate forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"gate forward pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"gate forward shader module",code:gateForwardShaderSource});var computePipeline=device.createComputePipeline({layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{num_experts:1}}});return{computePipeline:computePipeline,pipelineLayout:pipelineLayout,shaderModule:shaderModule}};var gateForwardShader=_defineProperty({},FORWARD_SHADER_NAME$1,loadGateForwardShader);var ADD_TO_BUFFER_SHADER_NAME$1="pv_picollm_moe_transformer_add_to_buffer_shader";var moeTransformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n x_offset: u32,\n buffer_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n\n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddToBufferShader=function loadMoeTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add to buffer shader module",code:moeTransformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME="pv_picollm_moe_transformer_multiply_weight_and_add_to_buffer_shader";var moeTransformerMultiplyWeightAndToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n weights_index: u32,\n y_index: u32,\n weights_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weights: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + args.y_index + global_id.x] += weights[args.weights_index] + x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerMultiplyWeightAndAddToBufferShader=function loadMoeTransformerMultiplyWeightAndAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer multiply weight and add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer multiply weight and add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer multiply weight and add to buffer shader module",code:moeTransformerMultiplyWeightAndToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer multiply weight and add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME$1="pv_picollm_moe_transformer_add_buffers_shader";var moeTransformerAddBuffersShaderSource="\nstruct argsStruct {\n n: u32, \n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddBuffersShader=function loadMoeTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add buffers shader module",code:moeTransformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var moeTransformerForwardShaders=_defineProperty(_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME$1,loadMoeTransformerAddToBufferShader),MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME,loadMoeTransformerMultiplyWeightAndAddToBufferShader),ADD_BUFFERS_SHADER_NAME$1,loadMoeTransformerAddBuffersShader);var sdataReduce="\n for (var s: u32 = workgroup_size_x / 2; s > 0; s >>= 1) {\n if tid < s {\n sdata[tid] += sdata[tid + s];\n }\n workgroupBarrier();\n }\n";var dividePadFunction="\n fn divide_pad(a: u32, b: u32) -> u32 { \n return (a + b - 1) / b;\n }\n";var FORWARD_MULTI_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_multi_buffer_shader";var FORWARD_SINGLE_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_single_buffer_shader";var normForwardShaderSource=function normForwardShaderSource(isMulti){return"\nstruct argsStruct {\n n: u32,\n dimension: u32,\n remainder: u32,\n remainder_start: u32, \n eps: f32, \n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n".concat(isMulti?"\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3) \nvar y: array;\n":" \n@group(0) @binding(2)\nvar x: array;\n","\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\nvar sdata: array, workgroup_size_x>;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n let tid = local_id.x;\n let m = workgroup_id.x;\n let block_size = workgroup_size_x;\n \n var power_vec: vec4;\n let x_start: u32 = args.x_offset + (m * args.dimension);\n let skip = tid * 4;\n let shift = (block_size * 4);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = x_start + j + skip; \n\n let x_vec = vec4(\n x[local_index],\n x[local_index + 1],\n x[local_index + 2],\n x[local_index + 3]);\n \n power_vec += x_vec * x_vec; \n } \n \n if (tid == 0 && args.remainder > 0) {\n var remainder_vec = vec4(0.0, 0.0, 0.0, 0.0);\n let x_idx = x_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) { \n remainder_vec[j] = x[x_idx + j];\n } \n power_vec += remainder_vec * remainder_vec;\n }\n \n sdata[tid] = power_vec;\n workgroupBarrier();\n\n ").concat(sdataReduce,"\n \n let power = sdata[0].x + sdata[0].y + sdata[0].z + sdata[0].w;\n let norm: vec4 = vec4(1.0 / sqrt((power / f32(args.dimension)) + args.eps));\n \n let y_start: u32 = args.y_offset + (m * args.dimension);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = j + skip;\n let x_idx = x_start + local_index;\n let x_vec = vec4(\n x[x_idx],\n x[x_idx + 1],\n x[x_idx + 2],\n x[x_idx + 3]);\n \n let weight_vec = vec4(\n weight[local_index],\n weight[local_index + 1],\n weight[local_index + 2],\n weight[local_index + 3]);\n let y_vec = x_vec * norm * weight_vec;\n \n let y_idx = y_start + local_index;\n").concat(isMulti?" \n y[y_idx] = y_vec.x;\n y[y_idx + 1] = y_vec.y;\n y[y_idx + 2] = y_vec.z;\n y[y_idx + 3] = y_vec.w;\n":" \n x[y_idx] = y_vec.x;\n x[y_idx + 1] = y_vec.y;\n x[y_idx + 2] = y_vec.z;\n x[y_idx + 3] = y_vec.w;\n"," \n }\n \n if (tid == 0 && args.remainder > 0) {\n let x_idx = x_start + args.remainder_start;\n let weight_idx = args.remainder_start; \n let y_idx = y_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) {\n").concat(isMulti?" \n y[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n":" \n x[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n"," \n } \n }\n}\n\n").concat(emptyShader)};var loadNormForwardShader=function loadNormForwardShader(device,isMulti){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}}];if(isMulti){entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}});entries.push({binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}else{entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}var bindGroupLayout=device.createBindGroupLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm forward ".concat(isMulti?"multi":"single"," buffer shader module"),code:normForwardShaderSource(isMulti)});var computePipeline=device.createComputePipeline({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,false)}),FORWARD_MULTI_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,true)});var FORWARD_MULTI_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_multi_buffer_shader";var normLayerForwardMultiBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar x: array;\n\n@group(0) @binding(4)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += x[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (x[x_start + j] - mean) * (x[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((x[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardMultiBufferShader=function loadNormLayerForwardMultiBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward multi buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward multi buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward multi buffer shader module",code:normLayerForwardMultiBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward multi buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var FORWARD_SINGLE_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_single_buffer_shader";var normLayerForwardSingleBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += y[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (y[x_start + j] - mean) * (y[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((y[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardSingleBufferShader=function loadNormLayerForwardSingleBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward single buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward single buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward single buffer shader module",code:normLayerForwardSingleBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward single buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normLayerForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME,loadNormLayerForwardSingleBufferShader),FORWARD_MULTI_BUFFER_SHADER_NAME,loadNormLayerForwardMultiBufferShader);var ADD_TO_BUFFER_SHADER_NAME="pv_picollm_transformer_add_to_buffer_shader";var transformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32,\n x_offset: u32,\n buffer_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddToBufferShader=function loadTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add to buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add to buffer shader module",code:transformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add to buffer compute",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME="pv_picollm_transformer_add_buffers_shader";var transformerAddBuffersShaderSource="\n\nstruct argsStruct {\n n: u32,\n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddBuffersShader=function loadTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add buffers shader module",code:transformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var transformerForwardShaders=_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME,loadTransformerAddToBufferShader),ADD_BUFFERS_SHADER_NAME,loadTransformerAddBuffersShader);var FORWARD_SHADER_NAME="pv_picollm_weight_float_forward_shader";var weightFloatForwardShaderSource="\n\nstruct argsStruct {\n nr: u32,\n nc: u32,\n w_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar w: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n if (local_id.x >= args.nr) {\n return;\n }\n let x_start: u32 = args.x_offset + (workgroup_id.x * args.nc);\n let y_idx: u32 = local_id.x + args.y_offset + (workgroup_id.x * args.nr);\n \n let w_start: u32 = args.w_offset + (local_id.x * args.nc);\n for (var j = 0u; j < args.nc; j++) {\n y[y_idx] += w[w_start + j] * x[x_start + j]; \n }\n}\n\n".concat(emptyShader);var loadWeightFloatForwardShader=function loadWeightFloatForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight float forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight float forward pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight float forward shader module",code:weightFloatForwardShaderSource});var computePipeline=device.createComputePipeline({label:"weight float forward pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var weightFloatForwardShader=_defineProperty({},FORWARD_SHADER_NAME,loadWeightFloatForwardShader);var rowsPerBlock=16;var columnsPerBlock=8;var preprocessDim=16;var weightBlockSize=256;var unpackBlock128BitDepth3="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_3(packed_offset: u32) {\n let val_0 = blocks[packed_offset]; \n unpacked[0] = extractBits(val_0, 0u, 3u);\n unpacked[1] = extractBits(val_0, 3u, 3u);\n unpacked[2] = extractBits(val_0, 6u, 3u);\n unpacked[3] = extractBits(val_0, 9u, 3u);\n unpacked[4] = extractBits(val_0, 12u, 3u);\n unpacked[5] = extractBits(val_0, 15u, 3u);\n unpacked[6] = extractBits(val_0, 18u, 3u);\n unpacked[7] = extractBits(val_0, 21u, 3u);\n unpacked[8] = extractBits(val_0, 24u, 3u);\n unpacked[9] = extractBits(val_0, 27u, 3u);\n unpacked[10] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_1, 0u, 1u), 2u, 1u);\n unpacked[11] = extractBits(val_1, 1u, 3u);\n unpacked[12] = extractBits(val_1, 4u, 3u);\n unpacked[13] = extractBits(val_1, 7u, 3u);\n unpacked[14] = extractBits(val_1, 10u, 3u);\n unpacked[15] = extractBits(val_1, 13u, 3u);\n unpacked[16] = extractBits(val_1, 16u, 3u);\n unpacked[17] = extractBits(val_1, 19u, 3u);\n unpacked[18] = extractBits(val_1, 22u, 3u);\n unpacked[19] = extractBits(val_1, 25u, 3u);\n unpacked[20] = extractBits(val_1, 28u, 3u);\n unpacked[21] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_2, 0u, 2u), 1u, 2u); \n unpacked[22] = extractBits(val_2, 2u, 3u);\n unpacked[23] = extractBits(val_2, 5u, 3u);\n unpacked[24] = extractBits(val_2, 8u, 3u);\n unpacked[25] = extractBits(val_2, 11u, 3u);\n unpacked[26] = extractBits(val_2, 14u, 3u);\n unpacked[27] = extractBits(val_2, 17u, 3u);\n unpacked[28] = extractBits(val_2, 20u, 3u);\n unpacked[29] = extractBits(val_2, 23u, 3u);\n unpacked[30] = extractBits(val_2, 26u, 3u);\n unpacked[31] = extractBits(val_2, 29u, 3u);\n \n let val_3 = blocks[packed_offset + 3]; \n unpacked[32] = extractBits(val_3, 0u, 3u);\n unpacked[33] = extractBits(val_3, 3u, 3u);\n unpacked[34] = extractBits(val_3, 6u, 3u);\n unpacked[35] = extractBits(val_3, 9u, 3u);\n unpacked[36] = extractBits(val_3, 12u, 3u);\n unpacked[37] = extractBits(val_3, 15u, 3u);\n unpacked[38] = extractBits(val_3, 18u, 3u);\n unpacked[39] = extractBits(val_3, 21u, 3u);\n unpacked[40] = extractBits(val_3, 24u, 3u);\n unpacked[41] = extractBits(val_3, 27u, 3u);\n unpacked[42] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_4, 0u, 1u), 2u, 1u);\n unpacked[43] = extractBits(val_4, 1u, 3u);\n unpacked[44] = extractBits(val_4, 4u, 3u);\n unpacked[45] = extractBits(val_4, 7u, 3u);\n unpacked[46] = extractBits(val_4, 10u, 3u);\n unpacked[47] = extractBits(val_4, 13u, 3u);\n unpacked[48] = extractBits(val_4, 16u, 3u);\n unpacked[49] = extractBits(val_4, 19u, 3u);\n unpacked[50] = extractBits(val_4, 22u, 3u);\n unpacked[51] = extractBits(val_4, 25u, 3u);\n unpacked[52] = extractBits(val_4, 28u, 3u);\n unpacked[53] = extractBits(val_4, 31u, 1u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_5, 0u, 2u), 1u, 2u); \n unpacked[54] = extractBits(val_5, 2u, 3u);\n unpacked[55] = extractBits(val_5, 5u, 3u);\n unpacked[56] = extractBits(val_5, 8u, 3u);\n unpacked[57] = extractBits(val_5, 11u, 3u);\n unpacked[58] = extractBits(val_5, 14u, 3u);\n unpacked[59] = extractBits(val_5, 17u, 3u);\n unpacked[60] = extractBits(val_5, 20u, 3u);\n unpacked[61] = extractBits(val_5, 23u, 3u);\n unpacked[62] = extractBits(val_5, 26u, 3u);\n unpacked[63] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[64] = extractBits(val_6, 0u, 3u);\n unpacked[65] = extractBits(val_6, 3u, 3u);\n unpacked[66] = extractBits(val_6, 6u, 3u);\n unpacked[67] = extractBits(val_6, 9u, 3u);\n unpacked[68] = extractBits(val_6, 12u, 3u);\n unpacked[69] = extractBits(val_6, 15u, 3u);\n unpacked[70] = extractBits(val_6, 18u, 3u);\n unpacked[71] = extractBits(val_6, 21u, 3u);\n unpacked[72] = extractBits(val_6, 24u, 3u);\n unpacked[73] = extractBits(val_6, 27u, 3u);\n unpacked[74] = extractBits(val_6, 30u, 2u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_7, 0u, 1u), 2u, 1u);\n unpacked[75] = extractBits(val_7, 1u, 3u);\n unpacked[76] = extractBits(val_7, 4u, 3u);\n unpacked[77] = extractBits(val_7, 7u, 3u);\n unpacked[78] = extractBits(val_7, 10u, 3u);\n unpacked[79] = extractBits(val_7, 13u, 3u);\n unpacked[80] = extractBits(val_7, 16u, 3u);\n unpacked[81] = extractBits(val_7, 19u, 3u);\n unpacked[82] = extractBits(val_7, 22u, 3u);\n unpacked[83] = extractBits(val_7, 25u, 3u);\n unpacked[84] = extractBits(val_7, 28u, 3u);\n unpacked[85] = extractBits(val_7, 31u, 1u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_8, 0u, 2u), 1u, 2u); \n unpacked[86] = extractBits(val_8, 2u, 3u);\n unpacked[87] = extractBits(val_8, 5u, 3u);\n unpacked[88] = extractBits(val_8, 8u, 3u);\n unpacked[89] = extractBits(val_8, 11u, 3u);\n unpacked[90] = extractBits(val_8, 14u, 3u);\n unpacked[91] = extractBits(val_8, 17u, 3u);\n unpacked[92] = extractBits(val_8, 20u, 3u);\n unpacked[93] = extractBits(val_8, 23u, 3u);\n unpacked[94] = extractBits(val_8, 26u, 3u);\n unpacked[95] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[96] = extractBits(val_9, 0u, 3u);\n unpacked[97] = extractBits(val_9, 3u, 3u);\n unpacked[98] = extractBits(val_9, 6u, 3u);\n unpacked[99] = extractBits(val_9, 9u, 3u);\n unpacked[100] = extractBits(val_9, 12u, 3u);\n unpacked[101] = extractBits(val_9, 15u, 3u);\n unpacked[102] = extractBits(val_9, 18u, 3u);\n unpacked[103] = extractBits(val_9, 21u, 3u);\n unpacked[104] = extractBits(val_9, 24u, 3u);\n unpacked[105] = extractBits(val_9, 27u, 3u);\n unpacked[106] = extractBits(val_9, 30u, 2u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_10, 0u, 1u), 2u, 1u);\n unpacked[107] = extractBits(val_10, 1u, 3u);\n unpacked[108] = extractBits(val_10, 4u, 3u);\n unpacked[109] = extractBits(val_10, 7u, 3u);\n unpacked[110] = extractBits(val_10, 10u, 3u);\n unpacked[111] = extractBits(val_10, 13u, 3u);\n unpacked[112] = extractBits(val_10, 16u, 3u);\n unpacked[113] = extractBits(val_10, 19u, 3u);\n unpacked[114] = extractBits(val_10, 22u, 3u);\n unpacked[115] = extractBits(val_10, 25u, 3u);\n unpacked[116] = extractBits(val_10, 28u, 3u);\n unpacked[117] = extractBits(val_10, 31u, 1u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_11, 0u, 2u), 1u, 2u); \n unpacked[118] = extractBits(val_11, 2u, 3u);\n unpacked[119] = extractBits(val_11, 5u, 3u);\n unpacked[120] = extractBits(val_11, 8u, 3u);\n unpacked[121] = extractBits(val_11, 11u, 3u);\n unpacked[122] = extractBits(val_11, 14u, 3u);\n unpacked[123] = extractBits(val_11, 17u, 3u);\n unpacked[124] = extractBits(val_11, 20u, 3u);\n unpacked[125] = extractBits(val_11, 23u, 3u);\n unpacked[126] = extractBits(val_11, 26u, 3u);\n unpacked[127] = extractBits(val_11, 29u, 3u);\n}\n";var unpackBlock128BitDepth5="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_5(packed_offset: u32) { \n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 5u);\n unpacked[1] = extractBits(val_0, 5u, 5u);\n unpacked[2] = extractBits(val_0, 10u, 5u);\n unpacked[3] = extractBits(val_0, 15u, 5u);\n unpacked[4] = extractBits(val_0, 20u, 5u);\n unpacked[5] = extractBits(val_0, 25u, 5u);\n unpacked[6] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[6] = insertBits(unpacked[6], extractBits(val_1, 0u, 3u), 2u, 3u); \n unpacked[7] = extractBits(val_1, 3u, 5u);\n unpacked[8] = extractBits(val_1, 8u, 5u);\n unpacked[9] = extractBits(val_1, 13u, 5u);\n unpacked[10] = extractBits(val_1, 18u, 5u);\n unpacked[11] = extractBits(val_1, 23u, 5u);\n unpacked[12] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[12] = insertBits(unpacked[12], extractBits(val_2, 0u, 1u), 4u, 1u);\n unpacked[13] = extractBits(val_2, 1u, 5u);\n unpacked[14] = extractBits(val_2, 6u, 5u);\n unpacked[15] = extractBits(val_2, 11u, 5u);\n unpacked[16] = extractBits(val_2, 16u, 5u);\n unpacked[17] = extractBits(val_2, 21u, 5u);\n unpacked[18] = extractBits(val_2, 26u, 5u);\n unpacked[19] = extractBits(val_2, 31u, 1u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[19] = insertBits(unpacked[19], extractBits(val_3, 0u, 4u), 1u, 4u);\n unpacked[20] = extractBits(val_3, 4u, 5u);\n unpacked[21] = extractBits(val_3, 9u, 5u);\n unpacked[22] = extractBits(val_3, 14u, 5u);\n unpacked[23] = extractBits(val_3, 19u, 5u);\n unpacked[24] = extractBits(val_3, 24u, 5u);\n unpacked[25] = extractBits(val_3, 29u, 3u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[25] = insertBits(unpacked[25], extractBits(val_4, 0u, 2u), 3u, 2u);\n unpacked[26] = extractBits(val_4, 2u, 5u);\n unpacked[27] = extractBits(val_4, 7u, 5u);\n unpacked[28] = extractBits(val_4, 12u, 5u);\n unpacked[29] = extractBits(val_4, 17u, 5u);\n unpacked[30] = extractBits(val_4, 22u, 5u);\n unpacked[31] = extractBits(val_4, 27u, 5u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[32] = extractBits(val_5, 0u, 5u);\n unpacked[33] = extractBits(val_5, 5u, 5u);\n unpacked[34] = extractBits(val_5, 10u, 5u);\n unpacked[35] = extractBits(val_5, 15u, 5u);\n unpacked[36] = extractBits(val_5, 20u, 5u);\n unpacked[37] = extractBits(val_5, 25u, 5u);\n unpacked[38] = extractBits(val_5, 30u, 2u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[38] = insertBits(unpacked[38], extractBits(val_6, 0u, 3u), 2u, 3u);\n unpacked[39] = extractBits(val_6, 3u, 5u);\n unpacked[40] = extractBits(val_6, 8u, 5u);\n unpacked[41] = extractBits(val_6, 13u, 5u);\n unpacked[42] = extractBits(val_6, 18u, 5u);\n unpacked[43] = extractBits(val_6, 23u, 5u);\n unpacked[44] = extractBits(val_6, 28u, 4u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[44] = insertBits(unpacked[44], extractBits(val_7, 0u, 1u), 4u, 1u);\n unpacked[45] = extractBits(val_7, 1u, 5u);\n unpacked[46] = extractBits(val_7, 6u, 5u);\n unpacked[47] = extractBits(val_7, 11u, 5u);\n unpacked[48] = extractBits(val_7, 16u, 5u);\n unpacked[49] = extractBits(val_7, 21u, 5u);\n unpacked[50] = extractBits(val_7, 26u, 5u);\n unpacked[51] = extractBits(val_7, 31u, 1u);\n\n let val_8 = blocks[packed_offset + 8];\n unpacked[51] = insertBits(unpacked[51], extractBits(val_8, 0u, 4u), 1u, 4u);\n unpacked[52] = extractBits(val_8, 4u, 5u);\n unpacked[53] = extractBits(val_8, 9u, 5u);\n unpacked[54] = extractBits(val_8, 14u, 5u);\n unpacked[55] = extractBits(val_8, 19u, 5u);\n unpacked[56] = extractBits(val_8, 24u, 5u);\n unpacked[57] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[57] = insertBits(unpacked[57], extractBits(val_9, 0u, 2u), 3u, 2u);\n unpacked[58] = extractBits(val_9, 2u, 5u);\n unpacked[59] = extractBits(val_9, 7u, 5u);\n unpacked[60] = extractBits(val_9, 12u, 5u);\n unpacked[61] = extractBits(val_9, 17u, 5u);\n unpacked[62] = extractBits(val_9, 22u, 5u);\n unpacked[63] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[64] = extractBits(val_10, 0u, 5u);\n unpacked[65] = extractBits(val_10, 5u, 5u);\n unpacked[66] = extractBits(val_10, 10u, 5u);\n unpacked[67] = extractBits(val_10, 15u, 5u);\n unpacked[68] = extractBits(val_10, 20u, 5u);\n unpacked[69] = extractBits(val_10, 25u, 5u);\n unpacked[70] = extractBits(val_10, 30u, 2u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[70] = insertBits(unpacked[70], extractBits(val_11, 0u, 3u), 2u, 3u);\n unpacked[71] = extractBits(val_11, 3u, 5u);\n unpacked[72] = extractBits(val_11, 8u, 5u);\n unpacked[73] = extractBits(val_11, 13u, 5u);\n unpacked[74] = extractBits(val_11, 18u, 5u);\n unpacked[75] = extractBits(val_11, 23u, 5u);\n unpacked[76] = extractBits(val_11, 28u, 4u);\n\n let val_12 = blocks[packed_offset + 12];\n unpacked[76] = insertBits(unpacked[76], extractBits(val_12, 0u, 1u), 4u, 1u);\n unpacked[77] = extractBits(val_12, 1u, 5u);\n unpacked[78] = extractBits(val_12, 6u, 5u);\n unpacked[79] = extractBits(val_12, 11u, 5u);\n unpacked[80] = extractBits(val_12, 16u, 5u);\n unpacked[81] = extractBits(val_12, 21u, 5u);\n unpacked[82] = extractBits(val_12, 26u, 5u);\n unpacked[83] = extractBits(val_12, 31u, 1u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[83] = insertBits(unpacked[83], extractBits(val_13, 0u, 4u), 1u, 4u);\n unpacked[84] = extractBits(val_13, 4u, 5u);\n unpacked[85] = extractBits(val_13, 9u, 5u);\n unpacked[86] = extractBits(val_13, 14u, 5u);\n unpacked[87] = extractBits(val_13, 19u, 5u);\n unpacked[88] = extractBits(val_13, 24u, 5u);\n unpacked[89] = extractBits(val_13, 29u, 3u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[89] = insertBits(unpacked[89], extractBits(val_14, 0u, 2u), 3u, 2u);\n unpacked[90] = extractBits(val_14, 2u, 5u);\n unpacked[91] = extractBits(val_14, 7u, 5u);\n unpacked[92] = extractBits(val_14, 12u, 5u);\n unpacked[93] = extractBits(val_14, 17u, 5u);\n unpacked[94] = extractBits(val_14, 22u, 5u);\n unpacked[95] = extractBits(val_14, 27u, 5u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[96] = extractBits(val_15, 0u, 5u);\n unpacked[97] = extractBits(val_15, 5u, 5u);\n unpacked[98] = extractBits(val_15, 10u, 5u);\n unpacked[99] = extractBits(val_15, 15u, 5u);\n unpacked[100] = extractBits(val_15, 20u, 5u);\n unpacked[101] = extractBits(val_15, 25u, 5u);\n unpacked[102] = extractBits(val_15, 30u, 2u);\n\n let val_16 = blocks[packed_offset + 16];\n unpacked[102] = insertBits(unpacked[102], extractBits(val_16, 0u, 3u), 2u, 3u);\n unpacked[103] = extractBits(val_16, 3u, 5u);\n unpacked[104] = extractBits(val_16, 8u, 5u);\n unpacked[105] = extractBits(val_16, 13u, 5u);\n unpacked[106] = extractBits(val_16, 18u, 5u);\n unpacked[107] = extractBits(val_16, 23u, 5u);\n unpacked[108] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[108] = insertBits(unpacked[108], extractBits(val_17, 0u, 1u), 4u, 1u);\n unpacked[109] = extractBits(val_17, 1u, 5u);\n unpacked[110] = extractBits(val_17, 6u, 5u);\n unpacked[111] = extractBits(val_17, 11u, 5u);\n unpacked[112] = extractBits(val_17, 16u, 5u);\n unpacked[113] = extractBits(val_17, 21u, 5u);\n unpacked[114] = extractBits(val_17, 26u, 5u);\n unpacked[115] = extractBits(val_17, 31u, 1u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[115] = insertBits(unpacked[115], extractBits(val_18, 0u, 4u), 1u, 4u);\n unpacked[116] = extractBits(val_18, 4u, 5u);\n unpacked[117] = extractBits(val_18, 9u, 5u);\n unpacked[118] = extractBits(val_18, 14u, 5u);\n unpacked[119] = extractBits(val_18, 19u, 5u);\n unpacked[120] = extractBits(val_18, 24u, 5u);\n unpacked[121] = extractBits(val_18, 29u, 3u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[121] = insertBits(unpacked[121], extractBits(val_19, 0u, 2u), 3u, 2u);\n unpacked[122] = extractBits(val_19, 2u, 5u);\n unpacked[123] = extractBits(val_19, 7u, 5u);\n unpacked[124] = extractBits(val_19, 12u, 5u);\n unpacked[125] = extractBits(val_19, 17u, 5u);\n unpacked[126] = extractBits(val_19, 22u, 5u);\n unpacked[127] = extractBits(val_19, 27u, 5u);\n}\n";var unpackBlock128BitDepth6="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_6(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 6u);\n unpacked[1] = extractBits(val_0, 6u, 6u);\n unpacked[2] = extractBits(val_0, 12u, 6u);\n unpacked[3] = extractBits(val_0, 18u, 6u);\n unpacked[4] = extractBits(val_0, 24u, 6u);\n unpacked[5] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[5] = insertBits(unpacked[5], extractBits(val_1, 0u, 4u), 2u, 4u);\n unpacked[6] = extractBits(val_1, 4u, 6u);\n unpacked[7] = extractBits(val_1, 10u, 6u);\n unpacked[8] = extractBits(val_1, 16u, 6u);\n unpacked[9] = extractBits(val_1, 22u, 6u);\n unpacked[10] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_2, 0u, 2u), 4u, 2u);\n unpacked[11] = extractBits(val_2, 2u, 6u);\n unpacked[12] = extractBits(val_2, 8u, 6u);\n unpacked[13] = extractBits(val_2, 14u, 6u);\n unpacked[14] = extractBits(val_2, 20u, 6u);\n unpacked[15] = extractBits(val_2, 26u, 6u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[16] = extractBits(val_3, 0u, 6u);\n unpacked[17] = extractBits(val_3, 6u, 6u);\n unpacked[18] = extractBits(val_3, 12u, 6u);\n unpacked[19] = extractBits(val_3, 18u, 6u);\n unpacked[20] = extractBits(val_3, 24u, 6u);\n unpacked[21] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_4, 0u, 4u), 2u, 4u);\n unpacked[22] = extractBits(val_4, 4u, 6u);\n unpacked[23] = extractBits(val_4, 10u, 6u);\n unpacked[24] = extractBits(val_4, 16u, 6u);\n unpacked[25] = extractBits(val_4, 22u, 6u);\n unpacked[26] = extractBits(val_4, 28u, 4u);\n\n let val_5 = blocks[packed_offset + 5];\n unpacked[26] = insertBits(unpacked[26], extractBits(val_5, 0u, 2u), 4u, 2u);\n unpacked[27] = extractBits(val_5, 2u, 6u);\n unpacked[28] = extractBits(val_5, 8u, 6u);\n unpacked[29] = extractBits(val_5, 14u, 6u);\n unpacked[30] = extractBits(val_5, 20u, 6u);\n unpacked[31] = extractBits(val_5, 26u, 6u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[32] = extractBits(val_6, 0u, 6u);\n unpacked[33] = extractBits(val_6, 6u, 6u);\n unpacked[34] = extractBits(val_6, 12u, 6u);\n unpacked[35] = extractBits(val_6, 18u, 6u);\n unpacked[36] = extractBits(val_6, 24u, 6u);\n unpacked[37] = extractBits(val_6, 30u, 2u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[37] = insertBits(unpacked[37], extractBits(val_7, 0u, 4u), 2u, 4u);\n unpacked[38] = extractBits(val_7, 4u, 6u);\n unpacked[39] = extractBits(val_7, 10u, 6u);\n unpacked[40] = extractBits(val_7, 16u, 6u);\n unpacked[41] = extractBits(val_7, 22u, 6u);\n unpacked[42] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_8, 0u, 2u), 4u, 2u);\n unpacked[43] = extractBits(val_8, 2u, 6u);\n unpacked[44] = extractBits(val_8, 8u, 6u);\n unpacked[45] = extractBits(val_8, 14u, 6u);\n unpacked[46] = extractBits(val_8, 20u, 6u);\n unpacked[47] = extractBits(val_8, 26u, 6u);\n\n let val_9 = blocks[packed_offset + 9];\n unpacked[48] = extractBits(val_9, 0u, 6u);\n unpacked[49] = extractBits(val_9, 6u, 6u);\n unpacked[50] = extractBits(val_9, 12u, 6u);\n unpacked[51] = extractBits(val_9, 18u, 6u);\n unpacked[52] = extractBits(val_9, 24u, 6u);\n unpacked[53] = extractBits(val_9, 30u, 2u);\n\n let val_10 = blocks[packed_offset + 10];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_10, 0u, 4u), 2u, 4u);\n unpacked[54] = extractBits(val_10, 4u, 6u);\n unpacked[55] = extractBits(val_10, 10u, 6u);\n unpacked[56] = extractBits(val_10, 16u, 6u);\n unpacked[57] = extractBits(val_10, 22u, 6u);\n unpacked[58] = extractBits(val_10, 28u, 4u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[58] = insertBits(unpacked[58], extractBits(val_11, 0u, 2u), 4u, 2u);\n unpacked[59] = extractBits(val_11, 2u, 6u);\n unpacked[60] = extractBits(val_11, 8u, 6u);\n unpacked[61] = extractBits(val_11, 14u, 6u);\n unpacked[62] = extractBits(val_11, 20u, 6u);\n unpacked[63] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[64] = extractBits(val_12, 0u, 6u);\n unpacked[65] = extractBits(val_12, 6u, 6u);\n unpacked[66] = extractBits(val_12, 12u, 6u);\n unpacked[67] = extractBits(val_12, 18u, 6u);\n unpacked[68] = extractBits(val_12, 24u, 6u);\n unpacked[69] = extractBits(val_12, 30u, 2u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[69] = insertBits(unpacked[69], extractBits(val_13, 0u, 4u), 2u, 4u);\n unpacked[70] = extractBits(val_13, 4u, 6u);\n unpacked[71] = extractBits(val_13, 10u, 6u);\n unpacked[72] = extractBits(val_13, 16u, 6u);\n unpacked[73] = extractBits(val_13, 22u, 6u);\n unpacked[74] = extractBits(val_13, 28u, 4u);\n\n let val_14 = blocks[packed_offset + 14];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_14, 0u, 2u), 4u, 2u);\n unpacked[75] = extractBits(val_14, 2u, 6u);\n unpacked[76] = extractBits(val_14, 8u, 6u);\n unpacked[77] = extractBits(val_14, 14u, 6u);\n unpacked[78] = extractBits(val_14, 20u, 6u);\n unpacked[79] = extractBits(val_14, 26u, 6u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[80] = extractBits(val_15, 0u, 6u);\n unpacked[81] = extractBits(val_15, 6u, 6u);\n unpacked[82] = extractBits(val_15, 12u, 6u);\n unpacked[83] = extractBits(val_15, 18u, 6u);\n unpacked[84] = extractBits(val_15, 24u, 6u);\n unpacked[85] = extractBits(val_15, 30u, 2u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_16, 0u, 4u), 2u, 4u);\n unpacked[86] = extractBits(val_16, 4u, 6u);\n unpacked[87] = extractBits(val_16, 10u, 6u);\n unpacked[88] = extractBits(val_16, 16u, 6u);\n unpacked[89] = extractBits(val_16, 22u, 6u);\n unpacked[90] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[90] = insertBits(unpacked[90], extractBits(val_17, 0u, 2u), 4u, 2u);\n unpacked[91] = extractBits(val_17, 2u, 6u);\n unpacked[92] = extractBits(val_17, 8u, 6u);\n unpacked[93] = extractBits(val_17, 14u, 6u);\n unpacked[94] = extractBits(val_17, 20u, 6u);\n unpacked[95] = extractBits(val_17, 26u, 6u);\n\n let val_18 = blocks[packed_offset + 18];\n unpacked[96] = extractBits(val_18, 0u, 6u);\n unpacked[97] = extractBits(val_18, 6u, 6u);\n unpacked[98] = extractBits(val_18, 12u, 6u);\n unpacked[99] = extractBits(val_18, 18u, 6u);\n unpacked[100] = extractBits(val_18, 24u, 6u);\n unpacked[101] = extractBits(val_18, 30u, 2u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[101] = insertBits(unpacked[101], extractBits(val_19, 0u, 4u), 2u, 4u);\n unpacked[102] = extractBits(val_19, 4u, 6u);\n unpacked[103] = extractBits(val_19, 10u, 6u);\n unpacked[104] = extractBits(val_19, 16u, 6u);\n unpacked[105] = extractBits(val_19, 22u, 6u);\n unpacked[106] = extractBits(val_19, 28u, 4u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_20, 0u, 2u), 4u, 2u);\n unpacked[107] = extractBits(val_20, 2u, 6u);\n unpacked[108] = extractBits(val_20, 8u, 6u);\n unpacked[109] = extractBits(val_20, 14u, 6u);\n unpacked[110] = extractBits(val_20, 20u, 6u);\n unpacked[111] = extractBits(val_20, 26u, 6u);\n\n let val_21 = blocks[packed_offset + 21];\n unpacked[112] = extractBits(val_21, 0u, 6u);\n unpacked[113] = extractBits(val_21, 6u, 6u);\n unpacked[114] = extractBits(val_21, 12u, 6u);\n unpacked[115] = extractBits(val_21, 18u, 6u);\n unpacked[116] = extractBits(val_21, 24u, 6u);\n unpacked[117] = extractBits(val_21, 30u, 2u);\n\n let val_22 = blocks[packed_offset + 22];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_22, 0u, 4u), 2u, 4u);\n unpacked[118] = extractBits(val_22, 4u, 6u);\n unpacked[119] = extractBits(val_22, 10u, 6u);\n unpacked[120] = extractBits(val_22, 16u, 6u);\n unpacked[121] = extractBits(val_22, 22u, 6u);\n unpacked[122] = extractBits(val_22, 28u, 4u);\n\n let val_23 = blocks[packed_offset + 23];\n unpacked[122] = insertBits(unpacked[122], extractBits(val_23, 0u, 2u), 4u, 2u);\n unpacked[123] = extractBits(val_23, 2u, 6u);\n unpacked[124] = extractBits(val_23, 8u, 6u);\n unpacked[125] = extractBits(val_23, 14u, 6u);\n unpacked[126] = extractBits(val_23, 20u, 6u);\n unpacked[127] = extractBits(val_23, 26u, 6u);\n}\n";var unpackBlock128BitDepth7="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_7(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 7u);\n unpacked[1] = extractBits(val_0, 7u, 7u);\n unpacked[2] = extractBits(val_0, 14u, 7u);\n unpacked[3] = extractBits(val_0, 21u, 7u);\n unpacked[4] = extractBits(val_0, 28u, 4u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[4] = insertBits(unpacked[4], extractBits(val_1, 0u, 3u), 4u, 3u);\n unpacked[5] = extractBits(val_1, 3u, 7u);\n unpacked[6] = extractBits(val_1, 10u, 7u);\n unpacked[7] = extractBits(val_1, 17u, 7u);\n unpacked[8] = extractBits(val_1, 24u, 7u);\n unpacked[9] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[9] = insertBits(unpacked[9], extractBits(val_2, 0u, 6u), 1u, 6u);\n unpacked[10] = extractBits(val_2, 6u, 7u);\n unpacked[11] = extractBits(val_2, 13u, 7u);\n unpacked[12] = extractBits(val_2, 20u, 7u);\n unpacked[13] = extractBits(val_2, 27u, 5u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[13] = insertBits(unpacked[13], extractBits(val_3, 0u, 2u), 5u, 2u);\n unpacked[14] = extractBits(val_3, 2u, 7u);\n unpacked[15] = extractBits(val_3, 9u, 7u);\n unpacked[16] = extractBits(val_3, 16u, 7u);\n unpacked[17] = extractBits(val_3, 23u, 7u);\n unpacked[18] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[18] = insertBits(unpacked[18], extractBits(val_4, 0u, 5u), 2u, 5u);\n unpacked[19] = extractBits(val_4, 5u, 7u);\n unpacked[20] = extractBits(val_4, 12u, 7u);\n unpacked[21] = extractBits(val_4, 19u, 7u);\n unpacked[22] = extractBits(val_4, 26u, 6u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[22] = insertBits(unpacked[22], extractBits(val_5, 0u, 1u), 6u, 1u);\n unpacked[23] = extractBits(val_5, 1u, 7u);\n unpacked[24] = extractBits(val_5, 8u, 7u);\n unpacked[25] = extractBits(val_5, 15u, 7u);\n unpacked[26] = extractBits(val_5, 22u, 7u);\n unpacked[27] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[27] = insertBits(unpacked[27], extractBits(val_6, 0u, 4u), 3u, 4u);\n unpacked[28] = extractBits(val_6, 4u, 7u);\n unpacked[29] = extractBits(val_6, 11u, 7u);\n unpacked[30] = extractBits(val_6, 18u, 7u);\n unpacked[31] = extractBits(val_6, 25u, 7u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[32] = extractBits(val_7, 0u, 7u);\n unpacked[33] = extractBits(val_7, 7u, 7u);\n unpacked[34] = extractBits(val_7, 14u, 7u);\n unpacked[35] = extractBits(val_7, 21u, 7u);\n unpacked[36] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[36] = insertBits(unpacked[36], extractBits(val_8, 0u, 3u), 4u, 3u);\n unpacked[37] = extractBits(val_8, 3u, 7u);\n unpacked[38] = extractBits(val_8, 10u, 7u);\n unpacked[39] = extractBits(val_8, 17u, 7u);\n unpacked[40] = extractBits(val_8, 24u, 7u);\n unpacked[41] = extractBits(val_8, 31u, 1u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[41] = insertBits(unpacked[41], extractBits(val_9, 0u, 6u), 1u, 6u);\n unpacked[42] = extractBits(val_9, 6u, 7u);\n unpacked[43] = extractBits(val_9, 13u, 7u);\n unpacked[44] = extractBits(val_9, 20u, 7u);\n unpacked[45] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[45] = insertBits(unpacked[45], extractBits(val_10, 0u, 2u), 5u, 2u);\n unpacked[46] = extractBits(val_10, 2u, 7u);\n unpacked[47] = extractBits(val_10, 9u, 7u);\n unpacked[48] = extractBits(val_10, 16u, 7u);\n unpacked[49] = extractBits(val_10, 23u, 7u);\n unpacked[50] = extractBits(val_10, 30u, 2u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[50] = insertBits(unpacked[50], extractBits(val_11, 0u, 5u), 2u, 5u);\n unpacked[51] = extractBits(val_11, 5u, 7u);\n unpacked[52] = extractBits(val_11, 12u, 7u);\n unpacked[53] = extractBits(val_11, 19u, 7u);\n unpacked[54] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[54] = insertBits(unpacked[54], extractBits(val_12, 0u, 1u), 6u, 1u);\n unpacked[55] = extractBits(val_12, 1u, 7u);\n unpacked[56] = extractBits(val_12, 8u, 7u);\n unpacked[57] = extractBits(val_12, 15u, 7u);\n unpacked[58] = extractBits(val_12, 22u, 7u);\n unpacked[59] = extractBits(val_12, 29u, 3u);\n \n let val_13 = blocks[packed_offset + 13];\n unpacked[59] = insertBits(unpacked[59], extractBits(val_13, 0u, 4u), 3u, 4u);\n unpacked[60] = extractBits(val_13, 4u, 7u);\n unpacked[61] = extractBits(val_13, 11u, 7u);\n unpacked[62] = extractBits(val_13, 18u, 7u);\n unpacked[63] = extractBits(val_13, 25u, 7u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[64] = extractBits(val_14, 0u, 7u);\n unpacked[65] = extractBits(val_14, 7u, 7u);\n unpacked[66] = extractBits(val_14, 14u, 7u);\n unpacked[67] = extractBits(val_14, 21u, 7u);\n unpacked[68] = extractBits(val_14, 28u, 4u);\n \n let val_15 = blocks[packed_offset + 15];\n unpacked[68] = insertBits(unpacked[68], extractBits(val_15, 0u, 3u), 4u, 3u);\n unpacked[69] = extractBits(val_15, 3u, 7u);\n unpacked[70] = extractBits(val_15, 10u, 7u);\n unpacked[71] = extractBits(val_15, 17u, 7u);\n unpacked[72] = extractBits(val_15, 24u, 7u);\n unpacked[73] = extractBits(val_15, 31u, 1u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[73] = insertBits(unpacked[73], extractBits(val_16, 0u, 6u), 1u, 6u);\n unpacked[74] = extractBits(val_16, 6u, 7u);\n unpacked[75] = extractBits(val_16, 13u, 7u);\n unpacked[76] = extractBits(val_16, 20u, 7u);\n unpacked[77] = extractBits(val_16, 27u, 5u);\n \n let val_17 = blocks[packed_offset + 17];\n unpacked[77] = insertBits(unpacked[77], extractBits(val_17, 0u, 2u), 5u, 2u);\n unpacked[78] = extractBits(val_17, 2u, 7u);\n unpacked[79] = extractBits(val_17, 9u, 7u);\n unpacked[80] = extractBits(val_17, 16u, 7u);\n unpacked[81] = extractBits(val_17, 23u, 7u);\n unpacked[82] = extractBits(val_17, 30u, 2u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[82] = insertBits(unpacked[82], extractBits(val_18, 0u, 5u), 2u, 5u);\n unpacked[83] = extractBits(val_18, 5u, 7u);\n unpacked[84] = extractBits(val_18, 12u, 7u);\n unpacked[85] = extractBits(val_18, 19u, 7u);\n unpacked[86] = extractBits(val_18, 26u, 6u);\n \n let val_19 = blocks[packed_offset + 19];\n unpacked[86] = insertBits(unpacked[86], extractBits(val_19, 0u, 1u), 6u, 1u);\n unpacked[87] = extractBits(val_19, 1u, 7u);\n unpacked[88] = extractBits(val_19, 8u, 7u);\n unpacked[89] = extractBits(val_19, 15u, 7u);\n unpacked[90] = extractBits(val_19, 22u, 7u);\n unpacked[91] = extractBits(val_19, 29u, 3u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[91] = insertBits(unpacked[91], extractBits(val_20, 0u, 4u), 3u, 4u);\n unpacked[92] = extractBits(val_20, 4u, 7u);\n unpacked[93] = extractBits(val_20, 11u, 7u);\n unpacked[94] = extractBits(val_20, 18u, 7u);\n unpacked[95] = extractBits(val_20, 25u, 7u);\n \n let val_21 = blocks[packed_offset + 21];\n unpacked[96] = extractBits(val_21, 0u, 7u);\n unpacked[97] = extractBits(val_21, 7u, 7u);\n unpacked[98] = extractBits(val_21, 14u, 7u);\n unpacked[99] = extractBits(val_21, 21u, 7u);\n unpacked[100] = extractBits(val_21, 28u, 4u);\n \n let val_22 = blocks[packed_offset + 22];\n unpacked[100] = insertBits(unpacked[100], extractBits(val_22, 0u, 3u), 4u, 3u);\n unpacked[101] = extractBits(val_22, 3u, 7u);\n unpacked[102] = extractBits(val_22, 10u, 7u);\n unpacked[103] = extractBits(val_22, 17u, 7u);\n unpacked[104] = extractBits(val_22, 24u, 7u);\n unpacked[105] = extractBits(val_22, 31u, 1u);\n \n let val_23 = blocks[packed_offset + 23];\n unpacked[105] = insertBits(unpacked[105], extractBits(val_23, 0u, 6u), 1u, 6u);\n unpacked[106] = extractBits(val_23, 6u, 7u);\n unpacked[107] = extractBits(val_23, 13u, 7u);\n unpacked[108] = extractBits(val_23, 20u, 7u);\n unpacked[109] = extractBits(val_23, 27u, 5u);\n \n let val_24 = blocks[packed_offset + 24];\n unpacked[109] = insertBits(unpacked[109], extractBits(val_24, 0u, 2u), 5u, 2u);\n unpacked[110] = extractBits(val_24, 2u, 7u);\n unpacked[111] = extractBits(val_24, 9u, 7u);\n unpacked[112] = extractBits(val_24, 16u, 7u);\n unpacked[113] = extractBits(val_24, 23u, 7u);\n unpacked[114] = extractBits(val_24, 30u, 2u);\n \n let val_25 = blocks[packed_offset + 25];\n unpacked[114] = insertBits(unpacked[114], extractBits(val_25, 0u, 5u), 2u, 5u);\n unpacked[115] = extractBits(val_25, 5u, 7u);\n unpacked[116] = extractBits(val_25, 12u, 7u);\n unpacked[117] = extractBits(val_25, 19u, 7u);\n unpacked[118] = extractBits(val_25, 26u, 6u);\n \n let val_26 = blocks[packed_offset + 26];\n unpacked[118] = insertBits(unpacked[118], extractBits(val_26, 0u, 1u), 6u, 1u);\n unpacked[119] = extractBits(val_26, 1u, 7u);\n unpacked[120] = extractBits(val_26, 8u, 7u);\n unpacked[121] = extractBits(val_26, 15u, 7u);\n unpacked[122] = extractBits(val_26, 22u, 7u);\n unpacked[123] = extractBits(val_26, 29u, 3u);\n \n let val_27 = blocks[packed_offset + 27];\n unpacked[123] = insertBits(unpacked[123], extractBits(val_27, 0u, 4u), 3u, 4u);\n unpacked[124] = extractBits(val_27, 4u, 7u);\n unpacked[125] = extractBits(val_27, 11u, 7u);\n unpacked[126] = extractBits(val_27, 18u, 7u);\n unpacked[127] = extractBits(val_27, 25u, 7u); \n}\n";var fromFP510Function="\n\nconst exponents: array = array(\n 2.9103830456733704e-11, \n 5.820766091346741e-11, \n 1.1641532182693481e-10, \n 2.3283064365386963e-10,\n 4.656612873077393e-10, \n 9.313225746154785e-10, \n 1.862645149230957e-09, \n 3.725290298461914e-09,\n 7.450580596923828e-09, \n 1.4901161193847656e-08, \n 2.9802322387695312e-08, \n 5.960464477539063e-08,\n 1.1920928955078125e-07, \n 2.384185791015625e-07, \n 4.76837158203125e-07, \n 9.5367431640625e-07,\n 1.9073486328125e-06, \n 3.814697265625e-06, \n 7.62939453125e-06, \n 1.52587890625e-05, \n 3.0517578125e-05,\n 6.103515625e-05, \n 0.0001220703125, \n 0.000244140625, \n 0.00048828125, \n 0.0009765625, \n 0.001953125, \n 0.00390625,\n 0.0078125, \n 0.015625, \n 0.03125, \n 0.0625);\n\nfn from_fp510(x: u32) -> f32 {\n let exponent = f32(exponents[extractBits(x, 10u, 5u)]); \n let fractional = f32(extractBits(x, 0u, 10u)); \n let abs = exponent * fractional;\n return abs * (1.0 - (2.0 * f32(extractBits(x, 15u, 1u))));\n}\n";var preprocessBlocks3BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth3,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 12u); \n unpack_block_128_bit_depth_3(blocks_start); \n \n let b01: u32 = blocks_start;\n let b2: u32 = blocks_start + 8u;\n \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n\n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), (r * 16u) % 32u, 16u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), (r * 8u) % 32u, 8u); \n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n \n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), ((r * 16u) % 32u) + (2u * c), 2u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), ((r * 8u) % 32u) + c, 1u); \n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks5BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth5,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n\n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 20u);\n unpack_block_128_bit_depth_5(blocks_start); \n \n let b03: u32 = blocks_start;\n let b4: u32 = blocks_start + 16u;\n\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), (r * 8u) % 32u, 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n } \n}\n\n").concat(emptyShader);var preprocessBlocks6BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth6,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 24u);\n unpack_block_128_bit_depth_6(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n }\n\n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks7BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth7,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 28u);\n unpack_block_128_bit_depth_7(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u;\n let b6: u32 = blocks_start + 24u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u), 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessShaderSources={3:preprocessBlocks3BitShaderSource,5:preprocessBlocks5BitShaderSource,6:preprocessBlocks6BitShaderSource,7:preprocessBlocks7BitShaderSource};var preprocessShaderNames={3:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_3bit_shader",5:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_5bit_shader",6:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_6bit_shader",7:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_7bit_shader"};var BM=8;var BN=32;var TM=2;var TN=16;var TC=rowsPerBlock*BM*BN/(TM*TN);var constantSnippet="\nconst BM = ".concat(BM,"u;\nconst BN = ").concat(BN,"u;\n\nconst TM = ").concat(TM,"u;\nconst TN = ").concat(TN,"u;\n\nconst TC = ").concat(TC,"u;\n\nconst ROW_PER_BLOCK = ").concat(rowsPerBlock,"u;\nconst COL_PER_BLOCK = ").concat(columnsPerBlock,"u;\n\nconst VEC_COL_PER_BLOCK = COL_PER_BLOCK / 4u;\n\nconst block_size: u32 = (COL_PER_BLOCK * ROW_PER_BLOCK * bit_depth) / 32u;\n\n");var forwardMultipleInputArgsSnippet="\nstruct argsStruct {\n n: u32,\n m: u32,\n total_nbc: u32,\n k: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array;\n";var forwardMultipleSharedPrivateMemSnippet="\nvar shared_x: array, BN * VEC_COL_PER_BLOCK>;\nvar shared_ab: array;\nvar shared_w: array, BM * ROW_PER_BLOCK * VEC_COL_PER_BLOCK>;\n\nvar local_x: array, TN * VEC_COL_PER_BLOCK>;\nvar local_x_sums: array;\nvar local_results: array;\n";var forwardMultipleLocalVarSnippet="\n let tid = local_id.x;\n let bm_idx = workgroup_id.x;\n let bn_idx = workgroup_id.y;\n\n let local_bm_idx = bm_idx * BM;\n let local_bn_idx = bn_idx * BN;\n \n let n_idx = tid % (BN / TN);\n let k_idx = tid / (BN / TN) / (BM * ROW_PER_BLOCK / TM);\n let m_idx = tid / (BN / TN) % (BM * ROW_PER_BLOCK / TM);\n";var forwardMultipleLoadW1Bit="\n let b0 = blocks[src + (row / 4u)];\n\n let b0_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b0_offset = b0_offset_base + (c * 4u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b0, b0_offset, 1u)), \n f32(extractBits(b0, b0_offset + 1, 1u)),\n f32(extractBits(b0, b0_offset + 2, 1u)),\n f32(extractBits(b0, b0_offset + 3, 1u)));\n }\n";var forwardMultipleLoadW2Bit="\n let b01 = blocks[src + (row / 2u)];\n \n let b01_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b01_offset = b01_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(extractBits(b01, b01_offset, 2u)), \n f32(extractBits(b01, b01_offset + 2, 2u)),\n f32(extractBits(b01, b01_offset + 4, 2u)),\n f32(extractBits(b01, b01_offset + 6, 2u)));\n } \n";var forwardMultipleLoadW3Bit="\n let b01 = blocks[src + (row / 2u)];\n let b2 = blocks[src + 8u + (row / 4u)]; \n\n let b01_offset_base = (row * 16u) % 32u;\n let b2_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b01_offset = b01_offset_base + (c * 8u);\n let b2_offset = b2_offset_base + (c * 4u);\n\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b01, b01_offset, 2u), extractBits(b2, b2_offset, 1u), 2u, 1u)), \n f32(insertBits(extractBits(b01, b01_offset + 2, 2u), extractBits(b2, b2_offset + 1, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 4, 2u), extractBits(b2, b2_offset + 2, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 6, 2u), extractBits(b2, b2_offset + 3, 1u), 2u, 1u))); \n }\n";var forwardMultipleLoadW4Bit="\n let b03 = blocks[src + row];\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b03, b03_offset, 4u)), \n f32(extractBits(b03, b03_offset + 4, 4u)),\n f32(extractBits(b03, b03_offset + 8, 4u)),\n f32(extractBits(b03, b03_offset + 12, 4u)));\n }\n";var forwardMultipleLoadW5Bit="\n let b03 = blocks[src + row];\n let b4 = blocks[src + 16u + (row / 4u)];\n \n let b4_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b4_offset = b4_offset_base + (c * 4u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b4, b4_offset, 1u), 4u, 1u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b4, b4_offset + 1, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b4, b4_offset + 2, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b4, b4_offset + 3, 1u), 4u, 1u)));\n }\n";var forwardMultipleLoadW6Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u)));\n }\n";var forwardMultipleLoadW7Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n let b6 = blocks[src + 24u + (row / 4u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n let b6_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n let b6_offset = b6_offset_base + (c * 4u);\n \n shared_w[dst + c] = vec4(\n f32(insertBits(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u), extractBits(b6, b6_offset, 1u), 6u, 1u)), \n f32(insertBits(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u), extractBits(b6, b6_offset + 1, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u), extractBits(b6, b6_offset + 2, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u), extractBits(b6, b6_offset + 3, 1u), 6u, 1u)));\n }\n";var forwardMultipleLoadW8Bit="\n let b07_offset = src + (row * 2);\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b07 = blocks[b07_offset + c];\n shared_w[dst + c] = vec4(\n f32(extractBits(b07, 0u, 8u)), \n f32(extractBits(b07, 8u, 8u)),\n f32(extractBits(b07, 16u, 8u)),\n f32(extractBits(b07, 24u, 8u)));\n }\n";var forwardLoadWBitDepthSnippets={1:forwardMultipleLoadW1Bit,2:forwardMultipleLoadW2Bit,3:forwardMultipleLoadW3Bit,4:forwardMultipleLoadW4Bit,5:forwardMultipleLoadW5Bit,6:forwardMultipleLoadW6Bit,7:forwardMultipleLoadW7Bit,8:forwardMultipleLoadW8Bit};var forwardMultipleLoadXSnippet="\n let total_work_x = VEC_COL_PER_BLOCK * BN;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_x, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_x) { \n let n_load_idx = local_bn_idx + idx / VEC_COL_PER_BLOCK;\n let inner_idx = idx % VEC_COL_PER_BLOCK;\n \n if (bk_idx < args.k && n_load_idx < args.n) { \n let x_idx = (args.x_offset / 4u) + ((bk_idx * args.n + n_load_idx) * VEC_COL_PER_BLOCK + inner_idx); \n shared_x[idx] = x[x_idx];\n } else {\n shared_x[idx] = vec4(0.0);\n }\n }\n }\n";var forwardMultipleLoadABSnippet="\n let total_work_ab = BM * 2;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_ab, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_ab) {\n let m_load_idx = local_bm_idx + idx / 2; \n let inner_idx = (idx % 2) * 16u;\n \n if (m_load_idx < args.m && bk_idx < args.k) {\n let ab_bits = extractBits(metas[args.metas_offset + (m_load_idx * args.k + bk_idx)], inner_idx, 16u);\n shared_ab[idx] = from_fp510(ab_bits); \n } else {\n shared_ab[idx] = 0.0;\n }\n }\n }\n";var forwardMultipleLoadWSnippet=function forwardMultipleLoadWSnippet(bitDepth){return"\n let total_work_w = BM * ROW_PER_BLOCK;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_w, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_w) {\n let m_load_idx = local_bm_idx + idx / ROW_PER_BLOCK;\n let row = idx % ROW_PER_BLOCK;\n let dst = idx * VEC_COL_PER_BLOCK;\n\n if (m_load_idx < args.m) {\n let src = args.blocks_offset + (m_load_idx * args.k + bk_idx) * block_size;\n ".concat(forwardLoadWBitDepthSnippets[bitDepth],"\n } else { \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n shared_w[dst + c] = vec4(0.0);\n }\n }\n }\n }\n")};var forwardMultipleCopyXSnippet="\nfor (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n var x_sum_vec = vec4(0.0); \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n let shared_x_idx = (n_idx * TN + tn_idx) * VEC_COL_PER_BLOCK + (k_idx * VEC_COL_PER_BLOCK);\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n local_x[local_x_idx + c] = shared_x[shared_x_idx + c];\n x_sum_vec += local_x[local_x_idx + c];\n }\n local_x_sums[tn_idx] = x_sum_vec.x + x_sum_vec.y + x_sum_vec.z + x_sum_vec.w; \n}\n";var forwardMultipleComputeResultsSnippet="\n for (var tm_idx = 0u; tm_idx < TM; tm_idx++) { \n let shared_ab_idx = ((m_idx * TM + tm_idx) / ROW_PER_BLOCK + k_idx) * 2;\n let alpha = shared_ab[shared_ab_idx];\n let beta = shared_ab[shared_ab_idx + 1]; \n let shared_w_idx = ((m_idx * TM + tm_idx) + k_idx) * VEC_COL_PER_BLOCK;\n \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n \n var swx_vec = vec4(0.0); \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n swx_vec += shared_w[shared_w_idx + c] * local_x[local_x_idx + c];\n }\n let swx = swx_vec.x + swx_vec.y + swx_vec.z + swx_vec.w;\n \n let kappa = alpha * local_x_sums[tn_idx]; \n let results_idx = tm_idx * TN + tn_idx;\n local_results[results_idx] += kappa + (beta * swx);\n }\n }\n";var forwardMultipleWriteResultsSnippet="\nfor (var tm_idx = 0u; tm_idx < TM; tm_idx++) {\n let row = local_bm_idx * ROW_PER_BLOCK + (m_idx * TM + tm_idx); \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let col = local_bn_idx + (n_idx * TN + tn_idx);\n if (row < args.m * ROW_PER_BLOCK && col < args.n) {\n let y_idx = args.y_offset + ((row / ROW_PER_BLOCK) * args.n + col) * ROW_PER_BLOCK + (row % ROW_PER_BLOCK);\n let results_idx = tm_idx * TN + tn_idx;\n \n y[y_idx] += local_results[results_idx];\n }\n }\n}\n";var forwardMultipleShaderSources=function forwardMultipleShaderSources(bitDepth){return"\n\n".concat(forwardMultipleInputArgsSnippet,"\n\n").concat(constantSnippet,"\n\n").concat(forwardMultipleSharedPrivateMemSnippet,"\n\n").concat(fromFP510Function,"\n\n").concat(dividePadFunction,"\n\nconst bit_depth: u32 = ").concat(bitDepth,"u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n \n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n ").concat(forwardMultipleLocalVarSnippet,"\n \n for (var bk_idx = 0u; bk_idx < args.k; bk_idx++) { \n ").concat(forwardMultipleLoadXSnippet,"\n ").concat(forwardMultipleLoadABSnippet," \n ").concat(forwardMultipleLoadWSnippet(bitDepth)," \n workgroupBarrier();\n \n ").concat(forwardMultipleCopyXSnippet,"\n ").concat(forwardMultipleComputeResultsSnippet,"\n workgroupBarrier();\n }\n \n ").concat(forwardMultipleWriteResultsSnippet,"\n}\n\n").concat(emptyShader,"\n")};var forwardShuffleXShaderSource="\nstruct argsStruct {\n n: u32,\n shape1: u32,\n x_offset: u32,\n indices_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar indices: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape1) {\n return;\n } \n\n let b = global_id.x;\n let i = global_id.y;\n \n let c = i / 8u;\n let j = i % 8u;\n y[((c * args.n) + b) * 8 + j] = x[args.x_offset + (b * args.shape1) + indices[args.indices_offset + i]];\n}\n\n".concat(emptyShader,"\n");var forwardSingleReduceYShaderSource="\nstruct argsStruct {\n nvr: u32,\n nbc: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar y: array>;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x > args.nvr) {\n return;\n }\n\n let x_start = global_id.x * args.nbc;\n var sum: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n for (var i = 0u; i < args.nbc; i++) {\n sum += x[x_start + i]; \n }\n y[global_id.x] += sum;\n}\n\n".concat(emptyShader);var forwardShuffleYShaderSource="\nstruct argsStruct {\n n: u32,\n shape0: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape0) {\n return;\n } \n \n let b = global_id.x;\n let i = global_id.y;\n \n let r = i / 16u;\n let j = i % 16u;\n y[(b * args.shape0) + (r * 16) + j] = x[(((r * args.n) + b) * 16) + j];\n}\n\n".concat(emptyShader);var addBiasShaderSource="\nstruct argsStruct {\n dimension: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar bias: array;\n\n@group(0) @binding(2)\nvar y: array;\n\n".concat(fromFP510Function,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n y[(global_id.x * args.dimension) + global_id.y] += bias[global_id.y];\n}\n\n").concat(emptyShader);var forwardSingleBitDepth1ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 4u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b0_start = row_blocks_start + br_offset + (bc * block_size);\n var b0_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b0 = blocks[b0_start];\n \n let w0_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w0_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w0_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w0_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 8u;\n \n let w1_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w1_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w1_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w1_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 16u;\n \n let w2_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w2_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w2_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w2_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 24u;\n \n let w3_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w3_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w3_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w3_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth2ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 8u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b01_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b01 = blocks[b01_start];\n \n let w0_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w0_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w0_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w0_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w1_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w1_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w1_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w1_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u; \n b01 = blocks[b01_start + 1u];\n \n let w2_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w2_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w2_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w2_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w3_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w3_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w3_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w3_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth3ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 12u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id : vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n\n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b2_start = row_blocks_start + br_offset + (bc * block_size) + 8u;\n var b01_offset = 0u;\n var b2_offset = 0u;\n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) { \n \n var b01 = blocks[b01_start];\n var b2 = blocks[b2_start];\n \n var b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n var b2_bit = extractBits(b2, b2_offset + j, 1u);\n let w0_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 8u;\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w1_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 16u; \n b01 = blocks[b01_start + 1u];\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w2_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 24u; \n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w3_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 0u; \n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n \n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth4ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 16u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start]; \n \n let w0_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w0_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w0_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w0_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 1];\n \n let w1_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w1_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w1_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w1_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 2];\n \n let w2_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w2_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w2_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w2_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 3];\n \n let w3_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w3_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w3_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w3_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth5ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 20u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b4_start = row_blocks_start + br_offset + (bc * block_size) + 16u;\n \n var b4_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b4 = blocks[b4_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w0_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 1];\n b4_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w1_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 2];\n b4_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w2_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 3];\n b4_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w3_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b4_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth6ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 24u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n \n var b45_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w0_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w0_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w0_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w0_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w1_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w1_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w1_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w1_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u)); \n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w2_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w2_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w2_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w2_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w3_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w3_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w3_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w3_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b45_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth7ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 28u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n var b6_start = row_blocks_start + br_offset + (bc * block_size) + 24u;\n \n var b45_offset = 0u;\n var b6_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n var b6 = blocks[b6_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n var b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w0_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w0_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w0_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w0_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n b6_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w1_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w1_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w1_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w1_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n b6_offset = 16u;\n\n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w2_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w2_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w2_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w2_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n b6_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w3_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w3_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w3_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w3_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b45_offset = 0u;\n b6_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth8ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 32u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b07_start = row_blocks_start + (br_offset * 8u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < 2; j++) {\n \n var b07 = blocks[b07_start + j];\n \n let w0_0 = f32(extractBits(b07, 0u, 8u)); \n let w0_1 = f32(extractBits(b07, 8u, 8u)); \n let w0_2 = f32(extractBits(b07, 16u, 8u));\n let w0_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 2 + j];\n \n let w1_0 = f32(extractBits(b07, 0u, 8u)); \n let w1_1 = f32(extractBits(b07, 8u, 8u)); \n let w1_2 = f32(extractBits(b07, 16u, 8u));\n let w1_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 4 + j];\n \n let w2_0 = f32(extractBits(b07, 0u, 8u)); \n let w2_1 = f32(extractBits(b07, 8u, 8u)); \n let w2_2 = f32(extractBits(b07, 16u, 8u));\n let w2_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 6 + j];\n \n let w3_0 = f32(extractBits(b07, 0u, 8u)); \n let w3_1 = f32(extractBits(b07, 8u, 8u)); \n let w3_2 = f32(extractBits(b07, 16u, 8u));\n let w3_3 = f32(extractBits(b07, 24u, 8u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_vec = x[x_start + j];\n res[j] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleShaderSources={1:forwardSingleBitDepth1ShaderSource,2:forwardSingleBitDepth2ShaderSource,3:forwardSingleBitDepth3ShaderSource,4:forwardSingleBitDepth4ShaderSource,5:forwardSingleBitDepth5ShaderSource,6:forwardSingleBitDepth6ShaderSource,7:forwardSingleBitDepth7ShaderSource,8:forwardSingleBitDepth8ShaderSource};var forwardSingleShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_8_shader"};var forwardShaderSources={1:forwardMultipleShaderSources(1),2:forwardMultipleShaderSources(2),3:forwardMultipleShaderSources(3),4:forwardMultipleShaderSources(4),5:forwardMultipleShaderSources(5),6:forwardMultipleShaderSources(6),7:forwardMultipleShaderSources(7),8:forwardMultipleShaderSources(8)};var forwardShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_8_shader"};var forwardShuffleXShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_x_shader";var forwardShuffleYShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_y_shader";var addBiasShaderName="pv_picollm_weight_block_mixed_16x8_add_bias_shader";var forwardSingleReduceYShaderName="pv_picollm_weight_block_mixed_16x8_forward_single_reduce_y_shader";var _weightBlockMixed16x;var loadPreprocessBlocksShader=function loadPreprocessBlocksShader(device,bitDepth){var bindGroupLayout=device.createBindGroupLayout({label:"weight preprocess blocks ".concat(bitDepth," bind group layout"),entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight preprocess blocks ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight preprocess blocks ".concat(bitDepth," shader module"),code:preprocessShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight preprocess blocks ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:preprocessDim,workgroup_size_y:preprocessDim}}});return{computePipeline:computePipeline}};var loadForwardShuffleXShader=function loadForwardShuffleXShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle x bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle x pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle x shader module",code:forwardShuffleXShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle x pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_y:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardSingleReduceYShader=function loadForwardSingleReduceYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight single reduce y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight single reduce y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight single reduce y shader module",code:forwardSingleReduceYShaderSource});var computePipeline=device.createComputePipeline({label:"weight single reduce y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardShuffleYShader=function loadForwardShuffleYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle y shader module",code:forwardShuffleYShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var loadForwardSingleShader=function loadForwardSingleShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward single ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward single ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward single ".concat(bitDepth," shader module"),code:forwardSingleShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward single ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:weightBlockSize,workgroup_size_y:1}}});return{computePipeline:computePipeline}};var loadForwardShader=function loadForwardShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward multi ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward multi ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward multi ".concat(bitDepth," shader module"),code:forwardShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward multi ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:TC}}});return{computePipeline:computePipeline}};var loadAddBiasShader=function loadAddBiasShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight add bias bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight add bias pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight add bias shader module",code:addBiasShaderSource});var computePipeline=device.createComputePipeline({label:"weight add bias pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var weightBlockMixed16x8Shaders=(_weightBlockMixed16x={},_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,preprocessShaderNames[3],function(device){return loadPreprocessBlocksShader(device,3)}),preprocessShaderNames[5],function(device){return loadPreprocessBlocksShader(device,5)}),preprocessShaderNames[6],function(device){return loadPreprocessBlocksShader(device,6)}),preprocessShaderNames[7],function(device){return loadPreprocessBlocksShader(device,7)}),forwardShuffleXShaderName,loadForwardShuffleXShader),forwardShuffleYShaderName,loadForwardShuffleYShader),forwardSingleReduceYShaderName,loadForwardSingleReduceYShader),forwardSingleShaderNames[1],function(device){return loadForwardSingleShader(device,1)}),forwardSingleShaderNames[2],function(device){return loadForwardSingleShader(device,2)}),forwardSingleShaderNames[3],function(device){return loadForwardSingleShader(device,3)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardSingleShaderNames[4],function(device){return loadForwardSingleShader(device,4)}),forwardSingleShaderNames[5],function(device){return loadForwardSingleShader(device,5)}),forwardSingleShaderNames[6],function(device){return loadForwardSingleShader(device,6)}),forwardSingleShaderNames[7],function(device){return loadForwardSingleShader(device,7)}),forwardSingleShaderNames[8],function(device){return loadForwardSingleShader(device,8)}),forwardShaderNames[1],function(device){return loadForwardShader(device,1)}),forwardShaderNames[2],function(device){return loadForwardShader(device,2)}),forwardShaderNames[3],function(device){return loadForwardShader(device,3)}),forwardShaderNames[4],function(device){return loadForwardShader(device,4)}),forwardShaderNames[5],function(device){return loadForwardShader(device,5)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardShaderNames[6],function(device){return loadForwardShader(device,6)}),forwardShaderNames[7],function(device){return loadForwardShader(device,7)}),forwardShaderNames[8],function(device){return loadForwardShader(device,8)}),addBiasShaderName,loadAddBiasShader));function ownKeys$1(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread$1(e){for(var r=1;r=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e1&&_args[1]!==undefined?_args[1]:{};time=_args.length>2&&_args[2]!==undefined?_args[2]:5e3;controller=new AbortController;config=_objectSpread(_objectSpread({},options),{},{signal:controller.signal});timeout=setTimeout(function(){controller.abort()},time);_context.next=7;return fetch(uri,config);case 7:response=_context.sent;clearTimeout(timeout);return _context.abrupt("return",response);case 10:case"end":return _context.stop()}},_callee)}));return _fetchWithTimeout.apply(this,arguments)}function open(_x2,_x3){return _open.apply(this,arguments)}function _open(){_open=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(path,mode){var error;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.prev=0;_context2.next=3;return PvFileIDB.open(path,mode);case 3:return _context2.abrupt("return",_context2.sent);case 6:_context2.prev=6;_context2.t0=_context2["catch"](0);if(_context2.t0.name==="IndexedDBNotSupported"){console.warn("IndexedDB is not supported. Fallback to in-memory storage.")}else if(_context2.t0.name!=="FileNotExists"){console.warn("Unable to access IndexedDB (".concat(_context2.t0.toString(),"). Fallback to in-memory storage."))}if(!(typeof WorkerGlobalScope!=="undefined"&&self instanceof WorkerGlobalScope)){_context2.next=16;break}if(!(_context2.t0.name==="FileNotExists")){_context2.next=12;break}throw _context2.t0;case 12:console.error("In-memory storage cannot be used inside a worker.");error=new Error("Failed to start PvFile: ".concat(_context2.t0.toString()));error.name="PvFileNotSupported";throw error;case 16:return _context2.abrupt("return",PvFileMem.open(path,mode));case 17:case"end":return _context2.stop()}},_callee2,null,[[0,6]])}));return _open.apply(this,arguments)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>{if(isFileURI(url)){return new Promise((reject,resolve)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response)}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];if(ENVIRONMENT_IS_PTHREAD){var wasmPromiseResolve;var wasmPromiseReject;var initializedJS=false;function threadPrintErr(...args){var text=args.join(" ");console.error(text)}if(!Module["printErr"])err=threadPrintErr;function threadAlert(...args){var text=args.join(" ");postMessage({cmd:"alert",text:text,threadId:_pthread_self()})}self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>new Promise((resolve,reject)=>{wasmPromiseResolve=module=>{var instance=new WebAssembly.Instance(module,getWasmImports());receiveInstance(instance);resolve()};wasmPromiseReject=reject});self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{var msgData=e["data"];var cmd=msgData["cmd"];if(cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{postMessage({cmd:"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData["handlers"]){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData["wasmMemory"];updateMemoryViews();wasmPromiseResolve(msgData["wasmModule"])}else if(cmd==="run"){__emscripten_thread_init(msgData["pthread_ptr"],0,0,1,0,0);__emscripten_thread_mailbox_await(msgData["pthread_ptr"]);establishStackSpace();PThread.receiveObjectTransfer(msgData);PThread.threadInitTLS();if(!initializedJS){initializedJS=true}try{invokeEntryPoint(msgData["start_routine"],msgData["arg"])}catch(ex){if(ex!="unwind"){throw ex}}}else if(cmd==="cancel"){if(_pthread_self()){__emscripten_thread_exit(-1)}}else if(msgData.target==="setimmediate"){}else if(cmd==="checkMailbox"){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}if(!ENVIRONMENT_IS_PTHREAD){if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:4294967296/65536,shared:true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){err("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)")}throw Error("bad memory")}}updateMemoryViews()}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){var f="pv_orca_pthread.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){assignWasmImports();return{a:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmExports=applySignatureConversions(wasmExports);registerTLSInit(wasmExports["dc"]);wasmTable=wasmExports["Ub"];addOnInit(wasmExports["F"]);wasmModule=module;removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var killThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];delete PThread.pthreads[pthread_ptr];terminateWorker(worker);__emscripten_thread_free_data(pthread_ptr);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0};var cancelThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];worker.postMessage({cmd:"cancel"})};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);var proxyToMainThread=(funcIndex,emAsmAddr,sync,...callArgs)=>{var serializedNumCallArgs=callArgs.length*2;var sp=stackSave();var args=stackAlloc(serializedNumCallArgs*8);var b=args>>>3;for(var i=0;i>>0]=arg}}var rtn=__emscripten_run_on_main_thread_js(funcIndex,emAsmAddr,serializedNumCallArgs,args,sync);stackRestore(sp);return rtn};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))}var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,0,returnCode);_exit(returnCode)}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(ENVIRONMENT_IS_PTHREAD){PThread.initWorker()}else{PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=navigator.hardwareConcurrency;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(()=>{addRunDependency("loading-workers");PThread.loadWasmModuleToAllWorkers(()=>removeRunDependency("loading-workers"))})},initWorker(){noExitRuntime=false},setExitStatus:status=>EXITSTATUS=status,terminateAllThreads__deps:["$terminateWorker"],terminateAllThreads:()=>{for(var worker of PThread.runningWorkers){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.runningWorkers=[];PThread.pthreads=[]},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;__emscripten_thread_free_data(pthread_ptr)},receiveObjectTransfer(data){},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e["data"];var cmd=d["cmd"];if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var targetWorker=PThread.pthreads[d["targetThread"]];if(targetWorker){targetWorker.postMessage(d,d["transferList"])}else{err(`Internal error! Worker sent a message "${cmd}" to target pthread ${d["targetThread"]}, but that thread no longer exists!`)}return}if(cmd==="checkMailbox"){checkMailbox()}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;onFinishedLoading(worker)}else if(cmd==="alert"){alert(`Thread ${d["threadId"]}: ${d["text"]}`)}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="callHandler"){Module[d["handler"]](...d["args"])}else if(cmd){err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:"load",handlers:handlers,wasmMemory:wasmMemory,wasmModule:wasmModule})}),loadWasmModuleToAllWorkers(onMaybeReady){if(ENVIRONMENT_IS_PTHREAD){return onMaybeReady()}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));pthreadPoolReady.then(onMaybeReady)},allocateUnusedWorker(){var worker;var workerOptions={type:"module",name:"em-pthread"};var pthreadMainJs=_scriptName;if(Module["mainScriptUrlOrBlob"]){pthreadMainJs=Module["mainScriptUrlOrBlob"];if(typeof pthreadMainJs!="string"){pthreadMainJs=URL.createObjectURL(pthreadMainJs)}}worker=new Worker(pthreadMainJs,workerOptions);PThread.unusedWorkers.push(worker)},getNewWorker(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var establishStackSpace=()=>{var pthread_ptr=_pthread_self();var stackHigh=GROWABLE_HEAP_U32()[pthread_ptr+52>>>2>>>0];var stackSize=GROWABLE_HEAP_U32()[pthread_ptr+56>>>2>>>0];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)};var invokeEntryPoint=(ptr,arg)=>{runtimeKeepaliveCounter=0;var result=(a1=>dynCall_ii(ptr,a1))(arg);function finish(result){if(keepRuntimeAlive()){PThread.setExitStatus(result)}else{__emscripten_thread_exit(result)}}finish(result)};var noExitRuntime=Module["noExitRuntime"]||true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);function syscallGetVarargI(){var ret=GROWABLE_HEAP_I32()[+SYSCALLS.varargs>>>2>>>0];SYSCALLS.varargs+=4;return ret}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>(view.set(crypto.getRandomValues(new Uint8Array(view.byteLength))),view)}else abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof SharedArrayBuffer?heapOrArray.slice(idx,endPtr):heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>>0)}return{ptr:ptr,allocated:allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;iFS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS:MEMFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,GROWABLE_HEAP_I8(),ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>{ptr>>>=0;return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);GROWABLE_HEAP_I32()[buf>>>2>>>0]=stat.dev;GROWABLE_HEAP_I32()[buf+4>>>2>>>0]=stat.mode;GROWABLE_HEAP_U32()[buf+8>>>2>>>0]=stat.nlink;GROWABLE_HEAP_I32()[buf+12>>>2>>>0]=stat.uid;GROWABLE_HEAP_I32()[buf+16>>>2>>>0]=stat.gid;GROWABLE_HEAP_I32()[buf+20>>>2>>>0]=stat.rdev;HEAP64[buf+24>>>3]=BigInt(stat.size);GROWABLE_HEAP_I32()[buf+32>>>2>>>0]=4096;GROWABLE_HEAP_I32()[buf+36>>>2>>>0]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>>3]=BigInt(Math.floor(atime/1e3));GROWABLE_HEAP_U32()[buf+48>>>2>>>0]=atime%1e3*1e3;HEAP64[buf+56>>>3]=BigInt(Math.floor(mtime/1e3));GROWABLE_HEAP_U32()[buf+64>>>2>>>0]=mtime%1e3*1e3;HEAP64[buf+72>>>3]=BigInt(Math.floor(ctime/1e3));GROWABLE_HEAP_U32()[buf+80>>>2>>>0]=ctime%1e3*1e3;HEAP64[buf+88>>>3]=BigInt(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=GROWABLE_HEAP_U8().slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_openat(dirfd,path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,dirfd,path,flags,varargs);path>>>=0;varargs>>>=0;SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("")};function __emscripten_init_main_thread_js(tb){tb>>>=0;__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB,65536,false);PThread.threadInitTLS()}var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD)__emscripten_thread_exit(EXITSTATUS);else _exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};function __emscripten_thread_mailbox_await(pthread_ptr){pthread_ptr>>>=0;if(typeof Atomics.waitAsync==="function"){var wait=Atomics.waitAsync(GROWABLE_HEAP_I32(),pthread_ptr>>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+128;Atomics.store(GROWABLE_HEAP_I32(),waitingAsync>>>2,1)}}var checkMailbox=()=>{var pthread_ptr=_pthread_self();if(pthread_ptr){__emscripten_thread_mailbox_await(pthread_ptr);callUserCallback(__emscripten_check_mailbox)}};function __emscripten_notify_mailbox_postmessage(targetThreadId,currThreadId,mainThreadId){targetThreadId>>>=0;currThreadId>>>=0;mainThreadId>>>=0;if(targetThreadId==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread:targetThreadId,cmd:"checkMailbox"})}else{var worker=PThread.pthreads[targetThreadId];if(!worker){return}worker.postMessage({cmd:"checkMailbox"})}}var proxiedJSCallArgs=[];function __emscripten_receive_on_main_thread_js(funcIndex,emAsmAddr,callingThread,numCallArgs,args){emAsmAddr>>>=0;callingThread>>>=0;args>>>=0;numCallArgs/=2;proxiedJSCallArgs.length=numCallArgs;var b=args>>>3;for(var i=0;i>>0]}}var func=proxiedFunctionTable[funcIndex];PThread.currentProxiedOperationCallerThread=callingThread;var rtn=func(...proxiedJSCallArgs);PThread.currentProxiedOperationCallerThread=0;return rtn}function __emscripten_thread_cleanup(thread){thread>>>=0;if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:"cleanupThread",thread:thread})}function __emscripten_thread_set_strongref(thread){thread>>>=0}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite);var __tzset_js=function(timezone,daylight,std_name,dst_name){timezone>>>=0;daylight>>>=0;std_name>>>=0;dst_name>>>=0;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);GROWABLE_HEAP_U32()[timezone>>>2>>>0]=stdTimezoneOffset*60;GROWABLE_HEAP_I32()[daylight>>>2>>>0]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}};var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var _emscripten_get_now;_emscripten_get_now=()=>performance.timeOrigin+performance.now();var getHeapMax=()=>4294901760;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};function _emscripten_resize_heap(requestedSize){requestedSize>>>=0;var oldSize=GROWABLE_HEAP_U8().length;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false}var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>>0]=str.charCodeAt(i)}GROWABLE_HEAP_I8()[buffer>>>0]=0};var _environ_get=function(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,__environ,environ_buf);__environ>>>=0;environ_buf>>>=0;var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;GROWABLE_HEAP_U32()[__environ+i*4>>>2>>>0]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=function(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(4,0,1,penviron_count,penviron_buf_size);penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();GROWABLE_HEAP_U32()[penviron_count>>>2>>>0]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);GROWABLE_HEAP_U32()[penviron_buf_size>>>2>>>0]=bufSize;return 0};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(5,0,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=GROWABLE_HEAP_U32()[iov+4>>>2>>>0];iov+=8;var curr=FS.read(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);GROWABLE_HEAP_U32()[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(7,0,1,fd,offset,whence,newOffset);offset=bigintToI53Checked(offset);newOffset>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=GROWABLE_HEAP_U32()[iov+4>>>2>>>0];iov+=8;var curr=FS.write(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(8,0,1,fd,iov,iovcnt,pnum);iov>>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);GROWABLE_HEAP_U32()[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _pv_console_log_wasm(index){console.log(arrayBufferToStringAtIndex(Module.HEAPU8,index))}var _pv_file_close_wasm=async function(fileAddress,statusAddress){statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{try{const file=await PvFile.getPtr(fileAddress);await file.close();setInt(statusAddress,0)}catch(e){console.error("pvFileCloseWasm",e);setInt(statusAddress,-1)}})};_pv_file_close_wasm.isAsync=true;var _pv_file_open_wasm=async function(fileAddress,pathAddress,modeAddress,statusAddress){pathAddress=unsignedAddress(pathAddress);modeAddress=unsignedAddress(modeAddress);statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{const path=arrayBufferToStringAtIndex(Module.HEAPU8,pathAddress);const mode=arrayBufferToStringAtIndex(Module.HEAPU8,modeAddress);try{const file=await open(path,mode);PvFile.setPtr(fileAddress,file);setInt(statusAddress,0)}catch(e){if(e.name!=="FileNotExists"){console.error("pvFileOpenWasm",e)}setInt(statusAddress,-1)}})};_pv_file_open_wasm.isAsync=true;var _pv_file_read_wasm=async function(fileAddress,contentAddress,size,count,numReadAddress){contentAddress=unsignedAddress(contentAddress);numReadAddress=unsignedAddress(numReadAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=await file.read(size,count);Module.HEAPU8.set(content,contentAddress);setInt(numReadAddress,content.length/size)}catch(e){console.error("pvFileReadWasm",e);setInt(numReadAddress,-1)}})};_pv_file_read_wasm.isAsync=true;function _pv_file_seek_wasm(fileAddress,offset,whence,statusAddress){statusAddress=unsignedAddress(statusAddress);try{const file=PvFile.getPtr(fileAddress);file.seek(offset,whence);setInt(statusAddress,0)}catch(e){console.error("pvFileSeekWasm",e);setInt(statusAddress,-1)}}function _pv_file_tell_wasm(fileAddress,offsetAddress){offsetAddress=unsignedAddress(offsetAddress);try{const file=PvFile.getPtr(fileAddress);setInt(offsetAddress,file.tell())}catch(e){console.error("pvFileTellWasm",e);setInt(offsetAddress,-1)}}var _pv_file_write_wasm=function(fileAddress,contentAddress,size,count,numWriteAddress){contentAddress=unsignedAddress(contentAddress);numWriteAddress=unsignedAddress(numWriteAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=new Uint8Array(size*count);content.set(Module.HEAPU8.slice(contentAddress,contentAddress+size*count),0);await file.write(content);setInt(numWriteAddress,content.length/size)}catch(e){console.error("pvFileWriteWasm",e);setInt(numWriteAddress,-1)}})};var _pv_https_request_wasm=async function(httpMethodAddress,serverNameAddress,endpointAddress,headerAddress,bodyAddress,timeoutMs,responseAddressAddress,responseSizeAddress,responseCodeAddress){httpMethodAddress=unsignedAddress(httpMethodAddress);serverNameAddress=unsignedAddress(serverNameAddress);endpointAddress=unsignedAddress(endpointAddress);headerAddress=unsignedAddress(headerAddress);bodyAddress=unsignedAddress(bodyAddress);responseAddressAddress=unsignedAddress(responseAddressAddress);responseSizeAddress=unsignedAddress(responseSizeAddress);responseCodeAddress=unsignedAddress(responseCodeAddress);return Asyncify.handleAsync(async()=>{const httpMethod=arrayBufferToStringAtIndex(Module.HEAPU8,httpMethodAddress);const serverName=arrayBufferToStringAtIndex(Module.HEAPU8,serverNameAddress);const endpoint=arrayBufferToStringAtIndex(Module.HEAPU8,endpointAddress);const header=arrayBufferToStringAtIndex(Module.HEAPU8,headerAddress);const body=arrayBufferToStringAtIndex(Module.HEAPU8,bodyAddress);const headerObject=stringHeaderToObject(header);const options={method:httpMethod};if(body.length>0){options.body=body}if(Object.keys(headerObject).length>0){options.headers=headerObject}let response;let responseText;let statusCode;try{response=await fetchWithTimeout("https://"+serverName+endpoint,options,timeoutMs);statusCode=response.status}catch(error){console.error("pvHttpsRequestWasm",`Failed to fetch: ${error}`);return}try{responseText=await response.text()}catch(error){console.error("pvHttpsRequestWasm",`Failed to get response text: ${error}`);return}const responseAddress=Module._malloc((responseText.length+1)*Int8Array.BYTES_PER_ELEMENT);if(responseAddress===0){console.error("pvMallocError","pvHttpsRequestWasm: cannot allocate memory for response");setInt(responseAddressAddress,0);return}setInt(responseSizeAddress,responseText.length+1);setInt(responseAddressAddress,responseAddress);for(let i=0;i{try{return func()}catch(e){abort(e)}};var sigToWasmTypes=sig=>{var typeNames={i:"i32",j:"i64",f:"f32",d:"f64",e:"externref",p:"i32"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(pv_https_request_wasm|pv_file_open_wasm|pv_file_close_wasm|pv_file_read_wasm|pv_file_write_wasm|pv_file_remove_wasm|pv_sleep_wasm|pv_xpu_webgpu_device_init_wasm|pv_xpu_webgpu_device_info_wasm|pv_xpu_webgpu_device_mem_copy_from_xpu_wasm|pv_xpu_webgpu_device_wait_wasm|pv_xpu_webgpu_timer_stop_wasm|invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x)}}},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){ret[x]=(...args)=>{Asyncify.exportCallStack.push(x);try{return original(...args)}finally{if(!ABORT){var y=Asyncify.exportCallStack.pop();Asyncify.maybeStopUnwind()}}}}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callStackNameToId:{},callStackIdToName:{},callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(funcName){var id=Asyncify.callStackNameToId[funcName];if(id===undefined){id=Asyncify.callStackId++;Asyncify.callStackNameToId[funcName]=id;Asyncify.callStackIdToName[id]=funcName}return id},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runtimeKeepalivePush();runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve:resolve,reject:reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){GROWABLE_HEAP_U32()[ptr>>>2>>>0]=stack;GROWABLE_HEAP_U32()[ptr+4>>>2>>>0]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];var rewindId=Asyncify.getCallStackId(bottomOfCallStack);GROWABLE_HEAP_I32()[ptr+8>>>2>>>0]=rewindId},getDataRewindFuncName(ptr){var id=GROWABLE_HEAP_I32()[ptr+8>>>2>>>0];var name=Asyncify.callStackIdToName[id];return name},getDataRewindFunc(name){var func=wasmExports[name];return func},doRewind(ptr){var name=Asyncify.getDataRewindFuncName(ptr);var func=Asyncify.getDataRewindFunc(name);runtimeKeepalivePop();return func()},handleSleep(startAsync){if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync(startAsync){return Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})}};var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var generateFuncType=(sig,target)=>{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={i:127,p:127,j:126,f:125,d:124,e:111};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i{if(typeof WebAssembly.Function=="function"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push(...typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{e:{f:func}});var wrappedFunc=instance.exports["f"];return wrappedFunc};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{GROWABLE_HEAP_I8().set(array,buffer>>>0)};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};Module["cwrap"]=cwrap;PThread.init();FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();xpu_cpu_support();var proxiedFunctionTable=[_proc_exit,exitOnMainThread,___syscall_openat,_environ_get,_environ_sizes_get,_fd_close,_fd_read,_fd_seek,_fd_write];var wasmImports;function assignWasmImports(){wasmImports={D:___syscall_openat,l:__abort_js,B:__emscripten_init_main_thread_js,t:__emscripten_notify_mailbox_postmessage,v:__emscripten_receive_on_main_thread_js,g:__emscripten_thread_cleanup,A:__emscripten_thread_mailbox_await,k:__emscripten_thread_set_strongref,y:__tzset_js,h:_emscripten_check_blocking_allowed,j:_emscripten_exit_with_live_runtime,b:_emscripten_get_now,s:_emscripten_resize_heap,w:_environ_get,x:_environ_sizes_get,c:_exit,e:_fd_close,C:_fd_read,z:_fd_seek,d:_fd_write,a:wasmMemory,i:_pv_console_log_wasm,q:_pv_file_close_wasm,r:_pv_file_open_wasm,f:_pv_file_read_wasm,p:_pv_file_seek_wasm,o:_pv_file_tell_wasm,n:_pv_file_write_wasm,m:_pv_https_request_wasm,E:_pv_time_wasm,u:_pv_xpu_get_max_workers_wasm}}var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["F"])();var __Znwm=Module["__Znwm"]=a0=>(__Znwm=Module["__Znwm"]=wasmExports["G"])(a0);var __Znam=Module["__Znam"]=a0=>(__Znam=Module["__Znam"]=wasmExports["H"])(a0);var __ZdlPv=Module["__ZdlPv"]=a0=>(__ZdlPv=Module["__ZdlPv"]=wasmExports["I"])(a0);var __ZdlPvm=Module["__ZdlPvm"]=(a0,a1)=>(__ZdlPvm=Module["__ZdlPvm"]=wasmExports["J"])(a0,a1);var __ZdaPv=Module["__ZdaPv"]=a0=>(__ZdaPv=Module["__ZdaPv"]=wasmExports["K"])(a0);var __ZdaPvm=Module["__ZdaPvm"]=(a0,a1)=>(__ZdaPvm=Module["__ZdaPvm"]=wasmExports["L"])(a0,a1);var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=(a0,a1)=>(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=wasmExports["M"])(a0,a1);var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=(a0,a1)=>(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=wasmExports["N"])(a0,a1);var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=(a0,a1)=>(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=wasmExports["O"])(a0,a1);var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=wasmExports["P"])(a0,a1,a2);var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=(a0,a1)=>(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=wasmExports["Q"])(a0,a1);var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=wasmExports["R"])(a0,a1,a2);var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=a0=>(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=wasmExports["S"])(a0);var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=a0=>(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=wasmExports["T"])(a0);var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=a0=>(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=wasmExports["U"])(a0);var ___cxa_guard_acquire=Module["___cxa_guard_acquire"]=a0=>(___cxa_guard_acquire=Module["___cxa_guard_acquire"]=wasmExports["V"])(a0);var ___cxa_guard_release=Module["___cxa_guard_release"]=a0=>(___cxa_guard_release=Module["___cxa_guard_release"]=wasmExports["W"])(a0);var ___cxa_guard_abort=Module["___cxa_guard_abort"]=a0=>(___cxa_guard_abort=Module["___cxa_guard_abort"]=wasmExports["X"])(a0);var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=()=>(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=wasmExports["Y"])();var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=()=>(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=wasmExports["Z"])();var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=()=>(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=wasmExports["_"])();var __ZSt9terminatev=Module["__ZSt9terminatev"]=()=>(__ZSt9terminatev=Module["__ZSt9terminatev"]=wasmExports["$"])();var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=()=>(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=wasmExports["aa"])();var ___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=()=>(___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=wasmExports["ba"])();var ___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=a0=>(___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=wasmExports["ca"])(a0);var ___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=()=>(___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=wasmExports["da"])();var ___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=()=>(___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=wasmExports["ea"])();var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=a0=>(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["fa"])(a0);var ___cxa_free_exception=Module["___cxa_free_exception"]=a0=>(___cxa_free_exception=Module["___cxa_free_exception"]=wasmExports["ga"])(a0);var ___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=(a0,a1,a2)=>(___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["ha"])(a0,a1,a2);var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=()=>(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["ia"])();var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=()=>(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["ja"])();var ___dynamic_cast=Module["___dynamic_cast"]=(a0,a1,a2,a3)=>(___dynamic_cast=Module["___dynamic_cast"]=wasmExports["ka"])(a0,a1,a2,a3);var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=a0=>(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=wasmExports["la"])(a0);var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=a0=>(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=wasmExports["ma"])(a0);var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=a0=>(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=wasmExports["na"])(a0);var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=a0=>(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=wasmExports["oa"])(a0);var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=a0=>(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=wasmExports["pa"])(a0);var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=a0=>(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=wasmExports["qa"])(a0);var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=a0=>(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=wasmExports["ra"])(a0);var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=a0=>(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=wasmExports["sa"])(a0);var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=a0=>(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=wasmExports["ta"])(a0);var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=a0=>(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=wasmExports["ua"])(a0);var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=a0=>(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=wasmExports["va"])(a0);var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=a0=>(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=wasmExports["wa"])(a0);var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=a0=>(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=wasmExports["xa"])(a0);var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=a0=>(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=wasmExports["ya"])(a0);var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=a0=>(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=wasmExports["za"])(a0);var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=a0=>(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=wasmExports["Aa"])(a0);var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=a0=>(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=wasmExports["Ba"])(a0);var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=a0=>(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=wasmExports["Ca"])(a0);var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=a0=>(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=wasmExports["Da"])(a0);var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=a0=>(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=wasmExports["Ea"])(a0);var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=a0=>(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=wasmExports["Fa"])(a0);var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=a0=>(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=wasmExports["Ga"])(a0);var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=a0=>(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=wasmExports["Ha"])(a0);var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=a0=>(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=wasmExports["Ia"])(a0);var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=a0=>(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=wasmExports["Ja"])(a0);var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=a0=>(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=wasmExports["Ka"])(a0);var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=a0=>(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=wasmExports["La"])(a0);var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=a0=>(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=wasmExports["Ma"])(a0);var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=a0=>(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=wasmExports["Na"])(a0);var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=a0=>(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=wasmExports["Oa"])(a0);var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=a0=>(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=wasmExports["Pa"])(a0);var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=a0=>(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=wasmExports["Qa"])(a0);var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=a0=>(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=wasmExports["Ra"])(a0);var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=a0=>(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=wasmExports["Sa"])(a0);var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=a0=>(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=wasmExports["Ta"])(a0);var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=a0=>(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=wasmExports["Ua"])(a0);var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=a0=>(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=wasmExports["Va"])(a0);var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=a0=>(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=wasmExports["Wa"])(a0);var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=a0=>(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=wasmExports["Xa"])(a0);var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=a0=>(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=wasmExports["Ya"])(a0);var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=a0=>(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=wasmExports["Za"])(a0);var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=a0=>(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=wasmExports["_a"])(a0);var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=a0=>(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=wasmExports["$a"])(a0);var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=a0=>(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=wasmExports["ab"])(a0);var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=a0=>(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=wasmExports["bb"])(a0);var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=a0=>(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=wasmExports["cb"])(a0);var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=a0=>(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=wasmExports["db"])(a0);var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=a0=>(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=wasmExports["eb"])(a0);var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=a0=>(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=wasmExports["fb"])(a0);var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=a0=>(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=wasmExports["gb"])(a0);var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=a0=>(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=wasmExports["hb"])(a0);var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=a0=>(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=wasmExports["ib"])(a0);var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=a0=>(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=wasmExports["jb"])(a0);var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=a0=>(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=wasmExports["kb"])(a0);var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=a0=>(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=wasmExports["lb"])(a0);var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=a0=>(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=wasmExports["mb"])(a0);var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=a0=>(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=wasmExports["nb"])(a0);var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=a0=>(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=wasmExports["ob"])(a0);var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=a0=>(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=wasmExports["pb"])(a0);var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=a0=>(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=wasmExports["qb"])(a0);var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=a0=>(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=wasmExports["rb"])(a0);var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=a0=>(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=wasmExports["sb"])(a0);var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=a0=>(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=wasmExports["tb"])(a0);var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=a0=>(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=wasmExports["ub"])(a0);var _pv_orca_init=Module["_pv_orca_init"]=(a0,a1,a2,a3)=>(_pv_orca_init=Module["_pv_orca_init"]=wasmExports["vb"])(a0,a1,a2,a3);var _free=a0=>(_free=wasmExports["wb"])(a0);var _pv_orca_delete=Module["_pv_orca_delete"]=a0=>(_pv_orca_delete=Module["_pv_orca_delete"]=wasmExports["xb"])(a0);var _pv_orca_version=Module["_pv_orca_version"]=()=>(_pv_orca_version=Module["_pv_orca_version"]=wasmExports["yb"])();var _pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=(a0,a1,a2)=>(_pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=wasmExports["zb"])(a0,a1,a2);var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["Ab"])(a0);var _pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=(a0,a1)=>(_pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=wasmExports["Bb"])(a0,a1);var _pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=(a0,a1)=>(_pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=wasmExports["Cb"])(a0,a1);var _pv_orca_synthesize=Module["_pv_orca_synthesize"]=(a0,a1,a2,a3,a4,a5,a6)=>(_pv_orca_synthesize=Module["_pv_orca_synthesize"]=wasmExports["Db"])(a0,a1,a2,a3,a4,a5,a6);var _pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=(a0,a1,a2,a3,a4,a5)=>(_pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=wasmExports["Eb"])(a0,a1,a2,a3,a4,a5);var _pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=a0=>(_pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=wasmExports["Fb"])(a0);var _pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=a0=>(_pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=wasmExports["Gb"])(a0);var _pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=a0=>(_pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=wasmExports["Hb"])(a0);var _pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=wasmExports["Ib"])(a0,a1);var _pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=wasmExports["Jb"])(a0,a1);var _pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=wasmExports["Kb"])(a0,a1);var _pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=wasmExports["Lb"])(a0,a1);var _pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=a0=>(_pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=wasmExports["Mb"])(a0);var _pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=(a0,a1)=>(_pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=wasmExports["Nb"])(a0,a1);var _pv_orca_stream_open=Module["_pv_orca_stream_open"]=(a0,a1,a2)=>(_pv_orca_stream_open=Module["_pv_orca_stream_open"]=wasmExports["Ob"])(a0,a1,a2);var _pv_orca_stream_close=Module["_pv_orca_stream_close"]=a0=>(_pv_orca_stream_close=Module["_pv_orca_stream_close"]=wasmExports["Pb"])(a0);var _pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=(a0,a1,a2,a3)=>(_pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=wasmExports["Qb"])(a0,a1,a2,a3);var _pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=(a0,a1,a2)=>(_pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=wasmExports["Rb"])(a0,a1,a2);var _pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=(a0,a1)=>(_pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=wasmExports["Sb"])(a0,a1);var _pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=(a0,a1)=>(_pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=wasmExports["Tb"])(a0,a1);var _pv_status_to_string=Module["_pv_status_to_string"]=a0=>(_pv_status_to_string=Module["_pv_status_to_string"]=wasmExports["Vb"])(a0);var _pv_sample_rate=Module["_pv_sample_rate"]=()=>(_pv_sample_rate=Module["_pv_sample_rate"]=wasmExports["Wb"])();var _pv_log_enable=Module["_pv_log_enable"]=()=>(_pv_log_enable=Module["_pv_log_enable"]=wasmExports["Xb"])();var _pv_log_disable=Module["_pv_log_disable"]=()=>(_pv_log_disable=Module["_pv_log_disable"]=wasmExports["Yb"])();var _pv_set_sdk=Module["_pv_set_sdk"]=a0=>(_pv_set_sdk=Module["_pv_set_sdk"]=wasmExports["Zb"])(a0);var _pv_get_sdk=Module["_pv_get_sdk"]=()=>(_pv_get_sdk=Module["_pv_get_sdk"]=wasmExports["_b"])();var _pv_free=Module["_pv_free"]=a0=>(_pv_free=Module["_pv_free"]=wasmExports["$b"])(a0);var _pv_get_error_stack=Module["_pv_get_error_stack"]=(a0,a1)=>(_pv_get_error_stack=Module["_pv_get_error_stack"]=wasmExports["ac"])(a0,a1);var _pv_free_error_stack=Module["_pv_free_error_stack"]=a0=>(_pv_free_error_stack=Module["_pv_free_error_stack"]=wasmExports["bc"])(a0);var _aligned_alloc=Module["_aligned_alloc"]=(a0,a1)=>(_aligned_alloc=Module["_aligned_alloc"]=wasmExports["cc"])(a0,a1);var __emscripten_tls_init=()=>(__emscripten_tls_init=wasmExports["dc"])();var _pthread_self=()=>(_pthread_self=wasmExports["ec"])();var __emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=(a0,a1,a2)=>(__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["fc"])(a0,a1,a2);var __emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=(a0,a1,a2)=>(__emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=wasmExports["gc"])(a0,a1,a2);var ___get_tp=Module["___get_tp"]=()=>(___get_tp=Module["___get_tp"]=wasmExports["hc"])();var __emscripten_thread_supports_atomics_wait=Module["__emscripten_thread_supports_atomics_wait"]=()=>(__emscripten_thread_supports_atomics_wait=Module["__emscripten_thread_supports_atomics_wait"]=wasmExports["ic"])();var __emscripten_thread_init=(a0,a1,a2,a3,a4,a5)=>(__emscripten_thread_init=wasmExports["jc"])(a0,a1,a2,a3,a4,a5);var ___set_thread_state=Module["___set_thread_state"]=(a0,a1,a2,a3)=>(___set_thread_state=Module["___set_thread_state"]=wasmExports["kc"])(a0,a1,a2,a3);var _emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=()=>(_emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=wasmExports["lc"])();var _emscripten_is_main_browser_thread=Module["_emscripten_is_main_browser_thread"]=()=>(_emscripten_is_main_browser_thread=Module["_emscripten_is_main_browser_thread"]=wasmExports["mc"])();var __emscripten_thread_crashed=()=>(__emscripten_thread_crashed=wasmExports["nc"])();var _emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=()=>(_emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=wasmExports["oc"])();var _emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=()=>(_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=wasmExports["pc"])();var __emscripten_run_on_main_thread_js=(a0,a1,a2,a3,a4)=>(__emscripten_run_on_main_thread_js=wasmExports["qc"])(a0,a1,a2,a3,a4);var __emscripten_thread_free_data=a0=>(__emscripten_thread_free_data=wasmExports["rc"])(a0);var __emscripten_thread_exit=a0=>(__emscripten_thread_exit=wasmExports["sc"])(a0);var __emscripten_check_mailbox=()=>(__emscripten_check_mailbox=wasmExports["tc"])();var _emscripten_stack_init=Module["_emscripten_stack_init"]=()=>(_emscripten_stack_init=Module["_emscripten_stack_init"]=wasmExports["uc"])();var _emscripten_stack_set_limits=(a0,a1)=>(_emscripten_stack_set_limits=wasmExports["vc"])(a0,a1);var _emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=()=>(_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=wasmExports["wc"])();var __emscripten_wasm_worker_initialize=Module["__emscripten_wasm_worker_initialize"]=(a0,a1)=>(__emscripten_wasm_worker_initialize=Module["__emscripten_wasm_worker_initialize"]=wasmExports["xc"])(a0,a1);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["yc"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["zc"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["Ac"])();var dynCall_ii=Module["dynCall_ii"]=(a0,a1)=>(dynCall_ii=Module["dynCall_ii"]=wasmExports["Bc"])(a0,a1);var _asyncify_start_unwind=a0=>(_asyncify_start_unwind=wasmExports["Cc"])(a0);var _asyncify_stop_unwind=()=>(_asyncify_stop_unwind=wasmExports["Dc"])();var _asyncify_start_rewind=a0=>(_asyncify_start_rewind=wasmExports["Ec"])(a0);var _asyncify_stop_rewind=()=>(_asyncify_stop_rewind=wasmExports["Fc"])();var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=2372748;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=2372744;var ___cxa_new_handler=Module["___cxa_new_handler"]=2383760;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=53372;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=53420;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=53468;var __ZTIDn=Module["__ZTIDn"]=53816;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=53516;var __ZTIv=Module["__ZTIv"]=53764;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=53568;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=53628;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=53336;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=55300;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=53384;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=53432;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=53480;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=53528;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=53580;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=53652;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=53680;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=53748;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=53708;var __ZTSv=Module["__ZTSv"]=53760;var __ZTSPv=Module["__ZTSPv"]=53772;var __ZTIPv=Module["__ZTIPv"]=53776;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=55512;var __ZTSPKv=Module["__ZTSPKv"]=53792;var __ZTIPKv=Module["__ZTIPKv"]=53796;var __ZTSDn=Module["__ZTSDn"]=53812;var __ZTSPDn=Module["__ZTSPDn"]=53824;var __ZTIPDn=Module["__ZTIPDn"]=53828;var __ZTSPKDn=Module["__ZTSPKDn"]=53844;var __ZTIPKDn=Module["__ZTIPKDn"]=53852;var __ZTSb=Module["__ZTSb"]=53868;var __ZTIb=Module["__ZTIb"]=53872;var __ZTSPb=Module["__ZTSPb"]=53880;var __ZTIPb=Module["__ZTIPb"]=53884;var __ZTSPKb=Module["__ZTSPKb"]=53900;var __ZTIPKb=Module["__ZTIPKb"]=53904;var __ZTSw=Module["__ZTSw"]=53920;var __ZTIw=Module["__ZTIw"]=53924;var __ZTSPw=Module["__ZTSPw"]=53932;var __ZTIPw=Module["__ZTIPw"]=53936;var __ZTSPKw=Module["__ZTSPKw"]=53952;var __ZTIPKw=Module["__ZTIPKw"]=53956;var __ZTSc=Module["__ZTSc"]=53972;var __ZTIc=Module["__ZTIc"]=53976;var __ZTSPc=Module["__ZTSPc"]=53984;var __ZTIPc=Module["__ZTIPc"]=53988;var __ZTSPKc=Module["__ZTSPKc"]=54004;var __ZTIPKc=Module["__ZTIPKc"]=54008;var __ZTSh=Module["__ZTSh"]=54024;var __ZTIh=Module["__ZTIh"]=54028;var __ZTSPh=Module["__ZTSPh"]=54036;var __ZTIPh=Module["__ZTIPh"]=54040;var __ZTSPKh=Module["__ZTSPKh"]=54056;var __ZTIPKh=Module["__ZTIPKh"]=54060;var __ZTSa=Module["__ZTSa"]=54076;var __ZTIa=Module["__ZTIa"]=54080;var __ZTSPa=Module["__ZTSPa"]=54088;var __ZTIPa=Module["__ZTIPa"]=54092;var __ZTSPKa=Module["__ZTSPKa"]=54108;var __ZTIPKa=Module["__ZTIPKa"]=54112;var __ZTSs=Module["__ZTSs"]=54128;var __ZTIs=Module["__ZTIs"]=54132;var __ZTSPs=Module["__ZTSPs"]=54140;var __ZTIPs=Module["__ZTIPs"]=54144;var __ZTSPKs=Module["__ZTSPKs"]=54160;var __ZTIPKs=Module["__ZTIPKs"]=54164;var __ZTSt=Module["__ZTSt"]=54180;var __ZTIt=Module["__ZTIt"]=54184;var __ZTSPt=Module["__ZTSPt"]=54192;var __ZTIPt=Module["__ZTIPt"]=54196;var __ZTSPKt=Module["__ZTSPKt"]=54212;var __ZTIPKt=Module["__ZTIPKt"]=54216;var __ZTSi=Module["__ZTSi"]=54232;var __ZTIi=Module["__ZTIi"]=54236;var __ZTSPi=Module["__ZTSPi"]=54244;var __ZTIPi=Module["__ZTIPi"]=54248;var __ZTSPKi=Module["__ZTSPKi"]=54264;var __ZTIPKi=Module["__ZTIPKi"]=54268;var __ZTSj=Module["__ZTSj"]=54284;var __ZTIj=Module["__ZTIj"]=54288;var __ZTSPj=Module["__ZTSPj"]=54296;var __ZTIPj=Module["__ZTIPj"]=54300;var __ZTSPKj=Module["__ZTSPKj"]=54316;var __ZTIPKj=Module["__ZTIPKj"]=54320;var __ZTSl=Module["__ZTSl"]=54336;var __ZTIl=Module["__ZTIl"]=54340;var __ZTSPl=Module["__ZTSPl"]=54348;var __ZTIPl=Module["__ZTIPl"]=54352;var __ZTSPKl=Module["__ZTSPKl"]=54368;var __ZTIPKl=Module["__ZTIPKl"]=54372;var __ZTSm=Module["__ZTSm"]=54388;var __ZTIm=Module["__ZTIm"]=54392;var __ZTSPm=Module["__ZTSPm"]=54400;var __ZTIPm=Module["__ZTIPm"]=54404;var __ZTSPKm=Module["__ZTSPKm"]=54420;var __ZTIPKm=Module["__ZTIPKm"]=54424;var __ZTSx=Module["__ZTSx"]=54440;var __ZTIx=Module["__ZTIx"]=54444;var __ZTSPx=Module["__ZTSPx"]=54452;var __ZTIPx=Module["__ZTIPx"]=54456;var __ZTSPKx=Module["__ZTSPKx"]=54472;var __ZTIPKx=Module["__ZTIPKx"]=54476;var __ZTSy=Module["__ZTSy"]=54492;var __ZTIy=Module["__ZTIy"]=54496;var __ZTSPy=Module["__ZTSPy"]=54504;var __ZTIPy=Module["__ZTIPy"]=54508;var __ZTSPKy=Module["__ZTSPKy"]=54524;var __ZTIPKy=Module["__ZTIPKy"]=54528;var __ZTSn=Module["__ZTSn"]=54544;var __ZTIn=Module["__ZTIn"]=54548;var __ZTSPn=Module["__ZTSPn"]=54556;var __ZTIPn=Module["__ZTIPn"]=54560;var __ZTSPKn=Module["__ZTSPKn"]=54576;var __ZTIPKn=Module["__ZTIPKn"]=54580;var __ZTSo=Module["__ZTSo"]=54596;var __ZTIo=Module["__ZTIo"]=54600;var __ZTSPo=Module["__ZTSPo"]=54608;var __ZTIPo=Module["__ZTIPo"]=54612;var __ZTSPKo=Module["__ZTSPKo"]=54628;var __ZTIPKo=Module["__ZTIPKo"]=54632;var __ZTSDh=Module["__ZTSDh"]=54648;var __ZTIDh=Module["__ZTIDh"]=54652;var __ZTSPDh=Module["__ZTSPDh"]=54660;var __ZTIPDh=Module["__ZTIPDh"]=54664;var __ZTSPKDh=Module["__ZTSPKDh"]=54680;var __ZTIPKDh=Module["__ZTIPKDh"]=54688;var __ZTSf=Module["__ZTSf"]=54704;var __ZTIf=Module["__ZTIf"]=54708;var __ZTSPf=Module["__ZTSPf"]=54716;var __ZTIPf=Module["__ZTIPf"]=54720;var __ZTSPKf=Module["__ZTSPKf"]=54736;var __ZTIPKf=Module["__ZTIPKf"]=54740;var __ZTSd=Module["__ZTSd"]=54756;var __ZTId=Module["__ZTId"]=54760;var __ZTSPd=Module["__ZTSPd"]=54768;var __ZTIPd=Module["__ZTIPd"]=54772;var __ZTSPKd=Module["__ZTSPKd"]=54788;var __ZTIPKd=Module["__ZTIPKd"]=54792;var __ZTSe=Module["__ZTSe"]=54808;var __ZTIe=Module["__ZTIe"]=54812;var __ZTSPe=Module["__ZTSPe"]=54820;var __ZTIPe=Module["__ZTIPe"]=54824;var __ZTSPKe=Module["__ZTSPKe"]=54840;var __ZTIPKe=Module["__ZTIPKe"]=54844;var __ZTSg=Module["__ZTSg"]=54860;var __ZTIg=Module["__ZTIg"]=54864;var __ZTSPg=Module["__ZTSPg"]=54872;var __ZTIPg=Module["__ZTIPg"]=54876;var __ZTSPKg=Module["__ZTSPKg"]=54892;var __ZTIPKg=Module["__ZTIPKg"]=54896;var __ZTSDu=Module["__ZTSDu"]=54912;var __ZTIDu=Module["__ZTIDu"]=54916;var __ZTSPDu=Module["__ZTSPDu"]=54924;var __ZTIPDu=Module["__ZTIPDu"]=54928;var __ZTSPKDu=Module["__ZTSPKDu"]=54944;var __ZTIPKDu=Module["__ZTIPKDu"]=54952;var __ZTSDs=Module["__ZTSDs"]=54968;var __ZTIDs=Module["__ZTIDs"]=54972;var __ZTSPDs=Module["__ZTSPDs"]=54980;var __ZTIPDs=Module["__ZTIPDs"]=54984;var __ZTSPKDs=Module["__ZTSPKDs"]=55e3;var __ZTIPKDs=Module["__ZTIPKDs"]=55008;var __ZTSDi=Module["__ZTSDi"]=55024;var __ZTIDi=Module["__ZTIDi"]=55028;var __ZTSPDi=Module["__ZTSPDi"]=55036;var __ZTIPDi=Module["__ZTIPDi"]=55040;var __ZTSPKDi=Module["__ZTSPKDi"]=55056;var __ZTIPKDi=Module["__ZTIPKDi"]=55064;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=55080;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=55144;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=55108;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=55156;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=55184;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=55248;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=55212;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=55260;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=55380;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=55340;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=55392;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=55472;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=55432;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=55484;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=55540;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=55568;var __ZTVSt9exception=Module["__ZTVSt9exception"]=55608;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=55588;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=55720;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=55760;var __ZTISt9exception=Module["__ZTISt9exception"]=55644;var __ZTSSt9exception=Module["__ZTSSt9exception"]=55628;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=55652;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=55692;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=55672;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=55704;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=55732;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=55772;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=55792;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=55868;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=56108;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=55812;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=55880;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=55832;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=55849;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=55892;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=55936;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=55912;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=55948;var __ZTISt12length_error=Module["__ZTISt12length_error"]=55988;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=55968;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=56e3;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=56040;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=56020;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=56052;var __ZTISt11range_error=Module["__ZTISt11range_error"]=56120;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=56072;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=56088;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=56132;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=56172;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=56152;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=56184;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=56224;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=56204;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=53204;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=53224;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=53296;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=53324;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=53244;var __ZTISt9type_info=Module["__ZTISt9type_info"]=53276;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=53260;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=53284;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=53308;function applySignatureConversions(wasmExports){wasmExports=Object.assign({},wasmExports);var makeWrapper_pp=f=>a0=>f(a0)>>>0;var makeWrapper_p=f=>()=>f()>>>0;wasmExports["Ab"]=makeWrapper_pp(wasmExports["Ab"]);wasmExports["ec"]=makeWrapper_p(wasmExports["ec"]);wasmExports["emscripten_main_runtime_thread_id"]=makeWrapper_p(wasmExports["emscripten_main_runtime_thread_id"]);wasmExports["oc"]=makeWrapper_p(wasmExports["oc"]);wasmExports["pc"]=makeWrapper_p(wasmExports["pc"]);wasmExports["zc"]=makeWrapper_pp(wasmExports["zc"]);wasmExports["Ac"]=makeWrapper_p(wasmExports["Ac"]);return wasmExports}Module["addFunction"]=addFunction;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();startWorker(Module);return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise; +function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF64}var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&self.name=="em-pthread";function _typeof$2(o){null;return _typeof$2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof$2(o)}function toPrimitive(t,r){if("object"!=_typeof$2(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof$2(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function toPropertyKey(t){var i=toPrimitive(t,"string");return"symbol"==_typeof$2(i)?i:i+""}function _defineProperty(e,r,t){return(r=toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x["default"]:x}var regeneratorRuntime$3={exports:{}};var _typeof$1={exports:{}};var _typeof_1=_typeof$1.exports;(function(module){function _typeof(o){null;return module.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},module.exports.__esModule=true,module.exports["default"]=module.exports,_typeof(o)}module.exports=_typeof,module.exports.__esModule=true,module.exports["default"]=module.exports})(_typeof$1);var _typeofExports=_typeof$1.exports;var _typeof=getDefaultExportFromCjs(_typeofExports);var regeneratorRuntime$1=regeneratorRuntime$3.exports;(function(module){var _typeof=_typeofExports["default"];function _regeneratorRuntime(){"use strict";module.exports=_regeneratorRuntime=function _regeneratorRuntime(){return e},module.exports.__esModule=true,module.exports["default"]=module.exports;var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{define({},"")}catch(t){define=function define(t,e,r){return t[e]=r}}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,a=Object.create(i.prototype),c=new Context(n||[]);return o(a,"_invoke",{value:makeInvokeMethod(t,r,c)}),a}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=wrap;var h="suspendedStart",l="suspendedYield",f="executing",s="completed",y={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var p={};define(p,a,function(){return this});var d=Object.getPrototypeOf,v=d&&d(d(values([])));v&&v!==r&&n.call(v,a)&&(p=v);var g=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(p);function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){define(t,e,function(t){return this._invoke(e,t)})})}function AsyncIterator(t,e){function invoke(r,o,i,a){var c=tryCatch(t[r],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==_typeof(h)&&n.call(h,"__await")?e.resolve(h.__await).then(function(t){invoke("next",t,i,a)},function(t){invoke("throw",t,i,a)}):e.resolve(h).then(function(t){u.value=t,i(u)},function(t){return invoke("throw",t,i,a)})}a(c.arg)}var r;o(this,"_invoke",{value:function value(t,n){function callInvokeWithMethodAndArg(){return new e(function(e,r){invoke(t,n,e,r)})}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(e,r,n){var o=h;return function(i,a){if(o===f)throw Error("Generator is already running");if(o===s){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=maybeInvokeDelegate(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=s,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=f;var p=tryCatch(e,r,n);if("normal"===p.type){if(o=n.done?s:l,p.arg===y)continue;return{value:p.arg,done:n.done}}"throw"===p.type&&(o=s,n.method="throw",n.arg=p.arg)}}}function maybeInvokeDelegate(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator["return"]&&(r.method="return",r.arg=t,maybeInvokeDelegate(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=tryCatch(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function next(){for(;++o=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),y}},catch:function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function delegateYield(e,r,n){return this.delegate={iterator:values(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y}},e}module.exports=_regeneratorRuntime,module.exports.__esModule=true,module.exports["default"]=module.exports})(regeneratorRuntime$3);var regeneratorRuntimeExports=regeneratorRuntime$3.exports;var regeneratorRuntime$2=getDefaultExportFromCjs(regeneratorRuntimeExports);var runtime=regeneratorRuntimeExports();var regenerator=runtime;try{regeneratorRuntime=runtime}catch(accidentalStrictMode){if(typeof globalThis==="object"){globalThis.regeneratorRuntime=runtime}else{Function("r","regeneratorRuntime = r")(runtime)}}var _regeneratorRuntime=getDefaultExportFromCjs(regenerator);const BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};const BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};const PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};const OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};const ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};class Utils{static getFirstMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>0&&match[1]||""}static getSecondMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>1&&match[2]||""}static matchAndReturnConst(regexp,ua,_const){if(regexp.test(ua)){return _const}return void 0}static getWindowsVersionName(version){switch(version){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return undefined}}static getMacOSVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]!==10)return undefined;switch(v[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return undefined}}static getAndroidVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]===1&&v[1]<5)return undefined;if(v[0]===1&&v[1]<6)return"Cupcake";if(v[0]===1&&v[1]>=6)return"Donut";if(v[0]===2&&v[1]<2)return"Eclair";if(v[0]===2&&v[1]===2)return"Froyo";if(v[0]===2&&v[1]>2)return"Gingerbread";if(v[0]===3)return"Honeycomb";if(v[0]===4&&v[1]<1)return"Ice Cream Sandwich";if(v[0]===4&&v[1]<4)return"Jelly Bean";if(v[0]===4&&v[1]>=4)return"KitKat";if(v[0]===5)return"Lollipop";if(v[0]===6)return"Marshmallow";if(v[0]===7)return"Nougat";if(v[0]===8)return"Oreo";if(v[0]===9)return"Pie";return undefined}static getVersionPrecision(version){return version.split(".").length}static compareVersions(versionA,versionB,isLoose=false){const versionAPrecision=Utils.getVersionPrecision(versionA);const versionBPrecision=Utils.getVersionPrecision(versionB);let precision=Math.max(versionAPrecision,versionBPrecision);let lastPrecision=0;const chunks=Utils.map([versionA,versionB],version=>{const delta=precision-Utils.getVersionPrecision(version);const _version=version+new Array(delta+1).join(".0");return Utils.map(_version.split("."),chunk=>new Array(20-chunk.length).join("0")+chunk).reverse()});if(isLoose){lastPrecision=precision-Math.min(versionAPrecision,versionBPrecision)}precision-=1;while(precision>=lastPrecision){if(chunks[0][precision]>chunks[1][precision]){return 1}if(chunks[0][precision]===chunks[1][precision]){if(precision===lastPrecision){return 0}precision-=1}else if(chunks[0][precision]{result[key]=assigner[key]})}}return obj}static getBrowserAlias(browserName){return BROWSER_ALIASES_MAP[browserName]}static getBrowserTypeByAlias(browserAlias){return BROWSER_MAP[browserAlias]||""}}const commonVersionIdentifier=/version\/(\d+(\.?_?\d+)+)/i;const browsersList=[{test:[/googlebot/i],describe(ua){const browser={name:"Googlebot"};const version=Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/opera/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opr\/|opios/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/SamsungBrowser/i],describe(ua){const browser={name:"Samsung Internet for Android"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Whale/i],describe(ua){const browser={name:"NAVER Whale Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MZBrowser/i],describe(ua){const browser={name:"MZ Browser"};const version=Utils.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/focus/i],describe(ua){const browser={name:"Focus"};const version=Utils.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/swing/i],describe(ua){const browser={name:"Swing"};const version=Utils.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/coast/i],describe(ua){const browser={name:"Opera Coast"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(ua){const browser={name:"Opera Touch"};const version=Utils.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/yabrowser/i],describe(ua){const browser={name:"Yandex Browser"};const version=Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/ucbrowser/i],describe(ua){const browser={name:"UC Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Maxthon|mxios/i],describe(ua){const browser={name:"Maxthon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/epiphany/i],describe(ua){const browser={name:"Epiphany"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/puffin/i],describe(ua){const browser={name:"Puffin"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sleipnir/i],describe(ua){const browser={name:"Sleipnir"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/k-meleon/i],describe(ua){const browser={name:"K-Meleon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/micromessenger/i],describe(ua){const browser={name:"WeChat"};const version=Utils.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qqbrowser/i],describe(ua){const browser={name:/qqbrowserlite/i.test(ua)?"QQ Browser Lite":"QQ Browser"};const version=Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/msie|trident/i],describe(ua){const browser={name:"Internet Explorer"};const version=Utils.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/\sedg\//i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/edg([ea]|ios)/i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/vivaldi/i],describe(ua){const browser={name:"Vivaldi"};const version=Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/seamonkey/i],describe(ua){const browser={name:"SeaMonkey"};const version=Utils.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sailfish/i],describe(ua){const browser={name:"Sailfish"};const version=Utils.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,ua);if(version){browser.version=version}return browser}},{test:[/silk/i],describe(ua){const browser={name:"Amazon Silk"};const version=Utils.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/phantom/i],describe(ua){const browser={name:"PhantomJS"};const version=Utils.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/slimerjs/i],describe(ua){const browser={name:"SlimerJS"};const version=Utils.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const browser={name:"BlackBerry"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/(web|hpw)[o0]s/i],describe(ua){const browser={name:"WebOS Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/bada/i],describe(ua){const browser={name:"Bada"};const version=Utils.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/tizen/i],describe(ua){const browser={name:"Tizen"};const version=Utils.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qupzilla/i],describe(ua){const browser={name:"QupZilla"};const version=Utils.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/firefox|iceweasel|fxios/i],describe(ua){const browser={name:"Firefox"};const version=Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/electron/i],describe(ua){const browser={name:"Electron"};const version=Utils.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MiuiBrowser/i],describe(ua){const browser={name:"Miui"};const version=Utils.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/chromium/i],describe(ua){const browser={name:"Chromium"};const version=Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/chrome|crios|crmo/i],describe(ua){const browser={name:"Chrome"};const version=Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/GSA/i],describe(ua){const browser={name:"Google Search"};const version=Utils.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const browser={name:"Android Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/playstation 4/i],describe(ua){const browser={name:"PlayStation 4"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/safari|applewebkit/i],describe(ua){const browser={name:"Safari"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/.*/i],describe(ua){const regexpWithoutDeviceSpec=/^(.*)\/(.*) /;const regexpWithDeviceSpec=/^(.*)\/(.*)[ \t]\((.*)/;const hasDeviceSpec=ua.search("\\(")!==-1;const regexp=hasDeviceSpec?regexpWithDeviceSpec:regexpWithoutDeviceSpec;return{name:Utils.getFirstMatch(regexp,ua),version:Utils.getSecondMatch(regexp,ua)}}}];var osParsersList=[{test:[/Roku\/DVP/],describe(ua){const version=Utils.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,ua);return{name:OS_MAP.Roku,version:version}}},{test:[/windows phone/i],describe(ua){const version=Utils.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.WindowsPhone,version:version}}},{test:[/windows /i],describe(ua){const version=Utils.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,ua);const versionName=Utils.getWindowsVersionName(version);return{name:OS_MAP.Windows,version:version,versionName:versionName}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(ua){const result={name:OS_MAP.iOS};const version=Utils.getSecondMatch(/(Version\/)(\d[\d.]+)/,ua);if(version){result.version=version}return result}},{test:[/macintosh/i],describe(ua){const version=Utils.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,ua).replace(/[_\s]/g,".");const versionName=Utils.getMacOSVersionName(version);const os={name:OS_MAP.MacOS,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(ipod|iphone|ipad)/i],describe(ua){const version=Utils.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,ua).replace(/[_\s]/g,".");return{name:OS_MAP.iOS,version:version}}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const version=Utils.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,ua);const versionName=Utils.getAndroidVersionName(version);const os={name:OS_MAP.Android,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(web|hpw)[o0]s/i],describe(ua){const version=Utils.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,ua);const os={name:OS_MAP.WebOS};if(version&&version.length){os.version=version}return os}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const version=Utils.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,ua)||Utils.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,ua)||Utils.getFirstMatch(/\bbb(\d+)/i,ua);return{name:OS_MAP.BlackBerry,version:version}}},{test:[/bada/i],describe(ua){const version=Utils.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Bada,version:version}}},{test:[/tizen/i],describe(ua){const version=Utils.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Tizen,version:version}}},{test:[/linux/i],describe(){return{name:OS_MAP.Linux}}},{test:[/CrOS/],describe(){return{name:OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe(ua){const version=Utils.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.PlayStation4,version:version}}}];var platformParsersList=[{test:[/googlebot/i],describe(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe(ua){const model=Utils.getFirstMatch(/(can-l01)/i,ua)&&"Nova";const platform={type:PLATFORMS_MAP.mobile,vendor:"Huawei"};if(model){platform.model=model}return platform}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){const iDevice=parser.test(/ipod|iphone/i);const likeIDevice=parser.test(/like (ipod|iphone)/i);return iDevice&&!likeIDevice},describe(ua){const model=Utils.getFirstMatch(/(ipod|iphone)/i,ua);return{type:PLATFORMS_MAP.mobile,vendor:"Apple",model:model}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName(true)==="blackberry"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test(parser){return parser.getBrowserName(true)==="bada"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName()==="windows phone"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test(parser){const osMajorVersion=Number(String(parser.getOSVersion()).split(".")[0]);return parser.getOSName(true)==="android"&&osMajorVersion>=3},describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){return parser.getOSName(true)==="android"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getOSName(true)==="macos"},describe(){return{type:PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test(parser){return parser.getOSName(true)==="windows"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="linux"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="playstation 4"},describe(){return{type:PLATFORMS_MAP.tv}}},{test(parser){return parser.getOSName(true)==="roku"},describe(){return{type:PLATFORMS_MAP.tv}}}];var enginesParsersList=[{test(parser){return parser.getBrowserName(true)==="microsoft edge"},describe(ua){const isBlinkBased=/\sedg\//i.test(ua);if(isBlinkBased){return{name:ENGINE_MAP.Blink}}const version=Utils.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,ua);return{name:ENGINE_MAP.EdgeHTML,version:version}}},{test:[/trident/i],describe(ua){const engine={name:ENGINE_MAP.Trident};const version=Utils.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){return parser.test(/presto/i)},describe(ua){const engine={name:ENGINE_MAP.Presto};const version=Utils.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){const isGecko=parser.test(/gecko/i);const likeGecko=parser.test(/like gecko/i);return isGecko&&!likeGecko},describe(ua){const engine={name:ENGINE_MAP.Gecko};const version=Utils.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test:[/(apple)?webkit\/537\.36/i],describe(){return{name:ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe(ua){const engine={name:ENGINE_MAP.WebKit};const version=Utils.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}}];class Parser{constructor(UA,skipParsing=false){if(UA===void 0||UA===null||UA===""){throw new Error("UserAgent parameter can't be empty")}this._ua=UA;this.parsedResult={};if(skipParsing!==true){this.parse()}}getUA(){return this._ua}test(regex){return regex.test(this._ua)}parseBrowser(){this.parsedResult.browser={};const browserDescriptor=Utils.find(browsersList,_browser=>{if(typeof _browser.test==="function"){return _browser.test(this)}if(_browser.test instanceof Array){return _browser.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(browserDescriptor){this.parsedResult.browser=browserDescriptor.describe(this.getUA())}return this.parsedResult.browser}getBrowser(){if(this.parsedResult.browser){return this.parsedResult.browser}return this.parseBrowser()}getBrowserName(toLowerCase){if(toLowerCase){return String(this.getBrowser().name).toLowerCase()||""}return this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){if(this.parsedResult.os){return this.parsedResult.os}return this.parseOS()}parseOS(){this.parsedResult.os={};const os=Utils.find(osParsersList,_os=>{if(typeof _os.test==="function"){return _os.test(this)}if(_os.test instanceof Array){return _os.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(os){this.parsedResult.os=os.describe(this.getUA())}return this.parsedResult.os}getOSName(toLowerCase){const{name:name}=this.getOS();if(toLowerCase){return String(name).toLowerCase()||""}return name||""}getOSVersion(){return this.getOS().version}getPlatform(){if(this.parsedResult.platform){return this.parsedResult.platform}return this.parsePlatform()}getPlatformType(toLowerCase=false){const{type:type}=this.getPlatform();if(toLowerCase){return String(type).toLowerCase()||""}return type||""}parsePlatform(){this.parsedResult.platform={};const platform=Utils.find(platformParsersList,_platform=>{if(typeof _platform.test==="function"){return _platform.test(this)}if(_platform.test instanceof Array){return _platform.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(platform){this.parsedResult.platform=platform.describe(this.getUA())}return this.parsedResult.platform}getEngine(){if(this.parsedResult.engine){return this.parsedResult.engine}return this.parseEngine()}getEngineName(toLowerCase){if(toLowerCase){return String(this.getEngine().name).toLowerCase()||""}return this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};const engine=Utils.find(enginesParsersList,_engine=>{if(typeof _engine.test==="function"){return _engine.test(this)}if(_engine.test instanceof Array){return _engine.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(engine){this.parsedResult.engine=engine.describe(this.getUA())}return this.parsedResult.engine}parse(){this.parseBrowser();this.parseOS();this.parsePlatform();this.parseEngine();return this}getResult(){return Utils.assign({},this.parsedResult)}satisfies(checkTree){const platformsAndOSes={};let platformsAndOSCounter=0;const browsers={};let browsersCounter=0;const allDefinitions=Object.keys(checkTree);allDefinitions.forEach(key=>{const currentDefinition=checkTree[key];if(typeof currentDefinition==="string"){browsers[key]=currentDefinition;browsersCounter+=1}else if(typeof currentDefinition==="object"){platformsAndOSes[key]=currentDefinition;platformsAndOSCounter+=1}});if(platformsAndOSCounter>0){const platformsAndOSNames=Object.keys(platformsAndOSes);const OSMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isOS(name));if(OSMatchingDefinition){const osResult=this.satisfies(platformsAndOSes[OSMatchingDefinition]);if(osResult!==void 0){return osResult}}const platformMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isPlatform(name));if(platformMatchingDefinition){const platformResult=this.satisfies(platformsAndOSes[platformMatchingDefinition]);if(platformResult!==void 0){return platformResult}}}if(browsersCounter>0){const browserNames=Object.keys(browsers);const matchingDefinition=Utils.find(browserNames,name=>this.isBrowser(name,true));if(matchingDefinition!==void 0){return this.compareVersion(browsers[matchingDefinition])}}return undefined}isBrowser(browserName,includingAlias=false){const defaultBrowserName=this.getBrowserName().toLowerCase();let browserNameLower=browserName.toLowerCase();const alias=Utils.getBrowserTypeByAlias(browserNameLower);if(includingAlias&&alias){browserNameLower=alias.toLowerCase()}return browserNameLower===defaultBrowserName}compareVersion(version){let expectedResults=[0];let comparableVersion=version;let isLoose=false;const currentBrowserVersion=this.getBrowserVersion();if(typeof currentBrowserVersion!=="string"){return void 0}if(version[0]===">"||version[0]==="<"){comparableVersion=version.substr(1);if(version[1]==="="){isLoose=true;comparableVersion=version.substr(2)}else{expectedResults=[]}if(version[0]===">"){expectedResults.push(1)}else{expectedResults.push(-1)}}else if(version[0]==="="){comparableVersion=version.substr(1)}else if(version[0]==="~"){isLoose=true;comparableVersion=version.substr(1)}return expectedResults.indexOf(Utils.compareVersions(currentBrowserVersion,comparableVersion,isLoose))>-1}isOS(osName){return this.getOSName(true)===String(osName).toLowerCase()}isPlatform(platformType){return this.getPlatformType(true)===String(platformType).toLowerCase()}isEngine(engineName){return this.getEngineName(true)===String(engineName).toLowerCase()}is(anything,includingAlias=false){return this.isBrowser(anything,includingAlias)||this.isOS(anything)||this.isPlatform(anything)}some(anythings=[]){return anythings.some(anything=>this.is(anything))}}class Bowser{static getParser(UA,skipParsing=false){if(typeof UA!=="string"){throw new Error("UserAgent should be a string")}return new Parser(UA,skipParsing)}static parse(UA){return new Parser(UA).getResult()}static get BROWSER_MAP(){return BROWSER_MAP}static get ENGINE_MAP(){return ENGINE_MAP}static get OS_MAP(){return OS_MAP}static get PLATFORMS_MAP(){return PLATFORMS_MAP}}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t=this._data.length){return undefined}var res=this._data.slice(this._pos,this._pos+bytes);this._pos+=bytes;return res}},{key:"set",value:function set(pos,data){this._pos=pos;this._data=data}},{key:"clear",value:function clear(){this._pos=0;this._data=new Uint8Array}}])}();var PvFileIDB=function(_PvFile){function PvFileIDB(path,meta,db,mode){var _this;_classCallCheck(this,PvFileIDB);_this=_callSuper$1(this,PvFileIDB);_this._pageSize=512*1024;_this._pagePtr=0;_this._pageOffset=0;_this._path=path;_this._meta=meta;_this._db=db;_this._mode=mode;_this._cache=new PvCache;return _this}_inherits(PvFileIDB,_PvFile);return _createClass(PvFileIDB,[{key:"pageSize",get:function get(){return this._pageSize}},{key:"close",value:function(){var _close=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:this._db.close();case 1:case"end":return _context.stop()}},_callee,this)}));function close(){return _close.apply(this,arguments)}return close}()},{key:"read",value:function(){var _read=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(size,count){var _this2=this;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:return _context2.abrupt("return",new Promise(function(resolve,reject){if(!_this2.exists()){reject(new Error("'".concat(_this2._path,"' doesn't exist.")));return}if(_this2._isEOF){var err=new Error("EOF");err.name="EndOfFile";reject(err);return}var copied=0;var maxToCopy=Math.min(size*count,_this2._meta.size);var totalElems=maxToCopy-maxToCopy%size;var buffer=new Uint8Array(totalElems);var res=_this2._cache.get(totalElems);if(res){copied+=res.length;_this2._pageOffset+=res.length;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(totalElems===copied){resolve(res);return}buffer.set(res)}var keyRange=IDBKeyRange.bound("".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr)),"".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr+Math.floor(totalElems/_this2._pageSize)+1)));var store=_this2._store;var req=store.openCursor(keyRange);req.onsuccess=function(){var cursor=req.result;if(!cursor||_this2._isEOF){return}var toCopy=Math.min(totalElems-copied,cursor.value.length-_this2._pageOffset);buffer.set(cursor.value.slice(_this2._pageOffset,_this2._pageOffset+toCopy),copied);copied+=toCopy;_this2._pageOffset+=toCopy;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(copied1&&_args4[1]!==undefined?_args4[1]:1;return _context4.abrupt("return",new Promise(function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(resolve,reject){var _store$transaction3;var store,getCurrentPage,last,newContent,newSize,newMeta,pages,i,keyRange,_store$transaction4;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(_this3._mode==="readonly")){_context3.next=3;break}reject(new Error("Instance is readonly mode only."));return _context3.abrupt("return");case 3:if(!(typeof version!=="number"&&version<=0)){_context3.next=6;break}reject(new Error("Version should be a positive number"));return _context3.abrupt("return");case 6:store=_this3._store;getCurrentPage=function getCurrentPage(){return new Promise(function(res){var req=store.get("".concat(_this3._path,"-").concat(PvFileIDB.createPage(_this3._pagePtr)));req.onsuccess=function(){if(req.result!==undefined){res(req.result.slice(0,_this3._pageOffset))}else{res(new Uint8Array(0))}}})};_context3.next=10;return getCurrentPage();case 10:last=_context3.sent;newContent=new Uint8Array(last.length+content.length);newContent.set(last);newContent.set(content,last.length);newSize=_this3._pagePtr*_this3._pageSize+newContent.length;newMeta={size:newSize,numPages:Math.ceil(newSize/_this3._pageSize),version:version,pageSize:_this3._pageSize};store.put(newMeta,_this3._path);pages=Math.ceil(newContent.length/_this3._pageSize);for(i=0;i=this._meta.numPages-1&&this._pageOffset>=this._meta.size%this._pageSize}},{key:"_store",get:function get(){return this._db.transaction(PV_FILE_STORE,this._mode).objectStore(PV_FILE_STORE)}}],[{key:"open",value:function open(path,mode){if(!self.indexedDB){var error=new Error("IndexedDB is not supported");error.name="IndexedDBNotSupported";throw error}return new Promise(function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(resolve,reject){var db,req,_error2;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1)switch(_context7.prev=_context7.next){case 0:_context7.prev=0;_context7.next=3;return getDB();case 3:db=_context7.sent;req=db.transaction(PV_FILE_STORE,"readwrite").objectStore(PV_FILE_STORE).get(path);req.onerror=function(){reject(req.error)};req.onsuccess=function(){var meta=req.result;var dbMode=mode.includes("r")?"readonly":"readwrite";if(meta===undefined&&dbMode==="readonly"){var _error=new Error("'".concat(path,"' doesn't exist."));_error.name="FileNotExists";reject(_error);return}var fileIDB=new PvFileIDB(path,meta,db,dbMode);if(mode.includes("a")){fileIDB.seek(0,2)}resolve(fileIDB)};_context7.next=12;break;case 9:_context7.prev=9;_context7.t0=_context7["catch"](0);if(_context7.t0.name==="InvalidStateError"){_error2=new Error("IndexedDB is not supported");_error2.name="IndexedDBNotSupported";reject(_error2)}else{reject(_context7.t0)}case 12:case"end":return _context7.stop()}},_callee7,null,[[0,9]])}));return function(_x8,_x9){return _ref3.apply(this,arguments)}}())}},{key:"createPage",value:function createPage(page){return("00000"+page).slice(-6)}}])}(PvFile);function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}var PvFileMem=function(_PvFile){function PvFileMem(path,meta,db,mode){var _this;_classCallCheck(this,PvFileMem);_this=_callSuper(this,PvFileMem);_this._pos=0;_this._path=path;_this._meta=meta;_this._mode=mode;return _this}_inherits(PvFileMem,_PvFile);return _createClass(PvFileMem,[{key:"close",value:function close(){return}},{key:"read",value:function read(size,count){if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(this._isEOF){var err=new Error("EOF");err.name="EndOfFile";throw err}var toCopy=Math.min(size*count,this._file.length-this._pos);var totalElems=toCopy-toCopy%size;var buffer=new Uint8Array(totalElems);buffer.set(this._file.slice(this._pos,this._pos+totalElems),0);this._pos+=totalElems;return buffer}},{key:"write",value:function write(content){var version=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;var newFile=new Uint8Array(this._pos+content.length);if(this._file!==undefined){newFile.set(this._file.slice(0,this._pos));newFile.set(content,this._pos)}else{newFile.set(content)}this._file=newFile;this._pos+=content.length}},{key:"seek",value:function seek(offset,whence){if(!this.exists()&&this._mode==="readonly"){throw new Error("'".concat(this._path,"' doesn't exist."))}if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(offset<0){var err=new Error("EOF");err.name="EndOfFile";throw err}var newOffset;if(whence===0){newOffset=Math.min(offset,this._file.length)}else if(whence===1){newOffset=Math.min(this._pos+offset,this._file.length)}else if(whence===2){newOffset=Math.min(this._file.length+offset,this._file.length)}else{throw new Error("Invalid operation: ".concat(whence,"."))}this._pos=newOffset}},{key:"tell",value:function tell(){if(!this.exists()){return-1}return this._pos}},{key:"remove",value:function(){var _remove=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(this.exists()){_context.next=2;break}throw new Error("ENOENT");case 2:PvFileMem._memFiles["delete"](this._path);this._pos=0;case 4:case"end":return _context.stop()}},_callee,this)}));function remove(){return _remove.apply(this,arguments)}return remove}()},{key:"exists",value:function exists(){return this._file!==undefined}},{key:"_isEOF",get:function get(){return this._pos>=this._file.length}},{key:"_file",get:function get(){return PvFileMem._memFiles.get(this._path)},set:function set(content){PvFileMem._memFiles.set(this._path,content)}}],[{key:"open",value:function open(path,mode){var file=PvFileMem._memFiles.get(path);var dbMode=mode.includes("r")?"readonly":"readwrite";if(file===undefined&&dbMode==="readonly"){var error=new Error("'".concat(path,"' doesn't exist."));error.name="FileNotExists";throw error}var fileMem=new PvFileMem(path,undefined,undefined,dbMode);if(mode.includes("a")){fileMem.seek(0,2)}return fileMem}}])}(PvFile);PvFileMem._memFiles=new Map;function unsignedAddress(address){if(address<0){return address>>>0}return address}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayLikeToArray$2(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray$1(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray$1(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray$1(r,a):void 0}}function _arrayLikeToArray$1(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=16){this.endComputePass();this.flushCommandEncoder()}}},{key:"endComputePass",value:function endComputePass(){if(this._passEncoder){this._passEncoder.end();this._passEncoder=null}}},{key:"getBuffer",value:function getBuffer(sizeBytes,usage){var mappedAtCreation=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var label=arguments.length>3?arguments[3]:undefined;var key=this.getBufferKey(sizeBytes,usage);if(this.bufferReusePool.has(key)){var buffers=this.bufferReusePool.get(key);if(buffers&&buffers.length>0){return buffers.pop()}}return this.device.createBuffer({size:sizeBytes*Uint8Array.BYTES_PER_ELEMENT,usage:usage,mappedAtCreation:mappedAtCreation,label:label})}},{key:"scheduleUniformBufferForRelease",value:function scheduleUniformBufferForRelease(buffer){this._uniformBuffersPendingRelease.push(buffer)}},{key:"releaseBuffer",value:function releaseBuffer(buffer){var clearBuffer=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(clearBuffer){this.endComputePass();this.commandEncoder.clearBuffer(buffer,0,buffer.size)}var key=this.getBufferKey(buffer.size,buffer.usage);if(!this.bufferReusePool.has(key)){this.bufferReusePool.set(key,[])}this.bufferReusePool.get(key).push(buffer)}},{key:"sync",value:function(){var _sync=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){var _this=this;var _iterator,_step,k,buffers,_iterator3,_step3,b,_loop,_i,_Object$entries;return _regeneratorRuntime.wrap(function _callee$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:this.endComputePass();this.flushCommandEncoder();_context3.next=4;return this.device.queue.onSubmittedWorkDone();case 4:_iterator=_createForOfIteratorHelper$1(this.bufferReusePool.keys());try{for(_iterator.s();!(_step=_iterator.n()).done;){k=_step.value;buffers=this.bufferReusePool.get(k);if(buffers&&buffers.length>0){_iterator3=_createForOfIteratorHelper$1(buffers);try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){b=_step3.value;b===null||b===void 0||b.destroy()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}}catch(err){_iterator.e(err)}finally{_iterator.f()}this.bufferReusePool.clear();_loop=_regeneratorRuntime.mark(function _loop(){var _Object$entries$_i,shaderName,timestampBuffers,_iterator2,_step2,_loop2;return _regeneratorRuntime.wrap(function _loop$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_Object$entries$_i=_slicedToArray(_Object$entries[_i],2),shaderName=_Object$entries$_i[0],timestampBuffers=_Object$entries$_i[1];if(!_this.shaderTimes[shaderName]){_this.shaderTimes[shaderName]=[]}_iterator2=_createForOfIteratorHelper$1(timestampBuffers);_context2.prev=3;_loop2=_regeneratorRuntime.mark(function _loop2(){var timestampBuffer;return _regeneratorRuntime.wrap(function _loop2$(_context){while(1)switch(_context.prev=_context.next){case 0:timestampBuffer=_step2.value;timestampBuffer.mapAsync(GPUMapMode.READ).then(function(){var times=new BigInt64Array(timestampBuffer.getMappedRange());var timeDif=times[1]-times[0];timestampBuffer.unmap();timestampBuffer.destroy();_this.shaderTimes[shaderName].push(timeDif)});case 2:case"end":return _context.stop()}},_loop2)});_iterator2.s();case 6:if((_step2=_iterator2.n()).done){_context2.next=10;break}return _context2.delegateYield(_loop2(),"t0",8);case 8:_context2.next=6;break;case 10:_context2.next=15;break;case 12:_context2.prev=12;_context2.t1=_context2["catch"](3);_iterator2.e(_context2.t1);case 15:_context2.prev=15;_iterator2.f();return _context2.finish(15);case 18:case"end":return _context2.stop()}},_loop,null,[[3,12,15,18]])});_i=0,_Object$entries=Object.entries(this.timestampBuffers);case 9:if(!(_i<_Object$entries.length)){_context3.next=14;break}return _context3.delegateYield(_loop(),"t0",11);case 11:_i++;_context3.next=9;break;case 14:this.timestampBuffers={};case 15:case"end":return _context3.stop()}},_callee,this)}));function sync(){return _sync.apply(this,arguments)}return sync}()},{key:"reportShaderTimes",value:function reportShaderTimes(){for(var _i2=0,_Object$entries2=Object.entries(this.shaderTimes);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i2],2),shaderName=_Object$entries2$_i[0],shaderTimes=_Object$entries2$_i[1];var timeSum=0n;var _iterator4=_createForOfIteratorHelper$1(shaderTimes),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var shaderTime=_step4.value;timeSum=timeSum+shaderTime}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}var totalSeconds=Number(timeSum)*1e-9;var avgSeconds=(totalSeconds/shaderTimes.length).toFixed(7);console.log("".concat(shaderName,", ").concat(totalSeconds.toFixed(5),", ").concat(avgSeconds))}this.shaderTimes={}}},{key:"flushCommandEncoder",value:function flushCommandEncoder(){var _this2=this;this.device.queue.submit([this.commandEncoder.finish()]);this._commandEncoder=null;this._numCommandsEncoded=0;this._stageBuffersPendingMap.forEach(function(buffer){buffer.destroy()});this._stageBuffersPendingMap=[];this._uniformBuffersPendingRelease.forEach(function(buffer){_this2.releaseBuffer(buffer,false)});this._uniformBuffersPendingRelease=[]}},{key:"writeBuffer",value:function writeBuffer(sizeBytes,offset,srcArray,dstBuffer){var stagingBuffer=this.getBuffer(sizeBytes,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,true);new Uint8Array(stagingBuffer.getMappedRange()).set(srcArray);stagingBuffer.unmap();this._stageBuffersPendingMap.push(stagingBuffer);this.endComputePass();this.commandEncoder.copyBufferToBuffer(stagingBuffer,0,dstBuffer,offset,sizeBytes);this.numCommandsEncoded++}},{key:"dispatchComputerShader",value:function dispatchComputerShader(bindGroup,pipeline,shaderName,workgroupCountX,workgroupCountY,workgroupCountZ){if(this.isTimerEnabled){var querySet=this.device.createQuerySet({type:"timestamp",count:2});var timestampWrites={querySet:querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1};this.endComputePass();this._passEncoder=this.commandEncoder.beginComputePass({timestampWrites:timestampWrites});this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.endComputePass();var size=2*BigInt64Array.BYTES_PER_ELEMENT;var resolveBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC});this.commandEncoder.resolveQuerySet(querySet,0,2,resolveBuffer,0);var resultBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});this.commandEncoder.copyBufferToBuffer(resolveBuffer,0,resultBuffer,0,size);if(!this.timestampBuffers[shaderName]){this.timestampBuffers[shaderName]=[]}this.timestampBuffers[shaderName].push(resultBuffer);this.numCommandsEncoded+=3}else{if(!this._passEncoder){this._passEncoder=this.commandEncoder.beginComputePass()}this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.numCommandsEncoded++}}}])}();var PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE=256;var gpuDevices=new Map;var gpuBuffers=new Map;var emptyShader="\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main_empty() {}\n";var shaderEntryPoint="main";var PRECOMPUTE_ENCODING_SHADER_NAME="pv_picollm_attention_precompute_encoding_shader";var attentionPrecomputeEncodingShaderSource="\nstruct argsStruct {\n dimension: u32,\n steps: u32,\n theta: f32,\n encoding_offset: u32,\n rope_scale: f32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar rope_scales: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let ds = local_id.x;\n \n for (var t = ts; t < args.steps; t += num_workgroups.x) {\n for (var d = ds; d < (args.dimension / 2u); d += workgroup_size_x) {\n let f = 2u * d;\n let x = f32(t) / (f32(rope_scales[f >> 1]) * pow(args.theta, f32(f) / f32(args.dimension)));\n let encoding_idx = args.encoding_offset + (t * args.dimension) + f;\n encoding[encoding_idx] = cos(x) * args.rope_scale;\n encoding[encoding_idx + 1] = sin(x) * args.rope_scale;\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionPrecomputeEncodingShader=function loadAttentionPrecomputeEncodingShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention precompute encoding bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention precompute encoding pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention precompute encoding shader module",code:attentionPrecomputeEncodingShaderSource});var computePipeline=device.createComputePipeline({label:"attention precompute encoding pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_ROPE_INTERLEAVED_SHADER_NAME="pv_picollm_attention_encode_rope_interleaved_shader";var attentionEncodeRopeInterleavedShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let x_start = args.x_offset + (t * args.num_heads + h) * args.head_dimension;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < (args.head_dimension / 2u); d += workgroup_size_x) {\n let i = 2u * d;\n let x_idx = x_start + i;\n let encoding_idx = encoding_start + i;\n \n let re = x[x_idx];\n let im = x[x_idx + 1];\n x[x_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[x_idx + 1] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeRopeInterleavedShader=function loadAttentionEncodeRopeInterleavedShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode rope interleave bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode rope interleave pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode rope interleave shader module",code:attentionEncodeRopeInterleavedShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode rope interleave pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_SHADER_NAME="pv_picollm_attention_encode_shader";var attentionEncodeShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let half_rope = (args.rope_dimension / 2);\n let xr_start = args.x_offset + ((t * args.num_heads + h) * args.head_dimension);\n let xi_start = xr_start + half_rope;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < half_rope; d += workgroup_size_x) {\n let xr_idx = xr_start + d;\n let xi_idx = xi_start + d;\n let encoding_idx = encoding_start + (2 * d);\n\n let re = x[xr_idx];\n let im = x[xi_idx];\n x[xr_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[xi_idx] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeShader=function loadAttentionEncodeShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode bind layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode shader",code:attentionEncodeShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var DOT_PRODUCT_SHADER_NAME="pv_picollm_attention_dot_product_shader";var attentionDotProductShaderSource="\nstruct argsStruct { \n n: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n norm: f32,\n length1: u32,\n num_keys: u32,\n query_offset: u32,\n keys_offset: u32,\n key_intercepts_offset: u32,\n key_slopes_offset: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar query: array;\n\n@group(0) @binding(2)\nvar keys: array;\n\n@group(0) @binding(3)\nvar key_intercepts: array;\n\n@group(0) @binding(4)\nvar key_slopes: array;\n\n@group(0) @binding(5)\nvar scores: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n \n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n \n let keys_local_a = args.keys_offset + (start_index * args.head_dimension);\n let key_intercepts_local_a = args.key_intercepts_offset + start_index; \n let key_slopes_local_a = args.key_slopes_offset + start_index;\n \n let keys_local_b = args.keys_offset + (head_offset * args.head_dimension);\n let key_intercepts_local_b = args.key_intercepts_offset + head_offset; \n let key_slopes_local_b = args.key_slopes_offset + head_offset;\n \n let scores_local = args.scores_offset + (global_id.x * args.num_keys);\n let query_local = args.query_offset + (((global_id.x * args.n) + args.tq) * args.head_dimension);\n \n for (var i = 0u; i < args.head_dimension; i++) { \n for (var k = 0u; k < args.num_keys; k++) {\n if (k < args.length1) { \n let key_idx = keys_local_a + (k * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_a + k] + (key_slopes[key_slopes_local_a + k] * key_val));\n scores[scores_local + k] += tmp;\n }\n else {\n let j = k - args.length1;\n let key_idx = keys_local_b + (j * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_b + j] + (key_slopes[key_slopes_local_b + j] * key_val));\n scores[scores_local + k] += tmp;\n }\n } \n }\n \n for (var k = 0u; k < args.num_keys; k++) {\n scores[scores_local + k] *= args.norm;\n }\n}\n\n".concat(emptyShader);var loadAttentionDotProductShader=function loadAttentionDotProductShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention dot product bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention dot product pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention dot product shader module",code:attentionDotProductShaderSource});var computePipeline=device.createComputePipeline({label:"attention dot product pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var SOFTMAX_SHADER_NAME="pv_picollm_attention_softmax_shader";var attentionSoftmaxShaderSource="\nstruct argsStruct { \n num_heads: u32,\n num_keys: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar scores: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let scores_start = args.scores_offset + (global_id.x * args.num_keys);\n \n var max_index: u32 = 0;\n for (var i = 1u; i < args.num_keys; i++) {\n if (scores[scores_start + i] > scores[scores_start + max_index]) {\n max_index = i;\n }\n }\n let max: f32 = scores[scores_start + max_index];\n\n var sum: f32 = 0.0;\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] = exp(scores[scores_start + i] - max);\n sum += scores[scores_start + i];\n }\n\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] /= sum;\n }\n}\n\n".concat(emptyShader);var loadAttentionSoftmaxShader=function loadAttentionSoftmaxShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention softmax bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention softmax pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention softmax shader module",code:attentionSoftmaxShaderSource});var computePipeline=device.createComputePipeline({label:"attention softmax pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var FIR_SHADER_NAME="pv_picollm_attention_fir_shader";var attentionFirShaderSource="\nstruct argsStruct { \n length1: u32,\n length2: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n values_offset: u32,\n value_intercepts_offset: u32,\n value_slopes_offset: u32,\n scores_offset: u32,\n output_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar values: array;\n\n@group(0) @binding(2)\nvar value_intercepts: array;\n\n@group(0) @binding(3)\nvar value_slopes: array;\n\n@group(0) @binding(4)\nvar scores: array;\n\n@group(0) @binding(5)\nvar output: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n\n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n\n let values_local_a = args.values_offset + (start_index * args.head_dimension);\n let value_intercepts_local_a = args.value_intercepts_offset + start_index;\n let value_slopes_local_a = args.value_slopes_offset + start_index;\n let values_local_b = args.values_offset + (head_offset * args.head_dimension);\n let value_intercepts_local_b = args.value_intercepts_offset + head_offset;\n let value_slopes_local_b = args.value_slopes_offset + head_offset;\n let scores_local = args.scores_offset + (global_id.x * (args.length1 + args.length2));\n let output_local = args.output_offset + (((args.tq * args.num_heads) + global_id.x) * args.head_dimension);\n\n for (var i = 0u; i < args.head_dimension; i++) {\n var tmp: f32 = 0.0;\n for (var k = 0u; k < args.length1; k++) {\n let value_idx = values_local_a + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + k] * (value_intercepts[value_intercepts_local_a + k] + (value_slopes[value_slopes_local_a + k] * value_val)); \n }\n for (var k = 0u; k < args.length2; k++) {\n let value_idx = values_local_b + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + args.length1 + k] * (value_intercepts[value_intercepts_local_b + k] + (value_slopes[value_slopes_local_b + k] * value_val)); \n }\n output[output_local + i] = tmp;\n }\n}\n\n".concat(emptyShader);var loadAttentionFirShader=function loadAttentionFirShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention fir bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention fir pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention fir shader module",code:attentionFirShaderSource});var computePipeline=device.createComputePipeline({label:"attention fir pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var UPDATE_KV_SHADER_NAME="pv_picollm_attention_update_kv_shader";var attentionUpdateKvShaderSource="\nstruct argsStruct {\n n: u32,\n num_kv_heads: u32,\n window_length: u32,\n position: u32,\n head_dimension: u32,\n tf_offset: u32,\n kv_offset: u32,\n kv_intercepts_offset: u32,\n kv_slopes_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar kv: array;\n\n@group(0) @binding(3)\nvar kv_intercepts: array;\n\n@group(0) @binding(4)\nvar kv_slopes: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x >= args.num_kv_heads) {\n return;\n }\n \n for (var i = 0u; i < args.n; i++) {\n let index = (global_id.x * args.window_length) + ((args.position + i) % args.window_length);\n let tf_start = args.tf_offset + (((i * args.num_kv_heads) + global_id.x) * args.head_dimension);\n let kv_start = args.kv_offset + ((index * args.head_dimension) / 4);\n let kv_intercepts_start = args.kv_intercepts_offset + index;\n let kv_slopes_start = args.kv_slopes_offset + index;\n \n var xmax = tf[tf_start]; \n var xmin = tf[tf_start]; \n \n for (var j = 1u; j < args.head_dimension; j++) {\n xmax = max(xmax, tf[tf_start + j]);\n xmin = min(xmin, tf[tf_start + j]);\n }\n\n kv_intercepts[kv_intercepts_start] = xmin;\n kv_slopes[kv_slopes_start] = f32(xmax - xmin) / 255.0;\n\n for (var j = 0u; j < args.head_dimension; j++) {\n let kv_idx = kv_start + (j / 4);\n let kv_val = u32(round((tf[tf_start + j] - xmin) / kv_slopes[kv_slopes_start])); \n kv[kv_idx] = insertBits(kv[kv_idx], extractBits(kv_val, 0u, 8u), (j * 8u) % 32u, 8u); \n }\n }\n}\n\n".concat(emptyShader);var loadAttentionUpdateKvShader=function loadAttentionUpdateKvShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention update kv bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention update kv pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention update kv shader module",code:attentionUpdateKvShaderSource});var computePipeline=device.createComputePipeline({label:"attention update kv pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var TRANSPOSE_QUERY_SHADER_NAME="pv_picollm_attention_transpose_query_shader";var attentionTransposeQueryShaderSource="\nstruct argsStruct {\n n: u32,\n num_heads: u32,\n head_dimension: u32,\n tf_offset: u32,\n hf_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar hf: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n\n if (workgroup_id.x >= args.num_heads || workgroup_id.y >= args.n || local_id.x >= args.head_dimension) {\n return;\n }\n \n let tf_idx = args.tf_offset + (workgroup_id.y * args.num_heads * args.head_dimension) + (workgroup_id.x * args.head_dimension) + local_id.x; \n let hf_idx = args.hf_offset + (workgroup_id.x * args.n * args.head_dimension) + (workgroup_id.y * args.head_dimension) + local_id.x; \n hf[hf_idx] = tf[tf_idx];\n}\n\n".concat(emptyShader);var loadAttentionTransposeQueryShader=function loadAttentionTransposeQueryShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention transpose query bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention transpose query pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention transpose query shader module",code:attentionTransposeQueryShaderSource});var computePipeline=device.createComputePipeline({label:"attention transpose query pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var attentionShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},PRECOMPUTE_ENCODING_SHADER_NAME,loadAttentionPrecomputeEncodingShader),ENCODE_ROPE_INTERLEAVED_SHADER_NAME,loadAttentionEncodeRopeInterleavedShader),ENCODE_SHADER_NAME,loadAttentionEncodeShader),DOT_PRODUCT_SHADER_NAME,loadAttentionDotProductShader),SOFTMAX_SHADER_NAME,loadAttentionSoftmaxShader),FIR_SHADER_NAME,loadAttentionFirShader),UPDATE_KV_SHADER_NAME,loadAttentionUpdateKvShader),TRANSPOSE_QUERY_SHADER_NAME,loadAttentionTransposeQueryShader);var SILU_SHADER_NAME="pv_picollm_feed_forward_silu_shader";var feedForwardSiluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = x[global_id.x] / (1.0 + exp(-x[global_id.x]));\n}\n\n".concat(emptyShader);var loadFeedForwardSiluShader=function loadFeedForwardSiluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff silu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff silu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff silu shader module",code:feedForwardSiluShaderSource});var computePipeline=device.createComputePipeline({label:"ff silu pipline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var GELU_SHADER_NAME="pv_picollm_feed_forward_gelu_shader";var feedForwardGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\nconst a1: f32 = 0.254829592;\nconst a2: f32 = -0.284496736;\nconst a3: f32 = 1.421413741;\nconst a4: f32 = -1.453152027;\nconst a5: f32 = 1.061405429;\nconst p: f32 = 0.3275911;\n\n// A&S formula 7.1.26\nfn erf(x: f32) -> f32 { \n var sign: f32 = 1.0;\n if (x < 0) {\n sign = -1.0;\n }\n var x_abs: f32 = abs(x);\n \n let t: f32 = 1.0 / fma(p, x_abs, 1.0);\n let y: f32 = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-x_abs * x_abs);\n\n return sign * y;\n}\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1.0 + erf(x[global_id.x] * 0.7071067811865475));\n}\n\n".concat(emptyShader);var loadFeedForwardGeluShader=function loadFeedForwardGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff gelu shader module",code:feedForwardGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ALMOST_GELU_SHADER_NAME="pv_picollm_feed_forward_almost_gelu_shader";var feedForwardAlmostGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1 + tanh(0.7978845608028654 * (x[global_id.x] + (0.044715f * x[global_id.x] * x[global_id.x] * x[global_id.x]))));\n}\n\n".concat(emptyShader);var loadFeedForwardAlmostGeluShader=function loadFeedForwardAlmostGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff almost gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff almost gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff almost gelu shader module",code:feedForwardAlmostGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff almost gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var MULTIPLY_BUFFERS_SHADER_NAME="pv_picollm_feed_forward_multiply_buffers_shader";var feedForwardMultiplyBuffersShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n y[global_id.x] *= x[global_id.x];\n}\n\n".concat(emptyShader);var loadFeedForwardMultiplyBuffersShader=function loadFeedForwardMultiplyBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff multiply buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff multiply buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff multiply buffers shader module",code:feedForwardMultiplyBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"ff multiply buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var feedForwardShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SILU_SHADER_NAME,loadFeedForwardSiluShader),GELU_SHADER_NAME,loadFeedForwardGeluShader),ALMOST_GELU_SHADER_NAME,loadFeedForwardAlmostGeluShader),MULTIPLY_BUFFERS_SHADER_NAME,loadFeedForwardMultiplyBuffersShader);var FORWARD_SHADER_NAME$1="pv_picollm_gate_forward_shader";var gateForwardShaderSource="\n\nstruct pv_picollm_gate_ix_t {\n i: u32,\n x: f32,\n}\n\n@group(0) @binding(0)\nvar y: array;\n\n@group(0) @binding(1)\nvar indices: array;\n\n@group(0) @binding(2)\nvar weights: array;\n\noverride n: u32 = 0;\noverride k: u32 = 0;\noverride num_experts: u32 = 0;\n\noverride y_offset: u32 = 0;\noverride indices_offset: u32 = 0;\noverride weights_offset: u32 = 0;\n\nvar ixs: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(global_invocation_id) global_id : vec3\n) {\n if (global_id.x >= n) {\n return;\n }\n \n var y_start: u32 = y_offset + global_id.x * num_experts;\n for (var j = 0u; j < num_experts; j++) {\n ixs[j].i = j;\n ixs[j].x = y[y_start + j];\n }\n\n for (var i = 0u; i < num_experts - 1; i++) {\n for (var j = 0u; j < num_experts - i - 1; j++) {\n if (ixs[j].x < ixs[j + 1].x) {\n let tmp = ixs[j];\n ixs[j] = ixs[j + 1];\n ixs[j + 1] = tmp;\n }\n }\n }\n\n for (var j = 0u; j < k; j++) {\n indices[indices_offset + (global_id.x * k) + j] = ixs[j].i;\n weights[weights_offset + (global_id.x * k) + j] = ixs[j].x;\n }\n\n var max_weight: f32 = weights[weights_offset + (global_id.x * k)];\n for (var j = 1u; j < k; j++) {\n max_weight = max(max_weight, weights[weights_offset + (global_id.x * k) + j]);\n }\n\n var sum_weight: f32 = 0.0;\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] = exp(weights[weights_offset + (global_id.x * k) + j] - max_weight);\n sum_weight += weights[weights_offset + (global_id.x * k) + j];\n }\n\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] /= sum_weight;\n }\n}\n\n".concat(emptyShader);var loadGateForwardShader=function loadGateForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"gate forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"gate forward pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"gate forward shader module",code:gateForwardShaderSource});var computePipeline=device.createComputePipeline({layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{num_experts:1}}});return{computePipeline:computePipeline,pipelineLayout:pipelineLayout,shaderModule:shaderModule}};var gateForwardShader=_defineProperty({},FORWARD_SHADER_NAME$1,loadGateForwardShader);var ADD_TO_BUFFER_SHADER_NAME$1="pv_picollm_moe_transformer_add_to_buffer_shader";var moeTransformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n x_offset: u32,\n buffer_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n\n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddToBufferShader=function loadMoeTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add to buffer shader module",code:moeTransformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME="pv_picollm_moe_transformer_multiply_weight_and_add_to_buffer_shader";var moeTransformerMultiplyWeightAndToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n weights_index: u32,\n y_index: u32,\n weights_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weights: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + args.y_index + global_id.x] += weights[args.weights_index] + x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerMultiplyWeightAndAddToBufferShader=function loadMoeTransformerMultiplyWeightAndAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer multiply weight and add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer multiply weight and add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer multiply weight and add to buffer shader module",code:moeTransformerMultiplyWeightAndToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer multiply weight and add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME$1="pv_picollm_moe_transformer_add_buffers_shader";var moeTransformerAddBuffersShaderSource="\nstruct argsStruct {\n n: u32, \n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddBuffersShader=function loadMoeTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add buffers shader module",code:moeTransformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var moeTransformerForwardShaders=_defineProperty(_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME$1,loadMoeTransformerAddToBufferShader),MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME,loadMoeTransformerMultiplyWeightAndAddToBufferShader),ADD_BUFFERS_SHADER_NAME$1,loadMoeTransformerAddBuffersShader);var sdataReduce="\n for (var s: u32 = workgroup_size_x / 2; s > 0; s >>= 1) {\n if tid < s {\n sdata[tid] += sdata[tid + s];\n }\n workgroupBarrier();\n }\n";var dividePadFunction="\n fn divide_pad(a: u32, b: u32) -> u32 { \n return (a + b - 1) / b;\n }\n";var FORWARD_MULTI_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_multi_buffer_shader";var FORWARD_SINGLE_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_single_buffer_shader";var normForwardShaderSource=function normForwardShaderSource(isMulti){return"\nstruct argsStruct {\n n: u32,\n dimension: u32,\n remainder: u32,\n remainder_start: u32, \n eps: f32, \n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n".concat(isMulti?"\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3) \nvar y: array;\n":" \n@group(0) @binding(2)\nvar x: array;\n","\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\nvar sdata: array, workgroup_size_x>;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n let tid = local_id.x;\n let m = workgroup_id.x;\n let block_size = workgroup_size_x;\n \n var power_vec: vec4;\n let x_start: u32 = args.x_offset + (m * args.dimension);\n let skip = tid * 4;\n let shift = (block_size * 4);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = x_start + j + skip; \n\n let x_vec = vec4(\n x[local_index],\n x[local_index + 1],\n x[local_index + 2],\n x[local_index + 3]);\n \n power_vec += x_vec * x_vec; \n } \n \n if (tid == 0 && args.remainder > 0) {\n var remainder_vec = vec4(0.0, 0.0, 0.0, 0.0);\n let x_idx = x_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) { \n remainder_vec[j] = x[x_idx + j];\n } \n power_vec += remainder_vec * remainder_vec;\n }\n \n sdata[tid] = power_vec;\n workgroupBarrier();\n\n ").concat(sdataReduce,"\n \n let power = sdata[0].x + sdata[0].y + sdata[0].z + sdata[0].w;\n let norm: vec4 = vec4(1.0 / sqrt((power / f32(args.dimension)) + args.eps));\n \n let y_start: u32 = args.y_offset + (m * args.dimension);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = j + skip;\n let x_idx = x_start + local_index;\n let x_vec = vec4(\n x[x_idx],\n x[x_idx + 1],\n x[x_idx + 2],\n x[x_idx + 3]);\n \n let weight_vec = vec4(\n weight[local_index],\n weight[local_index + 1],\n weight[local_index + 2],\n weight[local_index + 3]);\n let y_vec = x_vec * norm * weight_vec;\n \n let y_idx = y_start + local_index;\n").concat(isMulti?" \n y[y_idx] = y_vec.x;\n y[y_idx + 1] = y_vec.y;\n y[y_idx + 2] = y_vec.z;\n y[y_idx + 3] = y_vec.w;\n":" \n x[y_idx] = y_vec.x;\n x[y_idx + 1] = y_vec.y;\n x[y_idx + 2] = y_vec.z;\n x[y_idx + 3] = y_vec.w;\n"," \n }\n \n if (tid == 0 && args.remainder > 0) {\n let x_idx = x_start + args.remainder_start;\n let weight_idx = args.remainder_start; \n let y_idx = y_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) {\n").concat(isMulti?" \n y[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n":" \n x[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n"," \n } \n }\n}\n\n").concat(emptyShader)};var loadNormForwardShader=function loadNormForwardShader(device,isMulti){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}}];if(isMulti){entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}});entries.push({binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}else{entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}var bindGroupLayout=device.createBindGroupLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm forward ".concat(isMulti?"multi":"single"," buffer shader module"),code:normForwardShaderSource(isMulti)});var computePipeline=device.createComputePipeline({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,false)}),FORWARD_MULTI_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,true)});var FORWARD_MULTI_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_multi_buffer_shader";var normLayerForwardMultiBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar x: array;\n\n@group(0) @binding(4)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += x[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (x[x_start + j] - mean) * (x[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((x[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardMultiBufferShader=function loadNormLayerForwardMultiBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward multi buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward multi buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward multi buffer shader module",code:normLayerForwardMultiBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward multi buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var FORWARD_SINGLE_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_single_buffer_shader";var normLayerForwardSingleBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += y[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (y[x_start + j] - mean) * (y[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((y[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardSingleBufferShader=function loadNormLayerForwardSingleBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward single buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward single buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward single buffer shader module",code:normLayerForwardSingleBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward single buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normLayerForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME,loadNormLayerForwardSingleBufferShader),FORWARD_MULTI_BUFFER_SHADER_NAME,loadNormLayerForwardMultiBufferShader);var ADD_TO_BUFFER_SHADER_NAME="pv_picollm_transformer_add_to_buffer_shader";var transformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32,\n x_offset: u32,\n buffer_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddToBufferShader=function loadTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add to buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add to buffer shader module",code:transformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add to buffer compute",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME="pv_picollm_transformer_add_buffers_shader";var transformerAddBuffersShaderSource="\n\nstruct argsStruct {\n n: u32,\n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddBuffersShader=function loadTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add buffers shader module",code:transformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var transformerForwardShaders=_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME,loadTransformerAddToBufferShader),ADD_BUFFERS_SHADER_NAME,loadTransformerAddBuffersShader);var FORWARD_SHADER_NAME="pv_picollm_weight_float_forward_shader";var weightFloatForwardShaderSource="\n\nstruct argsStruct {\n nr: u32,\n nc: u32,\n w_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar w: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n if (local_id.x >= args.nr) {\n return;\n }\n let x_start: u32 = args.x_offset + (workgroup_id.x * args.nc);\n let y_idx: u32 = local_id.x + args.y_offset + (workgroup_id.x * args.nr);\n \n let w_start: u32 = args.w_offset + (local_id.x * args.nc);\n for (var j = 0u; j < args.nc; j++) {\n y[y_idx] += w[w_start + j] * x[x_start + j]; \n }\n}\n\n".concat(emptyShader);var loadWeightFloatForwardShader=function loadWeightFloatForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight float forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight float forward pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight float forward shader module",code:weightFloatForwardShaderSource});var computePipeline=device.createComputePipeline({label:"weight float forward pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var weightFloatForwardShader=_defineProperty({},FORWARD_SHADER_NAME,loadWeightFloatForwardShader);var rowsPerBlock=16;var columnsPerBlock=8;var preprocessDim=16;var weightBlockSize=256;var unpackBlock128BitDepth3="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_3(packed_offset: u32) {\n let val_0 = blocks[packed_offset]; \n unpacked[0] = extractBits(val_0, 0u, 3u);\n unpacked[1] = extractBits(val_0, 3u, 3u);\n unpacked[2] = extractBits(val_0, 6u, 3u);\n unpacked[3] = extractBits(val_0, 9u, 3u);\n unpacked[4] = extractBits(val_0, 12u, 3u);\n unpacked[5] = extractBits(val_0, 15u, 3u);\n unpacked[6] = extractBits(val_0, 18u, 3u);\n unpacked[7] = extractBits(val_0, 21u, 3u);\n unpacked[8] = extractBits(val_0, 24u, 3u);\n unpacked[9] = extractBits(val_0, 27u, 3u);\n unpacked[10] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_1, 0u, 1u), 2u, 1u);\n unpacked[11] = extractBits(val_1, 1u, 3u);\n unpacked[12] = extractBits(val_1, 4u, 3u);\n unpacked[13] = extractBits(val_1, 7u, 3u);\n unpacked[14] = extractBits(val_1, 10u, 3u);\n unpacked[15] = extractBits(val_1, 13u, 3u);\n unpacked[16] = extractBits(val_1, 16u, 3u);\n unpacked[17] = extractBits(val_1, 19u, 3u);\n unpacked[18] = extractBits(val_1, 22u, 3u);\n unpacked[19] = extractBits(val_1, 25u, 3u);\n unpacked[20] = extractBits(val_1, 28u, 3u);\n unpacked[21] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_2, 0u, 2u), 1u, 2u); \n unpacked[22] = extractBits(val_2, 2u, 3u);\n unpacked[23] = extractBits(val_2, 5u, 3u);\n unpacked[24] = extractBits(val_2, 8u, 3u);\n unpacked[25] = extractBits(val_2, 11u, 3u);\n unpacked[26] = extractBits(val_2, 14u, 3u);\n unpacked[27] = extractBits(val_2, 17u, 3u);\n unpacked[28] = extractBits(val_2, 20u, 3u);\n unpacked[29] = extractBits(val_2, 23u, 3u);\n unpacked[30] = extractBits(val_2, 26u, 3u);\n unpacked[31] = extractBits(val_2, 29u, 3u);\n \n let val_3 = blocks[packed_offset + 3]; \n unpacked[32] = extractBits(val_3, 0u, 3u);\n unpacked[33] = extractBits(val_3, 3u, 3u);\n unpacked[34] = extractBits(val_3, 6u, 3u);\n unpacked[35] = extractBits(val_3, 9u, 3u);\n unpacked[36] = extractBits(val_3, 12u, 3u);\n unpacked[37] = extractBits(val_3, 15u, 3u);\n unpacked[38] = extractBits(val_3, 18u, 3u);\n unpacked[39] = extractBits(val_3, 21u, 3u);\n unpacked[40] = extractBits(val_3, 24u, 3u);\n unpacked[41] = extractBits(val_3, 27u, 3u);\n unpacked[42] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_4, 0u, 1u), 2u, 1u);\n unpacked[43] = extractBits(val_4, 1u, 3u);\n unpacked[44] = extractBits(val_4, 4u, 3u);\n unpacked[45] = extractBits(val_4, 7u, 3u);\n unpacked[46] = extractBits(val_4, 10u, 3u);\n unpacked[47] = extractBits(val_4, 13u, 3u);\n unpacked[48] = extractBits(val_4, 16u, 3u);\n unpacked[49] = extractBits(val_4, 19u, 3u);\n unpacked[50] = extractBits(val_4, 22u, 3u);\n unpacked[51] = extractBits(val_4, 25u, 3u);\n unpacked[52] = extractBits(val_4, 28u, 3u);\n unpacked[53] = extractBits(val_4, 31u, 1u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_5, 0u, 2u), 1u, 2u); \n unpacked[54] = extractBits(val_5, 2u, 3u);\n unpacked[55] = extractBits(val_5, 5u, 3u);\n unpacked[56] = extractBits(val_5, 8u, 3u);\n unpacked[57] = extractBits(val_5, 11u, 3u);\n unpacked[58] = extractBits(val_5, 14u, 3u);\n unpacked[59] = extractBits(val_5, 17u, 3u);\n unpacked[60] = extractBits(val_5, 20u, 3u);\n unpacked[61] = extractBits(val_5, 23u, 3u);\n unpacked[62] = extractBits(val_5, 26u, 3u);\n unpacked[63] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[64] = extractBits(val_6, 0u, 3u);\n unpacked[65] = extractBits(val_6, 3u, 3u);\n unpacked[66] = extractBits(val_6, 6u, 3u);\n unpacked[67] = extractBits(val_6, 9u, 3u);\n unpacked[68] = extractBits(val_6, 12u, 3u);\n unpacked[69] = extractBits(val_6, 15u, 3u);\n unpacked[70] = extractBits(val_6, 18u, 3u);\n unpacked[71] = extractBits(val_6, 21u, 3u);\n unpacked[72] = extractBits(val_6, 24u, 3u);\n unpacked[73] = extractBits(val_6, 27u, 3u);\n unpacked[74] = extractBits(val_6, 30u, 2u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_7, 0u, 1u), 2u, 1u);\n unpacked[75] = extractBits(val_7, 1u, 3u);\n unpacked[76] = extractBits(val_7, 4u, 3u);\n unpacked[77] = extractBits(val_7, 7u, 3u);\n unpacked[78] = extractBits(val_7, 10u, 3u);\n unpacked[79] = extractBits(val_7, 13u, 3u);\n unpacked[80] = extractBits(val_7, 16u, 3u);\n unpacked[81] = extractBits(val_7, 19u, 3u);\n unpacked[82] = extractBits(val_7, 22u, 3u);\n unpacked[83] = extractBits(val_7, 25u, 3u);\n unpacked[84] = extractBits(val_7, 28u, 3u);\n unpacked[85] = extractBits(val_7, 31u, 1u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_8, 0u, 2u), 1u, 2u); \n unpacked[86] = extractBits(val_8, 2u, 3u);\n unpacked[87] = extractBits(val_8, 5u, 3u);\n unpacked[88] = extractBits(val_8, 8u, 3u);\n unpacked[89] = extractBits(val_8, 11u, 3u);\n unpacked[90] = extractBits(val_8, 14u, 3u);\n unpacked[91] = extractBits(val_8, 17u, 3u);\n unpacked[92] = extractBits(val_8, 20u, 3u);\n unpacked[93] = extractBits(val_8, 23u, 3u);\n unpacked[94] = extractBits(val_8, 26u, 3u);\n unpacked[95] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[96] = extractBits(val_9, 0u, 3u);\n unpacked[97] = extractBits(val_9, 3u, 3u);\n unpacked[98] = extractBits(val_9, 6u, 3u);\n unpacked[99] = extractBits(val_9, 9u, 3u);\n unpacked[100] = extractBits(val_9, 12u, 3u);\n unpacked[101] = extractBits(val_9, 15u, 3u);\n unpacked[102] = extractBits(val_9, 18u, 3u);\n unpacked[103] = extractBits(val_9, 21u, 3u);\n unpacked[104] = extractBits(val_9, 24u, 3u);\n unpacked[105] = extractBits(val_9, 27u, 3u);\n unpacked[106] = extractBits(val_9, 30u, 2u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_10, 0u, 1u), 2u, 1u);\n unpacked[107] = extractBits(val_10, 1u, 3u);\n unpacked[108] = extractBits(val_10, 4u, 3u);\n unpacked[109] = extractBits(val_10, 7u, 3u);\n unpacked[110] = extractBits(val_10, 10u, 3u);\n unpacked[111] = extractBits(val_10, 13u, 3u);\n unpacked[112] = extractBits(val_10, 16u, 3u);\n unpacked[113] = extractBits(val_10, 19u, 3u);\n unpacked[114] = extractBits(val_10, 22u, 3u);\n unpacked[115] = extractBits(val_10, 25u, 3u);\n unpacked[116] = extractBits(val_10, 28u, 3u);\n unpacked[117] = extractBits(val_10, 31u, 1u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_11, 0u, 2u), 1u, 2u); \n unpacked[118] = extractBits(val_11, 2u, 3u);\n unpacked[119] = extractBits(val_11, 5u, 3u);\n unpacked[120] = extractBits(val_11, 8u, 3u);\n unpacked[121] = extractBits(val_11, 11u, 3u);\n unpacked[122] = extractBits(val_11, 14u, 3u);\n unpacked[123] = extractBits(val_11, 17u, 3u);\n unpacked[124] = extractBits(val_11, 20u, 3u);\n unpacked[125] = extractBits(val_11, 23u, 3u);\n unpacked[126] = extractBits(val_11, 26u, 3u);\n unpacked[127] = extractBits(val_11, 29u, 3u);\n}\n";var unpackBlock128BitDepth5="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_5(packed_offset: u32) { \n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 5u);\n unpacked[1] = extractBits(val_0, 5u, 5u);\n unpacked[2] = extractBits(val_0, 10u, 5u);\n unpacked[3] = extractBits(val_0, 15u, 5u);\n unpacked[4] = extractBits(val_0, 20u, 5u);\n unpacked[5] = extractBits(val_0, 25u, 5u);\n unpacked[6] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[6] = insertBits(unpacked[6], extractBits(val_1, 0u, 3u), 2u, 3u); \n unpacked[7] = extractBits(val_1, 3u, 5u);\n unpacked[8] = extractBits(val_1, 8u, 5u);\n unpacked[9] = extractBits(val_1, 13u, 5u);\n unpacked[10] = extractBits(val_1, 18u, 5u);\n unpacked[11] = extractBits(val_1, 23u, 5u);\n unpacked[12] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[12] = insertBits(unpacked[12], extractBits(val_2, 0u, 1u), 4u, 1u);\n unpacked[13] = extractBits(val_2, 1u, 5u);\n unpacked[14] = extractBits(val_2, 6u, 5u);\n unpacked[15] = extractBits(val_2, 11u, 5u);\n unpacked[16] = extractBits(val_2, 16u, 5u);\n unpacked[17] = extractBits(val_2, 21u, 5u);\n unpacked[18] = extractBits(val_2, 26u, 5u);\n unpacked[19] = extractBits(val_2, 31u, 1u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[19] = insertBits(unpacked[19], extractBits(val_3, 0u, 4u), 1u, 4u);\n unpacked[20] = extractBits(val_3, 4u, 5u);\n unpacked[21] = extractBits(val_3, 9u, 5u);\n unpacked[22] = extractBits(val_3, 14u, 5u);\n unpacked[23] = extractBits(val_3, 19u, 5u);\n unpacked[24] = extractBits(val_3, 24u, 5u);\n unpacked[25] = extractBits(val_3, 29u, 3u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[25] = insertBits(unpacked[25], extractBits(val_4, 0u, 2u), 3u, 2u);\n unpacked[26] = extractBits(val_4, 2u, 5u);\n unpacked[27] = extractBits(val_4, 7u, 5u);\n unpacked[28] = extractBits(val_4, 12u, 5u);\n unpacked[29] = extractBits(val_4, 17u, 5u);\n unpacked[30] = extractBits(val_4, 22u, 5u);\n unpacked[31] = extractBits(val_4, 27u, 5u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[32] = extractBits(val_5, 0u, 5u);\n unpacked[33] = extractBits(val_5, 5u, 5u);\n unpacked[34] = extractBits(val_5, 10u, 5u);\n unpacked[35] = extractBits(val_5, 15u, 5u);\n unpacked[36] = extractBits(val_5, 20u, 5u);\n unpacked[37] = extractBits(val_5, 25u, 5u);\n unpacked[38] = extractBits(val_5, 30u, 2u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[38] = insertBits(unpacked[38], extractBits(val_6, 0u, 3u), 2u, 3u);\n unpacked[39] = extractBits(val_6, 3u, 5u);\n unpacked[40] = extractBits(val_6, 8u, 5u);\n unpacked[41] = extractBits(val_6, 13u, 5u);\n unpacked[42] = extractBits(val_6, 18u, 5u);\n unpacked[43] = extractBits(val_6, 23u, 5u);\n unpacked[44] = extractBits(val_6, 28u, 4u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[44] = insertBits(unpacked[44], extractBits(val_7, 0u, 1u), 4u, 1u);\n unpacked[45] = extractBits(val_7, 1u, 5u);\n unpacked[46] = extractBits(val_7, 6u, 5u);\n unpacked[47] = extractBits(val_7, 11u, 5u);\n unpacked[48] = extractBits(val_7, 16u, 5u);\n unpacked[49] = extractBits(val_7, 21u, 5u);\n unpacked[50] = extractBits(val_7, 26u, 5u);\n unpacked[51] = extractBits(val_7, 31u, 1u);\n\n let val_8 = blocks[packed_offset + 8];\n unpacked[51] = insertBits(unpacked[51], extractBits(val_8, 0u, 4u), 1u, 4u);\n unpacked[52] = extractBits(val_8, 4u, 5u);\n unpacked[53] = extractBits(val_8, 9u, 5u);\n unpacked[54] = extractBits(val_8, 14u, 5u);\n unpacked[55] = extractBits(val_8, 19u, 5u);\n unpacked[56] = extractBits(val_8, 24u, 5u);\n unpacked[57] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[57] = insertBits(unpacked[57], extractBits(val_9, 0u, 2u), 3u, 2u);\n unpacked[58] = extractBits(val_9, 2u, 5u);\n unpacked[59] = extractBits(val_9, 7u, 5u);\n unpacked[60] = extractBits(val_9, 12u, 5u);\n unpacked[61] = extractBits(val_9, 17u, 5u);\n unpacked[62] = extractBits(val_9, 22u, 5u);\n unpacked[63] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[64] = extractBits(val_10, 0u, 5u);\n unpacked[65] = extractBits(val_10, 5u, 5u);\n unpacked[66] = extractBits(val_10, 10u, 5u);\n unpacked[67] = extractBits(val_10, 15u, 5u);\n unpacked[68] = extractBits(val_10, 20u, 5u);\n unpacked[69] = extractBits(val_10, 25u, 5u);\n unpacked[70] = extractBits(val_10, 30u, 2u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[70] = insertBits(unpacked[70], extractBits(val_11, 0u, 3u), 2u, 3u);\n unpacked[71] = extractBits(val_11, 3u, 5u);\n unpacked[72] = extractBits(val_11, 8u, 5u);\n unpacked[73] = extractBits(val_11, 13u, 5u);\n unpacked[74] = extractBits(val_11, 18u, 5u);\n unpacked[75] = extractBits(val_11, 23u, 5u);\n unpacked[76] = extractBits(val_11, 28u, 4u);\n\n let val_12 = blocks[packed_offset + 12];\n unpacked[76] = insertBits(unpacked[76], extractBits(val_12, 0u, 1u), 4u, 1u);\n unpacked[77] = extractBits(val_12, 1u, 5u);\n unpacked[78] = extractBits(val_12, 6u, 5u);\n unpacked[79] = extractBits(val_12, 11u, 5u);\n unpacked[80] = extractBits(val_12, 16u, 5u);\n unpacked[81] = extractBits(val_12, 21u, 5u);\n unpacked[82] = extractBits(val_12, 26u, 5u);\n unpacked[83] = extractBits(val_12, 31u, 1u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[83] = insertBits(unpacked[83], extractBits(val_13, 0u, 4u), 1u, 4u);\n unpacked[84] = extractBits(val_13, 4u, 5u);\n unpacked[85] = extractBits(val_13, 9u, 5u);\n unpacked[86] = extractBits(val_13, 14u, 5u);\n unpacked[87] = extractBits(val_13, 19u, 5u);\n unpacked[88] = extractBits(val_13, 24u, 5u);\n unpacked[89] = extractBits(val_13, 29u, 3u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[89] = insertBits(unpacked[89], extractBits(val_14, 0u, 2u), 3u, 2u);\n unpacked[90] = extractBits(val_14, 2u, 5u);\n unpacked[91] = extractBits(val_14, 7u, 5u);\n unpacked[92] = extractBits(val_14, 12u, 5u);\n unpacked[93] = extractBits(val_14, 17u, 5u);\n unpacked[94] = extractBits(val_14, 22u, 5u);\n unpacked[95] = extractBits(val_14, 27u, 5u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[96] = extractBits(val_15, 0u, 5u);\n unpacked[97] = extractBits(val_15, 5u, 5u);\n unpacked[98] = extractBits(val_15, 10u, 5u);\n unpacked[99] = extractBits(val_15, 15u, 5u);\n unpacked[100] = extractBits(val_15, 20u, 5u);\n unpacked[101] = extractBits(val_15, 25u, 5u);\n unpacked[102] = extractBits(val_15, 30u, 2u);\n\n let val_16 = blocks[packed_offset + 16];\n unpacked[102] = insertBits(unpacked[102], extractBits(val_16, 0u, 3u), 2u, 3u);\n unpacked[103] = extractBits(val_16, 3u, 5u);\n unpacked[104] = extractBits(val_16, 8u, 5u);\n unpacked[105] = extractBits(val_16, 13u, 5u);\n unpacked[106] = extractBits(val_16, 18u, 5u);\n unpacked[107] = extractBits(val_16, 23u, 5u);\n unpacked[108] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[108] = insertBits(unpacked[108], extractBits(val_17, 0u, 1u), 4u, 1u);\n unpacked[109] = extractBits(val_17, 1u, 5u);\n unpacked[110] = extractBits(val_17, 6u, 5u);\n unpacked[111] = extractBits(val_17, 11u, 5u);\n unpacked[112] = extractBits(val_17, 16u, 5u);\n unpacked[113] = extractBits(val_17, 21u, 5u);\n unpacked[114] = extractBits(val_17, 26u, 5u);\n unpacked[115] = extractBits(val_17, 31u, 1u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[115] = insertBits(unpacked[115], extractBits(val_18, 0u, 4u), 1u, 4u);\n unpacked[116] = extractBits(val_18, 4u, 5u);\n unpacked[117] = extractBits(val_18, 9u, 5u);\n unpacked[118] = extractBits(val_18, 14u, 5u);\n unpacked[119] = extractBits(val_18, 19u, 5u);\n unpacked[120] = extractBits(val_18, 24u, 5u);\n unpacked[121] = extractBits(val_18, 29u, 3u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[121] = insertBits(unpacked[121], extractBits(val_19, 0u, 2u), 3u, 2u);\n unpacked[122] = extractBits(val_19, 2u, 5u);\n unpacked[123] = extractBits(val_19, 7u, 5u);\n unpacked[124] = extractBits(val_19, 12u, 5u);\n unpacked[125] = extractBits(val_19, 17u, 5u);\n unpacked[126] = extractBits(val_19, 22u, 5u);\n unpacked[127] = extractBits(val_19, 27u, 5u);\n}\n";var unpackBlock128BitDepth6="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_6(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 6u);\n unpacked[1] = extractBits(val_0, 6u, 6u);\n unpacked[2] = extractBits(val_0, 12u, 6u);\n unpacked[3] = extractBits(val_0, 18u, 6u);\n unpacked[4] = extractBits(val_0, 24u, 6u);\n unpacked[5] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[5] = insertBits(unpacked[5], extractBits(val_1, 0u, 4u), 2u, 4u);\n unpacked[6] = extractBits(val_1, 4u, 6u);\n unpacked[7] = extractBits(val_1, 10u, 6u);\n unpacked[8] = extractBits(val_1, 16u, 6u);\n unpacked[9] = extractBits(val_1, 22u, 6u);\n unpacked[10] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_2, 0u, 2u), 4u, 2u);\n unpacked[11] = extractBits(val_2, 2u, 6u);\n unpacked[12] = extractBits(val_2, 8u, 6u);\n unpacked[13] = extractBits(val_2, 14u, 6u);\n unpacked[14] = extractBits(val_2, 20u, 6u);\n unpacked[15] = extractBits(val_2, 26u, 6u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[16] = extractBits(val_3, 0u, 6u);\n unpacked[17] = extractBits(val_3, 6u, 6u);\n unpacked[18] = extractBits(val_3, 12u, 6u);\n unpacked[19] = extractBits(val_3, 18u, 6u);\n unpacked[20] = extractBits(val_3, 24u, 6u);\n unpacked[21] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_4, 0u, 4u), 2u, 4u);\n unpacked[22] = extractBits(val_4, 4u, 6u);\n unpacked[23] = extractBits(val_4, 10u, 6u);\n unpacked[24] = extractBits(val_4, 16u, 6u);\n unpacked[25] = extractBits(val_4, 22u, 6u);\n unpacked[26] = extractBits(val_4, 28u, 4u);\n\n let val_5 = blocks[packed_offset + 5];\n unpacked[26] = insertBits(unpacked[26], extractBits(val_5, 0u, 2u), 4u, 2u);\n unpacked[27] = extractBits(val_5, 2u, 6u);\n unpacked[28] = extractBits(val_5, 8u, 6u);\n unpacked[29] = extractBits(val_5, 14u, 6u);\n unpacked[30] = extractBits(val_5, 20u, 6u);\n unpacked[31] = extractBits(val_5, 26u, 6u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[32] = extractBits(val_6, 0u, 6u);\n unpacked[33] = extractBits(val_6, 6u, 6u);\n unpacked[34] = extractBits(val_6, 12u, 6u);\n unpacked[35] = extractBits(val_6, 18u, 6u);\n unpacked[36] = extractBits(val_6, 24u, 6u);\n unpacked[37] = extractBits(val_6, 30u, 2u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[37] = insertBits(unpacked[37], extractBits(val_7, 0u, 4u), 2u, 4u);\n unpacked[38] = extractBits(val_7, 4u, 6u);\n unpacked[39] = extractBits(val_7, 10u, 6u);\n unpacked[40] = extractBits(val_7, 16u, 6u);\n unpacked[41] = extractBits(val_7, 22u, 6u);\n unpacked[42] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_8, 0u, 2u), 4u, 2u);\n unpacked[43] = extractBits(val_8, 2u, 6u);\n unpacked[44] = extractBits(val_8, 8u, 6u);\n unpacked[45] = extractBits(val_8, 14u, 6u);\n unpacked[46] = extractBits(val_8, 20u, 6u);\n unpacked[47] = extractBits(val_8, 26u, 6u);\n\n let val_9 = blocks[packed_offset + 9];\n unpacked[48] = extractBits(val_9, 0u, 6u);\n unpacked[49] = extractBits(val_9, 6u, 6u);\n unpacked[50] = extractBits(val_9, 12u, 6u);\n unpacked[51] = extractBits(val_9, 18u, 6u);\n unpacked[52] = extractBits(val_9, 24u, 6u);\n unpacked[53] = extractBits(val_9, 30u, 2u);\n\n let val_10 = blocks[packed_offset + 10];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_10, 0u, 4u), 2u, 4u);\n unpacked[54] = extractBits(val_10, 4u, 6u);\n unpacked[55] = extractBits(val_10, 10u, 6u);\n unpacked[56] = extractBits(val_10, 16u, 6u);\n unpacked[57] = extractBits(val_10, 22u, 6u);\n unpacked[58] = extractBits(val_10, 28u, 4u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[58] = insertBits(unpacked[58], extractBits(val_11, 0u, 2u), 4u, 2u);\n unpacked[59] = extractBits(val_11, 2u, 6u);\n unpacked[60] = extractBits(val_11, 8u, 6u);\n unpacked[61] = extractBits(val_11, 14u, 6u);\n unpacked[62] = extractBits(val_11, 20u, 6u);\n unpacked[63] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[64] = extractBits(val_12, 0u, 6u);\n unpacked[65] = extractBits(val_12, 6u, 6u);\n unpacked[66] = extractBits(val_12, 12u, 6u);\n unpacked[67] = extractBits(val_12, 18u, 6u);\n unpacked[68] = extractBits(val_12, 24u, 6u);\n unpacked[69] = extractBits(val_12, 30u, 2u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[69] = insertBits(unpacked[69], extractBits(val_13, 0u, 4u), 2u, 4u);\n unpacked[70] = extractBits(val_13, 4u, 6u);\n unpacked[71] = extractBits(val_13, 10u, 6u);\n unpacked[72] = extractBits(val_13, 16u, 6u);\n unpacked[73] = extractBits(val_13, 22u, 6u);\n unpacked[74] = extractBits(val_13, 28u, 4u);\n\n let val_14 = blocks[packed_offset + 14];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_14, 0u, 2u), 4u, 2u);\n unpacked[75] = extractBits(val_14, 2u, 6u);\n unpacked[76] = extractBits(val_14, 8u, 6u);\n unpacked[77] = extractBits(val_14, 14u, 6u);\n unpacked[78] = extractBits(val_14, 20u, 6u);\n unpacked[79] = extractBits(val_14, 26u, 6u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[80] = extractBits(val_15, 0u, 6u);\n unpacked[81] = extractBits(val_15, 6u, 6u);\n unpacked[82] = extractBits(val_15, 12u, 6u);\n unpacked[83] = extractBits(val_15, 18u, 6u);\n unpacked[84] = extractBits(val_15, 24u, 6u);\n unpacked[85] = extractBits(val_15, 30u, 2u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_16, 0u, 4u), 2u, 4u);\n unpacked[86] = extractBits(val_16, 4u, 6u);\n unpacked[87] = extractBits(val_16, 10u, 6u);\n unpacked[88] = extractBits(val_16, 16u, 6u);\n unpacked[89] = extractBits(val_16, 22u, 6u);\n unpacked[90] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[90] = insertBits(unpacked[90], extractBits(val_17, 0u, 2u), 4u, 2u);\n unpacked[91] = extractBits(val_17, 2u, 6u);\n unpacked[92] = extractBits(val_17, 8u, 6u);\n unpacked[93] = extractBits(val_17, 14u, 6u);\n unpacked[94] = extractBits(val_17, 20u, 6u);\n unpacked[95] = extractBits(val_17, 26u, 6u);\n\n let val_18 = blocks[packed_offset + 18];\n unpacked[96] = extractBits(val_18, 0u, 6u);\n unpacked[97] = extractBits(val_18, 6u, 6u);\n unpacked[98] = extractBits(val_18, 12u, 6u);\n unpacked[99] = extractBits(val_18, 18u, 6u);\n unpacked[100] = extractBits(val_18, 24u, 6u);\n unpacked[101] = extractBits(val_18, 30u, 2u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[101] = insertBits(unpacked[101], extractBits(val_19, 0u, 4u), 2u, 4u);\n unpacked[102] = extractBits(val_19, 4u, 6u);\n unpacked[103] = extractBits(val_19, 10u, 6u);\n unpacked[104] = extractBits(val_19, 16u, 6u);\n unpacked[105] = extractBits(val_19, 22u, 6u);\n unpacked[106] = extractBits(val_19, 28u, 4u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_20, 0u, 2u), 4u, 2u);\n unpacked[107] = extractBits(val_20, 2u, 6u);\n unpacked[108] = extractBits(val_20, 8u, 6u);\n unpacked[109] = extractBits(val_20, 14u, 6u);\n unpacked[110] = extractBits(val_20, 20u, 6u);\n unpacked[111] = extractBits(val_20, 26u, 6u);\n\n let val_21 = blocks[packed_offset + 21];\n unpacked[112] = extractBits(val_21, 0u, 6u);\n unpacked[113] = extractBits(val_21, 6u, 6u);\n unpacked[114] = extractBits(val_21, 12u, 6u);\n unpacked[115] = extractBits(val_21, 18u, 6u);\n unpacked[116] = extractBits(val_21, 24u, 6u);\n unpacked[117] = extractBits(val_21, 30u, 2u);\n\n let val_22 = blocks[packed_offset + 22];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_22, 0u, 4u), 2u, 4u);\n unpacked[118] = extractBits(val_22, 4u, 6u);\n unpacked[119] = extractBits(val_22, 10u, 6u);\n unpacked[120] = extractBits(val_22, 16u, 6u);\n unpacked[121] = extractBits(val_22, 22u, 6u);\n unpacked[122] = extractBits(val_22, 28u, 4u);\n\n let val_23 = blocks[packed_offset + 23];\n unpacked[122] = insertBits(unpacked[122], extractBits(val_23, 0u, 2u), 4u, 2u);\n unpacked[123] = extractBits(val_23, 2u, 6u);\n unpacked[124] = extractBits(val_23, 8u, 6u);\n unpacked[125] = extractBits(val_23, 14u, 6u);\n unpacked[126] = extractBits(val_23, 20u, 6u);\n unpacked[127] = extractBits(val_23, 26u, 6u);\n}\n";var unpackBlock128BitDepth7="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_7(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 7u);\n unpacked[1] = extractBits(val_0, 7u, 7u);\n unpacked[2] = extractBits(val_0, 14u, 7u);\n unpacked[3] = extractBits(val_0, 21u, 7u);\n unpacked[4] = extractBits(val_0, 28u, 4u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[4] = insertBits(unpacked[4], extractBits(val_1, 0u, 3u), 4u, 3u);\n unpacked[5] = extractBits(val_1, 3u, 7u);\n unpacked[6] = extractBits(val_1, 10u, 7u);\n unpacked[7] = extractBits(val_1, 17u, 7u);\n unpacked[8] = extractBits(val_1, 24u, 7u);\n unpacked[9] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[9] = insertBits(unpacked[9], extractBits(val_2, 0u, 6u), 1u, 6u);\n unpacked[10] = extractBits(val_2, 6u, 7u);\n unpacked[11] = extractBits(val_2, 13u, 7u);\n unpacked[12] = extractBits(val_2, 20u, 7u);\n unpacked[13] = extractBits(val_2, 27u, 5u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[13] = insertBits(unpacked[13], extractBits(val_3, 0u, 2u), 5u, 2u);\n unpacked[14] = extractBits(val_3, 2u, 7u);\n unpacked[15] = extractBits(val_3, 9u, 7u);\n unpacked[16] = extractBits(val_3, 16u, 7u);\n unpacked[17] = extractBits(val_3, 23u, 7u);\n unpacked[18] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[18] = insertBits(unpacked[18], extractBits(val_4, 0u, 5u), 2u, 5u);\n unpacked[19] = extractBits(val_4, 5u, 7u);\n unpacked[20] = extractBits(val_4, 12u, 7u);\n unpacked[21] = extractBits(val_4, 19u, 7u);\n unpacked[22] = extractBits(val_4, 26u, 6u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[22] = insertBits(unpacked[22], extractBits(val_5, 0u, 1u), 6u, 1u);\n unpacked[23] = extractBits(val_5, 1u, 7u);\n unpacked[24] = extractBits(val_5, 8u, 7u);\n unpacked[25] = extractBits(val_5, 15u, 7u);\n unpacked[26] = extractBits(val_5, 22u, 7u);\n unpacked[27] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[27] = insertBits(unpacked[27], extractBits(val_6, 0u, 4u), 3u, 4u);\n unpacked[28] = extractBits(val_6, 4u, 7u);\n unpacked[29] = extractBits(val_6, 11u, 7u);\n unpacked[30] = extractBits(val_6, 18u, 7u);\n unpacked[31] = extractBits(val_6, 25u, 7u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[32] = extractBits(val_7, 0u, 7u);\n unpacked[33] = extractBits(val_7, 7u, 7u);\n unpacked[34] = extractBits(val_7, 14u, 7u);\n unpacked[35] = extractBits(val_7, 21u, 7u);\n unpacked[36] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[36] = insertBits(unpacked[36], extractBits(val_8, 0u, 3u), 4u, 3u);\n unpacked[37] = extractBits(val_8, 3u, 7u);\n unpacked[38] = extractBits(val_8, 10u, 7u);\n unpacked[39] = extractBits(val_8, 17u, 7u);\n unpacked[40] = extractBits(val_8, 24u, 7u);\n unpacked[41] = extractBits(val_8, 31u, 1u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[41] = insertBits(unpacked[41], extractBits(val_9, 0u, 6u), 1u, 6u);\n unpacked[42] = extractBits(val_9, 6u, 7u);\n unpacked[43] = extractBits(val_9, 13u, 7u);\n unpacked[44] = extractBits(val_9, 20u, 7u);\n unpacked[45] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[45] = insertBits(unpacked[45], extractBits(val_10, 0u, 2u), 5u, 2u);\n unpacked[46] = extractBits(val_10, 2u, 7u);\n unpacked[47] = extractBits(val_10, 9u, 7u);\n unpacked[48] = extractBits(val_10, 16u, 7u);\n unpacked[49] = extractBits(val_10, 23u, 7u);\n unpacked[50] = extractBits(val_10, 30u, 2u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[50] = insertBits(unpacked[50], extractBits(val_11, 0u, 5u), 2u, 5u);\n unpacked[51] = extractBits(val_11, 5u, 7u);\n unpacked[52] = extractBits(val_11, 12u, 7u);\n unpacked[53] = extractBits(val_11, 19u, 7u);\n unpacked[54] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[54] = insertBits(unpacked[54], extractBits(val_12, 0u, 1u), 6u, 1u);\n unpacked[55] = extractBits(val_12, 1u, 7u);\n unpacked[56] = extractBits(val_12, 8u, 7u);\n unpacked[57] = extractBits(val_12, 15u, 7u);\n unpacked[58] = extractBits(val_12, 22u, 7u);\n unpacked[59] = extractBits(val_12, 29u, 3u);\n \n let val_13 = blocks[packed_offset + 13];\n unpacked[59] = insertBits(unpacked[59], extractBits(val_13, 0u, 4u), 3u, 4u);\n unpacked[60] = extractBits(val_13, 4u, 7u);\n unpacked[61] = extractBits(val_13, 11u, 7u);\n unpacked[62] = extractBits(val_13, 18u, 7u);\n unpacked[63] = extractBits(val_13, 25u, 7u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[64] = extractBits(val_14, 0u, 7u);\n unpacked[65] = extractBits(val_14, 7u, 7u);\n unpacked[66] = extractBits(val_14, 14u, 7u);\n unpacked[67] = extractBits(val_14, 21u, 7u);\n unpacked[68] = extractBits(val_14, 28u, 4u);\n \n let val_15 = blocks[packed_offset + 15];\n unpacked[68] = insertBits(unpacked[68], extractBits(val_15, 0u, 3u), 4u, 3u);\n unpacked[69] = extractBits(val_15, 3u, 7u);\n unpacked[70] = extractBits(val_15, 10u, 7u);\n unpacked[71] = extractBits(val_15, 17u, 7u);\n unpacked[72] = extractBits(val_15, 24u, 7u);\n unpacked[73] = extractBits(val_15, 31u, 1u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[73] = insertBits(unpacked[73], extractBits(val_16, 0u, 6u), 1u, 6u);\n unpacked[74] = extractBits(val_16, 6u, 7u);\n unpacked[75] = extractBits(val_16, 13u, 7u);\n unpacked[76] = extractBits(val_16, 20u, 7u);\n unpacked[77] = extractBits(val_16, 27u, 5u);\n \n let val_17 = blocks[packed_offset + 17];\n unpacked[77] = insertBits(unpacked[77], extractBits(val_17, 0u, 2u), 5u, 2u);\n unpacked[78] = extractBits(val_17, 2u, 7u);\n unpacked[79] = extractBits(val_17, 9u, 7u);\n unpacked[80] = extractBits(val_17, 16u, 7u);\n unpacked[81] = extractBits(val_17, 23u, 7u);\n unpacked[82] = extractBits(val_17, 30u, 2u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[82] = insertBits(unpacked[82], extractBits(val_18, 0u, 5u), 2u, 5u);\n unpacked[83] = extractBits(val_18, 5u, 7u);\n unpacked[84] = extractBits(val_18, 12u, 7u);\n unpacked[85] = extractBits(val_18, 19u, 7u);\n unpacked[86] = extractBits(val_18, 26u, 6u);\n \n let val_19 = blocks[packed_offset + 19];\n unpacked[86] = insertBits(unpacked[86], extractBits(val_19, 0u, 1u), 6u, 1u);\n unpacked[87] = extractBits(val_19, 1u, 7u);\n unpacked[88] = extractBits(val_19, 8u, 7u);\n unpacked[89] = extractBits(val_19, 15u, 7u);\n unpacked[90] = extractBits(val_19, 22u, 7u);\n unpacked[91] = extractBits(val_19, 29u, 3u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[91] = insertBits(unpacked[91], extractBits(val_20, 0u, 4u), 3u, 4u);\n unpacked[92] = extractBits(val_20, 4u, 7u);\n unpacked[93] = extractBits(val_20, 11u, 7u);\n unpacked[94] = extractBits(val_20, 18u, 7u);\n unpacked[95] = extractBits(val_20, 25u, 7u);\n \n let val_21 = blocks[packed_offset + 21];\n unpacked[96] = extractBits(val_21, 0u, 7u);\n unpacked[97] = extractBits(val_21, 7u, 7u);\n unpacked[98] = extractBits(val_21, 14u, 7u);\n unpacked[99] = extractBits(val_21, 21u, 7u);\n unpacked[100] = extractBits(val_21, 28u, 4u);\n \n let val_22 = blocks[packed_offset + 22];\n unpacked[100] = insertBits(unpacked[100], extractBits(val_22, 0u, 3u), 4u, 3u);\n unpacked[101] = extractBits(val_22, 3u, 7u);\n unpacked[102] = extractBits(val_22, 10u, 7u);\n unpacked[103] = extractBits(val_22, 17u, 7u);\n unpacked[104] = extractBits(val_22, 24u, 7u);\n unpacked[105] = extractBits(val_22, 31u, 1u);\n \n let val_23 = blocks[packed_offset + 23];\n unpacked[105] = insertBits(unpacked[105], extractBits(val_23, 0u, 6u), 1u, 6u);\n unpacked[106] = extractBits(val_23, 6u, 7u);\n unpacked[107] = extractBits(val_23, 13u, 7u);\n unpacked[108] = extractBits(val_23, 20u, 7u);\n unpacked[109] = extractBits(val_23, 27u, 5u);\n \n let val_24 = blocks[packed_offset + 24];\n unpacked[109] = insertBits(unpacked[109], extractBits(val_24, 0u, 2u), 5u, 2u);\n unpacked[110] = extractBits(val_24, 2u, 7u);\n unpacked[111] = extractBits(val_24, 9u, 7u);\n unpacked[112] = extractBits(val_24, 16u, 7u);\n unpacked[113] = extractBits(val_24, 23u, 7u);\n unpacked[114] = extractBits(val_24, 30u, 2u);\n \n let val_25 = blocks[packed_offset + 25];\n unpacked[114] = insertBits(unpacked[114], extractBits(val_25, 0u, 5u), 2u, 5u);\n unpacked[115] = extractBits(val_25, 5u, 7u);\n unpacked[116] = extractBits(val_25, 12u, 7u);\n unpacked[117] = extractBits(val_25, 19u, 7u);\n unpacked[118] = extractBits(val_25, 26u, 6u);\n \n let val_26 = blocks[packed_offset + 26];\n unpacked[118] = insertBits(unpacked[118], extractBits(val_26, 0u, 1u), 6u, 1u);\n unpacked[119] = extractBits(val_26, 1u, 7u);\n unpacked[120] = extractBits(val_26, 8u, 7u);\n unpacked[121] = extractBits(val_26, 15u, 7u);\n unpacked[122] = extractBits(val_26, 22u, 7u);\n unpacked[123] = extractBits(val_26, 29u, 3u);\n \n let val_27 = blocks[packed_offset + 27];\n unpacked[123] = insertBits(unpacked[123], extractBits(val_27, 0u, 4u), 3u, 4u);\n unpacked[124] = extractBits(val_27, 4u, 7u);\n unpacked[125] = extractBits(val_27, 11u, 7u);\n unpacked[126] = extractBits(val_27, 18u, 7u);\n unpacked[127] = extractBits(val_27, 25u, 7u); \n}\n";var fromFP510Function="\n\nconst exponents: array = array(\n 2.9103830456733704e-11, \n 5.820766091346741e-11, \n 1.1641532182693481e-10, \n 2.3283064365386963e-10,\n 4.656612873077393e-10, \n 9.313225746154785e-10, \n 1.862645149230957e-09, \n 3.725290298461914e-09,\n 7.450580596923828e-09, \n 1.4901161193847656e-08, \n 2.9802322387695312e-08, \n 5.960464477539063e-08,\n 1.1920928955078125e-07, \n 2.384185791015625e-07, \n 4.76837158203125e-07, \n 9.5367431640625e-07,\n 1.9073486328125e-06, \n 3.814697265625e-06, \n 7.62939453125e-06, \n 1.52587890625e-05, \n 3.0517578125e-05,\n 6.103515625e-05, \n 0.0001220703125, \n 0.000244140625, \n 0.00048828125, \n 0.0009765625, \n 0.001953125, \n 0.00390625,\n 0.0078125, \n 0.015625, \n 0.03125, \n 0.0625);\n\nfn from_fp510(x: u32) -> f32 {\n let exponent = f32(exponents[extractBits(x, 10u, 5u)]); \n let fractional = f32(extractBits(x, 0u, 10u)); \n let abs = exponent * fractional;\n return abs * (1.0 - (2.0 * f32(extractBits(x, 15u, 1u))));\n}\n";var preprocessBlocks3BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth3,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 12u); \n unpack_block_128_bit_depth_3(blocks_start); \n \n let b01: u32 = blocks_start;\n let b2: u32 = blocks_start + 8u;\n \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n\n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), (r * 16u) % 32u, 16u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), (r * 8u) % 32u, 8u); \n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n \n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), ((r * 16u) % 32u) + (2u * c), 2u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), ((r * 8u) % 32u) + c, 1u); \n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks5BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth5,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n\n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 20u);\n unpack_block_128_bit_depth_5(blocks_start); \n \n let b03: u32 = blocks_start;\n let b4: u32 = blocks_start + 16u;\n\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), (r * 8u) % 32u, 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n } \n}\n\n").concat(emptyShader);var preprocessBlocks6BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth6,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 24u);\n unpack_block_128_bit_depth_6(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n }\n\n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks7BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth7,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 28u);\n unpack_block_128_bit_depth_7(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u;\n let b6: u32 = blocks_start + 24u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u), 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessShaderSources={3:preprocessBlocks3BitShaderSource,5:preprocessBlocks5BitShaderSource,6:preprocessBlocks6BitShaderSource,7:preprocessBlocks7BitShaderSource};var preprocessShaderNames={3:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_3bit_shader",5:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_5bit_shader",6:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_6bit_shader",7:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_7bit_shader"};var BM=8;var BN=32;var TM=2;var TN=16;var TC=rowsPerBlock*BM*BN/(TM*TN);var constantSnippet="\nconst BM = ".concat(BM,"u;\nconst BN = ").concat(BN,"u;\n\nconst TM = ").concat(TM,"u;\nconst TN = ").concat(TN,"u;\n\nconst TC = ").concat(TC,"u;\n\nconst ROW_PER_BLOCK = ").concat(rowsPerBlock,"u;\nconst COL_PER_BLOCK = ").concat(columnsPerBlock,"u;\n\nconst VEC_COL_PER_BLOCK = COL_PER_BLOCK / 4u;\n\nconst block_size: u32 = (COL_PER_BLOCK * ROW_PER_BLOCK * bit_depth) / 32u;\n\n");var forwardMultipleInputArgsSnippet="\nstruct argsStruct {\n n: u32,\n m: u32,\n total_nbc: u32,\n k: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array;\n";var forwardMultipleSharedPrivateMemSnippet="\nvar shared_x: array, BN * VEC_COL_PER_BLOCK>;\nvar shared_ab: array;\nvar shared_w: array, BM * ROW_PER_BLOCK * VEC_COL_PER_BLOCK>;\n\nvar local_x: array, TN * VEC_COL_PER_BLOCK>;\nvar local_x_sums: array;\nvar local_results: array;\n";var forwardMultipleLocalVarSnippet="\n let tid = local_id.x;\n let bm_idx = workgroup_id.x;\n let bn_idx = workgroup_id.y;\n\n let local_bm_idx = bm_idx * BM;\n let local_bn_idx = bn_idx * BN;\n \n let n_idx = tid % (BN / TN);\n let k_idx = tid / (BN / TN) / (BM * ROW_PER_BLOCK / TM);\n let m_idx = tid / (BN / TN) % (BM * ROW_PER_BLOCK / TM);\n";var forwardMultipleLoadW1Bit="\n let b0 = blocks[src + (row / 4u)];\n\n let b0_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b0_offset = b0_offset_base + (c * 4u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b0, b0_offset, 1u)), \n f32(extractBits(b0, b0_offset + 1, 1u)),\n f32(extractBits(b0, b0_offset + 2, 1u)),\n f32(extractBits(b0, b0_offset + 3, 1u)));\n }\n";var forwardMultipleLoadW2Bit="\n let b01 = blocks[src + (row / 2u)];\n \n let b01_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b01_offset = b01_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(extractBits(b01, b01_offset, 2u)), \n f32(extractBits(b01, b01_offset + 2, 2u)),\n f32(extractBits(b01, b01_offset + 4, 2u)),\n f32(extractBits(b01, b01_offset + 6, 2u)));\n } \n";var forwardMultipleLoadW3Bit="\n let b01 = blocks[src + (row / 2u)];\n let b2 = blocks[src + 8u + (row / 4u)]; \n\n let b01_offset_base = (row * 16u) % 32u;\n let b2_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b01_offset = b01_offset_base + (c * 8u);\n let b2_offset = b2_offset_base + (c * 4u);\n\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b01, b01_offset, 2u), extractBits(b2, b2_offset, 1u), 2u, 1u)), \n f32(insertBits(extractBits(b01, b01_offset + 2, 2u), extractBits(b2, b2_offset + 1, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 4, 2u), extractBits(b2, b2_offset + 2, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 6, 2u), extractBits(b2, b2_offset + 3, 1u), 2u, 1u))); \n }\n";var forwardMultipleLoadW4Bit="\n let b03 = blocks[src + row];\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b03, b03_offset, 4u)), \n f32(extractBits(b03, b03_offset + 4, 4u)),\n f32(extractBits(b03, b03_offset + 8, 4u)),\n f32(extractBits(b03, b03_offset + 12, 4u)));\n }\n";var forwardMultipleLoadW5Bit="\n let b03 = blocks[src + row];\n let b4 = blocks[src + 16u + (row / 4u)];\n \n let b4_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b4_offset = b4_offset_base + (c * 4u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b4, b4_offset, 1u), 4u, 1u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b4, b4_offset + 1, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b4, b4_offset + 2, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b4, b4_offset + 3, 1u), 4u, 1u)));\n }\n";var forwardMultipleLoadW6Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u)));\n }\n";var forwardMultipleLoadW7Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n let b6 = blocks[src + 24u + (row / 4u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n let b6_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n let b6_offset = b6_offset_base + (c * 4u);\n \n shared_w[dst + c] = vec4(\n f32(insertBits(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u), extractBits(b6, b6_offset, 1u), 6u, 1u)), \n f32(insertBits(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u), extractBits(b6, b6_offset + 1, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u), extractBits(b6, b6_offset + 2, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u), extractBits(b6, b6_offset + 3, 1u), 6u, 1u)));\n }\n";var forwardMultipleLoadW8Bit="\n let b07_offset = src + (row * 2);\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b07 = blocks[b07_offset + c];\n shared_w[dst + c] = vec4(\n f32(extractBits(b07, 0u, 8u)), \n f32(extractBits(b07, 8u, 8u)),\n f32(extractBits(b07, 16u, 8u)),\n f32(extractBits(b07, 24u, 8u)));\n }\n";var forwardLoadWBitDepthSnippets={1:forwardMultipleLoadW1Bit,2:forwardMultipleLoadW2Bit,3:forwardMultipleLoadW3Bit,4:forwardMultipleLoadW4Bit,5:forwardMultipleLoadW5Bit,6:forwardMultipleLoadW6Bit,7:forwardMultipleLoadW7Bit,8:forwardMultipleLoadW8Bit};var forwardMultipleLoadXSnippet="\n let total_work_x = VEC_COL_PER_BLOCK * BN;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_x, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_x) { \n let n_load_idx = local_bn_idx + idx / VEC_COL_PER_BLOCK;\n let inner_idx = idx % VEC_COL_PER_BLOCK;\n \n if (bk_idx < args.k && n_load_idx < args.n) { \n let x_idx = (args.x_offset / 4u) + ((bk_idx * args.n + n_load_idx) * VEC_COL_PER_BLOCK + inner_idx); \n shared_x[idx] = x[x_idx];\n } else {\n shared_x[idx] = vec4(0.0);\n }\n }\n }\n";var forwardMultipleLoadABSnippet="\n let total_work_ab = BM * 2;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_ab, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_ab) {\n let m_load_idx = local_bm_idx + idx / 2; \n let inner_idx = (idx % 2) * 16u;\n \n if (m_load_idx < args.m && bk_idx < args.k) {\n let ab_bits = extractBits(metas[args.metas_offset + (m_load_idx * args.k + bk_idx)], inner_idx, 16u);\n shared_ab[idx] = from_fp510(ab_bits); \n } else {\n shared_ab[idx] = 0.0;\n }\n }\n }\n";var forwardMultipleLoadWSnippet=function forwardMultipleLoadWSnippet(bitDepth){return"\n let total_work_w = BM * ROW_PER_BLOCK;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_w, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_w) {\n let m_load_idx = local_bm_idx + idx / ROW_PER_BLOCK;\n let row = idx % ROW_PER_BLOCK;\n let dst = idx * VEC_COL_PER_BLOCK;\n\n if (m_load_idx < args.m) {\n let src = args.blocks_offset + (m_load_idx * args.k + bk_idx) * block_size;\n ".concat(forwardLoadWBitDepthSnippets[bitDepth],"\n } else { \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n shared_w[dst + c] = vec4(0.0);\n }\n }\n }\n }\n")};var forwardMultipleCopyXSnippet="\nfor (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n var x_sum_vec = vec4(0.0); \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n let shared_x_idx = (n_idx * TN + tn_idx) * VEC_COL_PER_BLOCK + (k_idx * VEC_COL_PER_BLOCK);\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n local_x[local_x_idx + c] = shared_x[shared_x_idx + c];\n x_sum_vec += local_x[local_x_idx + c];\n }\n local_x_sums[tn_idx] = x_sum_vec.x + x_sum_vec.y + x_sum_vec.z + x_sum_vec.w; \n}\n";var forwardMultipleComputeResultsSnippet="\n for (var tm_idx = 0u; tm_idx < TM; tm_idx++) { \n let shared_ab_idx = ((m_idx * TM + tm_idx) / ROW_PER_BLOCK + k_idx) * 2;\n let alpha = shared_ab[shared_ab_idx];\n let beta = shared_ab[shared_ab_idx + 1]; \n let shared_w_idx = ((m_idx * TM + tm_idx) + k_idx) * VEC_COL_PER_BLOCK;\n \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n \n var swx_vec = vec4(0.0); \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n swx_vec += shared_w[shared_w_idx + c] * local_x[local_x_idx + c];\n }\n let swx = swx_vec.x + swx_vec.y + swx_vec.z + swx_vec.w;\n \n let kappa = alpha * local_x_sums[tn_idx]; \n let results_idx = tm_idx * TN + tn_idx;\n local_results[results_idx] += kappa + (beta * swx);\n }\n }\n";var forwardMultipleWriteResultsSnippet="\nfor (var tm_idx = 0u; tm_idx < TM; tm_idx++) {\n let row = local_bm_idx * ROW_PER_BLOCK + (m_idx * TM + tm_idx); \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let col = local_bn_idx + (n_idx * TN + tn_idx);\n if (row < args.m * ROW_PER_BLOCK && col < args.n) {\n let y_idx = args.y_offset + ((row / ROW_PER_BLOCK) * args.n + col) * ROW_PER_BLOCK + (row % ROW_PER_BLOCK);\n let results_idx = tm_idx * TN + tn_idx;\n \n y[y_idx] += local_results[results_idx];\n }\n }\n}\n";var forwardMultipleShaderSources=function forwardMultipleShaderSources(bitDepth){return"\n\n".concat(forwardMultipleInputArgsSnippet,"\n\n").concat(constantSnippet,"\n\n").concat(forwardMultipleSharedPrivateMemSnippet,"\n\n").concat(fromFP510Function,"\n\n").concat(dividePadFunction,"\n\nconst bit_depth: u32 = ").concat(bitDepth,"u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n \n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n ").concat(forwardMultipleLocalVarSnippet,"\n \n for (var bk_idx = 0u; bk_idx < args.k; bk_idx++) { \n ").concat(forwardMultipleLoadXSnippet,"\n ").concat(forwardMultipleLoadABSnippet," \n ").concat(forwardMultipleLoadWSnippet(bitDepth)," \n workgroupBarrier();\n \n ").concat(forwardMultipleCopyXSnippet,"\n ").concat(forwardMultipleComputeResultsSnippet,"\n workgroupBarrier();\n }\n \n ").concat(forwardMultipleWriteResultsSnippet,"\n}\n\n").concat(emptyShader,"\n")};var forwardShuffleXShaderSource="\nstruct argsStruct {\n n: u32,\n shape1: u32,\n x_offset: u32,\n indices_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar indices: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape1) {\n return;\n } \n\n let b = global_id.x;\n let i = global_id.y;\n \n let c = i / 8u;\n let j = i % 8u;\n y[((c * args.n) + b) * 8 + j] = x[args.x_offset + (b * args.shape1) + indices[args.indices_offset + i]];\n}\n\n".concat(emptyShader,"\n");var forwardSingleReduceYShaderSource="\nstruct argsStruct {\n nvr: u32,\n nbc: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar y: array>;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x > args.nvr) {\n return;\n }\n\n let x_start = global_id.x * args.nbc;\n var sum: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n for (var i = 0u; i < args.nbc; i++) {\n sum += x[x_start + i]; \n }\n y[global_id.x] += sum;\n}\n\n".concat(emptyShader);var forwardShuffleYShaderSource="\nstruct argsStruct {\n n: u32,\n shape0: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape0) {\n return;\n } \n \n let b = global_id.x;\n let i = global_id.y;\n \n let r = i / 16u;\n let j = i % 16u;\n y[(b * args.shape0) + (r * 16) + j] = x[(((r * args.n) + b) * 16) + j];\n}\n\n".concat(emptyShader);var addBiasShaderSource="\nstruct argsStruct {\n dimension: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar bias: array;\n\n@group(0) @binding(2)\nvar y: array;\n\n".concat(fromFP510Function,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n y[(global_id.x * args.dimension) + global_id.y] += bias[global_id.y];\n}\n\n").concat(emptyShader);var forwardSingleBitDepth1ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 4u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b0_start = row_blocks_start + br_offset + (bc * block_size);\n var b0_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b0 = blocks[b0_start];\n \n let w0_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w0_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w0_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w0_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 8u;\n \n let w1_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w1_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w1_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w1_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 16u;\n \n let w2_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w2_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w2_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w2_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 24u;\n \n let w3_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w3_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w3_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w3_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth2ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 8u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b01_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b01 = blocks[b01_start];\n \n let w0_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w0_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w0_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w0_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w1_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w1_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w1_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w1_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u; \n b01 = blocks[b01_start + 1u];\n \n let w2_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w2_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w2_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w2_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w3_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w3_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w3_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w3_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth3ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 12u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id : vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n\n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b2_start = row_blocks_start + br_offset + (bc * block_size) + 8u;\n var b01_offset = 0u;\n var b2_offset = 0u;\n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) { \n \n var b01 = blocks[b01_start];\n var b2 = blocks[b2_start];\n \n var b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n var b2_bit = extractBits(b2, b2_offset + j, 1u);\n let w0_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 8u;\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w1_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 16u; \n b01 = blocks[b01_start + 1u];\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w2_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 24u; \n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w3_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 0u; \n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n \n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth4ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 16u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start]; \n \n let w0_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w0_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w0_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w0_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 1];\n \n let w1_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w1_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w1_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w1_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 2];\n \n let w2_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w2_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w2_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w2_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 3];\n \n let w3_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w3_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w3_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w3_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth5ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 20u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b4_start = row_blocks_start + br_offset + (bc * block_size) + 16u;\n \n var b4_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b4 = blocks[b4_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w0_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 1];\n b4_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w1_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 2];\n b4_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w2_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 3];\n b4_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w3_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b4_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth6ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 24u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n \n var b45_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w0_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w0_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w0_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w0_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w1_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w1_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w1_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w1_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u)); \n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w2_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w2_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w2_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w2_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w3_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w3_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w3_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w3_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b45_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth7ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 28u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n var b6_start = row_blocks_start + br_offset + (bc * block_size) + 24u;\n \n var b45_offset = 0u;\n var b6_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n var b6 = blocks[b6_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n var b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w0_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w0_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w0_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w0_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n b6_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w1_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w1_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w1_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w1_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n b6_offset = 16u;\n\n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w2_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w2_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w2_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w2_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n b6_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w3_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w3_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w3_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w3_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b45_offset = 0u;\n b6_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth8ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 32u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b07_start = row_blocks_start + (br_offset * 8u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < 2; j++) {\n \n var b07 = blocks[b07_start + j];\n \n let w0_0 = f32(extractBits(b07, 0u, 8u)); \n let w0_1 = f32(extractBits(b07, 8u, 8u)); \n let w0_2 = f32(extractBits(b07, 16u, 8u));\n let w0_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 2 + j];\n \n let w1_0 = f32(extractBits(b07, 0u, 8u)); \n let w1_1 = f32(extractBits(b07, 8u, 8u)); \n let w1_2 = f32(extractBits(b07, 16u, 8u));\n let w1_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 4 + j];\n \n let w2_0 = f32(extractBits(b07, 0u, 8u)); \n let w2_1 = f32(extractBits(b07, 8u, 8u)); \n let w2_2 = f32(extractBits(b07, 16u, 8u));\n let w2_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 6 + j];\n \n let w3_0 = f32(extractBits(b07, 0u, 8u)); \n let w3_1 = f32(extractBits(b07, 8u, 8u)); \n let w3_2 = f32(extractBits(b07, 16u, 8u));\n let w3_3 = f32(extractBits(b07, 24u, 8u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_vec = x[x_start + j];\n res[j] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleShaderSources={1:forwardSingleBitDepth1ShaderSource,2:forwardSingleBitDepth2ShaderSource,3:forwardSingleBitDepth3ShaderSource,4:forwardSingleBitDepth4ShaderSource,5:forwardSingleBitDepth5ShaderSource,6:forwardSingleBitDepth6ShaderSource,7:forwardSingleBitDepth7ShaderSource,8:forwardSingleBitDepth8ShaderSource};var forwardSingleShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_8_shader"};var forwardShaderSources={1:forwardMultipleShaderSources(1),2:forwardMultipleShaderSources(2),3:forwardMultipleShaderSources(3),4:forwardMultipleShaderSources(4),5:forwardMultipleShaderSources(5),6:forwardMultipleShaderSources(6),7:forwardMultipleShaderSources(7),8:forwardMultipleShaderSources(8)};var forwardShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_8_shader"};var forwardShuffleXShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_x_shader";var forwardShuffleYShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_y_shader";var addBiasShaderName="pv_picollm_weight_block_mixed_16x8_add_bias_shader";var forwardSingleReduceYShaderName="pv_picollm_weight_block_mixed_16x8_forward_single_reduce_y_shader";var _weightBlockMixed16x;var loadPreprocessBlocksShader=function loadPreprocessBlocksShader(device,bitDepth){var bindGroupLayout=device.createBindGroupLayout({label:"weight preprocess blocks ".concat(bitDepth," bind group layout"),entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight preprocess blocks ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight preprocess blocks ".concat(bitDepth," shader module"),code:preprocessShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight preprocess blocks ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:preprocessDim,workgroup_size_y:preprocessDim}}});return{computePipeline:computePipeline}};var loadForwardShuffleXShader=function loadForwardShuffleXShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle x bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle x pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle x shader module",code:forwardShuffleXShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle x pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_y:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardSingleReduceYShader=function loadForwardSingleReduceYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight single reduce y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight single reduce y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight single reduce y shader module",code:forwardSingleReduceYShaderSource});var computePipeline=device.createComputePipeline({label:"weight single reduce y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardShuffleYShader=function loadForwardShuffleYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle y shader module",code:forwardShuffleYShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var loadForwardSingleShader=function loadForwardSingleShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward single ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward single ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward single ".concat(bitDepth," shader module"),code:forwardSingleShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward single ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:weightBlockSize,workgroup_size_y:1}}});return{computePipeline:computePipeline}};var loadForwardShader=function loadForwardShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward multi ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward multi ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward multi ".concat(bitDepth," shader module"),code:forwardShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward multi ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:TC}}});return{computePipeline:computePipeline}};var loadAddBiasShader=function loadAddBiasShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight add bias bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight add bias pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight add bias shader module",code:addBiasShaderSource});var computePipeline=device.createComputePipeline({label:"weight add bias pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var weightBlockMixed16x8Shaders=(_weightBlockMixed16x={},_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,preprocessShaderNames[3],function(device){return loadPreprocessBlocksShader(device,3)}),preprocessShaderNames[5],function(device){return loadPreprocessBlocksShader(device,5)}),preprocessShaderNames[6],function(device){return loadPreprocessBlocksShader(device,6)}),preprocessShaderNames[7],function(device){return loadPreprocessBlocksShader(device,7)}),forwardShuffleXShaderName,loadForwardShuffleXShader),forwardShuffleYShaderName,loadForwardShuffleYShader),forwardSingleReduceYShaderName,loadForwardSingleReduceYShader),forwardSingleShaderNames[1],function(device){return loadForwardSingleShader(device,1)}),forwardSingleShaderNames[2],function(device){return loadForwardSingleShader(device,2)}),forwardSingleShaderNames[3],function(device){return loadForwardSingleShader(device,3)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardSingleShaderNames[4],function(device){return loadForwardSingleShader(device,4)}),forwardSingleShaderNames[5],function(device){return loadForwardSingleShader(device,5)}),forwardSingleShaderNames[6],function(device){return loadForwardSingleShader(device,6)}),forwardSingleShaderNames[7],function(device){return loadForwardSingleShader(device,7)}),forwardSingleShaderNames[8],function(device){return loadForwardSingleShader(device,8)}),forwardShaderNames[1],function(device){return loadForwardShader(device,1)}),forwardShaderNames[2],function(device){return loadForwardShader(device,2)}),forwardShaderNames[3],function(device){return loadForwardShader(device,3)}),forwardShaderNames[4],function(device){return loadForwardShader(device,4)}),forwardShaderNames[5],function(device){return loadForwardShader(device,5)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardShaderNames[6],function(device){return loadForwardShader(device,6)}),forwardShaderNames[7],function(device){return loadForwardShader(device,7)}),forwardShaderNames[8],function(device){return loadForwardShader(device,8)}),addBiasShaderName,loadAddBiasShader));function ownKeys$1(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread$1(e){for(var r=1;r=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e1&&_args[1]!==undefined?_args[1]:{};time=_args.length>2&&_args[2]!==undefined?_args[2]:5e3;controller=new AbortController;config=_objectSpread(_objectSpread({},options),{},{signal:controller.signal});timeout=setTimeout(function(){controller.abort()},time);_context.next=7;return fetch(uri,config);case 7:response=_context.sent;clearTimeout(timeout);return _context.abrupt("return",response);case 10:case"end":return _context.stop()}},_callee)}));return _fetchWithTimeout.apply(this,arguments)}function open(_x2,_x3){return _open.apply(this,arguments)}function _open(){_open=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(path,mode){var error;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.prev=0;_context2.next=3;return PvFileIDB.open(path,mode);case 3:return _context2.abrupt("return",_context2.sent);case 6:_context2.prev=6;_context2.t0=_context2["catch"](0);if(_context2.t0.name==="IndexedDBNotSupported"){console.warn("IndexedDB is not supported. Fallback to in-memory storage.")}else if(_context2.t0.name!=="FileNotExists"){console.warn("Unable to access IndexedDB (".concat(_context2.t0.toString(),"). Fallback to in-memory storage."))}if(!(typeof WorkerGlobalScope!=="undefined"&&self instanceof WorkerGlobalScope)){_context2.next=16;break}if(!(_context2.t0.name==="FileNotExists")){_context2.next=12;break}throw _context2.t0;case 12:console.error("In-memory storage cannot be used inside a worker.");error=new Error("Failed to start PvFile: ".concat(_context2.t0.toString()));error.name="PvFileNotSupported";throw error;case 16:return _context2.abrupt("return",PvFileMem.open(path,mode));case 17:case"end":return _context2.stop()}},_callee2,null,[[0,6]])}));return _open.apply(this,arguments)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>{if(isFileURI(url)){return new Promise((reject,resolve)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response)}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];if(ENVIRONMENT_IS_PTHREAD){var wasmPromiseResolve;var wasmPromiseReject;var initializedJS=false;function threadPrintErr(...args){var text=args.join(" ");console.error(text)}if(!Module["printErr"])err=threadPrintErr;function threadAlert(...args){var text=args.join(" ");postMessage({cmd:"alert",text:text,threadId:_pthread_self()})}self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>new Promise((resolve,reject)=>{wasmPromiseResolve=module=>{var instance=new WebAssembly.Instance(module,getWasmImports());receiveInstance(instance);resolve()};wasmPromiseReject=reject});self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{var msgData=e["data"];var cmd=msgData["cmd"];if(cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{postMessage({cmd:"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData["handlers"]){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData["wasmMemory"];updateMemoryViews();wasmPromiseResolve(msgData["wasmModule"])}else if(cmd==="run"){__emscripten_thread_init(msgData["pthread_ptr"],0,0,1,0,0);__emscripten_thread_mailbox_await(msgData["pthread_ptr"]);establishStackSpace();PThread.receiveObjectTransfer(msgData);PThread.threadInitTLS();if(!initializedJS){initializedJS=true}try{invokeEntryPoint(msgData["start_routine"],msgData["arg"])}catch(ex){if(ex!="unwind"){throw ex}}}else if(cmd==="cancel"){if(_pthread_self()){__emscripten_thread_exit(-1)}}else if(msgData.target==="setimmediate"){}else if(cmd==="checkMailbox"){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}if(!ENVIRONMENT_IS_PTHREAD){if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:4294967296/65536,shared:true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){err("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)")}throw Error("bad memory")}}updateMemoryViews()}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){var f="pv_orca_pthread.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){assignWasmImports();return{a:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmExports=applySignatureConversions(wasmExports);registerTLSInit(wasmExports["gc"]);wasmTable=wasmExports["Xb"];addOnInit(wasmExports["I"]);wasmModule=module;removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var killThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];delete PThread.pthreads[pthread_ptr];terminateWorker(worker);__emscripten_thread_free_data(pthread_ptr);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0};var cancelThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];worker.postMessage({cmd:"cancel"})};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);var proxyToMainThread=(funcIndex,emAsmAddr,sync,...callArgs)=>{var serializedNumCallArgs=callArgs.length*2;var sp=stackSave();var args=stackAlloc(serializedNumCallArgs*8);var b=args>>>3;for(var i=0;i>>0]=arg}}var rtn=__emscripten_run_on_main_thread_js(funcIndex,emAsmAddr,serializedNumCallArgs,args,sync);stackRestore(sp);return rtn};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))}var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,0,returnCode);_exit(returnCode)}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(ENVIRONMENT_IS_PTHREAD){PThread.initWorker()}else{PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=navigator.hardwareConcurrency;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(()=>{addRunDependency("loading-workers");PThread.loadWasmModuleToAllWorkers(()=>removeRunDependency("loading-workers"))})},initWorker(){noExitRuntime=false},setExitStatus:status=>EXITSTATUS=status,terminateAllThreads__deps:["$terminateWorker"],terminateAllThreads:()=>{for(var worker of PThread.runningWorkers){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.runningWorkers=[];PThread.pthreads=[]},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;__emscripten_thread_free_data(pthread_ptr)},receiveObjectTransfer(data){},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e["data"];var cmd=d["cmd"];if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var targetWorker=PThread.pthreads[d["targetThread"]];if(targetWorker){targetWorker.postMessage(d,d["transferList"])}else{err(`Internal error! Worker sent a message "${cmd}" to target pthread ${d["targetThread"]}, but that thread no longer exists!`)}return}if(cmd==="checkMailbox"){checkMailbox()}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;onFinishedLoading(worker)}else if(cmd==="alert"){alert(`Thread ${d["threadId"]}: ${d["text"]}`)}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="callHandler"){Module[d["handler"]](...d["args"])}else if(cmd){err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:"load",handlers:handlers,wasmMemory:wasmMemory,wasmModule:wasmModule})}),loadWasmModuleToAllWorkers(onMaybeReady){if(ENVIRONMENT_IS_PTHREAD){return onMaybeReady()}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));pthreadPoolReady.then(onMaybeReady)},allocateUnusedWorker(){var worker;var workerOptions={type:"module",name:"em-pthread"};var pthreadMainJs=_scriptName;if(Module["mainScriptUrlOrBlob"]){pthreadMainJs=Module["mainScriptUrlOrBlob"];if(typeof pthreadMainJs!="string"){pthreadMainJs=URL.createObjectURL(pthreadMainJs)}}worker=new Worker(pthreadMainJs,workerOptions);PThread.unusedWorkers.push(worker)},getNewWorker(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var establishStackSpace=()=>{var pthread_ptr=_pthread_self();var stackHigh=GROWABLE_HEAP_U32()[pthread_ptr+52>>>2>>>0];var stackSize=GROWABLE_HEAP_U32()[pthread_ptr+56>>>2>>>0];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)};var invokeEntryPoint=(ptr,arg)=>{runtimeKeepaliveCounter=0;var result=(a1=>dynCall_ii(ptr,a1))(arg);function finish(result){if(keepRuntimeAlive()){PThread.setExitStatus(result)}else{__emscripten_thread_exit(result)}}finish(result)};var noExitRuntime=Module["noExitRuntime"]||true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}function ___pthread_create_js(pthread_ptr,attr,startRoutine,arg){pthread_ptr>>>=0;attr>>>=0;startRoutine>>>=0;arg>>>=0;if(typeof SharedArrayBuffer=="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine:startRoutine,pthread_ptr:pthread_ptr,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function syscallGetVarargI(){var ret=GROWABLE_HEAP_I32()[+SYSCALLS.varargs>>>2>>>0];SYSCALLS.varargs+=4;return ret}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>(view.set(crypto.getRandomValues(new Uint8Array(view.byteLength))),view)}else abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof SharedArrayBuffer?heapOrArray.slice(idx,endPtr):heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>>0)}return{ptr:ptr,allocated:allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;iFS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS:MEMFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,GROWABLE_HEAP_I8(),ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>{ptr>>>=0;return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);GROWABLE_HEAP_I32()[buf>>>2>>>0]=stat.dev;GROWABLE_HEAP_I32()[buf+4>>>2>>>0]=stat.mode;GROWABLE_HEAP_U32()[buf+8>>>2>>>0]=stat.nlink;GROWABLE_HEAP_I32()[buf+12>>>2>>>0]=stat.uid;GROWABLE_HEAP_I32()[buf+16>>>2>>>0]=stat.gid;GROWABLE_HEAP_I32()[buf+20>>>2>>>0]=stat.rdev;HEAP64[buf+24>>>3]=BigInt(stat.size);GROWABLE_HEAP_I32()[buf+32>>>2>>>0]=4096;GROWABLE_HEAP_I32()[buf+36>>>2>>>0]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>>3]=BigInt(Math.floor(atime/1e3));GROWABLE_HEAP_U32()[buf+48>>>2>>>0]=atime%1e3*1e3;HEAP64[buf+56>>>3]=BigInt(Math.floor(mtime/1e3));GROWABLE_HEAP_U32()[buf+64>>>2>>>0]=mtime%1e3*1e3;HEAP64[buf+72>>>3]=BigInt(Math.floor(ctime/1e3));GROWABLE_HEAP_U32()[buf+80>>>2>>>0]=ctime%1e3*1e3;HEAP64[buf+88>>>3]=BigInt(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=GROWABLE_HEAP_U8().slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_openat(dirfd,path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,dirfd,path,flags,varargs);path>>>=0;varargs>>>=0;SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("")};function __emscripten_init_main_thread_js(tb){tb>>>=0;__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB,65536,false);PThread.threadInitTLS()}var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD)__emscripten_thread_exit(EXITSTATUS);else _exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};function __emscripten_thread_mailbox_await(pthread_ptr){pthread_ptr>>>=0;if(typeof Atomics.waitAsync==="function"){var wait=Atomics.waitAsync(GROWABLE_HEAP_I32(),pthread_ptr>>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+128;Atomics.store(GROWABLE_HEAP_I32(),waitingAsync>>>2,1)}}var checkMailbox=()=>{var pthread_ptr=_pthread_self();if(pthread_ptr){__emscripten_thread_mailbox_await(pthread_ptr);callUserCallback(__emscripten_check_mailbox)}};function __emscripten_notify_mailbox_postmessage(targetThreadId,currThreadId,mainThreadId){targetThreadId>>>=0;currThreadId>>>=0;mainThreadId>>>=0;if(targetThreadId==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread:targetThreadId,cmd:"checkMailbox"})}else{var worker=PThread.pthreads[targetThreadId];if(!worker){return}worker.postMessage({cmd:"checkMailbox"})}}var proxiedJSCallArgs=[];function __emscripten_receive_on_main_thread_js(funcIndex,emAsmAddr,callingThread,numCallArgs,args){emAsmAddr>>>=0;callingThread>>>=0;args>>>=0;numCallArgs/=2;proxiedJSCallArgs.length=numCallArgs;var b=args>>>3;for(var i=0;i>>0]}}var func=proxiedFunctionTable[funcIndex];PThread.currentProxiedOperationCallerThread=callingThread;var rtn=func(...proxiedJSCallArgs);PThread.currentProxiedOperationCallerThread=0;return rtn}function __emscripten_thread_cleanup(thread){thread>>>=0;if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:"cleanupThread",thread:thread})}function __emscripten_thread_set_strongref(thread){thread>>>=0}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite);var __tzset_js=function(timezone,daylight,std_name,dst_name){timezone>>>=0;daylight>>>=0;std_name>>>=0;dst_name>>>=0;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);GROWABLE_HEAP_U32()[timezone>>>2>>>0]=stdTimezoneOffset*60;GROWABLE_HEAP_I32()[daylight>>>2>>>0]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}};var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var getHeapMax=()=>4294901760;function _emscripten_get_heap_max(){return getHeapMax()}var _emscripten_get_now;_emscripten_get_now=()=>performance.timeOrigin+performance.now();var _emscripten_num_logical_cores=()=>navigator["hardwareConcurrency"];var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};function _emscripten_resize_heap(requestedSize){requestedSize>>>=0;var oldSize=GROWABLE_HEAP_U8().length;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false}var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>>0]=str.charCodeAt(i)}GROWABLE_HEAP_I8()[buffer>>>0]=0};var _environ_get=function(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(4,0,1,__environ,environ_buf);__environ>>>=0;environ_buf>>>=0;var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;GROWABLE_HEAP_U32()[__environ+i*4>>>2>>>0]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=function(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(5,0,1,penviron_count,penviron_buf_size);penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();GROWABLE_HEAP_U32()[penviron_count>>>2>>>0]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);GROWABLE_HEAP_U32()[penviron_buf_size>>>2>>>0]=bufSize;return 0};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(6,0,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=GROWABLE_HEAP_U32()[iov+4>>>2>>>0];iov+=8;var curr=FS.read(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);GROWABLE_HEAP_U32()[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(8,0,1,fd,offset,whence,newOffset);offset=bigintToI53Checked(offset);newOffset>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=GROWABLE_HEAP_U32()[iov+4>>>2>>>0];iov+=8;var curr=FS.write(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(9,0,1,fd,iov,iovcnt,pnum);iov>>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);GROWABLE_HEAP_U32()[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _pv_console_log_wasm(index){console.log(arrayBufferToStringAtIndex(Module.HEAPU8,index))}var _pv_file_close_wasm=async function(fileAddress,statusAddress){statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{try{const file=await PvFile.getPtr(fileAddress);await file.close();setInt(statusAddress,0)}catch(e){console.error("pvFileCloseWasm",e);setInt(statusAddress,-1)}})};_pv_file_close_wasm.isAsync=true;var _pv_file_open_wasm=async function(fileAddress,pathAddress,modeAddress,statusAddress){pathAddress=unsignedAddress(pathAddress);modeAddress=unsignedAddress(modeAddress);statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{const path=arrayBufferToStringAtIndex(Module.HEAPU8,pathAddress);const mode=arrayBufferToStringAtIndex(Module.HEAPU8,modeAddress);try{const file=await open(path,mode);PvFile.setPtr(fileAddress,file);setInt(statusAddress,0)}catch(e){if(e.name!=="FileNotExists"){console.error("pvFileOpenWasm",e)}setInt(statusAddress,-1)}})};_pv_file_open_wasm.isAsync=true;var _pv_file_read_wasm=async function(fileAddress,contentAddress,size,count,numReadAddress){contentAddress=unsignedAddress(contentAddress);numReadAddress=unsignedAddress(numReadAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=await file.read(size,count);Module.HEAPU8.set(content,contentAddress);setInt(numReadAddress,content.length/size)}catch(e){console.error("pvFileReadWasm",e);setInt(numReadAddress,-1)}})};_pv_file_read_wasm.isAsync=true;function _pv_file_seek_wasm(fileAddress,offset,whence,statusAddress){statusAddress=unsignedAddress(statusAddress);try{const file=PvFile.getPtr(fileAddress);file.seek(offset,whence);setInt(statusAddress,0)}catch(e){console.error("pvFileSeekWasm",e);setInt(statusAddress,-1)}}function _pv_file_tell_wasm(fileAddress,offsetAddress){offsetAddress=unsignedAddress(offsetAddress);try{const file=PvFile.getPtr(fileAddress);setInt(offsetAddress,file.tell())}catch(e){console.error("pvFileTellWasm",e);setInt(offsetAddress,-1)}}var _pv_file_write_wasm=function(fileAddress,contentAddress,size,count,numWriteAddress){contentAddress=unsignedAddress(contentAddress);numWriteAddress=unsignedAddress(numWriteAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=new Uint8Array(size*count);content.set(Module.HEAPU8.slice(contentAddress,contentAddress+size*count),0);await file.write(content);setInt(numWriteAddress,content.length/size)}catch(e){console.error("pvFileWriteWasm",e);setInt(numWriteAddress,-1)}})};var _pv_https_request_wasm=async function(httpMethodAddress,serverNameAddress,endpointAddress,headerAddress,bodyAddress,timeoutMs,responseAddressAddress,responseSizeAddress,responseCodeAddress){httpMethodAddress=unsignedAddress(httpMethodAddress);serverNameAddress=unsignedAddress(serverNameAddress);endpointAddress=unsignedAddress(endpointAddress);headerAddress=unsignedAddress(headerAddress);bodyAddress=unsignedAddress(bodyAddress);responseAddressAddress=unsignedAddress(responseAddressAddress);responseSizeAddress=unsignedAddress(responseSizeAddress);responseCodeAddress=unsignedAddress(responseCodeAddress);return Asyncify.handleAsync(async()=>{const httpMethod=arrayBufferToStringAtIndex(Module.HEAPU8,httpMethodAddress);const serverName=arrayBufferToStringAtIndex(Module.HEAPU8,serverNameAddress);const endpoint=arrayBufferToStringAtIndex(Module.HEAPU8,endpointAddress);const header=arrayBufferToStringAtIndex(Module.HEAPU8,headerAddress);const body=arrayBufferToStringAtIndex(Module.HEAPU8,bodyAddress);const headerObject=stringHeaderToObject(header);const options={method:httpMethod};if(body.length>0){options.body=body}if(Object.keys(headerObject).length>0){options.headers=headerObject}let response;let responseText;let statusCode;try{response=await fetchWithTimeout("https://"+serverName+endpoint,options,timeoutMs);statusCode=response.status}catch(error){console.error("pvHttpsRequestWasm",`Failed to fetch: ${error}`);return}try{responseText=await response.text()}catch(error){console.error("pvHttpsRequestWasm",`Failed to get response text: ${error}`);return}const responseAddress=Module._malloc((responseText.length+1)*Int8Array.BYTES_PER_ELEMENT);if(responseAddress===0){console.error("pvMallocError","pvHttpsRequestWasm: cannot allocate memory for response");setInt(responseAddressAddress,0);return}setInt(responseSizeAddress,responseText.length+1);setInt(responseAddressAddress,responseAddress);for(let i=0;i{try{return func()}catch(e){abort(e)}};var sigToWasmTypes=sig=>{var typeNames={i:"i32",j:"i64",f:"f32",d:"f64",e:"externref",p:"i32"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(pv_https_request_wasm|pv_file_open_wasm|pv_file_close_wasm|pv_file_read_wasm|pv_file_write_wasm|pv_file_remove_wasm|pv_sleep_wasm|pv_xpu_webgpu_device_init_wasm|pv_xpu_webgpu_device_info_wasm|pv_xpu_webgpu_device_mem_copy_from_xpu_wasm|pv_xpu_webgpu_device_wait_wasm|pv_xpu_webgpu_timer_stop_wasm|invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x)}}},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){ret[x]=(...args)=>{Asyncify.exportCallStack.push(x);try{return original(...args)}finally{if(!ABORT){var y=Asyncify.exportCallStack.pop();Asyncify.maybeStopUnwind()}}}}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callStackNameToId:{},callStackIdToName:{},callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(funcName){var id=Asyncify.callStackNameToId[funcName];if(id===undefined){id=Asyncify.callStackId++;Asyncify.callStackNameToId[funcName]=id;Asyncify.callStackIdToName[id]=funcName}return id},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runtimeKeepalivePush();runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve:resolve,reject:reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){GROWABLE_HEAP_U32()[ptr>>>2>>>0]=stack;GROWABLE_HEAP_U32()[ptr+4>>>2>>>0]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];var rewindId=Asyncify.getCallStackId(bottomOfCallStack);GROWABLE_HEAP_I32()[ptr+8>>>2>>>0]=rewindId},getDataRewindFuncName(ptr){var id=GROWABLE_HEAP_I32()[ptr+8>>>2>>>0];var name=Asyncify.callStackIdToName[id];return name},getDataRewindFunc(name){var func=wasmExports[name];return func},doRewind(ptr){var name=Asyncify.getDataRewindFuncName(ptr);var func=Asyncify.getDataRewindFunc(name);runtimeKeepalivePop();return func()},handleSleep(startAsync){if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync(startAsync){return Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})}};var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var generateFuncType=(sig,target)=>{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={i:127,p:127,j:126,f:125,d:124,e:111};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i{if(typeof WebAssembly.Function=="function"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push(...typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{e:{f:func}});var wrappedFunc=instance.exports["f"];return wrappedFunc};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{GROWABLE_HEAP_I8().set(array,buffer>>>0)};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};Module["cwrap"]=cwrap;PThread.init();FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();xpu_cpu_support();var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,___syscall_openat,_environ_get,_environ_sizes_get,_fd_close,_fd_read,_fd_seek,_fd_write];var wasmImports;function assignWasmImports(){wasmImports={w:___pthread_create_js,G:___syscall_openat,l:__abort_js,E:__emscripten_init_main_thread_js,t:__emscripten_notify_mailbox_postmessage,y:__emscripten_receive_on_main_thread_js,g:__emscripten_thread_cleanup,D:__emscripten_thread_mailbox_await,k:__emscripten_thread_set_strongref,B:__tzset_js,h:_emscripten_check_blocking_allowed,j:_emscripten_exit_with_live_runtime,u:_emscripten_get_heap_max,b:_emscripten_get_now,v:_emscripten_num_logical_cores,s:_emscripten_resize_heap,z:_environ_get,A:_environ_sizes_get,c:_exit,e:_fd_close,F:_fd_read,C:_fd_seek,d:_fd_write,a:wasmMemory,i:_pv_console_log_wasm,q:_pv_file_close_wasm,r:_pv_file_open_wasm,f:_pv_file_read_wasm,p:_pv_file_seek_wasm,o:_pv_file_tell_wasm,n:_pv_file_write_wasm,m:_pv_https_request_wasm,H:_pv_time_wasm,x:_pv_xpu_get_max_workers_wasm}}var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["I"])();var __Znwm=Module["__Znwm"]=a0=>(__Znwm=Module["__Znwm"]=wasmExports["J"])(a0);var __Znam=Module["__Znam"]=a0=>(__Znam=Module["__Znam"]=wasmExports["K"])(a0);var __ZdlPv=Module["__ZdlPv"]=a0=>(__ZdlPv=Module["__ZdlPv"]=wasmExports["L"])(a0);var __ZdlPvm=Module["__ZdlPvm"]=(a0,a1)=>(__ZdlPvm=Module["__ZdlPvm"]=wasmExports["M"])(a0,a1);var __ZdaPv=Module["__ZdaPv"]=a0=>(__ZdaPv=Module["__ZdaPv"]=wasmExports["N"])(a0);var __ZdaPvm=Module["__ZdaPvm"]=(a0,a1)=>(__ZdaPvm=Module["__ZdaPvm"]=wasmExports["O"])(a0,a1);var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=(a0,a1)=>(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=wasmExports["P"])(a0,a1);var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=(a0,a1)=>(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=wasmExports["Q"])(a0,a1);var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=(a0,a1)=>(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=wasmExports["R"])(a0,a1);var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=wasmExports["S"])(a0,a1,a2);var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=(a0,a1)=>(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=wasmExports["T"])(a0,a1);var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=wasmExports["U"])(a0,a1,a2);var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=a0=>(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=wasmExports["V"])(a0);var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=a0=>(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=wasmExports["W"])(a0);var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=a0=>(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=wasmExports["X"])(a0);var ___cxa_guard_acquire=Module["___cxa_guard_acquire"]=a0=>(___cxa_guard_acquire=Module["___cxa_guard_acquire"]=wasmExports["Y"])(a0);var ___cxa_guard_release=Module["___cxa_guard_release"]=a0=>(___cxa_guard_release=Module["___cxa_guard_release"]=wasmExports["Z"])(a0);var ___cxa_guard_abort=Module["___cxa_guard_abort"]=a0=>(___cxa_guard_abort=Module["___cxa_guard_abort"]=wasmExports["_"])(a0);var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=()=>(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=wasmExports["$"])();var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=()=>(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=wasmExports["aa"])();var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=()=>(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=wasmExports["ba"])();var __ZSt9terminatev=Module["__ZSt9terminatev"]=()=>(__ZSt9terminatev=Module["__ZSt9terminatev"]=wasmExports["ca"])();var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=()=>(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=wasmExports["da"])();var ___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=()=>(___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=wasmExports["ea"])();var ___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=a0=>(___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=wasmExports["fa"])(a0);var ___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=()=>(___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=wasmExports["ga"])();var ___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=()=>(___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=wasmExports["ha"])();var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=a0=>(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["ia"])(a0);var ___cxa_free_exception=Module["___cxa_free_exception"]=a0=>(___cxa_free_exception=Module["___cxa_free_exception"]=wasmExports["ja"])(a0);var ___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=(a0,a1,a2)=>(___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["ka"])(a0,a1,a2);var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=()=>(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["la"])();var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=()=>(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["ma"])();var ___dynamic_cast=Module["___dynamic_cast"]=(a0,a1,a2,a3)=>(___dynamic_cast=Module["___dynamic_cast"]=wasmExports["na"])(a0,a1,a2,a3);var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=a0=>(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=wasmExports["oa"])(a0);var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=a0=>(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=wasmExports["pa"])(a0);var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=a0=>(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=wasmExports["qa"])(a0);var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=a0=>(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=wasmExports["ra"])(a0);var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=a0=>(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=wasmExports["sa"])(a0);var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=a0=>(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=wasmExports["ta"])(a0);var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=a0=>(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=wasmExports["ua"])(a0);var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=a0=>(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=wasmExports["va"])(a0);var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=a0=>(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=wasmExports["wa"])(a0);var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=a0=>(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=wasmExports["xa"])(a0);var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=a0=>(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=wasmExports["ya"])(a0);var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=a0=>(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=wasmExports["za"])(a0);var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=a0=>(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=wasmExports["Aa"])(a0);var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=a0=>(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=wasmExports["Ba"])(a0);var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=a0=>(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=wasmExports["Ca"])(a0);var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=a0=>(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=wasmExports["Da"])(a0);var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=a0=>(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=wasmExports["Ea"])(a0);var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=a0=>(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=wasmExports["Fa"])(a0);var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=a0=>(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=wasmExports["Ga"])(a0);var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=a0=>(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=wasmExports["Ha"])(a0);var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=a0=>(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=wasmExports["Ia"])(a0);var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=a0=>(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=wasmExports["Ja"])(a0);var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=a0=>(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=wasmExports["Ka"])(a0);var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=a0=>(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=wasmExports["La"])(a0);var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=a0=>(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=wasmExports["Ma"])(a0);var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=a0=>(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=wasmExports["Na"])(a0);var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=a0=>(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=wasmExports["Oa"])(a0);var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=a0=>(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=wasmExports["Pa"])(a0);var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=a0=>(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=wasmExports["Qa"])(a0);var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=a0=>(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=wasmExports["Ra"])(a0);var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=a0=>(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=wasmExports["Sa"])(a0);var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=a0=>(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=wasmExports["Ta"])(a0);var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=a0=>(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=wasmExports["Ua"])(a0);var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=a0=>(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=wasmExports["Va"])(a0);var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=a0=>(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=wasmExports["Wa"])(a0);var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=a0=>(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=wasmExports["Xa"])(a0);var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=a0=>(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=wasmExports["Ya"])(a0);var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=a0=>(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=wasmExports["Za"])(a0);var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=a0=>(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=wasmExports["_a"])(a0);var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=a0=>(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=wasmExports["$a"])(a0);var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=a0=>(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=wasmExports["ab"])(a0);var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=a0=>(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=wasmExports["bb"])(a0);var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=a0=>(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=wasmExports["cb"])(a0);var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=a0=>(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=wasmExports["db"])(a0);var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=a0=>(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=wasmExports["eb"])(a0);var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=a0=>(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=wasmExports["fb"])(a0);var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=a0=>(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=wasmExports["gb"])(a0);var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=a0=>(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=wasmExports["hb"])(a0);var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=a0=>(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=wasmExports["ib"])(a0);var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=a0=>(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=wasmExports["jb"])(a0);var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=a0=>(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=wasmExports["kb"])(a0);var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=a0=>(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=wasmExports["lb"])(a0);var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=a0=>(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=wasmExports["mb"])(a0);var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=a0=>(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=wasmExports["nb"])(a0);var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=a0=>(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=wasmExports["ob"])(a0);var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=a0=>(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=wasmExports["pb"])(a0);var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=a0=>(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=wasmExports["qb"])(a0);var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=a0=>(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=wasmExports["rb"])(a0);var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=a0=>(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=wasmExports["sb"])(a0);var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=a0=>(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=wasmExports["tb"])(a0);var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=a0=>(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=wasmExports["ub"])(a0);var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=a0=>(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=wasmExports["vb"])(a0);var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=a0=>(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=wasmExports["wb"])(a0);var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=a0=>(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=wasmExports["xb"])(a0);var _pv_orca_init=Module["_pv_orca_init"]=(a0,a1,a2,a3)=>(_pv_orca_init=Module["_pv_orca_init"]=wasmExports["yb"])(a0,a1,a2,a3);var _free=a0=>(_free=wasmExports["zb"])(a0);var _pv_orca_delete=Module["_pv_orca_delete"]=a0=>(_pv_orca_delete=Module["_pv_orca_delete"]=wasmExports["Ab"])(a0);var _pv_orca_version=Module["_pv_orca_version"]=()=>(_pv_orca_version=Module["_pv_orca_version"]=wasmExports["Bb"])();var _pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=(a0,a1,a2)=>(_pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=wasmExports["Cb"])(a0,a1,a2);var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["Db"])(a0);var _pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=(a0,a1)=>(_pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=wasmExports["Eb"])(a0,a1);var _pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=(a0,a1)=>(_pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=wasmExports["Fb"])(a0,a1);var _pv_orca_synthesize=Module["_pv_orca_synthesize"]=(a0,a1,a2,a3,a4,a5,a6)=>(_pv_orca_synthesize=Module["_pv_orca_synthesize"]=wasmExports["Gb"])(a0,a1,a2,a3,a4,a5,a6);var _pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=(a0,a1,a2,a3,a4,a5)=>(_pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=wasmExports["Hb"])(a0,a1,a2,a3,a4,a5);var _pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=a0=>(_pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=wasmExports["Ib"])(a0);var _pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=a0=>(_pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=wasmExports["Jb"])(a0);var _pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=a0=>(_pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=wasmExports["Kb"])(a0);var _pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=wasmExports["Lb"])(a0,a1);var _pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=wasmExports["Mb"])(a0,a1);var _pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=wasmExports["Nb"])(a0,a1);var _pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=wasmExports["Ob"])(a0,a1);var _pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=a0=>(_pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=wasmExports["Pb"])(a0);var _pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=(a0,a1)=>(_pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=wasmExports["Qb"])(a0,a1);var _pv_orca_stream_open=Module["_pv_orca_stream_open"]=(a0,a1,a2)=>(_pv_orca_stream_open=Module["_pv_orca_stream_open"]=wasmExports["Rb"])(a0,a1,a2);var _pv_orca_stream_close=Module["_pv_orca_stream_close"]=a0=>(_pv_orca_stream_close=Module["_pv_orca_stream_close"]=wasmExports["Sb"])(a0);var _pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=(a0,a1,a2,a3)=>(_pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=wasmExports["Tb"])(a0,a1,a2,a3);var _pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=(a0,a1,a2)=>(_pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=wasmExports["Ub"])(a0,a1,a2);var _pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=(a0,a1)=>(_pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=wasmExports["Vb"])(a0,a1);var _pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=(a0,a1)=>(_pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=wasmExports["Wb"])(a0,a1);var _pv_status_to_string=Module["_pv_status_to_string"]=a0=>(_pv_status_to_string=Module["_pv_status_to_string"]=wasmExports["Yb"])(a0);var _pv_sample_rate=Module["_pv_sample_rate"]=()=>(_pv_sample_rate=Module["_pv_sample_rate"]=wasmExports["Zb"])();var _pv_log_enable=Module["_pv_log_enable"]=()=>(_pv_log_enable=Module["_pv_log_enable"]=wasmExports["_b"])();var _pv_log_disable=Module["_pv_log_disable"]=()=>(_pv_log_disable=Module["_pv_log_disable"]=wasmExports["$b"])();var _aligned_alloc=Module["_aligned_alloc"]=(a0,a1)=>(_aligned_alloc=Module["_aligned_alloc"]=wasmExports["ac"])(a0,a1);var _pv_get_sdk=Module["_pv_get_sdk"]=()=>(_pv_get_sdk=Module["_pv_get_sdk"]=wasmExports["bc"])();var _pv_set_sdk=Module["_pv_set_sdk"]=a0=>(_pv_set_sdk=Module["_pv_set_sdk"]=wasmExports["cc"])(a0);var _pv_free=Module["_pv_free"]=a0=>(_pv_free=Module["_pv_free"]=wasmExports["dc"])(a0);var _pv_get_error_stack=Module["_pv_get_error_stack"]=(a0,a1)=>(_pv_get_error_stack=Module["_pv_get_error_stack"]=wasmExports["ec"])(a0,a1);var _pv_free_error_stack=Module["_pv_free_error_stack"]=a0=>(_pv_free_error_stack=Module["_pv_free_error_stack"]=wasmExports["fc"])(a0);var __emscripten_tls_init=()=>(__emscripten_tls_init=wasmExports["gc"])();var _pthread_self=()=>(_pthread_self=wasmExports["hc"])();var __emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=(a0,a1,a2)=>(__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["ic"])(a0,a1,a2);var __emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=(a0,a1,a2)=>(__emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=wasmExports["jc"])(a0,a1,a2);var ___get_tp=Module["___get_tp"]=()=>(___get_tp=Module["___get_tp"]=wasmExports["kc"])();var __emscripten_thread_supports_atomics_wait=Module["__emscripten_thread_supports_atomics_wait"]=()=>(__emscripten_thread_supports_atomics_wait=Module["__emscripten_thread_supports_atomics_wait"]=wasmExports["lc"])();var __emscripten_thread_init=(a0,a1,a2,a3,a4,a5)=>(__emscripten_thread_init=wasmExports["mc"])(a0,a1,a2,a3,a4,a5);var ___set_thread_state=Module["___set_thread_state"]=(a0,a1,a2,a3)=>(___set_thread_state=Module["___set_thread_state"]=wasmExports["nc"])(a0,a1,a2,a3);var _emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=()=>(_emscripten_is_main_runtime_thread=Module["_emscripten_is_main_runtime_thread"]=wasmExports["oc"])();var _emscripten_is_main_browser_thread=Module["_emscripten_is_main_browser_thread"]=()=>(_emscripten_is_main_browser_thread=Module["_emscripten_is_main_browser_thread"]=wasmExports["pc"])();var __emscripten_thread_crashed=()=>(__emscripten_thread_crashed=wasmExports["qc"])();var _emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=()=>(_emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=wasmExports["rc"])();var _emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=()=>(_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=wasmExports["sc"])();var __emscripten_run_on_main_thread_js=(a0,a1,a2,a3,a4)=>(__emscripten_run_on_main_thread_js=wasmExports["tc"])(a0,a1,a2,a3,a4);var __emscripten_thread_free_data=a0=>(__emscripten_thread_free_data=wasmExports["uc"])(a0);var __emscripten_thread_exit=a0=>(__emscripten_thread_exit=wasmExports["vc"])(a0);var __emscripten_check_mailbox=()=>(__emscripten_check_mailbox=wasmExports["wc"])();var _emscripten_stack_init=Module["_emscripten_stack_init"]=()=>(_emscripten_stack_init=Module["_emscripten_stack_init"]=wasmExports["xc"])();var _emscripten_stack_set_limits=(a0,a1)=>(_emscripten_stack_set_limits=wasmExports["yc"])(a0,a1);var _emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=()=>(_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=wasmExports["zc"])();var __emscripten_wasm_worker_initialize=Module["__emscripten_wasm_worker_initialize"]=(a0,a1)=>(__emscripten_wasm_worker_initialize=Module["__emscripten_wasm_worker_initialize"]=wasmExports["Ac"])(a0,a1);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["Bc"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["Cc"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["Dc"])();var dynCall_ii=Module["dynCall_ii"]=(a0,a1)=>(dynCall_ii=Module["dynCall_ii"]=wasmExports["Ec"])(a0,a1);var _asyncify_start_unwind=a0=>(_asyncify_start_unwind=wasmExports["Fc"])(a0);var _asyncify_stop_unwind=()=>(_asyncify_stop_unwind=wasmExports["Gc"])();var _asyncify_start_rewind=a0=>(_asyncify_start_rewind=wasmExports["Hc"])(a0);var _asyncify_stop_rewind=()=>(_asyncify_stop_rewind=wasmExports["Ic"])();var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=2374668;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=2374664;var ___cxa_new_handler=Module["___cxa_new_handler"]=2381104;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=52268;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=52316;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=52364;var __ZTIDn=Module["__ZTIDn"]=52712;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=52412;var __ZTIv=Module["__ZTIv"]=52660;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=52464;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=52524;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=52232;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=54196;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=52280;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=52328;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=52376;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=52424;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=52476;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=52548;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=52576;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=52644;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=52604;var __ZTSv=Module["__ZTSv"]=52656;var __ZTSPv=Module["__ZTSPv"]=52668;var __ZTIPv=Module["__ZTIPv"]=52672;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=54408;var __ZTSPKv=Module["__ZTSPKv"]=52688;var __ZTIPKv=Module["__ZTIPKv"]=52692;var __ZTSDn=Module["__ZTSDn"]=52708;var __ZTSPDn=Module["__ZTSPDn"]=52720;var __ZTIPDn=Module["__ZTIPDn"]=52724;var __ZTSPKDn=Module["__ZTSPKDn"]=52740;var __ZTIPKDn=Module["__ZTIPKDn"]=52748;var __ZTSb=Module["__ZTSb"]=52764;var __ZTIb=Module["__ZTIb"]=52768;var __ZTSPb=Module["__ZTSPb"]=52776;var __ZTIPb=Module["__ZTIPb"]=52780;var __ZTSPKb=Module["__ZTSPKb"]=52796;var __ZTIPKb=Module["__ZTIPKb"]=52800;var __ZTSw=Module["__ZTSw"]=52816;var __ZTIw=Module["__ZTIw"]=52820;var __ZTSPw=Module["__ZTSPw"]=52828;var __ZTIPw=Module["__ZTIPw"]=52832;var __ZTSPKw=Module["__ZTSPKw"]=52848;var __ZTIPKw=Module["__ZTIPKw"]=52852;var __ZTSc=Module["__ZTSc"]=52868;var __ZTIc=Module["__ZTIc"]=52872;var __ZTSPc=Module["__ZTSPc"]=52880;var __ZTIPc=Module["__ZTIPc"]=52884;var __ZTSPKc=Module["__ZTSPKc"]=52900;var __ZTIPKc=Module["__ZTIPKc"]=52904;var __ZTSh=Module["__ZTSh"]=52920;var __ZTIh=Module["__ZTIh"]=52924;var __ZTSPh=Module["__ZTSPh"]=52932;var __ZTIPh=Module["__ZTIPh"]=52936;var __ZTSPKh=Module["__ZTSPKh"]=52952;var __ZTIPKh=Module["__ZTIPKh"]=52956;var __ZTSa=Module["__ZTSa"]=52972;var __ZTIa=Module["__ZTIa"]=52976;var __ZTSPa=Module["__ZTSPa"]=52984;var __ZTIPa=Module["__ZTIPa"]=52988;var __ZTSPKa=Module["__ZTSPKa"]=53004;var __ZTIPKa=Module["__ZTIPKa"]=53008;var __ZTSs=Module["__ZTSs"]=53024;var __ZTIs=Module["__ZTIs"]=53028;var __ZTSPs=Module["__ZTSPs"]=53036;var __ZTIPs=Module["__ZTIPs"]=53040;var __ZTSPKs=Module["__ZTSPKs"]=53056;var __ZTIPKs=Module["__ZTIPKs"]=53060;var __ZTSt=Module["__ZTSt"]=53076;var __ZTIt=Module["__ZTIt"]=53080;var __ZTSPt=Module["__ZTSPt"]=53088;var __ZTIPt=Module["__ZTIPt"]=53092;var __ZTSPKt=Module["__ZTSPKt"]=53108;var __ZTIPKt=Module["__ZTIPKt"]=53112;var __ZTSi=Module["__ZTSi"]=53128;var __ZTIi=Module["__ZTIi"]=53132;var __ZTSPi=Module["__ZTSPi"]=53140;var __ZTIPi=Module["__ZTIPi"]=53144;var __ZTSPKi=Module["__ZTSPKi"]=53160;var __ZTIPKi=Module["__ZTIPKi"]=53164;var __ZTSj=Module["__ZTSj"]=53180;var __ZTIj=Module["__ZTIj"]=53184;var __ZTSPj=Module["__ZTSPj"]=53192;var __ZTIPj=Module["__ZTIPj"]=53196;var __ZTSPKj=Module["__ZTSPKj"]=53212;var __ZTIPKj=Module["__ZTIPKj"]=53216;var __ZTSl=Module["__ZTSl"]=53232;var __ZTIl=Module["__ZTIl"]=53236;var __ZTSPl=Module["__ZTSPl"]=53244;var __ZTIPl=Module["__ZTIPl"]=53248;var __ZTSPKl=Module["__ZTSPKl"]=53264;var __ZTIPKl=Module["__ZTIPKl"]=53268;var __ZTSm=Module["__ZTSm"]=53284;var __ZTIm=Module["__ZTIm"]=53288;var __ZTSPm=Module["__ZTSPm"]=53296;var __ZTIPm=Module["__ZTIPm"]=53300;var __ZTSPKm=Module["__ZTSPKm"]=53316;var __ZTIPKm=Module["__ZTIPKm"]=53320;var __ZTSx=Module["__ZTSx"]=53336;var __ZTIx=Module["__ZTIx"]=53340;var __ZTSPx=Module["__ZTSPx"]=53348;var __ZTIPx=Module["__ZTIPx"]=53352;var __ZTSPKx=Module["__ZTSPKx"]=53368;var __ZTIPKx=Module["__ZTIPKx"]=53372;var __ZTSy=Module["__ZTSy"]=53388;var __ZTIy=Module["__ZTIy"]=53392;var __ZTSPy=Module["__ZTSPy"]=53400;var __ZTIPy=Module["__ZTIPy"]=53404;var __ZTSPKy=Module["__ZTSPKy"]=53420;var __ZTIPKy=Module["__ZTIPKy"]=53424;var __ZTSn=Module["__ZTSn"]=53440;var __ZTIn=Module["__ZTIn"]=53444;var __ZTSPn=Module["__ZTSPn"]=53452;var __ZTIPn=Module["__ZTIPn"]=53456;var __ZTSPKn=Module["__ZTSPKn"]=53472;var __ZTIPKn=Module["__ZTIPKn"]=53476;var __ZTSo=Module["__ZTSo"]=53492;var __ZTIo=Module["__ZTIo"]=53496;var __ZTSPo=Module["__ZTSPo"]=53504;var __ZTIPo=Module["__ZTIPo"]=53508;var __ZTSPKo=Module["__ZTSPKo"]=53524;var __ZTIPKo=Module["__ZTIPKo"]=53528;var __ZTSDh=Module["__ZTSDh"]=53544;var __ZTIDh=Module["__ZTIDh"]=53548;var __ZTSPDh=Module["__ZTSPDh"]=53556;var __ZTIPDh=Module["__ZTIPDh"]=53560;var __ZTSPKDh=Module["__ZTSPKDh"]=53576;var __ZTIPKDh=Module["__ZTIPKDh"]=53584;var __ZTSf=Module["__ZTSf"]=53600;var __ZTIf=Module["__ZTIf"]=53604;var __ZTSPf=Module["__ZTSPf"]=53612;var __ZTIPf=Module["__ZTIPf"]=53616;var __ZTSPKf=Module["__ZTSPKf"]=53632;var __ZTIPKf=Module["__ZTIPKf"]=53636;var __ZTSd=Module["__ZTSd"]=53652;var __ZTId=Module["__ZTId"]=53656;var __ZTSPd=Module["__ZTSPd"]=53664;var __ZTIPd=Module["__ZTIPd"]=53668;var __ZTSPKd=Module["__ZTSPKd"]=53684;var __ZTIPKd=Module["__ZTIPKd"]=53688;var __ZTSe=Module["__ZTSe"]=53704;var __ZTIe=Module["__ZTIe"]=53708;var __ZTSPe=Module["__ZTSPe"]=53716;var __ZTIPe=Module["__ZTIPe"]=53720;var __ZTSPKe=Module["__ZTSPKe"]=53736;var __ZTIPKe=Module["__ZTIPKe"]=53740;var __ZTSg=Module["__ZTSg"]=53756;var __ZTIg=Module["__ZTIg"]=53760;var __ZTSPg=Module["__ZTSPg"]=53768;var __ZTIPg=Module["__ZTIPg"]=53772;var __ZTSPKg=Module["__ZTSPKg"]=53788;var __ZTIPKg=Module["__ZTIPKg"]=53792;var __ZTSDu=Module["__ZTSDu"]=53808;var __ZTIDu=Module["__ZTIDu"]=53812;var __ZTSPDu=Module["__ZTSPDu"]=53820;var __ZTIPDu=Module["__ZTIPDu"]=53824;var __ZTSPKDu=Module["__ZTSPKDu"]=53840;var __ZTIPKDu=Module["__ZTIPKDu"]=53848;var __ZTSDs=Module["__ZTSDs"]=53864;var __ZTIDs=Module["__ZTIDs"]=53868;var __ZTSPDs=Module["__ZTSPDs"]=53876;var __ZTIPDs=Module["__ZTIPDs"]=53880;var __ZTSPKDs=Module["__ZTSPKDs"]=53896;var __ZTIPKDs=Module["__ZTIPKDs"]=53904;var __ZTSDi=Module["__ZTSDi"]=53920;var __ZTIDi=Module["__ZTIDi"]=53924;var __ZTSPDi=Module["__ZTSPDi"]=53932;var __ZTIPDi=Module["__ZTIPDi"]=53936;var __ZTSPKDi=Module["__ZTSPKDi"]=53952;var __ZTIPKDi=Module["__ZTIPKDi"]=53960;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=53976;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=54040;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=54004;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=54052;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=54080;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=54144;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=54108;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=54156;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=54276;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=54236;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=54288;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=54368;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=54328;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=54380;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=54436;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=54464;var __ZTVSt9exception=Module["__ZTVSt9exception"]=54504;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=54484;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=54616;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=54656;var __ZTISt9exception=Module["__ZTISt9exception"]=54540;var __ZTSSt9exception=Module["__ZTSSt9exception"]=54524;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=54548;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=54588;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=54568;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=54600;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=54628;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=54668;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=54688;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=54764;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=55004;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=54708;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=54776;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=54728;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=54745;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=54788;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=54832;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=54808;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=54844;var __ZTISt12length_error=Module["__ZTISt12length_error"]=54884;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=54864;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=54896;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=54936;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=54916;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=54948;var __ZTISt11range_error=Module["__ZTISt11range_error"]=55016;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=54968;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=54984;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=55028;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=55068;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=55048;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=55080;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=55120;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=55100;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=52100;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=52120;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=52192;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=52220;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=52140;var __ZTISt9type_info=Module["__ZTISt9type_info"]=52172;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=52156;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=52180;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=52204;function applySignatureConversions(wasmExports){wasmExports=Object.assign({},wasmExports);var makeWrapper_pp=f=>a0=>f(a0)>>>0;var makeWrapper_p=f=>()=>f()>>>0;wasmExports["Db"]=makeWrapper_pp(wasmExports["Db"]);wasmExports["hc"]=makeWrapper_p(wasmExports["hc"]);wasmExports["emscripten_main_runtime_thread_id"]=makeWrapper_p(wasmExports["emscripten_main_runtime_thread_id"]);wasmExports["rc"]=makeWrapper_p(wasmExports["rc"]);wasmExports["sc"]=makeWrapper_p(wasmExports["sc"]);wasmExports["Cc"]=makeWrapper_pp(wasmExports["Cc"]);wasmExports["Dc"]=makeWrapper_p(wasmExports["Dc"]);return wasmExports}Module["addFunction"]=addFunction;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();startWorker(Module);return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise; return moduleRtn; diff --git a/lib/wasm/pv_orca_pthread.wasm b/lib/wasm/pv_orca_pthread.wasm index 016adeed..a7f16ae7 100755 Binary files a/lib/wasm/pv_orca_pthread.wasm and b/lib/wasm/pv_orca_pthread.wasm differ diff --git a/lib/wasm/pv_orca_simd.js b/lib/wasm/pv_orca_simd.js index 304e7386..7620bf42 100644 --- a/lib/wasm/pv_orca_simd.js +++ b/lib/wasm/pv_orca_simd.js @@ -6,7 +6,7 @@ var pv_orca_simd = (() => { function(moduleArg = {}) { var moduleRtn; -var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";function _typeof$2(o){null;return _typeof$2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof$2(o)}function toPrimitive(t,r){if("object"!=_typeof$2(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof$2(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function toPropertyKey(t){var i=toPrimitive(t,"string");return"symbol"==_typeof$2(i)?i:i+""}function _defineProperty(e,r,t){return(r=toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x["default"]:x}var regeneratorRuntime$3={exports:{}};var _typeof$1={exports:{}};var _typeof_1=_typeof$1.exports;(function(module){function _typeof(o){null;return module.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},module.exports.__esModule=true,module.exports["default"]=module.exports,_typeof(o)}module.exports=_typeof,module.exports.__esModule=true,module.exports["default"]=module.exports})(_typeof$1);var _typeofExports=_typeof$1.exports;var _typeof=getDefaultExportFromCjs(_typeofExports);var regeneratorRuntime$1=regeneratorRuntime$3.exports;(function(module){var _typeof=_typeofExports["default"];function _regeneratorRuntime(){"use strict";module.exports=_regeneratorRuntime=function _regeneratorRuntime(){return e},module.exports.__esModule=true,module.exports["default"]=module.exports;var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{define({},"")}catch(t){define=function define(t,e,r){return t[e]=r}}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,a=Object.create(i.prototype),c=new Context(n||[]);return o(a,"_invoke",{value:makeInvokeMethod(t,r,c)}),a}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=wrap;var h="suspendedStart",l="suspendedYield",f="executing",s="completed",y={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var p={};define(p,a,function(){return this});var d=Object.getPrototypeOf,v=d&&d(d(values([])));v&&v!==r&&n.call(v,a)&&(p=v);var g=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(p);function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){define(t,e,function(t){return this._invoke(e,t)})})}function AsyncIterator(t,e){function invoke(r,o,i,a){var c=tryCatch(t[r],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==_typeof(h)&&n.call(h,"__await")?e.resolve(h.__await).then(function(t){invoke("next",t,i,a)},function(t){invoke("throw",t,i,a)}):e.resolve(h).then(function(t){u.value=t,i(u)},function(t){return invoke("throw",t,i,a)})}a(c.arg)}var r;o(this,"_invoke",{value:function value(t,n){function callInvokeWithMethodAndArg(){return new e(function(e,r){invoke(t,n,e,r)})}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(e,r,n){var o=h;return function(i,a){if(o===f)throw Error("Generator is already running");if(o===s){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=maybeInvokeDelegate(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=s,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=f;var p=tryCatch(e,r,n);if("normal"===p.type){if(o=n.done?s:l,p.arg===y)continue;return{value:p.arg,done:n.done}}"throw"===p.type&&(o=s,n.method="throw",n.arg=p.arg)}}}function maybeInvokeDelegate(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator["return"]&&(r.method="return",r.arg=t,maybeInvokeDelegate(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=tryCatch(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function next(){for(;++o=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),y}},catch:function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function delegateYield(e,r,n){return this.delegate={iterator:values(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y}},e}module.exports=_regeneratorRuntime,module.exports.__esModule=true,module.exports["default"]=module.exports})(regeneratorRuntime$3);var regeneratorRuntimeExports=regeneratorRuntime$3.exports;var regeneratorRuntime$2=getDefaultExportFromCjs(regeneratorRuntimeExports);var runtime=regeneratorRuntimeExports();var regenerator=runtime;try{regeneratorRuntime=runtime}catch(accidentalStrictMode){if(typeof globalThis==="object"){globalThis.regeneratorRuntime=runtime}else{Function("r","regeneratorRuntime = r")(runtime)}}var _regeneratorRuntime=getDefaultExportFromCjs(regenerator);const BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};const BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};const PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};const OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};const ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};class Utils{static getFirstMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>0&&match[1]||""}static getSecondMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>1&&match[2]||""}static matchAndReturnConst(regexp,ua,_const){if(regexp.test(ua)){return _const}return void 0}static getWindowsVersionName(version){switch(version){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return undefined}}static getMacOSVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]!==10)return undefined;switch(v[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return undefined}}static getAndroidVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]===1&&v[1]<5)return undefined;if(v[0]===1&&v[1]<6)return"Cupcake";if(v[0]===1&&v[1]>=6)return"Donut";if(v[0]===2&&v[1]<2)return"Eclair";if(v[0]===2&&v[1]===2)return"Froyo";if(v[0]===2&&v[1]>2)return"Gingerbread";if(v[0]===3)return"Honeycomb";if(v[0]===4&&v[1]<1)return"Ice Cream Sandwich";if(v[0]===4&&v[1]<4)return"Jelly Bean";if(v[0]===4&&v[1]>=4)return"KitKat";if(v[0]===5)return"Lollipop";if(v[0]===6)return"Marshmallow";if(v[0]===7)return"Nougat";if(v[0]===8)return"Oreo";if(v[0]===9)return"Pie";return undefined}static getVersionPrecision(version){return version.split(".").length}static compareVersions(versionA,versionB,isLoose=false){const versionAPrecision=Utils.getVersionPrecision(versionA);const versionBPrecision=Utils.getVersionPrecision(versionB);let precision=Math.max(versionAPrecision,versionBPrecision);let lastPrecision=0;const chunks=Utils.map([versionA,versionB],version=>{const delta=precision-Utils.getVersionPrecision(version);const _version=version+new Array(delta+1).join(".0");return Utils.map(_version.split("."),chunk=>new Array(20-chunk.length).join("0")+chunk).reverse()});if(isLoose){lastPrecision=precision-Math.min(versionAPrecision,versionBPrecision)}precision-=1;while(precision>=lastPrecision){if(chunks[0][precision]>chunks[1][precision]){return 1}if(chunks[0][precision]===chunks[1][precision]){if(precision===lastPrecision){return 0}precision-=1}else if(chunks[0][precision]{result[key]=assigner[key]})}}return obj}static getBrowserAlias(browserName){return BROWSER_ALIASES_MAP[browserName]}static getBrowserTypeByAlias(browserAlias){return BROWSER_MAP[browserAlias]||""}}const commonVersionIdentifier=/version\/(\d+(\.?_?\d+)+)/i;const browsersList=[{test:[/googlebot/i],describe(ua){const browser={name:"Googlebot"};const version=Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/opera/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opr\/|opios/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/SamsungBrowser/i],describe(ua){const browser={name:"Samsung Internet for Android"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Whale/i],describe(ua){const browser={name:"NAVER Whale Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MZBrowser/i],describe(ua){const browser={name:"MZ Browser"};const version=Utils.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/focus/i],describe(ua){const browser={name:"Focus"};const version=Utils.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/swing/i],describe(ua){const browser={name:"Swing"};const version=Utils.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/coast/i],describe(ua){const browser={name:"Opera Coast"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(ua){const browser={name:"Opera Touch"};const version=Utils.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/yabrowser/i],describe(ua){const browser={name:"Yandex Browser"};const version=Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/ucbrowser/i],describe(ua){const browser={name:"UC Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Maxthon|mxios/i],describe(ua){const browser={name:"Maxthon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/epiphany/i],describe(ua){const browser={name:"Epiphany"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/puffin/i],describe(ua){const browser={name:"Puffin"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sleipnir/i],describe(ua){const browser={name:"Sleipnir"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/k-meleon/i],describe(ua){const browser={name:"K-Meleon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/micromessenger/i],describe(ua){const browser={name:"WeChat"};const version=Utils.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qqbrowser/i],describe(ua){const browser={name:/qqbrowserlite/i.test(ua)?"QQ Browser Lite":"QQ Browser"};const version=Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/msie|trident/i],describe(ua){const browser={name:"Internet Explorer"};const version=Utils.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/\sedg\//i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/edg([ea]|ios)/i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/vivaldi/i],describe(ua){const browser={name:"Vivaldi"};const version=Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/seamonkey/i],describe(ua){const browser={name:"SeaMonkey"};const version=Utils.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sailfish/i],describe(ua){const browser={name:"Sailfish"};const version=Utils.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,ua);if(version){browser.version=version}return browser}},{test:[/silk/i],describe(ua){const browser={name:"Amazon Silk"};const version=Utils.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/phantom/i],describe(ua){const browser={name:"PhantomJS"};const version=Utils.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/slimerjs/i],describe(ua){const browser={name:"SlimerJS"};const version=Utils.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const browser={name:"BlackBerry"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/(web|hpw)[o0]s/i],describe(ua){const browser={name:"WebOS Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/bada/i],describe(ua){const browser={name:"Bada"};const version=Utils.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/tizen/i],describe(ua){const browser={name:"Tizen"};const version=Utils.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qupzilla/i],describe(ua){const browser={name:"QupZilla"};const version=Utils.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/firefox|iceweasel|fxios/i],describe(ua){const browser={name:"Firefox"};const version=Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/electron/i],describe(ua){const browser={name:"Electron"};const version=Utils.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MiuiBrowser/i],describe(ua){const browser={name:"Miui"};const version=Utils.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/chromium/i],describe(ua){const browser={name:"Chromium"};const version=Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/chrome|crios|crmo/i],describe(ua){const browser={name:"Chrome"};const version=Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/GSA/i],describe(ua){const browser={name:"Google Search"};const version=Utils.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const browser={name:"Android Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/playstation 4/i],describe(ua){const browser={name:"PlayStation 4"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/safari|applewebkit/i],describe(ua){const browser={name:"Safari"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/.*/i],describe(ua){const regexpWithoutDeviceSpec=/^(.*)\/(.*) /;const regexpWithDeviceSpec=/^(.*)\/(.*)[ \t]\((.*)/;const hasDeviceSpec=ua.search("\\(")!==-1;const regexp=hasDeviceSpec?regexpWithDeviceSpec:regexpWithoutDeviceSpec;return{name:Utils.getFirstMatch(regexp,ua),version:Utils.getSecondMatch(regexp,ua)}}}];var osParsersList=[{test:[/Roku\/DVP/],describe(ua){const version=Utils.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,ua);return{name:OS_MAP.Roku,version:version}}},{test:[/windows phone/i],describe(ua){const version=Utils.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.WindowsPhone,version:version}}},{test:[/windows /i],describe(ua){const version=Utils.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,ua);const versionName=Utils.getWindowsVersionName(version);return{name:OS_MAP.Windows,version:version,versionName:versionName}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(ua){const result={name:OS_MAP.iOS};const version=Utils.getSecondMatch(/(Version\/)(\d[\d.]+)/,ua);if(version){result.version=version}return result}},{test:[/macintosh/i],describe(ua){const version=Utils.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,ua).replace(/[_\s]/g,".");const versionName=Utils.getMacOSVersionName(version);const os={name:OS_MAP.MacOS,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(ipod|iphone|ipad)/i],describe(ua){const version=Utils.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,ua).replace(/[_\s]/g,".");return{name:OS_MAP.iOS,version:version}}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const version=Utils.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,ua);const versionName=Utils.getAndroidVersionName(version);const os={name:OS_MAP.Android,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(web|hpw)[o0]s/i],describe(ua){const version=Utils.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,ua);const os={name:OS_MAP.WebOS};if(version&&version.length){os.version=version}return os}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const version=Utils.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,ua)||Utils.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,ua)||Utils.getFirstMatch(/\bbb(\d+)/i,ua);return{name:OS_MAP.BlackBerry,version:version}}},{test:[/bada/i],describe(ua){const version=Utils.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Bada,version:version}}},{test:[/tizen/i],describe(ua){const version=Utils.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Tizen,version:version}}},{test:[/linux/i],describe(){return{name:OS_MAP.Linux}}},{test:[/CrOS/],describe(){return{name:OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe(ua){const version=Utils.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.PlayStation4,version:version}}}];var platformParsersList=[{test:[/googlebot/i],describe(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe(ua){const model=Utils.getFirstMatch(/(can-l01)/i,ua)&&"Nova";const platform={type:PLATFORMS_MAP.mobile,vendor:"Huawei"};if(model){platform.model=model}return platform}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){const iDevice=parser.test(/ipod|iphone/i);const likeIDevice=parser.test(/like (ipod|iphone)/i);return iDevice&&!likeIDevice},describe(ua){const model=Utils.getFirstMatch(/(ipod|iphone)/i,ua);return{type:PLATFORMS_MAP.mobile,vendor:"Apple",model:model}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName(true)==="blackberry"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test(parser){return parser.getBrowserName(true)==="bada"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName()==="windows phone"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test(parser){const osMajorVersion=Number(String(parser.getOSVersion()).split(".")[0]);return parser.getOSName(true)==="android"&&osMajorVersion>=3},describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){return parser.getOSName(true)==="android"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getOSName(true)==="macos"},describe(){return{type:PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test(parser){return parser.getOSName(true)==="windows"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="linux"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="playstation 4"},describe(){return{type:PLATFORMS_MAP.tv}}},{test(parser){return parser.getOSName(true)==="roku"},describe(){return{type:PLATFORMS_MAP.tv}}}];var enginesParsersList=[{test(parser){return parser.getBrowserName(true)==="microsoft edge"},describe(ua){const isBlinkBased=/\sedg\//i.test(ua);if(isBlinkBased){return{name:ENGINE_MAP.Blink}}const version=Utils.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,ua);return{name:ENGINE_MAP.EdgeHTML,version:version}}},{test:[/trident/i],describe(ua){const engine={name:ENGINE_MAP.Trident};const version=Utils.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){return parser.test(/presto/i)},describe(ua){const engine={name:ENGINE_MAP.Presto};const version=Utils.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){const isGecko=parser.test(/gecko/i);const likeGecko=parser.test(/like gecko/i);return isGecko&&!likeGecko},describe(ua){const engine={name:ENGINE_MAP.Gecko};const version=Utils.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test:[/(apple)?webkit\/537\.36/i],describe(){return{name:ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe(ua){const engine={name:ENGINE_MAP.WebKit};const version=Utils.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}}];class Parser{constructor(UA,skipParsing=false){if(UA===void 0||UA===null||UA===""){throw new Error("UserAgent parameter can't be empty")}this._ua=UA;this.parsedResult={};if(skipParsing!==true){this.parse()}}getUA(){return this._ua}test(regex){return regex.test(this._ua)}parseBrowser(){this.parsedResult.browser={};const browserDescriptor=Utils.find(browsersList,_browser=>{if(typeof _browser.test==="function"){return _browser.test(this)}if(_browser.test instanceof Array){return _browser.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(browserDescriptor){this.parsedResult.browser=browserDescriptor.describe(this.getUA())}return this.parsedResult.browser}getBrowser(){if(this.parsedResult.browser){return this.parsedResult.browser}return this.parseBrowser()}getBrowserName(toLowerCase){if(toLowerCase){return String(this.getBrowser().name).toLowerCase()||""}return this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){if(this.parsedResult.os){return this.parsedResult.os}return this.parseOS()}parseOS(){this.parsedResult.os={};const os=Utils.find(osParsersList,_os=>{if(typeof _os.test==="function"){return _os.test(this)}if(_os.test instanceof Array){return _os.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(os){this.parsedResult.os=os.describe(this.getUA())}return this.parsedResult.os}getOSName(toLowerCase){const{name:name}=this.getOS();if(toLowerCase){return String(name).toLowerCase()||""}return name||""}getOSVersion(){return this.getOS().version}getPlatform(){if(this.parsedResult.platform){return this.parsedResult.platform}return this.parsePlatform()}getPlatformType(toLowerCase=false){const{type:type}=this.getPlatform();if(toLowerCase){return String(type).toLowerCase()||""}return type||""}parsePlatform(){this.parsedResult.platform={};const platform=Utils.find(platformParsersList,_platform=>{if(typeof _platform.test==="function"){return _platform.test(this)}if(_platform.test instanceof Array){return _platform.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(platform){this.parsedResult.platform=platform.describe(this.getUA())}return this.parsedResult.platform}getEngine(){if(this.parsedResult.engine){return this.parsedResult.engine}return this.parseEngine()}getEngineName(toLowerCase){if(toLowerCase){return String(this.getEngine().name).toLowerCase()||""}return this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};const engine=Utils.find(enginesParsersList,_engine=>{if(typeof _engine.test==="function"){return _engine.test(this)}if(_engine.test instanceof Array){return _engine.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(engine){this.parsedResult.engine=engine.describe(this.getUA())}return this.parsedResult.engine}parse(){this.parseBrowser();this.parseOS();this.parsePlatform();this.parseEngine();return this}getResult(){return Utils.assign({},this.parsedResult)}satisfies(checkTree){const platformsAndOSes={};let platformsAndOSCounter=0;const browsers={};let browsersCounter=0;const allDefinitions=Object.keys(checkTree);allDefinitions.forEach(key=>{const currentDefinition=checkTree[key];if(typeof currentDefinition==="string"){browsers[key]=currentDefinition;browsersCounter+=1}else if(typeof currentDefinition==="object"){platformsAndOSes[key]=currentDefinition;platformsAndOSCounter+=1}});if(platformsAndOSCounter>0){const platformsAndOSNames=Object.keys(platformsAndOSes);const OSMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isOS(name));if(OSMatchingDefinition){const osResult=this.satisfies(platformsAndOSes[OSMatchingDefinition]);if(osResult!==void 0){return osResult}}const platformMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isPlatform(name));if(platformMatchingDefinition){const platformResult=this.satisfies(platformsAndOSes[platformMatchingDefinition]);if(platformResult!==void 0){return platformResult}}}if(browsersCounter>0){const browserNames=Object.keys(browsers);const matchingDefinition=Utils.find(browserNames,name=>this.isBrowser(name,true));if(matchingDefinition!==void 0){return this.compareVersion(browsers[matchingDefinition])}}return undefined}isBrowser(browserName,includingAlias=false){const defaultBrowserName=this.getBrowserName().toLowerCase();let browserNameLower=browserName.toLowerCase();const alias=Utils.getBrowserTypeByAlias(browserNameLower);if(includingAlias&&alias){browserNameLower=alias.toLowerCase()}return browserNameLower===defaultBrowserName}compareVersion(version){let expectedResults=[0];let comparableVersion=version;let isLoose=false;const currentBrowserVersion=this.getBrowserVersion();if(typeof currentBrowserVersion!=="string"){return void 0}if(version[0]===">"||version[0]==="<"){comparableVersion=version.substr(1);if(version[1]==="="){isLoose=true;comparableVersion=version.substr(2)}else{expectedResults=[]}if(version[0]===">"){expectedResults.push(1)}else{expectedResults.push(-1)}}else if(version[0]==="="){comparableVersion=version.substr(1)}else if(version[0]==="~"){isLoose=true;comparableVersion=version.substr(1)}return expectedResults.indexOf(Utils.compareVersions(currentBrowserVersion,comparableVersion,isLoose))>-1}isOS(osName){return this.getOSName(true)===String(osName).toLowerCase()}isPlatform(platformType){return this.getPlatformType(true)===String(platformType).toLowerCase()}isEngine(engineName){return this.getEngineName(true)===String(engineName).toLowerCase()}is(anything,includingAlias=false){return this.isBrowser(anything,includingAlias)||this.isOS(anything)||this.isPlatform(anything)}some(anythings=[]){return anythings.some(anything=>this.is(anything))}}class Bowser{static getParser(UA,skipParsing=false){if(typeof UA!=="string"){throw new Error("UserAgent should be a string")}return new Parser(UA,skipParsing)}static parse(UA){return new Parser(UA).getResult()}static get BROWSER_MAP(){return BROWSER_MAP}static get ENGINE_MAP(){return ENGINE_MAP}static get OS_MAP(){return OS_MAP}static get PLATFORMS_MAP(){return PLATFORMS_MAP}}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t=this._data.length){return undefined}var res=this._data.slice(this._pos,this._pos+bytes);this._pos+=bytes;return res}},{key:"set",value:function set(pos,data){this._pos=pos;this._data=data}},{key:"clear",value:function clear(){this._pos=0;this._data=new Uint8Array}}])}();var PvFileIDB=function(_PvFile){function PvFileIDB(path,meta,db,mode){var _this;_classCallCheck(this,PvFileIDB);_this=_callSuper$1(this,PvFileIDB);_this._pageSize=512*1024;_this._pagePtr=0;_this._pageOffset=0;_this._path=path;_this._meta=meta;_this._db=db;_this._mode=mode;_this._cache=new PvCache;return _this}_inherits(PvFileIDB,_PvFile);return _createClass(PvFileIDB,[{key:"pageSize",get:function get(){return this._pageSize}},{key:"close",value:function(){var _close=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:this._db.close();case 1:case"end":return _context.stop()}},_callee,this)}));function close(){return _close.apply(this,arguments)}return close}()},{key:"read",value:function(){var _read=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(size,count){var _this2=this;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:return _context2.abrupt("return",new Promise(function(resolve,reject){if(!_this2.exists()){reject(new Error("'".concat(_this2._path,"' doesn't exist.")));return}if(_this2._isEOF){var err=new Error("EOF");err.name="EndOfFile";reject(err);return}var copied=0;var maxToCopy=Math.min(size*count,_this2._meta.size);var totalElems=maxToCopy-maxToCopy%size;var buffer=new Uint8Array(totalElems);var res=_this2._cache.get(totalElems);if(res){copied+=res.length;_this2._pageOffset+=res.length;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(totalElems===copied){resolve(res);return}buffer.set(res)}var keyRange=IDBKeyRange.bound("".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr)),"".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr+Math.floor(totalElems/_this2._pageSize)+1)));var store=_this2._store;var req=store.openCursor(keyRange);req.onsuccess=function(){var cursor=req.result;if(!cursor||_this2._isEOF){return}var toCopy=Math.min(totalElems-copied,cursor.value.length-_this2._pageOffset);buffer.set(cursor.value.slice(_this2._pageOffset,_this2._pageOffset+toCopy),copied);copied+=toCopy;_this2._pageOffset+=toCopy;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(copied1&&_args4[1]!==undefined?_args4[1]:1;return _context4.abrupt("return",new Promise(function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(resolve,reject){var _store$transaction3;var store,getCurrentPage,last,newContent,newSize,newMeta,pages,i,keyRange,_store$transaction4;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(_this3._mode==="readonly")){_context3.next=3;break}reject(new Error("Instance is readonly mode only."));return _context3.abrupt("return");case 3:if(!(typeof version!=="number"&&version<=0)){_context3.next=6;break}reject(new Error("Version should be a positive number"));return _context3.abrupt("return");case 6:store=_this3._store;getCurrentPage=function getCurrentPage(){return new Promise(function(res){var req=store.get("".concat(_this3._path,"-").concat(PvFileIDB.createPage(_this3._pagePtr)));req.onsuccess=function(){if(req.result!==undefined){res(req.result.slice(0,_this3._pageOffset))}else{res(new Uint8Array(0))}}})};_context3.next=10;return getCurrentPage();case 10:last=_context3.sent;newContent=new Uint8Array(last.length+content.length);newContent.set(last);newContent.set(content,last.length);newSize=_this3._pagePtr*_this3._pageSize+newContent.length;newMeta={size:newSize,numPages:Math.ceil(newSize/_this3._pageSize),version:version,pageSize:_this3._pageSize};store.put(newMeta,_this3._path);pages=Math.ceil(newContent.length/_this3._pageSize);for(i=0;i=this._meta.numPages-1&&this._pageOffset>=this._meta.size%this._pageSize}},{key:"_store",get:function get(){return this._db.transaction(PV_FILE_STORE,this._mode).objectStore(PV_FILE_STORE)}}],[{key:"open",value:function open(path,mode){if(!self.indexedDB){var error=new Error("IndexedDB is not supported");error.name="IndexedDBNotSupported";throw error}return new Promise(function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(resolve,reject){var db,req,_error2;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1)switch(_context7.prev=_context7.next){case 0:_context7.prev=0;_context7.next=3;return getDB();case 3:db=_context7.sent;req=db.transaction(PV_FILE_STORE,"readwrite").objectStore(PV_FILE_STORE).get(path);req.onerror=function(){reject(req.error)};req.onsuccess=function(){var meta=req.result;var dbMode=mode.includes("r")?"readonly":"readwrite";if(meta===undefined&&dbMode==="readonly"){var _error=new Error("'".concat(path,"' doesn't exist."));_error.name="FileNotExists";reject(_error);return}var fileIDB=new PvFileIDB(path,meta,db,dbMode);if(mode.includes("a")){fileIDB.seek(0,2)}resolve(fileIDB)};_context7.next=12;break;case 9:_context7.prev=9;_context7.t0=_context7["catch"](0);if(_context7.t0.name==="InvalidStateError"){_error2=new Error("IndexedDB is not supported");_error2.name="IndexedDBNotSupported";reject(_error2)}else{reject(_context7.t0)}case 12:case"end":return _context7.stop()}},_callee7,null,[[0,9]])}));return function(_x8,_x9){return _ref3.apply(this,arguments)}}())}},{key:"createPage",value:function createPage(page){return("00000"+page).slice(-6)}}])}(PvFile);function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}var PvFileMem=function(_PvFile){function PvFileMem(path,meta,db,mode){var _this;_classCallCheck(this,PvFileMem);_this=_callSuper(this,PvFileMem);_this._pos=0;_this._path=path;_this._meta=meta;_this._mode=mode;return _this}_inherits(PvFileMem,_PvFile);return _createClass(PvFileMem,[{key:"close",value:function close(){return}},{key:"read",value:function read(size,count){if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(this._isEOF){var err=new Error("EOF");err.name="EndOfFile";throw err}var toCopy=Math.min(size*count,this._file.length-this._pos);var totalElems=toCopy-toCopy%size;var buffer=new Uint8Array(totalElems);buffer.set(this._file.slice(this._pos,this._pos+totalElems),0);this._pos+=totalElems;return buffer}},{key:"write",value:function write(content){var version=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;var newFile=new Uint8Array(this._pos+content.length);if(this._file!==undefined){newFile.set(this._file.slice(0,this._pos));newFile.set(content,this._pos)}else{newFile.set(content)}this._file=newFile;this._pos+=content.length}},{key:"seek",value:function seek(offset,whence){if(!this.exists()&&this._mode==="readonly"){throw new Error("'".concat(this._path,"' doesn't exist."))}if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(offset<0){var err=new Error("EOF");err.name="EndOfFile";throw err}var newOffset;if(whence===0){newOffset=Math.min(offset,this._file.length)}else if(whence===1){newOffset=Math.min(this._pos+offset,this._file.length)}else if(whence===2){newOffset=Math.min(this._file.length+offset,this._file.length)}else{throw new Error("Invalid operation: ".concat(whence,"."))}this._pos=newOffset}},{key:"tell",value:function tell(){if(!this.exists()){return-1}return this._pos}},{key:"remove",value:function(){var _remove=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(this.exists()){_context.next=2;break}throw new Error("ENOENT");case 2:PvFileMem._memFiles["delete"](this._path);this._pos=0;case 4:case"end":return _context.stop()}},_callee,this)}));function remove(){return _remove.apply(this,arguments)}return remove}()},{key:"exists",value:function exists(){return this._file!==undefined}},{key:"_isEOF",get:function get(){return this._pos>=this._file.length}},{key:"_file",get:function get(){return PvFileMem._memFiles.get(this._path)},set:function set(content){PvFileMem._memFiles.set(this._path,content)}}],[{key:"open",value:function open(path,mode){var file=PvFileMem._memFiles.get(path);var dbMode=mode.includes("r")?"readonly":"readwrite";if(file===undefined&&dbMode==="readonly"){var error=new Error("'".concat(path,"' doesn't exist."));error.name="FileNotExists";throw error}var fileMem=new PvFileMem(path,undefined,undefined,dbMode);if(mode.includes("a")){fileMem.seek(0,2)}return fileMem}}])}(PvFile);PvFileMem._memFiles=new Map;function unsignedAddress(address){if(address<0){return address>>>0}return address}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayLikeToArray$2(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray$1(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray$1(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray$1(r,a):void 0}}function _arrayLikeToArray$1(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=16){this.endComputePass();this.flushCommandEncoder()}}},{key:"endComputePass",value:function endComputePass(){if(this._passEncoder){this._passEncoder.end();this._passEncoder=null}}},{key:"getBuffer",value:function getBuffer(sizeBytes,usage){var mappedAtCreation=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var label=arguments.length>3?arguments[3]:undefined;var key=this.getBufferKey(sizeBytes,usage);if(this.bufferReusePool.has(key)){var buffers=this.bufferReusePool.get(key);if(buffers&&buffers.length>0){return buffers.pop()}}return this.device.createBuffer({size:sizeBytes*Uint8Array.BYTES_PER_ELEMENT,usage:usage,mappedAtCreation:mappedAtCreation,label:label})}},{key:"scheduleUniformBufferForRelease",value:function scheduleUniformBufferForRelease(buffer){this._uniformBuffersPendingRelease.push(buffer)}},{key:"releaseBuffer",value:function releaseBuffer(buffer){var clearBuffer=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(clearBuffer){this.endComputePass();this.commandEncoder.clearBuffer(buffer,0,buffer.size)}var key=this.getBufferKey(buffer.size,buffer.usage);if(!this.bufferReusePool.has(key)){this.bufferReusePool.set(key,[])}this.bufferReusePool.get(key).push(buffer)}},{key:"sync",value:function(){var _sync=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){var _this=this;var _iterator,_step,k,buffers,_iterator3,_step3,b,_loop,_i,_Object$entries;return _regeneratorRuntime.wrap(function _callee$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:this.endComputePass();this.flushCommandEncoder();_context3.next=4;return this.device.queue.onSubmittedWorkDone();case 4:_iterator=_createForOfIteratorHelper$1(this.bufferReusePool.keys());try{for(_iterator.s();!(_step=_iterator.n()).done;){k=_step.value;buffers=this.bufferReusePool.get(k);if(buffers&&buffers.length>0){_iterator3=_createForOfIteratorHelper$1(buffers);try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){b=_step3.value;b===null||b===void 0||b.destroy()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}}catch(err){_iterator.e(err)}finally{_iterator.f()}this.bufferReusePool.clear();_loop=_regeneratorRuntime.mark(function _loop(){var _Object$entries$_i,shaderName,timestampBuffers,_iterator2,_step2,_loop2;return _regeneratorRuntime.wrap(function _loop$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_Object$entries$_i=_slicedToArray(_Object$entries[_i],2),shaderName=_Object$entries$_i[0],timestampBuffers=_Object$entries$_i[1];if(!_this.shaderTimes[shaderName]){_this.shaderTimes[shaderName]=[]}_iterator2=_createForOfIteratorHelper$1(timestampBuffers);_context2.prev=3;_loop2=_regeneratorRuntime.mark(function _loop2(){var timestampBuffer;return _regeneratorRuntime.wrap(function _loop2$(_context){while(1)switch(_context.prev=_context.next){case 0:timestampBuffer=_step2.value;timestampBuffer.mapAsync(GPUMapMode.READ).then(function(){var times=new BigInt64Array(timestampBuffer.getMappedRange());var timeDif=times[1]-times[0];timestampBuffer.unmap();timestampBuffer.destroy();_this.shaderTimes[shaderName].push(timeDif)});case 2:case"end":return _context.stop()}},_loop2)});_iterator2.s();case 6:if((_step2=_iterator2.n()).done){_context2.next=10;break}return _context2.delegateYield(_loop2(),"t0",8);case 8:_context2.next=6;break;case 10:_context2.next=15;break;case 12:_context2.prev=12;_context2.t1=_context2["catch"](3);_iterator2.e(_context2.t1);case 15:_context2.prev=15;_iterator2.f();return _context2.finish(15);case 18:case"end":return _context2.stop()}},_loop,null,[[3,12,15,18]])});_i=0,_Object$entries=Object.entries(this.timestampBuffers);case 9:if(!(_i<_Object$entries.length)){_context3.next=14;break}return _context3.delegateYield(_loop(),"t0",11);case 11:_i++;_context3.next=9;break;case 14:this.timestampBuffers={};case 15:case"end":return _context3.stop()}},_callee,this)}));function sync(){return _sync.apply(this,arguments)}return sync}()},{key:"reportShaderTimes",value:function reportShaderTimes(){for(var _i2=0,_Object$entries2=Object.entries(this.shaderTimes);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i2],2),shaderName=_Object$entries2$_i[0],shaderTimes=_Object$entries2$_i[1];var timeSum=0n;var _iterator4=_createForOfIteratorHelper$1(shaderTimes),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var shaderTime=_step4.value;timeSum=timeSum+shaderTime}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}var totalSeconds=Number(timeSum)*1e-9;var avgSeconds=(totalSeconds/shaderTimes.length).toFixed(7);console.log("".concat(shaderName,", ").concat(totalSeconds.toFixed(5),", ").concat(avgSeconds))}this.shaderTimes={}}},{key:"flushCommandEncoder",value:function flushCommandEncoder(){var _this2=this;this.device.queue.submit([this.commandEncoder.finish()]);this._commandEncoder=null;this._numCommandsEncoded=0;this._stageBuffersPendingMap.forEach(function(buffer){buffer.destroy()});this._stageBuffersPendingMap=[];this._uniformBuffersPendingRelease.forEach(function(buffer){_this2.releaseBuffer(buffer,false)});this._uniformBuffersPendingRelease=[]}},{key:"writeBuffer",value:function writeBuffer(sizeBytes,offset,srcArray,dstBuffer){var stagingBuffer=this.getBuffer(sizeBytes,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,true);new Uint8Array(stagingBuffer.getMappedRange()).set(srcArray);stagingBuffer.unmap();this._stageBuffersPendingMap.push(stagingBuffer);this.endComputePass();this.commandEncoder.copyBufferToBuffer(stagingBuffer,0,dstBuffer,offset,sizeBytes);this.numCommandsEncoded++}},{key:"dispatchComputerShader",value:function dispatchComputerShader(bindGroup,pipeline,shaderName,workgroupCountX,workgroupCountY,workgroupCountZ){if(this.isTimerEnabled){var querySet=this.device.createQuerySet({type:"timestamp",count:2});var timestampWrites={querySet:querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1};this.endComputePass();this._passEncoder=this.commandEncoder.beginComputePass({timestampWrites:timestampWrites});this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.endComputePass();var size=2*BigInt64Array.BYTES_PER_ELEMENT;var resolveBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC});this.commandEncoder.resolveQuerySet(querySet,0,2,resolveBuffer,0);var resultBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});this.commandEncoder.copyBufferToBuffer(resolveBuffer,0,resultBuffer,0,size);if(!this.timestampBuffers[shaderName]){this.timestampBuffers[shaderName]=[]}this.timestampBuffers[shaderName].push(resultBuffer);this.numCommandsEncoded+=3}else{if(!this._passEncoder){this._passEncoder=this.commandEncoder.beginComputePass()}this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.numCommandsEncoded++}}}])}();var PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE=256;var gpuDevices=new Map;var gpuBuffers=new Map;var emptyShader="\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main_empty() {}\n";var shaderEntryPoint="main";var PRECOMPUTE_ENCODING_SHADER_NAME="pv_picollm_attention_precompute_encoding_shader";var attentionPrecomputeEncodingShaderSource="\nstruct argsStruct {\n dimension: u32,\n steps: u32,\n theta: f32,\n encoding_offset: u32,\n rope_scale: f32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar rope_scales: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let ds = local_id.x;\n \n for (var t = ts; t < args.steps; t += num_workgroups.x) {\n for (var d = ds; d < (args.dimension / 2u); d += workgroup_size_x) {\n let f = 2u * d;\n let x = f32(t) / (f32(rope_scales[f >> 1]) * pow(args.theta, f32(f) / f32(args.dimension)));\n let encoding_idx = args.encoding_offset + (t * args.dimension) + f;\n encoding[encoding_idx] = cos(x) * args.rope_scale;\n encoding[encoding_idx + 1] = sin(x) * args.rope_scale;\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionPrecomputeEncodingShader=function loadAttentionPrecomputeEncodingShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention precompute encoding bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention precompute encoding pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention precompute encoding shader module",code:attentionPrecomputeEncodingShaderSource});var computePipeline=device.createComputePipeline({label:"attention precompute encoding pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_ROPE_INTERLEAVED_SHADER_NAME="pv_picollm_attention_encode_rope_interleaved_shader";var attentionEncodeRopeInterleavedShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let x_start = args.x_offset + (t * args.num_heads + h) * args.head_dimension;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < (args.head_dimension / 2u); d += workgroup_size_x) {\n let i = 2u * d;\n let x_idx = x_start + i;\n let encoding_idx = encoding_start + i;\n \n let re = x[x_idx];\n let im = x[x_idx + 1];\n x[x_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[x_idx + 1] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeRopeInterleavedShader=function loadAttentionEncodeRopeInterleavedShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode rope interleave bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode rope interleave pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode rope interleave shader module",code:attentionEncodeRopeInterleavedShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode rope interleave pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_SHADER_NAME="pv_picollm_attention_encode_shader";var attentionEncodeShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let half_rope = (args.rope_dimension / 2);\n let xr_start = args.x_offset + ((t * args.num_heads + h) * args.head_dimension);\n let xi_start = xr_start + half_rope;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < half_rope; d += workgroup_size_x) {\n let xr_idx = xr_start + d;\n let xi_idx = xi_start + d;\n let encoding_idx = encoding_start + (2 * d);\n\n let re = x[xr_idx];\n let im = x[xi_idx];\n x[xr_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[xi_idx] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeShader=function loadAttentionEncodeShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode bind layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode shader",code:attentionEncodeShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var DOT_PRODUCT_SHADER_NAME="pv_picollm_attention_dot_product_shader";var attentionDotProductShaderSource="\nstruct argsStruct { \n n: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n norm: f32,\n length1: u32,\n num_keys: u32,\n query_offset: u32,\n keys_offset: u32,\n key_intercepts_offset: u32,\n key_slopes_offset: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar query: array;\n\n@group(0) @binding(2)\nvar keys: array;\n\n@group(0) @binding(3)\nvar key_intercepts: array;\n\n@group(0) @binding(4)\nvar key_slopes: array;\n\n@group(0) @binding(5)\nvar scores: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n \n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n \n let keys_local_a = args.keys_offset + (start_index * args.head_dimension);\n let key_intercepts_local_a = args.key_intercepts_offset + start_index; \n let key_slopes_local_a = args.key_slopes_offset + start_index;\n \n let keys_local_b = args.keys_offset + (head_offset * args.head_dimension);\n let key_intercepts_local_b = args.key_intercepts_offset + head_offset; \n let key_slopes_local_b = args.key_slopes_offset + head_offset;\n \n let scores_local = args.scores_offset + (global_id.x * args.num_keys);\n let query_local = args.query_offset + (((global_id.x * args.n) + args.tq) * args.head_dimension);\n \n for (var i = 0u; i < args.head_dimension; i++) { \n for (var k = 0u; k < args.num_keys; k++) {\n if (k < args.length1) { \n let key_idx = keys_local_a + (k * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_a + k] + (key_slopes[key_slopes_local_a + k] * key_val));\n scores[scores_local + k] += tmp;\n }\n else {\n let j = k - args.length1;\n let key_idx = keys_local_b + (j * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_b + j] + (key_slopes[key_slopes_local_b + j] * key_val));\n scores[scores_local + k] += tmp;\n }\n } \n }\n \n for (var k = 0u; k < args.num_keys; k++) {\n scores[scores_local + k] *= args.norm;\n }\n}\n\n".concat(emptyShader);var loadAttentionDotProductShader=function loadAttentionDotProductShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention dot product bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention dot product pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention dot product shader module",code:attentionDotProductShaderSource});var computePipeline=device.createComputePipeline({label:"attention dot product pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var SOFTMAX_SHADER_NAME="pv_picollm_attention_softmax_shader";var attentionSoftmaxShaderSource="\nstruct argsStruct { \n num_heads: u32,\n num_keys: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar scores: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let scores_start = args.scores_offset + (global_id.x * args.num_keys);\n \n var max_index: u32 = 0;\n for (var i = 1u; i < args.num_keys; i++) {\n if (scores[scores_start + i] > scores[scores_start + max_index]) {\n max_index = i;\n }\n }\n let max: f32 = scores[scores_start + max_index];\n\n var sum: f32 = 0.0;\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] = exp(scores[scores_start + i] - max);\n sum += scores[scores_start + i];\n }\n\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] /= sum;\n }\n}\n\n".concat(emptyShader);var loadAttentionSoftmaxShader=function loadAttentionSoftmaxShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention softmax bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention softmax pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention softmax shader module",code:attentionSoftmaxShaderSource});var computePipeline=device.createComputePipeline({label:"attention softmax pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var FIR_SHADER_NAME="pv_picollm_attention_fir_shader";var attentionFirShaderSource="\nstruct argsStruct { \n length1: u32,\n length2: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n values_offset: u32,\n value_intercepts_offset: u32,\n value_slopes_offset: u32,\n scores_offset: u32,\n output_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar values: array;\n\n@group(0) @binding(2)\nvar value_intercepts: array;\n\n@group(0) @binding(3)\nvar value_slopes: array;\n\n@group(0) @binding(4)\nvar scores: array;\n\n@group(0) @binding(5)\nvar output: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n\n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n\n let values_local_a = args.values_offset + (start_index * args.head_dimension);\n let value_intercepts_local_a = args.value_intercepts_offset + start_index;\n let value_slopes_local_a = args.value_slopes_offset + start_index;\n let values_local_b = args.values_offset + (head_offset * args.head_dimension);\n let value_intercepts_local_b = args.value_intercepts_offset + head_offset;\n let value_slopes_local_b = args.value_slopes_offset + head_offset;\n let scores_local = args.scores_offset + (global_id.x * (args.length1 + args.length2));\n let output_local = args.output_offset + (((args.tq * args.num_heads) + global_id.x) * args.head_dimension);\n\n for (var i = 0u; i < args.head_dimension; i++) {\n var tmp: f32 = 0.0;\n for (var k = 0u; k < args.length1; k++) {\n let value_idx = values_local_a + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + k] * (value_intercepts[value_intercepts_local_a + k] + (value_slopes[value_slopes_local_a + k] * value_val)); \n }\n for (var k = 0u; k < args.length2; k++) {\n let value_idx = values_local_b + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + args.length1 + k] * (value_intercepts[value_intercepts_local_b + k] + (value_slopes[value_slopes_local_b + k] * value_val)); \n }\n output[output_local + i] = tmp;\n }\n}\n\n".concat(emptyShader);var loadAttentionFirShader=function loadAttentionFirShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention fir bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention fir pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention fir shader module",code:attentionFirShaderSource});var computePipeline=device.createComputePipeline({label:"attention fir pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var UPDATE_KV_SHADER_NAME="pv_picollm_attention_update_kv_shader";var attentionUpdateKvShaderSource="\nstruct argsStruct {\n n: u32,\n num_kv_heads: u32,\n window_length: u32,\n position: u32,\n head_dimension: u32,\n tf_offset: u32,\n kv_offset: u32,\n kv_intercepts_offset: u32,\n kv_slopes_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar kv: array;\n\n@group(0) @binding(3)\nvar kv_intercepts: array;\n\n@group(0) @binding(4)\nvar kv_slopes: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x >= args.num_kv_heads) {\n return;\n }\n \n for (var i = 0u; i < args.n; i++) {\n let index = (global_id.x * args.window_length) + ((args.position + i) % args.window_length);\n let tf_start = args.tf_offset + (((i * args.num_kv_heads) + global_id.x) * args.head_dimension);\n let kv_start = args.kv_offset + ((index * args.head_dimension) / 4);\n let kv_intercepts_start = args.kv_intercepts_offset + index;\n let kv_slopes_start = args.kv_slopes_offset + index;\n \n var xmax = tf[tf_start]; \n var xmin = tf[tf_start]; \n \n for (var j = 1u; j < args.head_dimension; j++) {\n xmax = max(xmax, tf[tf_start + j]);\n xmin = min(xmin, tf[tf_start + j]);\n }\n\n kv_intercepts[kv_intercepts_start] = xmin;\n kv_slopes[kv_slopes_start] = f32(xmax - xmin) / 255.0;\n\n for (var j = 0u; j < args.head_dimension; j++) {\n let kv_idx = kv_start + (j / 4);\n let kv_val = u32(round((tf[tf_start + j] - xmin) / kv_slopes[kv_slopes_start])); \n kv[kv_idx] = insertBits(kv[kv_idx], extractBits(kv_val, 0u, 8u), (j * 8u) % 32u, 8u); \n }\n }\n}\n\n".concat(emptyShader);var loadAttentionUpdateKvShader=function loadAttentionUpdateKvShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention update kv bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention update kv pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention update kv shader module",code:attentionUpdateKvShaderSource});var computePipeline=device.createComputePipeline({label:"attention update kv pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var TRANSPOSE_QUERY_SHADER_NAME="pv_picollm_attention_transpose_query_shader";var attentionTransposeQueryShaderSource="\nstruct argsStruct {\n n: u32,\n num_heads: u32,\n head_dimension: u32,\n tf_offset: u32,\n hf_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar hf: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n\n if (workgroup_id.x >= args.num_heads || workgroup_id.y >= args.n || local_id.x >= args.head_dimension) {\n return;\n }\n \n let tf_idx = args.tf_offset + (workgroup_id.y * args.num_heads * args.head_dimension) + (workgroup_id.x * args.head_dimension) + local_id.x; \n let hf_idx = args.hf_offset + (workgroup_id.x * args.n * args.head_dimension) + (workgroup_id.y * args.head_dimension) + local_id.x; \n hf[hf_idx] = tf[tf_idx];\n}\n\n".concat(emptyShader);var loadAttentionTransposeQueryShader=function loadAttentionTransposeQueryShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention transpose query bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention transpose query pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention transpose query shader module",code:attentionTransposeQueryShaderSource});var computePipeline=device.createComputePipeline({label:"attention transpose query pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var attentionShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},PRECOMPUTE_ENCODING_SHADER_NAME,loadAttentionPrecomputeEncodingShader),ENCODE_ROPE_INTERLEAVED_SHADER_NAME,loadAttentionEncodeRopeInterleavedShader),ENCODE_SHADER_NAME,loadAttentionEncodeShader),DOT_PRODUCT_SHADER_NAME,loadAttentionDotProductShader),SOFTMAX_SHADER_NAME,loadAttentionSoftmaxShader),FIR_SHADER_NAME,loadAttentionFirShader),UPDATE_KV_SHADER_NAME,loadAttentionUpdateKvShader),TRANSPOSE_QUERY_SHADER_NAME,loadAttentionTransposeQueryShader);var SILU_SHADER_NAME="pv_picollm_feed_forward_silu_shader";var feedForwardSiluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = x[global_id.x] / (1.0 + exp(-x[global_id.x]));\n}\n\n".concat(emptyShader);var loadFeedForwardSiluShader=function loadFeedForwardSiluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff silu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff silu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff silu shader module",code:feedForwardSiluShaderSource});var computePipeline=device.createComputePipeline({label:"ff silu pipline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var GELU_SHADER_NAME="pv_picollm_feed_forward_gelu_shader";var feedForwardGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\nconst a1: f32 = 0.254829592;\nconst a2: f32 = -0.284496736;\nconst a3: f32 = 1.421413741;\nconst a4: f32 = -1.453152027;\nconst a5: f32 = 1.061405429;\nconst p: f32 = 0.3275911;\n\n// A&S formula 7.1.26\nfn erf(x: f32) -> f32 { \n var sign: f32 = 1.0;\n if (x < 0) {\n sign = -1.0;\n }\n var x_abs: f32 = abs(x);\n \n let t: f32 = 1.0 / fma(p, x_abs, 1.0);\n let y: f32 = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-x_abs * x_abs);\n\n return sign * y;\n}\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1.0 + erf(x[global_id.x] * 0.7071067811865475));\n}\n\n".concat(emptyShader);var loadFeedForwardGeluShader=function loadFeedForwardGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff gelu shader module",code:feedForwardGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ALMOST_GELU_SHADER_NAME="pv_picollm_feed_forward_almost_gelu_shader";var feedForwardAlmostGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1 + tanh(0.7978845608028654 * (x[global_id.x] + (0.044715f * x[global_id.x] * x[global_id.x] * x[global_id.x]))));\n}\n\n".concat(emptyShader);var loadFeedForwardAlmostGeluShader=function loadFeedForwardAlmostGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff almost gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff almost gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff almost gelu shader module",code:feedForwardAlmostGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff almost gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var MULTIPLY_BUFFERS_SHADER_NAME="pv_picollm_feed_forward_multiply_buffers_shader";var feedForwardMultiplyBuffersShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n y[global_id.x] *= x[global_id.x];\n}\n\n".concat(emptyShader);var loadFeedForwardMultiplyBuffersShader=function loadFeedForwardMultiplyBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff multiply buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff multiply buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff multiply buffers shader module",code:feedForwardMultiplyBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"ff multiply buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var feedForwardShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SILU_SHADER_NAME,loadFeedForwardSiluShader),GELU_SHADER_NAME,loadFeedForwardGeluShader),ALMOST_GELU_SHADER_NAME,loadFeedForwardAlmostGeluShader),MULTIPLY_BUFFERS_SHADER_NAME,loadFeedForwardMultiplyBuffersShader);var FORWARD_SHADER_NAME$1="pv_picollm_gate_forward_shader";var gateForwardShaderSource="\n\nstruct pv_picollm_gate_ix_t {\n i: u32,\n x: f32,\n}\n\n@group(0) @binding(0)\nvar y: array;\n\n@group(0) @binding(1)\nvar indices: array;\n\n@group(0) @binding(2)\nvar weights: array;\n\noverride n: u32 = 0;\noverride k: u32 = 0;\noverride num_experts: u32 = 0;\n\noverride y_offset: u32 = 0;\noverride indices_offset: u32 = 0;\noverride weights_offset: u32 = 0;\n\nvar ixs: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(global_invocation_id) global_id : vec3\n) {\n if (global_id.x >= n) {\n return;\n }\n \n var y_start: u32 = y_offset + global_id.x * num_experts;\n for (var j = 0u; j < num_experts; j++) {\n ixs[j].i = j;\n ixs[j].x = y[y_start + j];\n }\n\n for (var i = 0u; i < num_experts - 1; i++) {\n for (var j = 0u; j < num_experts - i - 1; j++) {\n if (ixs[j].x < ixs[j + 1].x) {\n let tmp = ixs[j];\n ixs[j] = ixs[j + 1];\n ixs[j + 1] = tmp;\n }\n }\n }\n\n for (var j = 0u; j < k; j++) {\n indices[indices_offset + (global_id.x * k) + j] = ixs[j].i;\n weights[weights_offset + (global_id.x * k) + j] = ixs[j].x;\n }\n\n var max_weight: f32 = weights[weights_offset + (global_id.x * k)];\n for (var j = 1u; j < k; j++) {\n max_weight = max(max_weight, weights[weights_offset + (global_id.x * k) + j]);\n }\n\n var sum_weight: f32 = 0.0;\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] = exp(weights[weights_offset + (global_id.x * k) + j] - max_weight);\n sum_weight += weights[weights_offset + (global_id.x * k) + j];\n }\n\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] /= sum_weight;\n }\n}\n\n".concat(emptyShader);var loadGateForwardShader=function loadGateForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"gate forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"gate forward pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"gate forward shader module",code:gateForwardShaderSource});var computePipeline=device.createComputePipeline({layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{num_experts:1}}});return{computePipeline:computePipeline,pipelineLayout:pipelineLayout,shaderModule:shaderModule}};var gateForwardShader=_defineProperty({},FORWARD_SHADER_NAME$1,loadGateForwardShader);var ADD_TO_BUFFER_SHADER_NAME$1="pv_picollm_moe_transformer_add_to_buffer_shader";var moeTransformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n x_offset: u32,\n buffer_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n\n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddToBufferShader=function loadMoeTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add to buffer shader module",code:moeTransformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME="pv_picollm_moe_transformer_multiply_weight_and_add_to_buffer_shader";var moeTransformerMultiplyWeightAndToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n weights_index: u32,\n y_index: u32,\n weights_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weights: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + args.y_index + global_id.x] += weights[args.weights_index] + x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerMultiplyWeightAndAddToBufferShader=function loadMoeTransformerMultiplyWeightAndAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer multiply weight and add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer multiply weight and add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer multiply weight and add to buffer shader module",code:moeTransformerMultiplyWeightAndToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer multiply weight and add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME$1="pv_picollm_moe_transformer_add_buffers_shader";var moeTransformerAddBuffersShaderSource="\nstruct argsStruct {\n n: u32, \n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddBuffersShader=function loadMoeTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add buffers shader module",code:moeTransformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var moeTransformerForwardShaders=_defineProperty(_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME$1,loadMoeTransformerAddToBufferShader),MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME,loadMoeTransformerMultiplyWeightAndAddToBufferShader),ADD_BUFFERS_SHADER_NAME$1,loadMoeTransformerAddBuffersShader);var sdataReduce="\n for (var s: u32 = workgroup_size_x / 2; s > 0; s >>= 1) {\n if tid < s {\n sdata[tid] += sdata[tid + s];\n }\n workgroupBarrier();\n }\n";var dividePadFunction="\n fn divide_pad(a: u32, b: u32) -> u32 { \n return (a + b - 1) / b;\n }\n";var FORWARD_MULTI_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_multi_buffer_shader";var FORWARD_SINGLE_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_single_buffer_shader";var normForwardShaderSource=function normForwardShaderSource(isMulti){return"\nstruct argsStruct {\n n: u32,\n dimension: u32,\n remainder: u32,\n remainder_start: u32, \n eps: f32, \n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n".concat(isMulti?"\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3) \nvar y: array;\n":" \n@group(0) @binding(2)\nvar x: array;\n","\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\nvar sdata: array, workgroup_size_x>;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n let tid = local_id.x;\n let m = workgroup_id.x;\n let block_size = workgroup_size_x;\n \n var power_vec: vec4;\n let x_start: u32 = args.x_offset + (m * args.dimension);\n let skip = tid * 4;\n let shift = (block_size * 4);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = x_start + j + skip; \n\n let x_vec = vec4(\n x[local_index],\n x[local_index + 1],\n x[local_index + 2],\n x[local_index + 3]);\n \n power_vec += x_vec * x_vec; \n } \n \n if (tid == 0 && args.remainder > 0) {\n var remainder_vec = vec4(0.0, 0.0, 0.0, 0.0);\n let x_idx = x_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) { \n remainder_vec[j] = x[x_idx + j];\n } \n power_vec += remainder_vec * remainder_vec;\n }\n \n sdata[tid] = power_vec;\n workgroupBarrier();\n\n ").concat(sdataReduce,"\n \n let power = sdata[0].x + sdata[0].y + sdata[0].z + sdata[0].w;\n let norm: vec4 = vec4(1.0 / sqrt((power / f32(args.dimension)) + args.eps));\n \n let y_start: u32 = args.y_offset + (m * args.dimension);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = j + skip;\n let x_idx = x_start + local_index;\n let x_vec = vec4(\n x[x_idx],\n x[x_idx + 1],\n x[x_idx + 2],\n x[x_idx + 3]);\n \n let weight_vec = vec4(\n weight[local_index],\n weight[local_index + 1],\n weight[local_index + 2],\n weight[local_index + 3]);\n let y_vec = x_vec * norm * weight_vec;\n \n let y_idx = y_start + local_index;\n").concat(isMulti?" \n y[y_idx] = y_vec.x;\n y[y_idx + 1] = y_vec.y;\n y[y_idx + 2] = y_vec.z;\n y[y_idx + 3] = y_vec.w;\n":" \n x[y_idx] = y_vec.x;\n x[y_idx + 1] = y_vec.y;\n x[y_idx + 2] = y_vec.z;\n x[y_idx + 3] = y_vec.w;\n"," \n }\n \n if (tid == 0 && args.remainder > 0) {\n let x_idx = x_start + args.remainder_start;\n let weight_idx = args.remainder_start; \n let y_idx = y_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) {\n").concat(isMulti?" \n y[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n":" \n x[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n"," \n } \n }\n}\n\n").concat(emptyShader)};var loadNormForwardShader=function loadNormForwardShader(device,isMulti){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}}];if(isMulti){entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}});entries.push({binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}else{entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}var bindGroupLayout=device.createBindGroupLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm forward ".concat(isMulti?"multi":"single"," buffer shader module"),code:normForwardShaderSource(isMulti)});var computePipeline=device.createComputePipeline({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,false)}),FORWARD_MULTI_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,true)});var FORWARD_MULTI_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_multi_buffer_shader";var normLayerForwardMultiBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar x: array;\n\n@group(0) @binding(4)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += x[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (x[x_start + j] - mean) * (x[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((x[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardMultiBufferShader=function loadNormLayerForwardMultiBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward multi buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward multi buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward multi buffer shader module",code:normLayerForwardMultiBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward multi buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var FORWARD_SINGLE_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_single_buffer_shader";var normLayerForwardSingleBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += y[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (y[x_start + j] - mean) * (y[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((y[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardSingleBufferShader=function loadNormLayerForwardSingleBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward single buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward single buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward single buffer shader module",code:normLayerForwardSingleBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward single buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normLayerForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME,loadNormLayerForwardSingleBufferShader),FORWARD_MULTI_BUFFER_SHADER_NAME,loadNormLayerForwardMultiBufferShader);var ADD_TO_BUFFER_SHADER_NAME="pv_picollm_transformer_add_to_buffer_shader";var transformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32,\n x_offset: u32,\n buffer_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddToBufferShader=function loadTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add to buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add to buffer shader module",code:transformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add to buffer compute",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME="pv_picollm_transformer_add_buffers_shader";var transformerAddBuffersShaderSource="\n\nstruct argsStruct {\n n: u32,\n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddBuffersShader=function loadTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add buffers shader module",code:transformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var transformerForwardShaders=_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME,loadTransformerAddToBufferShader),ADD_BUFFERS_SHADER_NAME,loadTransformerAddBuffersShader);var FORWARD_SHADER_NAME="pv_picollm_weight_float_forward_shader";var weightFloatForwardShaderSource="\n\nstruct argsStruct {\n nr: u32,\n nc: u32,\n w_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar w: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n if (local_id.x >= args.nr) {\n return;\n }\n let x_start: u32 = args.x_offset + (workgroup_id.x * args.nc);\n let y_idx: u32 = local_id.x + args.y_offset + (workgroup_id.x * args.nr);\n \n let w_start: u32 = args.w_offset + (local_id.x * args.nc);\n for (var j = 0u; j < args.nc; j++) {\n y[y_idx] += w[w_start + j] * x[x_start + j]; \n }\n}\n\n".concat(emptyShader);var loadWeightFloatForwardShader=function loadWeightFloatForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight float forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight float forward pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight float forward shader module",code:weightFloatForwardShaderSource});var computePipeline=device.createComputePipeline({label:"weight float forward pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var weightFloatForwardShader=_defineProperty({},FORWARD_SHADER_NAME,loadWeightFloatForwardShader);var rowsPerBlock=16;var columnsPerBlock=8;var preprocessDim=16;var weightBlockSize=256;var unpackBlock128BitDepth3="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_3(packed_offset: u32) {\n let val_0 = blocks[packed_offset]; \n unpacked[0] = extractBits(val_0, 0u, 3u);\n unpacked[1] = extractBits(val_0, 3u, 3u);\n unpacked[2] = extractBits(val_0, 6u, 3u);\n unpacked[3] = extractBits(val_0, 9u, 3u);\n unpacked[4] = extractBits(val_0, 12u, 3u);\n unpacked[5] = extractBits(val_0, 15u, 3u);\n unpacked[6] = extractBits(val_0, 18u, 3u);\n unpacked[7] = extractBits(val_0, 21u, 3u);\n unpacked[8] = extractBits(val_0, 24u, 3u);\n unpacked[9] = extractBits(val_0, 27u, 3u);\n unpacked[10] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_1, 0u, 1u), 2u, 1u);\n unpacked[11] = extractBits(val_1, 1u, 3u);\n unpacked[12] = extractBits(val_1, 4u, 3u);\n unpacked[13] = extractBits(val_1, 7u, 3u);\n unpacked[14] = extractBits(val_1, 10u, 3u);\n unpacked[15] = extractBits(val_1, 13u, 3u);\n unpacked[16] = extractBits(val_1, 16u, 3u);\n unpacked[17] = extractBits(val_1, 19u, 3u);\n unpacked[18] = extractBits(val_1, 22u, 3u);\n unpacked[19] = extractBits(val_1, 25u, 3u);\n unpacked[20] = extractBits(val_1, 28u, 3u);\n unpacked[21] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_2, 0u, 2u), 1u, 2u); \n unpacked[22] = extractBits(val_2, 2u, 3u);\n unpacked[23] = extractBits(val_2, 5u, 3u);\n unpacked[24] = extractBits(val_2, 8u, 3u);\n unpacked[25] = extractBits(val_2, 11u, 3u);\n unpacked[26] = extractBits(val_2, 14u, 3u);\n unpacked[27] = extractBits(val_2, 17u, 3u);\n unpacked[28] = extractBits(val_2, 20u, 3u);\n unpacked[29] = extractBits(val_2, 23u, 3u);\n unpacked[30] = extractBits(val_2, 26u, 3u);\n unpacked[31] = extractBits(val_2, 29u, 3u);\n \n let val_3 = blocks[packed_offset + 3]; \n unpacked[32] = extractBits(val_3, 0u, 3u);\n unpacked[33] = extractBits(val_3, 3u, 3u);\n unpacked[34] = extractBits(val_3, 6u, 3u);\n unpacked[35] = extractBits(val_3, 9u, 3u);\n unpacked[36] = extractBits(val_3, 12u, 3u);\n unpacked[37] = extractBits(val_3, 15u, 3u);\n unpacked[38] = extractBits(val_3, 18u, 3u);\n unpacked[39] = extractBits(val_3, 21u, 3u);\n unpacked[40] = extractBits(val_3, 24u, 3u);\n unpacked[41] = extractBits(val_3, 27u, 3u);\n unpacked[42] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_4, 0u, 1u), 2u, 1u);\n unpacked[43] = extractBits(val_4, 1u, 3u);\n unpacked[44] = extractBits(val_4, 4u, 3u);\n unpacked[45] = extractBits(val_4, 7u, 3u);\n unpacked[46] = extractBits(val_4, 10u, 3u);\n unpacked[47] = extractBits(val_4, 13u, 3u);\n unpacked[48] = extractBits(val_4, 16u, 3u);\n unpacked[49] = extractBits(val_4, 19u, 3u);\n unpacked[50] = extractBits(val_4, 22u, 3u);\n unpacked[51] = extractBits(val_4, 25u, 3u);\n unpacked[52] = extractBits(val_4, 28u, 3u);\n unpacked[53] = extractBits(val_4, 31u, 1u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_5, 0u, 2u), 1u, 2u); \n unpacked[54] = extractBits(val_5, 2u, 3u);\n unpacked[55] = extractBits(val_5, 5u, 3u);\n unpacked[56] = extractBits(val_5, 8u, 3u);\n unpacked[57] = extractBits(val_5, 11u, 3u);\n unpacked[58] = extractBits(val_5, 14u, 3u);\n unpacked[59] = extractBits(val_5, 17u, 3u);\n unpacked[60] = extractBits(val_5, 20u, 3u);\n unpacked[61] = extractBits(val_5, 23u, 3u);\n unpacked[62] = extractBits(val_5, 26u, 3u);\n unpacked[63] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[64] = extractBits(val_6, 0u, 3u);\n unpacked[65] = extractBits(val_6, 3u, 3u);\n unpacked[66] = extractBits(val_6, 6u, 3u);\n unpacked[67] = extractBits(val_6, 9u, 3u);\n unpacked[68] = extractBits(val_6, 12u, 3u);\n unpacked[69] = extractBits(val_6, 15u, 3u);\n unpacked[70] = extractBits(val_6, 18u, 3u);\n unpacked[71] = extractBits(val_6, 21u, 3u);\n unpacked[72] = extractBits(val_6, 24u, 3u);\n unpacked[73] = extractBits(val_6, 27u, 3u);\n unpacked[74] = extractBits(val_6, 30u, 2u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_7, 0u, 1u), 2u, 1u);\n unpacked[75] = extractBits(val_7, 1u, 3u);\n unpacked[76] = extractBits(val_7, 4u, 3u);\n unpacked[77] = extractBits(val_7, 7u, 3u);\n unpacked[78] = extractBits(val_7, 10u, 3u);\n unpacked[79] = extractBits(val_7, 13u, 3u);\n unpacked[80] = extractBits(val_7, 16u, 3u);\n unpacked[81] = extractBits(val_7, 19u, 3u);\n unpacked[82] = extractBits(val_7, 22u, 3u);\n unpacked[83] = extractBits(val_7, 25u, 3u);\n unpacked[84] = extractBits(val_7, 28u, 3u);\n unpacked[85] = extractBits(val_7, 31u, 1u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_8, 0u, 2u), 1u, 2u); \n unpacked[86] = extractBits(val_8, 2u, 3u);\n unpacked[87] = extractBits(val_8, 5u, 3u);\n unpacked[88] = extractBits(val_8, 8u, 3u);\n unpacked[89] = extractBits(val_8, 11u, 3u);\n unpacked[90] = extractBits(val_8, 14u, 3u);\n unpacked[91] = extractBits(val_8, 17u, 3u);\n unpacked[92] = extractBits(val_8, 20u, 3u);\n unpacked[93] = extractBits(val_8, 23u, 3u);\n unpacked[94] = extractBits(val_8, 26u, 3u);\n unpacked[95] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[96] = extractBits(val_9, 0u, 3u);\n unpacked[97] = extractBits(val_9, 3u, 3u);\n unpacked[98] = extractBits(val_9, 6u, 3u);\n unpacked[99] = extractBits(val_9, 9u, 3u);\n unpacked[100] = extractBits(val_9, 12u, 3u);\n unpacked[101] = extractBits(val_9, 15u, 3u);\n unpacked[102] = extractBits(val_9, 18u, 3u);\n unpacked[103] = extractBits(val_9, 21u, 3u);\n unpacked[104] = extractBits(val_9, 24u, 3u);\n unpacked[105] = extractBits(val_9, 27u, 3u);\n unpacked[106] = extractBits(val_9, 30u, 2u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_10, 0u, 1u), 2u, 1u);\n unpacked[107] = extractBits(val_10, 1u, 3u);\n unpacked[108] = extractBits(val_10, 4u, 3u);\n unpacked[109] = extractBits(val_10, 7u, 3u);\n unpacked[110] = extractBits(val_10, 10u, 3u);\n unpacked[111] = extractBits(val_10, 13u, 3u);\n unpacked[112] = extractBits(val_10, 16u, 3u);\n unpacked[113] = extractBits(val_10, 19u, 3u);\n unpacked[114] = extractBits(val_10, 22u, 3u);\n unpacked[115] = extractBits(val_10, 25u, 3u);\n unpacked[116] = extractBits(val_10, 28u, 3u);\n unpacked[117] = extractBits(val_10, 31u, 1u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_11, 0u, 2u), 1u, 2u); \n unpacked[118] = extractBits(val_11, 2u, 3u);\n unpacked[119] = extractBits(val_11, 5u, 3u);\n unpacked[120] = extractBits(val_11, 8u, 3u);\n unpacked[121] = extractBits(val_11, 11u, 3u);\n unpacked[122] = extractBits(val_11, 14u, 3u);\n unpacked[123] = extractBits(val_11, 17u, 3u);\n unpacked[124] = extractBits(val_11, 20u, 3u);\n unpacked[125] = extractBits(val_11, 23u, 3u);\n unpacked[126] = extractBits(val_11, 26u, 3u);\n unpacked[127] = extractBits(val_11, 29u, 3u);\n}\n";var unpackBlock128BitDepth5="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_5(packed_offset: u32) { \n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 5u);\n unpacked[1] = extractBits(val_0, 5u, 5u);\n unpacked[2] = extractBits(val_0, 10u, 5u);\n unpacked[3] = extractBits(val_0, 15u, 5u);\n unpacked[4] = extractBits(val_0, 20u, 5u);\n unpacked[5] = extractBits(val_0, 25u, 5u);\n unpacked[6] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[6] = insertBits(unpacked[6], extractBits(val_1, 0u, 3u), 2u, 3u); \n unpacked[7] = extractBits(val_1, 3u, 5u);\n unpacked[8] = extractBits(val_1, 8u, 5u);\n unpacked[9] = extractBits(val_1, 13u, 5u);\n unpacked[10] = extractBits(val_1, 18u, 5u);\n unpacked[11] = extractBits(val_1, 23u, 5u);\n unpacked[12] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[12] = insertBits(unpacked[12], extractBits(val_2, 0u, 1u), 4u, 1u);\n unpacked[13] = extractBits(val_2, 1u, 5u);\n unpacked[14] = extractBits(val_2, 6u, 5u);\n unpacked[15] = extractBits(val_2, 11u, 5u);\n unpacked[16] = extractBits(val_2, 16u, 5u);\n unpacked[17] = extractBits(val_2, 21u, 5u);\n unpacked[18] = extractBits(val_2, 26u, 5u);\n unpacked[19] = extractBits(val_2, 31u, 1u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[19] = insertBits(unpacked[19], extractBits(val_3, 0u, 4u), 1u, 4u);\n unpacked[20] = extractBits(val_3, 4u, 5u);\n unpacked[21] = extractBits(val_3, 9u, 5u);\n unpacked[22] = extractBits(val_3, 14u, 5u);\n unpacked[23] = extractBits(val_3, 19u, 5u);\n unpacked[24] = extractBits(val_3, 24u, 5u);\n unpacked[25] = extractBits(val_3, 29u, 3u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[25] = insertBits(unpacked[25], extractBits(val_4, 0u, 2u), 3u, 2u);\n unpacked[26] = extractBits(val_4, 2u, 5u);\n unpacked[27] = extractBits(val_4, 7u, 5u);\n unpacked[28] = extractBits(val_4, 12u, 5u);\n unpacked[29] = extractBits(val_4, 17u, 5u);\n unpacked[30] = extractBits(val_4, 22u, 5u);\n unpacked[31] = extractBits(val_4, 27u, 5u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[32] = extractBits(val_5, 0u, 5u);\n unpacked[33] = extractBits(val_5, 5u, 5u);\n unpacked[34] = extractBits(val_5, 10u, 5u);\n unpacked[35] = extractBits(val_5, 15u, 5u);\n unpacked[36] = extractBits(val_5, 20u, 5u);\n unpacked[37] = extractBits(val_5, 25u, 5u);\n unpacked[38] = extractBits(val_5, 30u, 2u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[38] = insertBits(unpacked[38], extractBits(val_6, 0u, 3u), 2u, 3u);\n unpacked[39] = extractBits(val_6, 3u, 5u);\n unpacked[40] = extractBits(val_6, 8u, 5u);\n unpacked[41] = extractBits(val_6, 13u, 5u);\n unpacked[42] = extractBits(val_6, 18u, 5u);\n unpacked[43] = extractBits(val_6, 23u, 5u);\n unpacked[44] = extractBits(val_6, 28u, 4u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[44] = insertBits(unpacked[44], extractBits(val_7, 0u, 1u), 4u, 1u);\n unpacked[45] = extractBits(val_7, 1u, 5u);\n unpacked[46] = extractBits(val_7, 6u, 5u);\n unpacked[47] = extractBits(val_7, 11u, 5u);\n unpacked[48] = extractBits(val_7, 16u, 5u);\n unpacked[49] = extractBits(val_7, 21u, 5u);\n unpacked[50] = extractBits(val_7, 26u, 5u);\n unpacked[51] = extractBits(val_7, 31u, 1u);\n\n let val_8 = blocks[packed_offset + 8];\n unpacked[51] = insertBits(unpacked[51], extractBits(val_8, 0u, 4u), 1u, 4u);\n unpacked[52] = extractBits(val_8, 4u, 5u);\n unpacked[53] = extractBits(val_8, 9u, 5u);\n unpacked[54] = extractBits(val_8, 14u, 5u);\n unpacked[55] = extractBits(val_8, 19u, 5u);\n unpacked[56] = extractBits(val_8, 24u, 5u);\n unpacked[57] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[57] = insertBits(unpacked[57], extractBits(val_9, 0u, 2u), 3u, 2u);\n unpacked[58] = extractBits(val_9, 2u, 5u);\n unpacked[59] = extractBits(val_9, 7u, 5u);\n unpacked[60] = extractBits(val_9, 12u, 5u);\n unpacked[61] = extractBits(val_9, 17u, 5u);\n unpacked[62] = extractBits(val_9, 22u, 5u);\n unpacked[63] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[64] = extractBits(val_10, 0u, 5u);\n unpacked[65] = extractBits(val_10, 5u, 5u);\n unpacked[66] = extractBits(val_10, 10u, 5u);\n unpacked[67] = extractBits(val_10, 15u, 5u);\n unpacked[68] = extractBits(val_10, 20u, 5u);\n unpacked[69] = extractBits(val_10, 25u, 5u);\n unpacked[70] = extractBits(val_10, 30u, 2u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[70] = insertBits(unpacked[70], extractBits(val_11, 0u, 3u), 2u, 3u);\n unpacked[71] = extractBits(val_11, 3u, 5u);\n unpacked[72] = extractBits(val_11, 8u, 5u);\n unpacked[73] = extractBits(val_11, 13u, 5u);\n unpacked[74] = extractBits(val_11, 18u, 5u);\n unpacked[75] = extractBits(val_11, 23u, 5u);\n unpacked[76] = extractBits(val_11, 28u, 4u);\n\n let val_12 = blocks[packed_offset + 12];\n unpacked[76] = insertBits(unpacked[76], extractBits(val_12, 0u, 1u), 4u, 1u);\n unpacked[77] = extractBits(val_12, 1u, 5u);\n unpacked[78] = extractBits(val_12, 6u, 5u);\n unpacked[79] = extractBits(val_12, 11u, 5u);\n unpacked[80] = extractBits(val_12, 16u, 5u);\n unpacked[81] = extractBits(val_12, 21u, 5u);\n unpacked[82] = extractBits(val_12, 26u, 5u);\n unpacked[83] = extractBits(val_12, 31u, 1u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[83] = insertBits(unpacked[83], extractBits(val_13, 0u, 4u), 1u, 4u);\n unpacked[84] = extractBits(val_13, 4u, 5u);\n unpacked[85] = extractBits(val_13, 9u, 5u);\n unpacked[86] = extractBits(val_13, 14u, 5u);\n unpacked[87] = extractBits(val_13, 19u, 5u);\n unpacked[88] = extractBits(val_13, 24u, 5u);\n unpacked[89] = extractBits(val_13, 29u, 3u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[89] = insertBits(unpacked[89], extractBits(val_14, 0u, 2u), 3u, 2u);\n unpacked[90] = extractBits(val_14, 2u, 5u);\n unpacked[91] = extractBits(val_14, 7u, 5u);\n unpacked[92] = extractBits(val_14, 12u, 5u);\n unpacked[93] = extractBits(val_14, 17u, 5u);\n unpacked[94] = extractBits(val_14, 22u, 5u);\n unpacked[95] = extractBits(val_14, 27u, 5u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[96] = extractBits(val_15, 0u, 5u);\n unpacked[97] = extractBits(val_15, 5u, 5u);\n unpacked[98] = extractBits(val_15, 10u, 5u);\n unpacked[99] = extractBits(val_15, 15u, 5u);\n unpacked[100] = extractBits(val_15, 20u, 5u);\n unpacked[101] = extractBits(val_15, 25u, 5u);\n unpacked[102] = extractBits(val_15, 30u, 2u);\n\n let val_16 = blocks[packed_offset + 16];\n unpacked[102] = insertBits(unpacked[102], extractBits(val_16, 0u, 3u), 2u, 3u);\n unpacked[103] = extractBits(val_16, 3u, 5u);\n unpacked[104] = extractBits(val_16, 8u, 5u);\n unpacked[105] = extractBits(val_16, 13u, 5u);\n unpacked[106] = extractBits(val_16, 18u, 5u);\n unpacked[107] = extractBits(val_16, 23u, 5u);\n unpacked[108] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[108] = insertBits(unpacked[108], extractBits(val_17, 0u, 1u), 4u, 1u);\n unpacked[109] = extractBits(val_17, 1u, 5u);\n unpacked[110] = extractBits(val_17, 6u, 5u);\n unpacked[111] = extractBits(val_17, 11u, 5u);\n unpacked[112] = extractBits(val_17, 16u, 5u);\n unpacked[113] = extractBits(val_17, 21u, 5u);\n unpacked[114] = extractBits(val_17, 26u, 5u);\n unpacked[115] = extractBits(val_17, 31u, 1u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[115] = insertBits(unpacked[115], extractBits(val_18, 0u, 4u), 1u, 4u);\n unpacked[116] = extractBits(val_18, 4u, 5u);\n unpacked[117] = extractBits(val_18, 9u, 5u);\n unpacked[118] = extractBits(val_18, 14u, 5u);\n unpacked[119] = extractBits(val_18, 19u, 5u);\n unpacked[120] = extractBits(val_18, 24u, 5u);\n unpacked[121] = extractBits(val_18, 29u, 3u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[121] = insertBits(unpacked[121], extractBits(val_19, 0u, 2u), 3u, 2u);\n unpacked[122] = extractBits(val_19, 2u, 5u);\n unpacked[123] = extractBits(val_19, 7u, 5u);\n unpacked[124] = extractBits(val_19, 12u, 5u);\n unpacked[125] = extractBits(val_19, 17u, 5u);\n unpacked[126] = extractBits(val_19, 22u, 5u);\n unpacked[127] = extractBits(val_19, 27u, 5u);\n}\n";var unpackBlock128BitDepth6="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_6(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 6u);\n unpacked[1] = extractBits(val_0, 6u, 6u);\n unpacked[2] = extractBits(val_0, 12u, 6u);\n unpacked[3] = extractBits(val_0, 18u, 6u);\n unpacked[4] = extractBits(val_0, 24u, 6u);\n unpacked[5] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[5] = insertBits(unpacked[5], extractBits(val_1, 0u, 4u), 2u, 4u);\n unpacked[6] = extractBits(val_1, 4u, 6u);\n unpacked[7] = extractBits(val_1, 10u, 6u);\n unpacked[8] = extractBits(val_1, 16u, 6u);\n unpacked[9] = extractBits(val_1, 22u, 6u);\n unpacked[10] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_2, 0u, 2u), 4u, 2u);\n unpacked[11] = extractBits(val_2, 2u, 6u);\n unpacked[12] = extractBits(val_2, 8u, 6u);\n unpacked[13] = extractBits(val_2, 14u, 6u);\n unpacked[14] = extractBits(val_2, 20u, 6u);\n unpacked[15] = extractBits(val_2, 26u, 6u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[16] = extractBits(val_3, 0u, 6u);\n unpacked[17] = extractBits(val_3, 6u, 6u);\n unpacked[18] = extractBits(val_3, 12u, 6u);\n unpacked[19] = extractBits(val_3, 18u, 6u);\n unpacked[20] = extractBits(val_3, 24u, 6u);\n unpacked[21] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_4, 0u, 4u), 2u, 4u);\n unpacked[22] = extractBits(val_4, 4u, 6u);\n unpacked[23] = extractBits(val_4, 10u, 6u);\n unpacked[24] = extractBits(val_4, 16u, 6u);\n unpacked[25] = extractBits(val_4, 22u, 6u);\n unpacked[26] = extractBits(val_4, 28u, 4u);\n\n let val_5 = blocks[packed_offset + 5];\n unpacked[26] = insertBits(unpacked[26], extractBits(val_5, 0u, 2u), 4u, 2u);\n unpacked[27] = extractBits(val_5, 2u, 6u);\n unpacked[28] = extractBits(val_5, 8u, 6u);\n unpacked[29] = extractBits(val_5, 14u, 6u);\n unpacked[30] = extractBits(val_5, 20u, 6u);\n unpacked[31] = extractBits(val_5, 26u, 6u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[32] = extractBits(val_6, 0u, 6u);\n unpacked[33] = extractBits(val_6, 6u, 6u);\n unpacked[34] = extractBits(val_6, 12u, 6u);\n unpacked[35] = extractBits(val_6, 18u, 6u);\n unpacked[36] = extractBits(val_6, 24u, 6u);\n unpacked[37] = extractBits(val_6, 30u, 2u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[37] = insertBits(unpacked[37], extractBits(val_7, 0u, 4u), 2u, 4u);\n unpacked[38] = extractBits(val_7, 4u, 6u);\n unpacked[39] = extractBits(val_7, 10u, 6u);\n unpacked[40] = extractBits(val_7, 16u, 6u);\n unpacked[41] = extractBits(val_7, 22u, 6u);\n unpacked[42] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_8, 0u, 2u), 4u, 2u);\n unpacked[43] = extractBits(val_8, 2u, 6u);\n unpacked[44] = extractBits(val_8, 8u, 6u);\n unpacked[45] = extractBits(val_8, 14u, 6u);\n unpacked[46] = extractBits(val_8, 20u, 6u);\n unpacked[47] = extractBits(val_8, 26u, 6u);\n\n let val_9 = blocks[packed_offset + 9];\n unpacked[48] = extractBits(val_9, 0u, 6u);\n unpacked[49] = extractBits(val_9, 6u, 6u);\n unpacked[50] = extractBits(val_9, 12u, 6u);\n unpacked[51] = extractBits(val_9, 18u, 6u);\n unpacked[52] = extractBits(val_9, 24u, 6u);\n unpacked[53] = extractBits(val_9, 30u, 2u);\n\n let val_10 = blocks[packed_offset + 10];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_10, 0u, 4u), 2u, 4u);\n unpacked[54] = extractBits(val_10, 4u, 6u);\n unpacked[55] = extractBits(val_10, 10u, 6u);\n unpacked[56] = extractBits(val_10, 16u, 6u);\n unpacked[57] = extractBits(val_10, 22u, 6u);\n unpacked[58] = extractBits(val_10, 28u, 4u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[58] = insertBits(unpacked[58], extractBits(val_11, 0u, 2u), 4u, 2u);\n unpacked[59] = extractBits(val_11, 2u, 6u);\n unpacked[60] = extractBits(val_11, 8u, 6u);\n unpacked[61] = extractBits(val_11, 14u, 6u);\n unpacked[62] = extractBits(val_11, 20u, 6u);\n unpacked[63] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[64] = extractBits(val_12, 0u, 6u);\n unpacked[65] = extractBits(val_12, 6u, 6u);\n unpacked[66] = extractBits(val_12, 12u, 6u);\n unpacked[67] = extractBits(val_12, 18u, 6u);\n unpacked[68] = extractBits(val_12, 24u, 6u);\n unpacked[69] = extractBits(val_12, 30u, 2u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[69] = insertBits(unpacked[69], extractBits(val_13, 0u, 4u), 2u, 4u);\n unpacked[70] = extractBits(val_13, 4u, 6u);\n unpacked[71] = extractBits(val_13, 10u, 6u);\n unpacked[72] = extractBits(val_13, 16u, 6u);\n unpacked[73] = extractBits(val_13, 22u, 6u);\n unpacked[74] = extractBits(val_13, 28u, 4u);\n\n let val_14 = blocks[packed_offset + 14];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_14, 0u, 2u), 4u, 2u);\n unpacked[75] = extractBits(val_14, 2u, 6u);\n unpacked[76] = extractBits(val_14, 8u, 6u);\n unpacked[77] = extractBits(val_14, 14u, 6u);\n unpacked[78] = extractBits(val_14, 20u, 6u);\n unpacked[79] = extractBits(val_14, 26u, 6u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[80] = extractBits(val_15, 0u, 6u);\n unpacked[81] = extractBits(val_15, 6u, 6u);\n unpacked[82] = extractBits(val_15, 12u, 6u);\n unpacked[83] = extractBits(val_15, 18u, 6u);\n unpacked[84] = extractBits(val_15, 24u, 6u);\n unpacked[85] = extractBits(val_15, 30u, 2u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_16, 0u, 4u), 2u, 4u);\n unpacked[86] = extractBits(val_16, 4u, 6u);\n unpacked[87] = extractBits(val_16, 10u, 6u);\n unpacked[88] = extractBits(val_16, 16u, 6u);\n unpacked[89] = extractBits(val_16, 22u, 6u);\n unpacked[90] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[90] = insertBits(unpacked[90], extractBits(val_17, 0u, 2u), 4u, 2u);\n unpacked[91] = extractBits(val_17, 2u, 6u);\n unpacked[92] = extractBits(val_17, 8u, 6u);\n unpacked[93] = extractBits(val_17, 14u, 6u);\n unpacked[94] = extractBits(val_17, 20u, 6u);\n unpacked[95] = extractBits(val_17, 26u, 6u);\n\n let val_18 = blocks[packed_offset + 18];\n unpacked[96] = extractBits(val_18, 0u, 6u);\n unpacked[97] = extractBits(val_18, 6u, 6u);\n unpacked[98] = extractBits(val_18, 12u, 6u);\n unpacked[99] = extractBits(val_18, 18u, 6u);\n unpacked[100] = extractBits(val_18, 24u, 6u);\n unpacked[101] = extractBits(val_18, 30u, 2u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[101] = insertBits(unpacked[101], extractBits(val_19, 0u, 4u), 2u, 4u);\n unpacked[102] = extractBits(val_19, 4u, 6u);\n unpacked[103] = extractBits(val_19, 10u, 6u);\n unpacked[104] = extractBits(val_19, 16u, 6u);\n unpacked[105] = extractBits(val_19, 22u, 6u);\n unpacked[106] = extractBits(val_19, 28u, 4u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_20, 0u, 2u), 4u, 2u);\n unpacked[107] = extractBits(val_20, 2u, 6u);\n unpacked[108] = extractBits(val_20, 8u, 6u);\n unpacked[109] = extractBits(val_20, 14u, 6u);\n unpacked[110] = extractBits(val_20, 20u, 6u);\n unpacked[111] = extractBits(val_20, 26u, 6u);\n\n let val_21 = blocks[packed_offset + 21];\n unpacked[112] = extractBits(val_21, 0u, 6u);\n unpacked[113] = extractBits(val_21, 6u, 6u);\n unpacked[114] = extractBits(val_21, 12u, 6u);\n unpacked[115] = extractBits(val_21, 18u, 6u);\n unpacked[116] = extractBits(val_21, 24u, 6u);\n unpacked[117] = extractBits(val_21, 30u, 2u);\n\n let val_22 = blocks[packed_offset + 22];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_22, 0u, 4u), 2u, 4u);\n unpacked[118] = extractBits(val_22, 4u, 6u);\n unpacked[119] = extractBits(val_22, 10u, 6u);\n unpacked[120] = extractBits(val_22, 16u, 6u);\n unpacked[121] = extractBits(val_22, 22u, 6u);\n unpacked[122] = extractBits(val_22, 28u, 4u);\n\n let val_23 = blocks[packed_offset + 23];\n unpacked[122] = insertBits(unpacked[122], extractBits(val_23, 0u, 2u), 4u, 2u);\n unpacked[123] = extractBits(val_23, 2u, 6u);\n unpacked[124] = extractBits(val_23, 8u, 6u);\n unpacked[125] = extractBits(val_23, 14u, 6u);\n unpacked[126] = extractBits(val_23, 20u, 6u);\n unpacked[127] = extractBits(val_23, 26u, 6u);\n}\n";var unpackBlock128BitDepth7="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_7(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 7u);\n unpacked[1] = extractBits(val_0, 7u, 7u);\n unpacked[2] = extractBits(val_0, 14u, 7u);\n unpacked[3] = extractBits(val_0, 21u, 7u);\n unpacked[4] = extractBits(val_0, 28u, 4u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[4] = insertBits(unpacked[4], extractBits(val_1, 0u, 3u), 4u, 3u);\n unpacked[5] = extractBits(val_1, 3u, 7u);\n unpacked[6] = extractBits(val_1, 10u, 7u);\n unpacked[7] = extractBits(val_1, 17u, 7u);\n unpacked[8] = extractBits(val_1, 24u, 7u);\n unpacked[9] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[9] = insertBits(unpacked[9], extractBits(val_2, 0u, 6u), 1u, 6u);\n unpacked[10] = extractBits(val_2, 6u, 7u);\n unpacked[11] = extractBits(val_2, 13u, 7u);\n unpacked[12] = extractBits(val_2, 20u, 7u);\n unpacked[13] = extractBits(val_2, 27u, 5u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[13] = insertBits(unpacked[13], extractBits(val_3, 0u, 2u), 5u, 2u);\n unpacked[14] = extractBits(val_3, 2u, 7u);\n unpacked[15] = extractBits(val_3, 9u, 7u);\n unpacked[16] = extractBits(val_3, 16u, 7u);\n unpacked[17] = extractBits(val_3, 23u, 7u);\n unpacked[18] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[18] = insertBits(unpacked[18], extractBits(val_4, 0u, 5u), 2u, 5u);\n unpacked[19] = extractBits(val_4, 5u, 7u);\n unpacked[20] = extractBits(val_4, 12u, 7u);\n unpacked[21] = extractBits(val_4, 19u, 7u);\n unpacked[22] = extractBits(val_4, 26u, 6u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[22] = insertBits(unpacked[22], extractBits(val_5, 0u, 1u), 6u, 1u);\n unpacked[23] = extractBits(val_5, 1u, 7u);\n unpacked[24] = extractBits(val_5, 8u, 7u);\n unpacked[25] = extractBits(val_5, 15u, 7u);\n unpacked[26] = extractBits(val_5, 22u, 7u);\n unpacked[27] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[27] = insertBits(unpacked[27], extractBits(val_6, 0u, 4u), 3u, 4u);\n unpacked[28] = extractBits(val_6, 4u, 7u);\n unpacked[29] = extractBits(val_6, 11u, 7u);\n unpacked[30] = extractBits(val_6, 18u, 7u);\n unpacked[31] = extractBits(val_6, 25u, 7u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[32] = extractBits(val_7, 0u, 7u);\n unpacked[33] = extractBits(val_7, 7u, 7u);\n unpacked[34] = extractBits(val_7, 14u, 7u);\n unpacked[35] = extractBits(val_7, 21u, 7u);\n unpacked[36] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[36] = insertBits(unpacked[36], extractBits(val_8, 0u, 3u), 4u, 3u);\n unpacked[37] = extractBits(val_8, 3u, 7u);\n unpacked[38] = extractBits(val_8, 10u, 7u);\n unpacked[39] = extractBits(val_8, 17u, 7u);\n unpacked[40] = extractBits(val_8, 24u, 7u);\n unpacked[41] = extractBits(val_8, 31u, 1u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[41] = insertBits(unpacked[41], extractBits(val_9, 0u, 6u), 1u, 6u);\n unpacked[42] = extractBits(val_9, 6u, 7u);\n unpacked[43] = extractBits(val_9, 13u, 7u);\n unpacked[44] = extractBits(val_9, 20u, 7u);\n unpacked[45] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[45] = insertBits(unpacked[45], extractBits(val_10, 0u, 2u), 5u, 2u);\n unpacked[46] = extractBits(val_10, 2u, 7u);\n unpacked[47] = extractBits(val_10, 9u, 7u);\n unpacked[48] = extractBits(val_10, 16u, 7u);\n unpacked[49] = extractBits(val_10, 23u, 7u);\n unpacked[50] = extractBits(val_10, 30u, 2u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[50] = insertBits(unpacked[50], extractBits(val_11, 0u, 5u), 2u, 5u);\n unpacked[51] = extractBits(val_11, 5u, 7u);\n unpacked[52] = extractBits(val_11, 12u, 7u);\n unpacked[53] = extractBits(val_11, 19u, 7u);\n unpacked[54] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[54] = insertBits(unpacked[54], extractBits(val_12, 0u, 1u), 6u, 1u);\n unpacked[55] = extractBits(val_12, 1u, 7u);\n unpacked[56] = extractBits(val_12, 8u, 7u);\n unpacked[57] = extractBits(val_12, 15u, 7u);\n unpacked[58] = extractBits(val_12, 22u, 7u);\n unpacked[59] = extractBits(val_12, 29u, 3u);\n \n let val_13 = blocks[packed_offset + 13];\n unpacked[59] = insertBits(unpacked[59], extractBits(val_13, 0u, 4u), 3u, 4u);\n unpacked[60] = extractBits(val_13, 4u, 7u);\n unpacked[61] = extractBits(val_13, 11u, 7u);\n unpacked[62] = extractBits(val_13, 18u, 7u);\n unpacked[63] = extractBits(val_13, 25u, 7u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[64] = extractBits(val_14, 0u, 7u);\n unpacked[65] = extractBits(val_14, 7u, 7u);\n unpacked[66] = extractBits(val_14, 14u, 7u);\n unpacked[67] = extractBits(val_14, 21u, 7u);\n unpacked[68] = extractBits(val_14, 28u, 4u);\n \n let val_15 = blocks[packed_offset + 15];\n unpacked[68] = insertBits(unpacked[68], extractBits(val_15, 0u, 3u), 4u, 3u);\n unpacked[69] = extractBits(val_15, 3u, 7u);\n unpacked[70] = extractBits(val_15, 10u, 7u);\n unpacked[71] = extractBits(val_15, 17u, 7u);\n unpacked[72] = extractBits(val_15, 24u, 7u);\n unpacked[73] = extractBits(val_15, 31u, 1u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[73] = insertBits(unpacked[73], extractBits(val_16, 0u, 6u), 1u, 6u);\n unpacked[74] = extractBits(val_16, 6u, 7u);\n unpacked[75] = extractBits(val_16, 13u, 7u);\n unpacked[76] = extractBits(val_16, 20u, 7u);\n unpacked[77] = extractBits(val_16, 27u, 5u);\n \n let val_17 = blocks[packed_offset + 17];\n unpacked[77] = insertBits(unpacked[77], extractBits(val_17, 0u, 2u), 5u, 2u);\n unpacked[78] = extractBits(val_17, 2u, 7u);\n unpacked[79] = extractBits(val_17, 9u, 7u);\n unpacked[80] = extractBits(val_17, 16u, 7u);\n unpacked[81] = extractBits(val_17, 23u, 7u);\n unpacked[82] = extractBits(val_17, 30u, 2u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[82] = insertBits(unpacked[82], extractBits(val_18, 0u, 5u), 2u, 5u);\n unpacked[83] = extractBits(val_18, 5u, 7u);\n unpacked[84] = extractBits(val_18, 12u, 7u);\n unpacked[85] = extractBits(val_18, 19u, 7u);\n unpacked[86] = extractBits(val_18, 26u, 6u);\n \n let val_19 = blocks[packed_offset + 19];\n unpacked[86] = insertBits(unpacked[86], extractBits(val_19, 0u, 1u), 6u, 1u);\n unpacked[87] = extractBits(val_19, 1u, 7u);\n unpacked[88] = extractBits(val_19, 8u, 7u);\n unpacked[89] = extractBits(val_19, 15u, 7u);\n unpacked[90] = extractBits(val_19, 22u, 7u);\n unpacked[91] = extractBits(val_19, 29u, 3u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[91] = insertBits(unpacked[91], extractBits(val_20, 0u, 4u), 3u, 4u);\n unpacked[92] = extractBits(val_20, 4u, 7u);\n unpacked[93] = extractBits(val_20, 11u, 7u);\n unpacked[94] = extractBits(val_20, 18u, 7u);\n unpacked[95] = extractBits(val_20, 25u, 7u);\n \n let val_21 = blocks[packed_offset + 21];\n unpacked[96] = extractBits(val_21, 0u, 7u);\n unpacked[97] = extractBits(val_21, 7u, 7u);\n unpacked[98] = extractBits(val_21, 14u, 7u);\n unpacked[99] = extractBits(val_21, 21u, 7u);\n unpacked[100] = extractBits(val_21, 28u, 4u);\n \n let val_22 = blocks[packed_offset + 22];\n unpacked[100] = insertBits(unpacked[100], extractBits(val_22, 0u, 3u), 4u, 3u);\n unpacked[101] = extractBits(val_22, 3u, 7u);\n unpacked[102] = extractBits(val_22, 10u, 7u);\n unpacked[103] = extractBits(val_22, 17u, 7u);\n unpacked[104] = extractBits(val_22, 24u, 7u);\n unpacked[105] = extractBits(val_22, 31u, 1u);\n \n let val_23 = blocks[packed_offset + 23];\n unpacked[105] = insertBits(unpacked[105], extractBits(val_23, 0u, 6u), 1u, 6u);\n unpacked[106] = extractBits(val_23, 6u, 7u);\n unpacked[107] = extractBits(val_23, 13u, 7u);\n unpacked[108] = extractBits(val_23, 20u, 7u);\n unpacked[109] = extractBits(val_23, 27u, 5u);\n \n let val_24 = blocks[packed_offset + 24];\n unpacked[109] = insertBits(unpacked[109], extractBits(val_24, 0u, 2u), 5u, 2u);\n unpacked[110] = extractBits(val_24, 2u, 7u);\n unpacked[111] = extractBits(val_24, 9u, 7u);\n unpacked[112] = extractBits(val_24, 16u, 7u);\n unpacked[113] = extractBits(val_24, 23u, 7u);\n unpacked[114] = extractBits(val_24, 30u, 2u);\n \n let val_25 = blocks[packed_offset + 25];\n unpacked[114] = insertBits(unpacked[114], extractBits(val_25, 0u, 5u), 2u, 5u);\n unpacked[115] = extractBits(val_25, 5u, 7u);\n unpacked[116] = extractBits(val_25, 12u, 7u);\n unpacked[117] = extractBits(val_25, 19u, 7u);\n unpacked[118] = extractBits(val_25, 26u, 6u);\n \n let val_26 = blocks[packed_offset + 26];\n unpacked[118] = insertBits(unpacked[118], extractBits(val_26, 0u, 1u), 6u, 1u);\n unpacked[119] = extractBits(val_26, 1u, 7u);\n unpacked[120] = extractBits(val_26, 8u, 7u);\n unpacked[121] = extractBits(val_26, 15u, 7u);\n unpacked[122] = extractBits(val_26, 22u, 7u);\n unpacked[123] = extractBits(val_26, 29u, 3u);\n \n let val_27 = blocks[packed_offset + 27];\n unpacked[123] = insertBits(unpacked[123], extractBits(val_27, 0u, 4u), 3u, 4u);\n unpacked[124] = extractBits(val_27, 4u, 7u);\n unpacked[125] = extractBits(val_27, 11u, 7u);\n unpacked[126] = extractBits(val_27, 18u, 7u);\n unpacked[127] = extractBits(val_27, 25u, 7u); \n}\n";var fromFP510Function="\n\nconst exponents: array = array(\n 2.9103830456733704e-11, \n 5.820766091346741e-11, \n 1.1641532182693481e-10, \n 2.3283064365386963e-10,\n 4.656612873077393e-10, \n 9.313225746154785e-10, \n 1.862645149230957e-09, \n 3.725290298461914e-09,\n 7.450580596923828e-09, \n 1.4901161193847656e-08, \n 2.9802322387695312e-08, \n 5.960464477539063e-08,\n 1.1920928955078125e-07, \n 2.384185791015625e-07, \n 4.76837158203125e-07, \n 9.5367431640625e-07,\n 1.9073486328125e-06, \n 3.814697265625e-06, \n 7.62939453125e-06, \n 1.52587890625e-05, \n 3.0517578125e-05,\n 6.103515625e-05, \n 0.0001220703125, \n 0.000244140625, \n 0.00048828125, \n 0.0009765625, \n 0.001953125, \n 0.00390625,\n 0.0078125, \n 0.015625, \n 0.03125, \n 0.0625);\n\nfn from_fp510(x: u32) -> f32 {\n let exponent = f32(exponents[extractBits(x, 10u, 5u)]); \n let fractional = f32(extractBits(x, 0u, 10u)); \n let abs = exponent * fractional;\n return abs * (1.0 - (2.0 * f32(extractBits(x, 15u, 1u))));\n}\n";var preprocessBlocks3BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth3,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 12u); \n unpack_block_128_bit_depth_3(blocks_start); \n \n let b01: u32 = blocks_start;\n let b2: u32 = blocks_start + 8u;\n \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n\n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), (r * 16u) % 32u, 16u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), (r * 8u) % 32u, 8u); \n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n \n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), ((r * 16u) % 32u) + (2u * c), 2u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), ((r * 8u) % 32u) + c, 1u); \n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks5BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth5,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n\n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 20u);\n unpack_block_128_bit_depth_5(blocks_start); \n \n let b03: u32 = blocks_start;\n let b4: u32 = blocks_start + 16u;\n\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), (r * 8u) % 32u, 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n } \n}\n\n").concat(emptyShader);var preprocessBlocks6BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth6,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 24u);\n unpack_block_128_bit_depth_6(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n }\n\n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks7BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth7,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 28u);\n unpack_block_128_bit_depth_7(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u;\n let b6: u32 = blocks_start + 24u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u), 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessShaderSources={3:preprocessBlocks3BitShaderSource,5:preprocessBlocks5BitShaderSource,6:preprocessBlocks6BitShaderSource,7:preprocessBlocks7BitShaderSource};var preprocessShaderNames={3:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_3bit_shader",5:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_5bit_shader",6:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_6bit_shader",7:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_7bit_shader"};var BM=8;var BN=32;var TM=2;var TN=16;var TC=rowsPerBlock*BM*BN/(TM*TN);var constantSnippet="\nconst BM = ".concat(BM,"u;\nconst BN = ").concat(BN,"u;\n\nconst TM = ").concat(TM,"u;\nconst TN = ").concat(TN,"u;\n\nconst TC = ").concat(TC,"u;\n\nconst ROW_PER_BLOCK = ").concat(rowsPerBlock,"u;\nconst COL_PER_BLOCK = ").concat(columnsPerBlock,"u;\n\nconst VEC_COL_PER_BLOCK = COL_PER_BLOCK / 4u;\n\nconst block_size: u32 = (COL_PER_BLOCK * ROW_PER_BLOCK * bit_depth) / 32u;\n\n");var forwardMultipleInputArgsSnippet="\nstruct argsStruct {\n n: u32,\n m: u32,\n total_nbc: u32,\n k: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array;\n";var forwardMultipleSharedPrivateMemSnippet="\nvar shared_x: array, BN * VEC_COL_PER_BLOCK>;\nvar shared_ab: array;\nvar shared_w: array, BM * ROW_PER_BLOCK * VEC_COL_PER_BLOCK>;\n\nvar local_x: array, TN * VEC_COL_PER_BLOCK>;\nvar local_x_sums: array;\nvar local_results: array;\n";var forwardMultipleLocalVarSnippet="\n let tid = local_id.x;\n let bm_idx = workgroup_id.x;\n let bn_idx = workgroup_id.y;\n\n let local_bm_idx = bm_idx * BM;\n let local_bn_idx = bn_idx * BN;\n \n let n_idx = tid % (BN / TN);\n let k_idx = tid / (BN / TN) / (BM * ROW_PER_BLOCK / TM);\n let m_idx = tid / (BN / TN) % (BM * ROW_PER_BLOCK / TM);\n";var forwardMultipleLoadW1Bit="\n let b0 = blocks[src + (row / 4u)];\n\n let b0_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b0_offset = b0_offset_base + (c * 4u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b0, b0_offset, 1u)), \n f32(extractBits(b0, b0_offset + 1, 1u)),\n f32(extractBits(b0, b0_offset + 2, 1u)),\n f32(extractBits(b0, b0_offset + 3, 1u)));\n }\n";var forwardMultipleLoadW2Bit="\n let b01 = blocks[src + (row / 2u)];\n \n let b01_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b01_offset = b01_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(extractBits(b01, b01_offset, 2u)), \n f32(extractBits(b01, b01_offset + 2, 2u)),\n f32(extractBits(b01, b01_offset + 4, 2u)),\n f32(extractBits(b01, b01_offset + 6, 2u)));\n } \n";var forwardMultipleLoadW3Bit="\n let b01 = blocks[src + (row / 2u)];\n let b2 = blocks[src + 8u + (row / 4u)]; \n\n let b01_offset_base = (row * 16u) % 32u;\n let b2_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b01_offset = b01_offset_base + (c * 8u);\n let b2_offset = b2_offset_base + (c * 4u);\n\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b01, b01_offset, 2u), extractBits(b2, b2_offset, 1u), 2u, 1u)), \n f32(insertBits(extractBits(b01, b01_offset + 2, 2u), extractBits(b2, b2_offset + 1, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 4, 2u), extractBits(b2, b2_offset + 2, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 6, 2u), extractBits(b2, b2_offset + 3, 1u), 2u, 1u))); \n }\n";var forwardMultipleLoadW4Bit="\n let b03 = blocks[src + row];\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b03, b03_offset, 4u)), \n f32(extractBits(b03, b03_offset + 4, 4u)),\n f32(extractBits(b03, b03_offset + 8, 4u)),\n f32(extractBits(b03, b03_offset + 12, 4u)));\n }\n";var forwardMultipleLoadW5Bit="\n let b03 = blocks[src + row];\n let b4 = blocks[src + 16u + (row / 4u)];\n \n let b4_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b4_offset = b4_offset_base + (c * 4u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b4, b4_offset, 1u), 4u, 1u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b4, b4_offset + 1, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b4, b4_offset + 2, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b4, b4_offset + 3, 1u), 4u, 1u)));\n }\n";var forwardMultipleLoadW6Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u)));\n }\n";var forwardMultipleLoadW7Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n let b6 = blocks[src + 24u + (row / 4u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n let b6_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n let b6_offset = b6_offset_base + (c * 4u);\n \n shared_w[dst + c] = vec4(\n f32(insertBits(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u), extractBits(b6, b6_offset, 1u), 6u, 1u)), \n f32(insertBits(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u), extractBits(b6, b6_offset + 1, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u), extractBits(b6, b6_offset + 2, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u), extractBits(b6, b6_offset + 3, 1u), 6u, 1u)));\n }\n";var forwardMultipleLoadW8Bit="\n let b07_offset = src + (row * 2);\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b07 = blocks[b07_offset + c];\n shared_w[dst + c] = vec4(\n f32(extractBits(b07, 0u, 8u)), \n f32(extractBits(b07, 8u, 8u)),\n f32(extractBits(b07, 16u, 8u)),\n f32(extractBits(b07, 24u, 8u)));\n }\n";var forwardLoadWBitDepthSnippets={1:forwardMultipleLoadW1Bit,2:forwardMultipleLoadW2Bit,3:forwardMultipleLoadW3Bit,4:forwardMultipleLoadW4Bit,5:forwardMultipleLoadW5Bit,6:forwardMultipleLoadW6Bit,7:forwardMultipleLoadW7Bit,8:forwardMultipleLoadW8Bit};var forwardMultipleLoadXSnippet="\n let total_work_x = VEC_COL_PER_BLOCK * BN;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_x, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_x) { \n let n_load_idx = local_bn_idx + idx / VEC_COL_PER_BLOCK;\n let inner_idx = idx % VEC_COL_PER_BLOCK;\n \n if (bk_idx < args.k && n_load_idx < args.n) { \n let x_idx = (args.x_offset / 4u) + ((bk_idx * args.n + n_load_idx) * VEC_COL_PER_BLOCK + inner_idx); \n shared_x[idx] = x[x_idx];\n } else {\n shared_x[idx] = vec4(0.0);\n }\n }\n }\n";var forwardMultipleLoadABSnippet="\n let total_work_ab = BM * 2;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_ab, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_ab) {\n let m_load_idx = local_bm_idx + idx / 2; \n let inner_idx = (idx % 2) * 16u;\n \n if (m_load_idx < args.m && bk_idx < args.k) {\n let ab_bits = extractBits(metas[args.metas_offset + (m_load_idx * args.k + bk_idx)], inner_idx, 16u);\n shared_ab[idx] = from_fp510(ab_bits); \n } else {\n shared_ab[idx] = 0.0;\n }\n }\n }\n";var forwardMultipleLoadWSnippet=function forwardMultipleLoadWSnippet(bitDepth){return"\n let total_work_w = BM * ROW_PER_BLOCK;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_w, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_w) {\n let m_load_idx = local_bm_idx + idx / ROW_PER_BLOCK;\n let row = idx % ROW_PER_BLOCK;\n let dst = idx * VEC_COL_PER_BLOCK;\n\n if (m_load_idx < args.m) {\n let src = args.blocks_offset + (m_load_idx * args.k + bk_idx) * block_size;\n ".concat(forwardLoadWBitDepthSnippets[bitDepth],"\n } else { \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n shared_w[dst + c] = vec4(0.0);\n }\n }\n }\n }\n")};var forwardMultipleCopyXSnippet="\nfor (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n var x_sum_vec = vec4(0.0); \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n let shared_x_idx = (n_idx * TN + tn_idx) * VEC_COL_PER_BLOCK + (k_idx * VEC_COL_PER_BLOCK);\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n local_x[local_x_idx + c] = shared_x[shared_x_idx + c];\n x_sum_vec += local_x[local_x_idx + c];\n }\n local_x_sums[tn_idx] = x_sum_vec.x + x_sum_vec.y + x_sum_vec.z + x_sum_vec.w; \n}\n";var forwardMultipleComputeResultsSnippet="\n for (var tm_idx = 0u; tm_idx < TM; tm_idx++) { \n let shared_ab_idx = ((m_idx * TM + tm_idx) / ROW_PER_BLOCK + k_idx) * 2;\n let alpha = shared_ab[shared_ab_idx];\n let beta = shared_ab[shared_ab_idx + 1]; \n let shared_w_idx = ((m_idx * TM + tm_idx) + k_idx) * VEC_COL_PER_BLOCK;\n \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n \n var swx_vec = vec4(0.0); \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n swx_vec += shared_w[shared_w_idx + c] * local_x[local_x_idx + c];\n }\n let swx = swx_vec.x + swx_vec.y + swx_vec.z + swx_vec.w;\n \n let kappa = alpha * local_x_sums[tn_idx]; \n let results_idx = tm_idx * TN + tn_idx;\n local_results[results_idx] += kappa + (beta * swx);\n }\n }\n";var forwardMultipleWriteResultsSnippet="\nfor (var tm_idx = 0u; tm_idx < TM; tm_idx++) {\n let row = local_bm_idx * ROW_PER_BLOCK + (m_idx * TM + tm_idx); \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let col = local_bn_idx + (n_idx * TN + tn_idx);\n if (row < args.m * ROW_PER_BLOCK && col < args.n) {\n let y_idx = args.y_offset + ((row / ROW_PER_BLOCK) * args.n + col) * ROW_PER_BLOCK + (row % ROW_PER_BLOCK);\n let results_idx = tm_idx * TN + tn_idx;\n \n y[y_idx] += local_results[results_idx];\n }\n }\n}\n";var forwardMultipleShaderSources=function forwardMultipleShaderSources(bitDepth){return"\n\n".concat(forwardMultipleInputArgsSnippet,"\n\n").concat(constantSnippet,"\n\n").concat(forwardMultipleSharedPrivateMemSnippet,"\n\n").concat(fromFP510Function,"\n\n").concat(dividePadFunction,"\n\nconst bit_depth: u32 = ").concat(bitDepth,"u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n \n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n ").concat(forwardMultipleLocalVarSnippet,"\n \n for (var bk_idx = 0u; bk_idx < args.k; bk_idx++) { \n ").concat(forwardMultipleLoadXSnippet,"\n ").concat(forwardMultipleLoadABSnippet," \n ").concat(forwardMultipleLoadWSnippet(bitDepth)," \n workgroupBarrier();\n \n ").concat(forwardMultipleCopyXSnippet,"\n ").concat(forwardMultipleComputeResultsSnippet,"\n workgroupBarrier();\n }\n \n ").concat(forwardMultipleWriteResultsSnippet,"\n}\n\n").concat(emptyShader,"\n")};var forwardShuffleXShaderSource="\nstruct argsStruct {\n n: u32,\n shape1: u32,\n x_offset: u32,\n indices_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar indices: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape1) {\n return;\n } \n\n let b = global_id.x;\n let i = global_id.y;\n \n let c = i / 8u;\n let j = i % 8u;\n y[((c * args.n) + b) * 8 + j] = x[args.x_offset + (b * args.shape1) + indices[args.indices_offset + i]];\n}\n\n".concat(emptyShader,"\n");var forwardSingleReduceYShaderSource="\nstruct argsStruct {\n nvr: u32,\n nbc: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar y: array>;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x > args.nvr) {\n return;\n }\n\n let x_start = global_id.x * args.nbc;\n var sum: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n for (var i = 0u; i < args.nbc; i++) {\n sum += x[x_start + i]; \n }\n y[global_id.x] += sum;\n}\n\n".concat(emptyShader);var forwardShuffleYShaderSource="\nstruct argsStruct {\n n: u32,\n shape0: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape0) {\n return;\n } \n \n let b = global_id.x;\n let i = global_id.y;\n \n let r = i / 16u;\n let j = i % 16u;\n y[(b * args.shape0) + (r * 16) + j] = x[(((r * args.n) + b) * 16) + j];\n}\n\n".concat(emptyShader);var addBiasShaderSource="\nstruct argsStruct {\n dimension: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar bias: array;\n\n@group(0) @binding(2)\nvar y: array;\n\n".concat(fromFP510Function,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n y[(global_id.x * args.dimension) + global_id.y] += bias[global_id.y];\n}\n\n").concat(emptyShader);var forwardSingleBitDepth1ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 4u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b0_start = row_blocks_start + br_offset + (bc * block_size);\n var b0_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b0 = blocks[b0_start];\n \n let w0_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w0_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w0_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w0_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 8u;\n \n let w1_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w1_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w1_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w1_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 16u;\n \n let w2_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w2_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w2_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w2_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 24u;\n \n let w3_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w3_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w3_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w3_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth2ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 8u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b01_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b01 = blocks[b01_start];\n \n let w0_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w0_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w0_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w0_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w1_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w1_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w1_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w1_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u; \n b01 = blocks[b01_start + 1u];\n \n let w2_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w2_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w2_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w2_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w3_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w3_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w3_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w3_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth3ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 12u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id : vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n\n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b2_start = row_blocks_start + br_offset + (bc * block_size) + 8u;\n var b01_offset = 0u;\n var b2_offset = 0u;\n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) { \n \n var b01 = blocks[b01_start];\n var b2 = blocks[b2_start];\n \n var b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n var b2_bit = extractBits(b2, b2_offset + j, 1u);\n let w0_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 8u;\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w1_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 16u; \n b01 = blocks[b01_start + 1u];\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w2_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 24u; \n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w3_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 0u; \n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n \n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth4ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 16u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start]; \n \n let w0_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w0_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w0_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w0_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 1];\n \n let w1_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w1_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w1_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w1_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 2];\n \n let w2_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w2_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w2_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w2_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 3];\n \n let w3_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w3_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w3_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w3_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth5ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 20u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b4_start = row_blocks_start + br_offset + (bc * block_size) + 16u;\n \n var b4_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b4 = blocks[b4_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w0_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 1];\n b4_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w1_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 2];\n b4_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w2_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 3];\n b4_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w3_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b4_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth6ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 24u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n \n var b45_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w0_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w0_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w0_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w0_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w1_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w1_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w1_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w1_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u)); \n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w2_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w2_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w2_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w2_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w3_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w3_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w3_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w3_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b45_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth7ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 28u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n var b6_start = row_blocks_start + br_offset + (bc * block_size) + 24u;\n \n var b45_offset = 0u;\n var b6_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n var b6 = blocks[b6_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n var b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w0_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w0_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w0_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w0_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n b6_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w1_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w1_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w1_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w1_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n b6_offset = 16u;\n\n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w2_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w2_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w2_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w2_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n b6_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w3_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w3_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w3_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w3_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b45_offset = 0u;\n b6_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth8ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 32u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b07_start = row_blocks_start + (br_offset * 8u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < 2; j++) {\n \n var b07 = blocks[b07_start + j];\n \n let w0_0 = f32(extractBits(b07, 0u, 8u)); \n let w0_1 = f32(extractBits(b07, 8u, 8u)); \n let w0_2 = f32(extractBits(b07, 16u, 8u));\n let w0_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 2 + j];\n \n let w1_0 = f32(extractBits(b07, 0u, 8u)); \n let w1_1 = f32(extractBits(b07, 8u, 8u)); \n let w1_2 = f32(extractBits(b07, 16u, 8u));\n let w1_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 4 + j];\n \n let w2_0 = f32(extractBits(b07, 0u, 8u)); \n let w2_1 = f32(extractBits(b07, 8u, 8u)); \n let w2_2 = f32(extractBits(b07, 16u, 8u));\n let w2_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 6 + j];\n \n let w3_0 = f32(extractBits(b07, 0u, 8u)); \n let w3_1 = f32(extractBits(b07, 8u, 8u)); \n let w3_2 = f32(extractBits(b07, 16u, 8u));\n let w3_3 = f32(extractBits(b07, 24u, 8u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_vec = x[x_start + j];\n res[j] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleShaderSources={1:forwardSingleBitDepth1ShaderSource,2:forwardSingleBitDepth2ShaderSource,3:forwardSingleBitDepth3ShaderSource,4:forwardSingleBitDepth4ShaderSource,5:forwardSingleBitDepth5ShaderSource,6:forwardSingleBitDepth6ShaderSource,7:forwardSingleBitDepth7ShaderSource,8:forwardSingleBitDepth8ShaderSource};var forwardSingleShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_8_shader"};var forwardShaderSources={1:forwardMultipleShaderSources(1),2:forwardMultipleShaderSources(2),3:forwardMultipleShaderSources(3),4:forwardMultipleShaderSources(4),5:forwardMultipleShaderSources(5),6:forwardMultipleShaderSources(6),7:forwardMultipleShaderSources(7),8:forwardMultipleShaderSources(8)};var forwardShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_8_shader"};var forwardShuffleXShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_x_shader";var forwardShuffleYShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_y_shader";var addBiasShaderName="pv_picollm_weight_block_mixed_16x8_add_bias_shader";var forwardSingleReduceYShaderName="pv_picollm_weight_block_mixed_16x8_forward_single_reduce_y_shader";var _weightBlockMixed16x;var loadPreprocessBlocksShader=function loadPreprocessBlocksShader(device,bitDepth){var bindGroupLayout=device.createBindGroupLayout({label:"weight preprocess blocks ".concat(bitDepth," bind group layout"),entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight preprocess blocks ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight preprocess blocks ".concat(bitDepth," shader module"),code:preprocessShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight preprocess blocks ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:preprocessDim,workgroup_size_y:preprocessDim}}});return{computePipeline:computePipeline}};var loadForwardShuffleXShader=function loadForwardShuffleXShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle x bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle x pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle x shader module",code:forwardShuffleXShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle x pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_y:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardSingleReduceYShader=function loadForwardSingleReduceYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight single reduce y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight single reduce y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight single reduce y shader module",code:forwardSingleReduceYShaderSource});var computePipeline=device.createComputePipeline({label:"weight single reduce y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardShuffleYShader=function loadForwardShuffleYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle y shader module",code:forwardShuffleYShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var loadForwardSingleShader=function loadForwardSingleShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward single ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward single ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward single ".concat(bitDepth," shader module"),code:forwardSingleShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward single ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:weightBlockSize,workgroup_size_y:1}}});return{computePipeline:computePipeline}};var loadForwardShader=function loadForwardShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward multi ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward multi ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward multi ".concat(bitDepth," shader module"),code:forwardShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward multi ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:TC}}});return{computePipeline:computePipeline}};var loadAddBiasShader=function loadAddBiasShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight add bias bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight add bias pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight add bias shader module",code:addBiasShaderSource});var computePipeline=device.createComputePipeline({label:"weight add bias pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var weightBlockMixed16x8Shaders=(_weightBlockMixed16x={},_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,preprocessShaderNames[3],function(device){return loadPreprocessBlocksShader(device,3)}),preprocessShaderNames[5],function(device){return loadPreprocessBlocksShader(device,5)}),preprocessShaderNames[6],function(device){return loadPreprocessBlocksShader(device,6)}),preprocessShaderNames[7],function(device){return loadPreprocessBlocksShader(device,7)}),forwardShuffleXShaderName,loadForwardShuffleXShader),forwardShuffleYShaderName,loadForwardShuffleYShader),forwardSingleReduceYShaderName,loadForwardSingleReduceYShader),forwardSingleShaderNames[1],function(device){return loadForwardSingleShader(device,1)}),forwardSingleShaderNames[2],function(device){return loadForwardSingleShader(device,2)}),forwardSingleShaderNames[3],function(device){return loadForwardSingleShader(device,3)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardSingleShaderNames[4],function(device){return loadForwardSingleShader(device,4)}),forwardSingleShaderNames[5],function(device){return loadForwardSingleShader(device,5)}),forwardSingleShaderNames[6],function(device){return loadForwardSingleShader(device,6)}),forwardSingleShaderNames[7],function(device){return loadForwardSingleShader(device,7)}),forwardSingleShaderNames[8],function(device){return loadForwardSingleShader(device,8)}),forwardShaderNames[1],function(device){return loadForwardShader(device,1)}),forwardShaderNames[2],function(device){return loadForwardShader(device,2)}),forwardShaderNames[3],function(device){return loadForwardShader(device,3)}),forwardShaderNames[4],function(device){return loadForwardShader(device,4)}),forwardShaderNames[5],function(device){return loadForwardShader(device,5)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardShaderNames[6],function(device){return loadForwardShader(device,6)}),forwardShaderNames[7],function(device){return loadForwardShader(device,7)}),forwardShaderNames[8],function(device){return loadForwardShader(device,8)}),addBiasShaderName,loadAddBiasShader));function ownKeys$1(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread$1(e){for(var r=1;r=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e1&&_args[1]!==undefined?_args[1]:{};time=_args.length>2&&_args[2]!==undefined?_args[2]:5e3;controller=new AbortController;config=_objectSpread(_objectSpread({},options),{},{signal:controller.signal});timeout=setTimeout(function(){controller.abort()},time);_context.next=7;return fetch(uri,config);case 7:response=_context.sent;clearTimeout(timeout);return _context.abrupt("return",response);case 10:case"end":return _context.stop()}},_callee)}));return _fetchWithTimeout.apply(this,arguments)}function open(_x2,_x3){return _open.apply(this,arguments)}function _open(){_open=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(path,mode){var error;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.prev=0;_context2.next=3;return PvFileIDB.open(path,mode);case 3:return _context2.abrupt("return",_context2.sent);case 6:_context2.prev=6;_context2.t0=_context2["catch"](0);if(_context2.t0.name==="IndexedDBNotSupported"){console.warn("IndexedDB is not supported. Fallback to in-memory storage.")}else if(_context2.t0.name!=="FileNotExists"){console.warn("Unable to access IndexedDB (".concat(_context2.t0.toString(),"). Fallback to in-memory storage."))}if(!(typeof WorkerGlobalScope!=="undefined"&&self instanceof WorkerGlobalScope)){_context2.next=16;break}if(!(_context2.t0.name==="FileNotExists")){_context2.next=12;break}throw _context2.t0;case 12:console.error("In-memory storage cannot be used inside a worker.");error=new Error("Failed to start PvFile: ".concat(_context2.t0.toString()));error.name="PvFileNotSupported";throw error;case 16:return _context2.abrupt("return",PvFileMem.open(path,mode));case 17:case"end":return _context2.stop()}},_callee2,null,[[0,6]])}));return _open.apply(this,arguments)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>{if(isFileURI(url)){return new Promise((reject,resolve)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response)}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){var f="pv_orca_simd.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{a:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmMemory=wasmExports["v"];updateMemoryViews();wasmTable=wasmExports["Ib"];addOnInit(wasmExports["w"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();function syscallGetVarargI(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;iFS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS:MEMFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("")};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _pv_console_log_wasm(index){console.log(arrayBufferToStringAtIndex(Module.HEAPU8,index))}var _pv_file_close_wasm=async function(fileAddress,statusAddress){statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{try{const file=await PvFile.getPtr(fileAddress);await file.close();setInt(statusAddress,0)}catch(e){console.error("pvFileCloseWasm",e);setInt(statusAddress,-1)}})};_pv_file_close_wasm.isAsync=true;var _pv_file_open_wasm=async function(fileAddress,pathAddress,modeAddress,statusAddress){pathAddress=unsignedAddress(pathAddress);modeAddress=unsignedAddress(modeAddress);statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{const path=arrayBufferToStringAtIndex(Module.HEAPU8,pathAddress);const mode=arrayBufferToStringAtIndex(Module.HEAPU8,modeAddress);try{const file=await open(path,mode);PvFile.setPtr(fileAddress,file);setInt(statusAddress,0)}catch(e){if(e.name!=="FileNotExists"){console.error("pvFileOpenWasm",e)}setInt(statusAddress,-1)}})};_pv_file_open_wasm.isAsync=true;var _pv_file_read_wasm=async function(fileAddress,contentAddress,size,count,numReadAddress){contentAddress=unsignedAddress(contentAddress);numReadAddress=unsignedAddress(numReadAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=await file.read(size,count);Module.HEAPU8.set(content,contentAddress);setInt(numReadAddress,content.length/size)}catch(e){console.error("pvFileReadWasm",e);setInt(numReadAddress,-1)}})};_pv_file_read_wasm.isAsync=true;function _pv_file_seek_wasm(fileAddress,offset,whence,statusAddress){statusAddress=unsignedAddress(statusAddress);try{const file=PvFile.getPtr(fileAddress);file.seek(offset,whence);setInt(statusAddress,0)}catch(e){console.error("pvFileSeekWasm",e);setInt(statusAddress,-1)}}function _pv_file_tell_wasm(fileAddress,offsetAddress){offsetAddress=unsignedAddress(offsetAddress);try{const file=PvFile.getPtr(fileAddress);setInt(offsetAddress,file.tell())}catch(e){console.error("pvFileTellWasm",e);setInt(offsetAddress,-1)}}var _pv_file_write_wasm=function(fileAddress,contentAddress,size,count,numWriteAddress){contentAddress=unsignedAddress(contentAddress);numWriteAddress=unsignedAddress(numWriteAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=new Uint8Array(size*count);content.set(Module.HEAPU8.slice(contentAddress,contentAddress+size*count),0);await file.write(content);setInt(numWriteAddress,content.length/size)}catch(e){console.error("pvFileWriteWasm",e);setInt(numWriteAddress,-1)}})};var _pv_https_request_wasm=async function(httpMethodAddress,serverNameAddress,endpointAddress,headerAddress,bodyAddress,timeoutMs,responseAddressAddress,responseSizeAddress,responseCodeAddress){httpMethodAddress=unsignedAddress(httpMethodAddress);serverNameAddress=unsignedAddress(serverNameAddress);endpointAddress=unsignedAddress(endpointAddress);headerAddress=unsignedAddress(headerAddress);bodyAddress=unsignedAddress(bodyAddress);responseAddressAddress=unsignedAddress(responseAddressAddress);responseSizeAddress=unsignedAddress(responseSizeAddress);responseCodeAddress=unsignedAddress(responseCodeAddress);return Asyncify.handleAsync(async()=>{const httpMethod=arrayBufferToStringAtIndex(Module.HEAPU8,httpMethodAddress);const serverName=arrayBufferToStringAtIndex(Module.HEAPU8,serverNameAddress);const endpoint=arrayBufferToStringAtIndex(Module.HEAPU8,endpointAddress);const header=arrayBufferToStringAtIndex(Module.HEAPU8,headerAddress);const body=arrayBufferToStringAtIndex(Module.HEAPU8,bodyAddress);const headerObject=stringHeaderToObject(header);const options={method:httpMethod};if(body.length>0){options.body=body}if(Object.keys(headerObject).length>0){options.headers=headerObject}let response;let responseText;let statusCode;try{response=await fetchWithTimeout("https://"+serverName+endpoint,options,timeoutMs);statusCode=response.status}catch(error){console.error("pvHttpsRequestWasm",`Failed to fetch: ${error}`);return}try{responseText=await response.text()}catch(error){console.error("pvHttpsRequestWasm",`Failed to get response text: ${error}`);return}const responseAddress=Module._malloc((responseText.length+1)*Int8Array.BYTES_PER_ELEMENT);if(responseAddress===0){console.error("pvMallocError","pvHttpsRequestWasm: cannot allocate memory for response");setInt(responseAddressAddress,0);return}setInt(responseSizeAddress,responseText.length+1);setInt(responseAddressAddress,responseAddress);for(let i=0;i{try{return func()}catch(e){abort(e)}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var sigToWasmTypes=sig=>{var typeNames={i:"i32",j:"i64",f:"f32",d:"f64",e:"externref",p:"i32"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(pv_https_request_wasm|pv_file_open_wasm|pv_file_close_wasm|pv_file_read_wasm|pv_file_write_wasm|pv_file_remove_wasm|pv_sleep_wasm|pv_xpu_webgpu_device_init_wasm|pv_xpu_webgpu_device_info_wasm|pv_xpu_webgpu_device_mem_copy_from_xpu_wasm|pv_xpu_webgpu_device_wait_wasm|pv_xpu_webgpu_timer_stop_wasm|invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x)}}},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){ret[x]=(...args)=>{Asyncify.exportCallStack.push(x);try{return original(...args)}finally{if(!ABORT){var y=Asyncify.exportCallStack.pop();Asyncify.maybeStopUnwind()}}}}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callStackNameToId:{},callStackIdToName:{},callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(funcName){var id=Asyncify.callStackNameToId[funcName];if(id===undefined){id=Asyncify.callStackId++;Asyncify.callStackNameToId[funcName]=id;Asyncify.callStackIdToName[id]=funcName}return id},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve:resolve,reject:reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){HEAPU32[ptr>>2]=stack;HEAPU32[ptr+4>>2]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];var rewindId=Asyncify.getCallStackId(bottomOfCallStack);HEAP32[ptr+8>>2]=rewindId},getDataRewindFuncName(ptr){var id=HEAP32[ptr+8>>2];var name=Asyncify.callStackIdToName[id];return name},getDataRewindFunc(name){var func=wasmExports[name];return func},doRewind(ptr){var name=Asyncify.getDataRewindFuncName(ptr);var func=Asyncify.getDataRewindFunc(name);return func()},handleSleep(startAsync){if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync(startAsync){return Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})}};var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var generateFuncType=(sig,target)=>{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={i:127,p:127,j:126,f:125,d:124,e:111};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i{if(typeof WebAssembly.Function=="function"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push(...typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{e:{f:func}});var wrappedFunc=instance.exports["f"];return wrappedFunc};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};Module["cwrap"]=cwrap;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();xpu_cpu_support();var wasmImports={g:___syscall_openat,h:__abort_js,s:__tzset_js,p:_emscripten_resize_heap,q:_environ_get,r:_environ_sizes_get,c:_exit,b:_fd_close,f:_fd_read,t:_fd_seek,a:_fd_write,e:_pv_console_log_wasm,n:_pv_file_close_wasm,o:_pv_file_open_wasm,d:_pv_file_read_wasm,m:_pv_file_seek_wasm,l:_pv_file_tell_wasm,j:_pv_file_write_wasm,i:_pv_https_request_wasm,u:_pv_time_wasm,k:_pv_xpu_get_max_workers_wasm};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["w"])();var __Znwm=Module["__Znwm"]=a0=>(__Znwm=Module["__Znwm"]=wasmExports["x"])(a0);var __Znam=Module["__Znam"]=a0=>(__Znam=Module["__Znam"]=wasmExports["y"])(a0);var __ZdlPv=Module["__ZdlPv"]=a0=>(__ZdlPv=Module["__ZdlPv"]=wasmExports["z"])(a0);var __ZdlPvm=Module["__ZdlPvm"]=(a0,a1)=>(__ZdlPvm=Module["__ZdlPvm"]=wasmExports["A"])(a0,a1);var __ZdaPv=Module["__ZdaPv"]=a0=>(__ZdaPv=Module["__ZdaPv"]=wasmExports["B"])(a0);var __ZdaPvm=Module["__ZdaPvm"]=(a0,a1)=>(__ZdaPvm=Module["__ZdaPvm"]=wasmExports["C"])(a0,a1);var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=(a0,a1)=>(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=wasmExports["D"])(a0,a1);var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=(a0,a1)=>(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=wasmExports["E"])(a0,a1);var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=(a0,a1)=>(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=wasmExports["F"])(a0,a1);var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=wasmExports["G"])(a0,a1,a2);var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=(a0,a1)=>(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=wasmExports["H"])(a0,a1);var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=wasmExports["I"])(a0,a1,a2);var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=a0=>(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=wasmExports["J"])(a0);var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=a0=>(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=wasmExports["K"])(a0);var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=a0=>(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=wasmExports["L"])(a0);var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=()=>(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=wasmExports["M"])();var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=()=>(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=wasmExports["N"])();var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=()=>(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=wasmExports["O"])();var __ZSt9terminatev=Module["__ZSt9terminatev"]=()=>(__ZSt9terminatev=Module["__ZSt9terminatev"]=wasmExports["P"])();var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=()=>(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=wasmExports["Q"])();var ___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=()=>(___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=wasmExports["R"])();var ___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=a0=>(___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=wasmExports["S"])(a0);var ___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=()=>(___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=wasmExports["T"])();var ___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=()=>(___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=wasmExports["U"])();var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=a0=>(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["V"])(a0);var ___cxa_free_exception=Module["___cxa_free_exception"]=a0=>(___cxa_free_exception=Module["___cxa_free_exception"]=wasmExports["W"])(a0);var ___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=(a0,a1,a2)=>(___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["X"])(a0,a1,a2);var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=()=>(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["Y"])();var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=()=>(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["Z"])();var ___dynamic_cast=Module["___dynamic_cast"]=(a0,a1,a2,a3)=>(___dynamic_cast=Module["___dynamic_cast"]=wasmExports["_"])(a0,a1,a2,a3);var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=a0=>(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=wasmExports["$"])(a0);var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=a0=>(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=wasmExports["aa"])(a0);var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=a0=>(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=wasmExports["ba"])(a0);var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=a0=>(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=wasmExports["ca"])(a0);var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=a0=>(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=wasmExports["da"])(a0);var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=a0=>(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=wasmExports["ea"])(a0);var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=a0=>(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=wasmExports["fa"])(a0);var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=a0=>(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=wasmExports["ga"])(a0);var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=a0=>(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=wasmExports["ha"])(a0);var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=a0=>(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=wasmExports["ia"])(a0);var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=a0=>(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=wasmExports["ja"])(a0);var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=a0=>(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=wasmExports["ka"])(a0);var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=a0=>(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=wasmExports["la"])(a0);var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=a0=>(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=wasmExports["ma"])(a0);var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=a0=>(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=wasmExports["na"])(a0);var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=a0=>(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=wasmExports["oa"])(a0);var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=a0=>(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=wasmExports["pa"])(a0);var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=a0=>(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=wasmExports["qa"])(a0);var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=a0=>(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=wasmExports["ra"])(a0);var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=a0=>(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=wasmExports["sa"])(a0);var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=a0=>(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=wasmExports["ta"])(a0);var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=a0=>(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=wasmExports["ua"])(a0);var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=a0=>(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=wasmExports["va"])(a0);var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=a0=>(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=wasmExports["wa"])(a0);var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=a0=>(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=wasmExports["xa"])(a0);var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=a0=>(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=wasmExports["ya"])(a0);var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=a0=>(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=wasmExports["za"])(a0);var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=a0=>(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=wasmExports["Aa"])(a0);var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=a0=>(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=wasmExports["Ba"])(a0);var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=a0=>(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=wasmExports["Ca"])(a0);var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=a0=>(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=wasmExports["Da"])(a0);var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=a0=>(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=wasmExports["Ea"])(a0);var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=a0=>(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=wasmExports["Fa"])(a0);var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=a0=>(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=wasmExports["Ga"])(a0);var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=a0=>(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=wasmExports["Ha"])(a0);var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=a0=>(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=wasmExports["Ia"])(a0);var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=a0=>(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=wasmExports["Ja"])(a0);var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=a0=>(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=wasmExports["Ka"])(a0);var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=a0=>(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=wasmExports["La"])(a0);var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=a0=>(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=wasmExports["Ma"])(a0);var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=a0=>(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=wasmExports["Na"])(a0);var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=a0=>(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=wasmExports["Oa"])(a0);var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=a0=>(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=wasmExports["Pa"])(a0);var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=a0=>(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=wasmExports["Qa"])(a0);var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=a0=>(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=wasmExports["Ra"])(a0);var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=a0=>(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=wasmExports["Sa"])(a0);var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=a0=>(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=wasmExports["Ta"])(a0);var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=a0=>(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=wasmExports["Ua"])(a0);var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=a0=>(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=wasmExports["Va"])(a0);var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=a0=>(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=wasmExports["Wa"])(a0);var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=a0=>(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=wasmExports["Xa"])(a0);var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=a0=>(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=wasmExports["Ya"])(a0);var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=a0=>(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=wasmExports["Za"])(a0);var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=a0=>(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=wasmExports["_a"])(a0);var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=a0=>(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=wasmExports["$a"])(a0);var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=a0=>(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=wasmExports["ab"])(a0);var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=a0=>(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=wasmExports["bb"])(a0);var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=a0=>(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=wasmExports["cb"])(a0);var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=a0=>(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=wasmExports["db"])(a0);var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=a0=>(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=wasmExports["eb"])(a0);var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=a0=>(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=wasmExports["fb"])(a0);var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=a0=>(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=wasmExports["gb"])(a0);var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=a0=>(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=wasmExports["hb"])(a0);var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=a0=>(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=wasmExports["ib"])(a0);var _pv_orca_init=Module["_pv_orca_init"]=(a0,a1,a2,a3)=>(_pv_orca_init=Module["_pv_orca_init"]=wasmExports["jb"])(a0,a1,a2,a3);var _free=a0=>(_free=wasmExports["kb"])(a0);var _pv_orca_delete=Module["_pv_orca_delete"]=a0=>(_pv_orca_delete=Module["_pv_orca_delete"]=wasmExports["lb"])(a0);var _pv_orca_version=Module["_pv_orca_version"]=()=>(_pv_orca_version=Module["_pv_orca_version"]=wasmExports["mb"])();var _pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=(a0,a1,a2)=>(_pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=wasmExports["nb"])(a0,a1,a2);var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["ob"])(a0);var _pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=(a0,a1)=>(_pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=wasmExports["pb"])(a0,a1);var _pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=(a0,a1)=>(_pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=wasmExports["qb"])(a0,a1);var _pv_orca_synthesize=Module["_pv_orca_synthesize"]=(a0,a1,a2,a3,a4,a5,a6)=>(_pv_orca_synthesize=Module["_pv_orca_synthesize"]=wasmExports["rb"])(a0,a1,a2,a3,a4,a5,a6);var _pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=(a0,a1,a2,a3,a4,a5)=>(_pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=wasmExports["sb"])(a0,a1,a2,a3,a4,a5);var _pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=a0=>(_pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=wasmExports["tb"])(a0);var _pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=a0=>(_pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=wasmExports["ub"])(a0);var _pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=a0=>(_pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=wasmExports["vb"])(a0);var _pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=wasmExports["wb"])(a0,a1);var _pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=wasmExports["xb"])(a0,a1);var _pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=wasmExports["yb"])(a0,a1);var _pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=wasmExports["zb"])(a0,a1);var _pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=a0=>(_pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=wasmExports["Ab"])(a0);var _pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=(a0,a1)=>(_pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=wasmExports["Bb"])(a0,a1);var _pv_orca_stream_open=Module["_pv_orca_stream_open"]=(a0,a1,a2)=>(_pv_orca_stream_open=Module["_pv_orca_stream_open"]=wasmExports["Cb"])(a0,a1,a2);var _pv_orca_stream_close=Module["_pv_orca_stream_close"]=a0=>(_pv_orca_stream_close=Module["_pv_orca_stream_close"]=wasmExports["Db"])(a0);var _pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=(a0,a1,a2,a3)=>(_pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=wasmExports["Eb"])(a0,a1,a2,a3);var _pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=(a0,a1,a2)=>(_pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=wasmExports["Fb"])(a0,a1,a2);var _pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=(a0,a1)=>(_pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=wasmExports["Gb"])(a0,a1);var _pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=(a0,a1)=>(_pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=wasmExports["Hb"])(a0,a1);var _pv_status_to_string=Module["_pv_status_to_string"]=a0=>(_pv_status_to_string=Module["_pv_status_to_string"]=wasmExports["Jb"])(a0);var _pv_sample_rate=Module["_pv_sample_rate"]=()=>(_pv_sample_rate=Module["_pv_sample_rate"]=wasmExports["Kb"])();var _pv_log_enable=Module["_pv_log_enable"]=()=>(_pv_log_enable=Module["_pv_log_enable"]=wasmExports["Lb"])();var _pv_log_disable=Module["_pv_log_disable"]=()=>(_pv_log_disable=Module["_pv_log_disable"]=wasmExports["Mb"])();var _pv_set_sdk=Module["_pv_set_sdk"]=a0=>(_pv_set_sdk=Module["_pv_set_sdk"]=wasmExports["Nb"])(a0);var _pv_get_sdk=Module["_pv_get_sdk"]=()=>(_pv_get_sdk=Module["_pv_get_sdk"]=wasmExports["Ob"])();var _pv_free=Module["_pv_free"]=a0=>(_pv_free=Module["_pv_free"]=wasmExports["Pb"])(a0);var _pv_get_error_stack=Module["_pv_get_error_stack"]=(a0,a1)=>(_pv_get_error_stack=Module["_pv_get_error_stack"]=wasmExports["Qb"])(a0,a1);var _pv_free_error_stack=Module["_pv_free_error_stack"]=a0=>(_pv_free_error_stack=Module["_pv_free_error_stack"]=wasmExports["Rb"])(a0);var _aligned_alloc=Module["_aligned_alloc"]=(a0,a1)=>(_aligned_alloc=Module["_aligned_alloc"]=wasmExports["Sb"])(a0,a1);var __emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=(a0,a1,a2)=>(__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["Tb"])(a0,a1,a2);var __emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=(a0,a1,a2)=>(__emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=wasmExports["Ub"])(a0,a1,a2);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["Vb"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["Wb"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["Xb"])();var _asyncify_start_unwind=a0=>(_asyncify_start_unwind=wasmExports["Yb"])(a0);var _asyncify_stop_unwind=()=>(_asyncify_stop_unwind=wasmExports["Zb"])();var _asyncify_start_rewind=a0=>(_asyncify_start_rewind=wasmExports["_b"])(a0);var _asyncify_stop_rewind=()=>(_asyncify_stop_rewind=wasmExports["$b"])();var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=2372444;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=2372440;var ___cxa_new_handler=Module["___cxa_new_handler"]=2383392;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=53068;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=53116;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=53164;var __ZTIDn=Module["__ZTIDn"]=53512;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=53212;var __ZTIv=Module["__ZTIv"]=53460;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=53264;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=53324;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=53032;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=54996;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=53080;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=53128;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=53176;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=53224;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=53276;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=53348;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=53376;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=53444;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=53404;var __ZTSv=Module["__ZTSv"]=53456;var __ZTSPv=Module["__ZTSPv"]=53468;var __ZTIPv=Module["__ZTIPv"]=53472;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=55208;var __ZTSPKv=Module["__ZTSPKv"]=53488;var __ZTIPKv=Module["__ZTIPKv"]=53492;var __ZTSDn=Module["__ZTSDn"]=53508;var __ZTSPDn=Module["__ZTSPDn"]=53520;var __ZTIPDn=Module["__ZTIPDn"]=53524;var __ZTSPKDn=Module["__ZTSPKDn"]=53540;var __ZTIPKDn=Module["__ZTIPKDn"]=53548;var __ZTSb=Module["__ZTSb"]=53564;var __ZTIb=Module["__ZTIb"]=53568;var __ZTSPb=Module["__ZTSPb"]=53576;var __ZTIPb=Module["__ZTIPb"]=53580;var __ZTSPKb=Module["__ZTSPKb"]=53596;var __ZTIPKb=Module["__ZTIPKb"]=53600;var __ZTSw=Module["__ZTSw"]=53616;var __ZTIw=Module["__ZTIw"]=53620;var __ZTSPw=Module["__ZTSPw"]=53628;var __ZTIPw=Module["__ZTIPw"]=53632;var __ZTSPKw=Module["__ZTSPKw"]=53648;var __ZTIPKw=Module["__ZTIPKw"]=53652;var __ZTSc=Module["__ZTSc"]=53668;var __ZTIc=Module["__ZTIc"]=53672;var __ZTSPc=Module["__ZTSPc"]=53680;var __ZTIPc=Module["__ZTIPc"]=53684;var __ZTSPKc=Module["__ZTSPKc"]=53700;var __ZTIPKc=Module["__ZTIPKc"]=53704;var __ZTSh=Module["__ZTSh"]=53720;var __ZTIh=Module["__ZTIh"]=53724;var __ZTSPh=Module["__ZTSPh"]=53732;var __ZTIPh=Module["__ZTIPh"]=53736;var __ZTSPKh=Module["__ZTSPKh"]=53752;var __ZTIPKh=Module["__ZTIPKh"]=53756;var __ZTSa=Module["__ZTSa"]=53772;var __ZTIa=Module["__ZTIa"]=53776;var __ZTSPa=Module["__ZTSPa"]=53784;var __ZTIPa=Module["__ZTIPa"]=53788;var __ZTSPKa=Module["__ZTSPKa"]=53804;var __ZTIPKa=Module["__ZTIPKa"]=53808;var __ZTSs=Module["__ZTSs"]=53824;var __ZTIs=Module["__ZTIs"]=53828;var __ZTSPs=Module["__ZTSPs"]=53836;var __ZTIPs=Module["__ZTIPs"]=53840;var __ZTSPKs=Module["__ZTSPKs"]=53856;var __ZTIPKs=Module["__ZTIPKs"]=53860;var __ZTSt=Module["__ZTSt"]=53876;var __ZTIt=Module["__ZTIt"]=53880;var __ZTSPt=Module["__ZTSPt"]=53888;var __ZTIPt=Module["__ZTIPt"]=53892;var __ZTSPKt=Module["__ZTSPKt"]=53908;var __ZTIPKt=Module["__ZTIPKt"]=53912;var __ZTSi=Module["__ZTSi"]=53928;var __ZTIi=Module["__ZTIi"]=53932;var __ZTSPi=Module["__ZTSPi"]=53940;var __ZTIPi=Module["__ZTIPi"]=53944;var __ZTSPKi=Module["__ZTSPKi"]=53960;var __ZTIPKi=Module["__ZTIPKi"]=53964;var __ZTSj=Module["__ZTSj"]=53980;var __ZTIj=Module["__ZTIj"]=53984;var __ZTSPj=Module["__ZTSPj"]=53992;var __ZTIPj=Module["__ZTIPj"]=53996;var __ZTSPKj=Module["__ZTSPKj"]=54012;var __ZTIPKj=Module["__ZTIPKj"]=54016;var __ZTSl=Module["__ZTSl"]=54032;var __ZTIl=Module["__ZTIl"]=54036;var __ZTSPl=Module["__ZTSPl"]=54044;var __ZTIPl=Module["__ZTIPl"]=54048;var __ZTSPKl=Module["__ZTSPKl"]=54064;var __ZTIPKl=Module["__ZTIPKl"]=54068;var __ZTSm=Module["__ZTSm"]=54084;var __ZTIm=Module["__ZTIm"]=54088;var __ZTSPm=Module["__ZTSPm"]=54096;var __ZTIPm=Module["__ZTIPm"]=54100;var __ZTSPKm=Module["__ZTSPKm"]=54116;var __ZTIPKm=Module["__ZTIPKm"]=54120;var __ZTSx=Module["__ZTSx"]=54136;var __ZTIx=Module["__ZTIx"]=54140;var __ZTSPx=Module["__ZTSPx"]=54148;var __ZTIPx=Module["__ZTIPx"]=54152;var __ZTSPKx=Module["__ZTSPKx"]=54168;var __ZTIPKx=Module["__ZTIPKx"]=54172;var __ZTSy=Module["__ZTSy"]=54188;var __ZTIy=Module["__ZTIy"]=54192;var __ZTSPy=Module["__ZTSPy"]=54200;var __ZTIPy=Module["__ZTIPy"]=54204;var __ZTSPKy=Module["__ZTSPKy"]=54220;var __ZTIPKy=Module["__ZTIPKy"]=54224;var __ZTSn=Module["__ZTSn"]=54240;var __ZTIn=Module["__ZTIn"]=54244;var __ZTSPn=Module["__ZTSPn"]=54252;var __ZTIPn=Module["__ZTIPn"]=54256;var __ZTSPKn=Module["__ZTSPKn"]=54272;var __ZTIPKn=Module["__ZTIPKn"]=54276;var __ZTSo=Module["__ZTSo"]=54292;var __ZTIo=Module["__ZTIo"]=54296;var __ZTSPo=Module["__ZTSPo"]=54304;var __ZTIPo=Module["__ZTIPo"]=54308;var __ZTSPKo=Module["__ZTSPKo"]=54324;var __ZTIPKo=Module["__ZTIPKo"]=54328;var __ZTSDh=Module["__ZTSDh"]=54344;var __ZTIDh=Module["__ZTIDh"]=54348;var __ZTSPDh=Module["__ZTSPDh"]=54356;var __ZTIPDh=Module["__ZTIPDh"]=54360;var __ZTSPKDh=Module["__ZTSPKDh"]=54376;var __ZTIPKDh=Module["__ZTIPKDh"]=54384;var __ZTSf=Module["__ZTSf"]=54400;var __ZTIf=Module["__ZTIf"]=54404;var __ZTSPf=Module["__ZTSPf"]=54412;var __ZTIPf=Module["__ZTIPf"]=54416;var __ZTSPKf=Module["__ZTSPKf"]=54432;var __ZTIPKf=Module["__ZTIPKf"]=54436;var __ZTSd=Module["__ZTSd"]=54452;var __ZTId=Module["__ZTId"]=54456;var __ZTSPd=Module["__ZTSPd"]=54464;var __ZTIPd=Module["__ZTIPd"]=54468;var __ZTSPKd=Module["__ZTSPKd"]=54484;var __ZTIPKd=Module["__ZTIPKd"]=54488;var __ZTSe=Module["__ZTSe"]=54504;var __ZTIe=Module["__ZTIe"]=54508;var __ZTSPe=Module["__ZTSPe"]=54516;var __ZTIPe=Module["__ZTIPe"]=54520;var __ZTSPKe=Module["__ZTSPKe"]=54536;var __ZTIPKe=Module["__ZTIPKe"]=54540;var __ZTSg=Module["__ZTSg"]=54556;var __ZTIg=Module["__ZTIg"]=54560;var __ZTSPg=Module["__ZTSPg"]=54568;var __ZTIPg=Module["__ZTIPg"]=54572;var __ZTSPKg=Module["__ZTSPKg"]=54588;var __ZTIPKg=Module["__ZTIPKg"]=54592;var __ZTSDu=Module["__ZTSDu"]=54608;var __ZTIDu=Module["__ZTIDu"]=54612;var __ZTSPDu=Module["__ZTSPDu"]=54620;var __ZTIPDu=Module["__ZTIPDu"]=54624;var __ZTSPKDu=Module["__ZTSPKDu"]=54640;var __ZTIPKDu=Module["__ZTIPKDu"]=54648;var __ZTSDs=Module["__ZTSDs"]=54664;var __ZTIDs=Module["__ZTIDs"]=54668;var __ZTSPDs=Module["__ZTSPDs"]=54676;var __ZTIPDs=Module["__ZTIPDs"]=54680;var __ZTSPKDs=Module["__ZTSPKDs"]=54696;var __ZTIPKDs=Module["__ZTIPKDs"]=54704;var __ZTSDi=Module["__ZTSDi"]=54720;var __ZTIDi=Module["__ZTIDi"]=54724;var __ZTSPDi=Module["__ZTSPDi"]=54732;var __ZTIPDi=Module["__ZTIPDi"]=54736;var __ZTSPKDi=Module["__ZTSPKDi"]=54752;var __ZTIPKDi=Module["__ZTIPKDi"]=54760;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=54776;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=54840;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=54804;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=54852;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=54880;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=54944;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=54908;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=54956;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=55076;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=55036;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=55088;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=55168;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=55128;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=55180;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=55236;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=55264;var __ZTVSt9exception=Module["__ZTVSt9exception"]=55304;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=55284;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=55416;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=55456;var __ZTISt9exception=Module["__ZTISt9exception"]=55340;var __ZTSSt9exception=Module["__ZTSSt9exception"]=55324;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=55348;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=55388;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=55368;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=55400;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=55428;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=55468;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=55488;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=55564;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=55804;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=55508;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=55576;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=55528;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=55545;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=55588;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=55632;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=55608;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=55644;var __ZTISt12length_error=Module["__ZTISt12length_error"]=55684;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=55664;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=55696;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=55736;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=55716;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=55748;var __ZTISt11range_error=Module["__ZTISt11range_error"]=55816;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=55768;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=55784;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=55828;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=55868;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=55848;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=55880;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=55920;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=55900;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=52900;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=52920;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=52992;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=53020;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=52940;var __ZTISt9type_info=Module["__ZTISt9type_info"]=52972;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=52956;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=52980;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=53004;Module["addFunction"]=addFunction;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise; +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";function _typeof$2(o){null;return _typeof$2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof$2(o)}function toPrimitive(t,r){if("object"!=_typeof$2(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof$2(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function toPropertyKey(t){var i=toPrimitive(t,"string");return"symbol"==_typeof$2(i)?i:i+""}function _defineProperty(e,r,t){return(r=toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x["default"]:x}var regeneratorRuntime$3={exports:{}};var _typeof$1={exports:{}};var _typeof_1=_typeof$1.exports;(function(module){function _typeof(o){null;return module.exports=_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},module.exports.__esModule=true,module.exports["default"]=module.exports,_typeof(o)}module.exports=_typeof,module.exports.__esModule=true,module.exports["default"]=module.exports})(_typeof$1);var _typeofExports=_typeof$1.exports;var _typeof=getDefaultExportFromCjs(_typeofExports);var regeneratorRuntime$1=regeneratorRuntime$3.exports;(function(module){var _typeof=_typeofExports["default"];function _regeneratorRuntime(){"use strict";module.exports=_regeneratorRuntime=function _regeneratorRuntime(){return e},module.exports.__esModule=true,module.exports["default"]=module.exports;var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{define({},"")}catch(t){define=function define(t,e,r){return t[e]=r}}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,a=Object.create(i.prototype),c=new Context(n||[]);return o(a,"_invoke",{value:makeInvokeMethod(t,r,c)}),a}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=wrap;var h="suspendedStart",l="suspendedYield",f="executing",s="completed",y={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var p={};define(p,a,function(){return this});var d=Object.getPrototypeOf,v=d&&d(d(values([])));v&&v!==r&&n.call(v,a)&&(p=v);var g=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(p);function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){define(t,e,function(t){return this._invoke(e,t)})})}function AsyncIterator(t,e){function invoke(r,o,i,a){var c=tryCatch(t[r],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==_typeof(h)&&n.call(h,"__await")?e.resolve(h.__await).then(function(t){invoke("next",t,i,a)},function(t){invoke("throw",t,i,a)}):e.resolve(h).then(function(t){u.value=t,i(u)},function(t){return invoke("throw",t,i,a)})}a(c.arg)}var r;o(this,"_invoke",{value:function value(t,n){function callInvokeWithMethodAndArg(){return new e(function(e,r){invoke(t,n,e,r)})}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(e,r,n){var o=h;return function(i,a){if(o===f)throw Error("Generator is already running");if(o===s){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=maybeInvokeDelegate(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=s,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=f;var p=tryCatch(e,r,n);if("normal"===p.type){if(o=n.done?s:l,p.arg===y)continue;return{value:p.arg,done:n.done}}"throw"===p.type&&(o=s,n.method="throw",n.arg=p.arg)}}}function maybeInvokeDelegate(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator["return"]&&(r.method="return",r.arg=t,maybeInvokeDelegate(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=tryCatch(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function next(){for(;++o=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),y}},catch:function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function delegateYield(e,r,n){return this.delegate={iterator:values(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y}},e}module.exports=_regeneratorRuntime,module.exports.__esModule=true,module.exports["default"]=module.exports})(regeneratorRuntime$3);var regeneratorRuntimeExports=regeneratorRuntime$3.exports;var regeneratorRuntime$2=getDefaultExportFromCjs(regeneratorRuntimeExports);var runtime=regeneratorRuntimeExports();var regenerator=runtime;try{regeneratorRuntime=runtime}catch(accidentalStrictMode){if(typeof globalThis==="object"){globalThis.regeneratorRuntime=runtime}else{Function("r","regeneratorRuntime = r")(runtime)}}var _regeneratorRuntime=getDefaultExportFromCjs(regenerator);const BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};const BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};const PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};const OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};const ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};class Utils{static getFirstMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>0&&match[1]||""}static getSecondMatch(regexp,ua){const match=ua.match(regexp);return match&&match.length>1&&match[2]||""}static matchAndReturnConst(regexp,ua,_const){if(regexp.test(ua)){return _const}return void 0}static getWindowsVersionName(version){switch(version){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return undefined}}static getMacOSVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]!==10)return undefined;switch(v[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return undefined}}static getAndroidVersionName(version){const v=version.split(".").splice(0,2).map(s=>parseInt(s,10)||0);v.push(0);if(v[0]===1&&v[1]<5)return undefined;if(v[0]===1&&v[1]<6)return"Cupcake";if(v[0]===1&&v[1]>=6)return"Donut";if(v[0]===2&&v[1]<2)return"Eclair";if(v[0]===2&&v[1]===2)return"Froyo";if(v[0]===2&&v[1]>2)return"Gingerbread";if(v[0]===3)return"Honeycomb";if(v[0]===4&&v[1]<1)return"Ice Cream Sandwich";if(v[0]===4&&v[1]<4)return"Jelly Bean";if(v[0]===4&&v[1]>=4)return"KitKat";if(v[0]===5)return"Lollipop";if(v[0]===6)return"Marshmallow";if(v[0]===7)return"Nougat";if(v[0]===8)return"Oreo";if(v[0]===9)return"Pie";return undefined}static getVersionPrecision(version){return version.split(".").length}static compareVersions(versionA,versionB,isLoose=false){const versionAPrecision=Utils.getVersionPrecision(versionA);const versionBPrecision=Utils.getVersionPrecision(versionB);let precision=Math.max(versionAPrecision,versionBPrecision);let lastPrecision=0;const chunks=Utils.map([versionA,versionB],version=>{const delta=precision-Utils.getVersionPrecision(version);const _version=version+new Array(delta+1).join(".0");return Utils.map(_version.split("."),chunk=>new Array(20-chunk.length).join("0")+chunk).reverse()});if(isLoose){lastPrecision=precision-Math.min(versionAPrecision,versionBPrecision)}precision-=1;while(precision>=lastPrecision){if(chunks[0][precision]>chunks[1][precision]){return 1}if(chunks[0][precision]===chunks[1][precision]){if(precision===lastPrecision){return 0}precision-=1}else if(chunks[0][precision]{result[key]=assigner[key]})}}return obj}static getBrowserAlias(browserName){return BROWSER_ALIASES_MAP[browserName]}static getBrowserTypeByAlias(browserAlias){return BROWSER_MAP[browserAlias]||""}}const commonVersionIdentifier=/version\/(\d+(\.?_?\d+)+)/i;const browsersList=[{test:[/googlebot/i],describe(ua){const browser={name:"Googlebot"};const version=Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/opera/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opr\/|opios/i],describe(ua){const browser={name:"Opera"};const version=Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/SamsungBrowser/i],describe(ua){const browser={name:"Samsung Internet for Android"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Whale/i],describe(ua){const browser={name:"NAVER Whale Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MZBrowser/i],describe(ua){const browser={name:"MZ Browser"};const version=Utils.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/focus/i],describe(ua){const browser={name:"Focus"};const version=Utils.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/swing/i],describe(ua){const browser={name:"Swing"};const version=Utils.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/coast/i],describe(ua){const browser={name:"Opera Coast"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe(ua){const browser={name:"Opera Touch"};const version=Utils.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/yabrowser/i],describe(ua){const browser={name:"Yandex Browser"};const version=Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/ucbrowser/i],describe(ua){const browser={name:"UC Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/Maxthon|mxios/i],describe(ua){const browser={name:"Maxthon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/epiphany/i],describe(ua){const browser={name:"Epiphany"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/puffin/i],describe(ua){const browser={name:"Puffin"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sleipnir/i],describe(ua){const browser={name:"Sleipnir"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/k-meleon/i],describe(ua){const browser={name:"K-Meleon"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/micromessenger/i],describe(ua){const browser={name:"WeChat"};const version=Utils.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qqbrowser/i],describe(ua){const browser={name:/qqbrowserlite/i.test(ua)?"QQ Browser Lite":"QQ Browser"};const version=Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/msie|trident/i],describe(ua){const browser={name:"Internet Explorer"};const version=Utils.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/\sedg\//i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/edg([ea]|ios)/i],describe(ua){const browser={name:"Microsoft Edge"};const version=Utils.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/vivaldi/i],describe(ua){const browser={name:"Vivaldi"};const version=Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/seamonkey/i],describe(ua){const browser={name:"SeaMonkey"};const version=Utils.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/sailfish/i],describe(ua){const browser={name:"Sailfish"};const version=Utils.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,ua);if(version){browser.version=version}return browser}},{test:[/silk/i],describe(ua){const browser={name:"Amazon Silk"};const version=Utils.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/phantom/i],describe(ua){const browser={name:"PhantomJS"};const version=Utils.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/slimerjs/i],describe(ua){const browser={name:"SlimerJS"};const version=Utils.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const browser={name:"BlackBerry"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/(web|hpw)[o0]s/i],describe(ua){const browser={name:"WebOS Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua)||Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/bada/i],describe(ua){const browser={name:"Bada"};const version=Utils.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/tizen/i],describe(ua){const browser={name:"Tizen"};const version=Utils.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/qupzilla/i],describe(ua){const browser={name:"QupZilla"};const version=Utils.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/firefox|iceweasel|fxios/i],describe(ua){const browser={name:"Firefox"};const version=Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/electron/i],describe(ua){const browser={name:"Electron"};const version=Utils.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/MiuiBrowser/i],describe(ua){const browser={name:"Miui"};const version=Utils.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/chromium/i],describe(ua){const browser={name:"Chromium"};const version=Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,ua)||Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/chrome|crios|crmo/i],describe(ua){const browser={name:"Chrome"};const version=Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test:[/GSA/i],describe(ua){const browser={name:"Google Search"};const version=Utils.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,ua);if(version){browser.version=version}return browser}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const browser={name:"Android Browser"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/playstation 4/i],describe(ua){const browser={name:"PlayStation 4"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/safari|applewebkit/i],describe(ua){const browser={name:"Safari"};const version=Utils.getFirstMatch(commonVersionIdentifier,ua);if(version){browser.version=version}return browser}},{test:[/.*/i],describe(ua){const regexpWithoutDeviceSpec=/^(.*)\/(.*) /;const regexpWithDeviceSpec=/^(.*)\/(.*)[ \t]\((.*)/;const hasDeviceSpec=ua.search("\\(")!==-1;const regexp=hasDeviceSpec?regexpWithDeviceSpec:regexpWithoutDeviceSpec;return{name:Utils.getFirstMatch(regexp,ua),version:Utils.getSecondMatch(regexp,ua)}}}];var osParsersList=[{test:[/Roku\/DVP/],describe(ua){const version=Utils.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,ua);return{name:OS_MAP.Roku,version:version}}},{test:[/windows phone/i],describe(ua){const version=Utils.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.WindowsPhone,version:version}}},{test:[/windows /i],describe(ua){const version=Utils.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,ua);const versionName=Utils.getWindowsVersionName(version);return{name:OS_MAP.Windows,version:version,versionName:versionName}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(ua){const result={name:OS_MAP.iOS};const version=Utils.getSecondMatch(/(Version\/)(\d[\d.]+)/,ua);if(version){result.version=version}return result}},{test:[/macintosh/i],describe(ua){const version=Utils.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,ua).replace(/[_\s]/g,".");const versionName=Utils.getMacOSVersionName(version);const os={name:OS_MAP.MacOS,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(ipod|iphone|ipad)/i],describe(ua){const version=Utils.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,ua).replace(/[_\s]/g,".");return{name:OS_MAP.iOS,version:version}}},{test(parser){const notLikeAndroid=!parser.test(/like android/i);const butAndroid=parser.test(/android/i);return notLikeAndroid&&butAndroid},describe(ua){const version=Utils.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,ua);const versionName=Utils.getAndroidVersionName(version);const os={name:OS_MAP.Android,version:version};if(versionName){os.versionName=versionName}return os}},{test:[/(web|hpw)[o0]s/i],describe(ua){const version=Utils.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,ua);const os={name:OS_MAP.WebOS};if(version&&version.length){os.version=version}return os}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe(ua){const version=Utils.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,ua)||Utils.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,ua)||Utils.getFirstMatch(/\bbb(\d+)/i,ua);return{name:OS_MAP.BlackBerry,version:version}}},{test:[/bada/i],describe(ua){const version=Utils.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Bada,version:version}}},{test:[/tizen/i],describe(ua){const version=Utils.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.Tizen,version:version}}},{test:[/linux/i],describe(){return{name:OS_MAP.Linux}}},{test:[/CrOS/],describe(){return{name:OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe(ua){const version=Utils.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,ua);return{name:OS_MAP.PlayStation4,version:version}}}];var platformParsersList=[{test:[/googlebot/i],describe(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe(ua){const model=Utils.getFirstMatch(/(can-l01)/i,ua)&&"Nova";const platform={type:PLATFORMS_MAP.mobile,vendor:"Huawei"};if(model){platform.model=model}return platform}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe(){return{type:PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){const iDevice=parser.test(/ipod|iphone/i);const likeIDevice=parser.test(/like (ipod|iphone)/i);return iDevice&&!likeIDevice},describe(ua){const model=Utils.getFirstMatch(/(ipod|iphone)/i,ua);return{type:PLATFORMS_MAP.mobile,vendor:"Apple",model:model}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName(true)==="blackberry"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test(parser){return parser.getBrowserName(true)==="bada"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getBrowserName()==="windows phone"},describe(){return{type:PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test(parser){const osMajorVersion=Number(String(parser.getOSVersion()).split(".")[0]);return parser.getOSName(true)==="android"&&osMajorVersion>=3},describe(){return{type:PLATFORMS_MAP.tablet}}},{test(parser){return parser.getOSName(true)==="android"},describe(){return{type:PLATFORMS_MAP.mobile}}},{test(parser){return parser.getOSName(true)==="macos"},describe(){return{type:PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test(parser){return parser.getOSName(true)==="windows"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="linux"},describe(){return{type:PLATFORMS_MAP.desktop}}},{test(parser){return parser.getOSName(true)==="playstation 4"},describe(){return{type:PLATFORMS_MAP.tv}}},{test(parser){return parser.getOSName(true)==="roku"},describe(){return{type:PLATFORMS_MAP.tv}}}];var enginesParsersList=[{test(parser){return parser.getBrowserName(true)==="microsoft edge"},describe(ua){const isBlinkBased=/\sedg\//i.test(ua);if(isBlinkBased){return{name:ENGINE_MAP.Blink}}const version=Utils.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,ua);return{name:ENGINE_MAP.EdgeHTML,version:version}}},{test:[/trident/i],describe(ua){const engine={name:ENGINE_MAP.Trident};const version=Utils.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){return parser.test(/presto/i)},describe(ua){const engine={name:ENGINE_MAP.Presto};const version=Utils.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test(parser){const isGecko=parser.test(/gecko/i);const likeGecko=parser.test(/like gecko/i);return isGecko&&!likeGecko},describe(ua){const engine={name:ENGINE_MAP.Gecko};const version=Utils.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}},{test:[/(apple)?webkit\/537\.36/i],describe(){return{name:ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe(ua){const engine={name:ENGINE_MAP.WebKit};const version=Utils.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,ua);if(version){engine.version=version}return engine}}];class Parser{constructor(UA,skipParsing=false){if(UA===void 0||UA===null||UA===""){throw new Error("UserAgent parameter can't be empty")}this._ua=UA;this.parsedResult={};if(skipParsing!==true){this.parse()}}getUA(){return this._ua}test(regex){return regex.test(this._ua)}parseBrowser(){this.parsedResult.browser={};const browserDescriptor=Utils.find(browsersList,_browser=>{if(typeof _browser.test==="function"){return _browser.test(this)}if(_browser.test instanceof Array){return _browser.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(browserDescriptor){this.parsedResult.browser=browserDescriptor.describe(this.getUA())}return this.parsedResult.browser}getBrowser(){if(this.parsedResult.browser){return this.parsedResult.browser}return this.parseBrowser()}getBrowserName(toLowerCase){if(toLowerCase){return String(this.getBrowser().name).toLowerCase()||""}return this.getBrowser().name||""}getBrowserVersion(){return this.getBrowser().version}getOS(){if(this.parsedResult.os){return this.parsedResult.os}return this.parseOS()}parseOS(){this.parsedResult.os={};const os=Utils.find(osParsersList,_os=>{if(typeof _os.test==="function"){return _os.test(this)}if(_os.test instanceof Array){return _os.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(os){this.parsedResult.os=os.describe(this.getUA())}return this.parsedResult.os}getOSName(toLowerCase){const{name:name}=this.getOS();if(toLowerCase){return String(name).toLowerCase()||""}return name||""}getOSVersion(){return this.getOS().version}getPlatform(){if(this.parsedResult.platform){return this.parsedResult.platform}return this.parsePlatform()}getPlatformType(toLowerCase=false){const{type:type}=this.getPlatform();if(toLowerCase){return String(type).toLowerCase()||""}return type||""}parsePlatform(){this.parsedResult.platform={};const platform=Utils.find(platformParsersList,_platform=>{if(typeof _platform.test==="function"){return _platform.test(this)}if(_platform.test instanceof Array){return _platform.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(platform){this.parsedResult.platform=platform.describe(this.getUA())}return this.parsedResult.platform}getEngine(){if(this.parsedResult.engine){return this.parsedResult.engine}return this.parseEngine()}getEngineName(toLowerCase){if(toLowerCase){return String(this.getEngine().name).toLowerCase()||""}return this.getEngine().name||""}parseEngine(){this.parsedResult.engine={};const engine=Utils.find(enginesParsersList,_engine=>{if(typeof _engine.test==="function"){return _engine.test(this)}if(_engine.test instanceof Array){return _engine.test.some(condition=>this.test(condition))}throw new Error("Browser's test function is not valid")});if(engine){this.parsedResult.engine=engine.describe(this.getUA())}return this.parsedResult.engine}parse(){this.parseBrowser();this.parseOS();this.parsePlatform();this.parseEngine();return this}getResult(){return Utils.assign({},this.parsedResult)}satisfies(checkTree){const platformsAndOSes={};let platformsAndOSCounter=0;const browsers={};let browsersCounter=0;const allDefinitions=Object.keys(checkTree);allDefinitions.forEach(key=>{const currentDefinition=checkTree[key];if(typeof currentDefinition==="string"){browsers[key]=currentDefinition;browsersCounter+=1}else if(typeof currentDefinition==="object"){platformsAndOSes[key]=currentDefinition;platformsAndOSCounter+=1}});if(platformsAndOSCounter>0){const platformsAndOSNames=Object.keys(platformsAndOSes);const OSMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isOS(name));if(OSMatchingDefinition){const osResult=this.satisfies(platformsAndOSes[OSMatchingDefinition]);if(osResult!==void 0){return osResult}}const platformMatchingDefinition=Utils.find(platformsAndOSNames,name=>this.isPlatform(name));if(platformMatchingDefinition){const platformResult=this.satisfies(platformsAndOSes[platformMatchingDefinition]);if(platformResult!==void 0){return platformResult}}}if(browsersCounter>0){const browserNames=Object.keys(browsers);const matchingDefinition=Utils.find(browserNames,name=>this.isBrowser(name,true));if(matchingDefinition!==void 0){return this.compareVersion(browsers[matchingDefinition])}}return undefined}isBrowser(browserName,includingAlias=false){const defaultBrowserName=this.getBrowserName().toLowerCase();let browserNameLower=browserName.toLowerCase();const alias=Utils.getBrowserTypeByAlias(browserNameLower);if(includingAlias&&alias){browserNameLower=alias.toLowerCase()}return browserNameLower===defaultBrowserName}compareVersion(version){let expectedResults=[0];let comparableVersion=version;let isLoose=false;const currentBrowserVersion=this.getBrowserVersion();if(typeof currentBrowserVersion!=="string"){return void 0}if(version[0]===">"||version[0]==="<"){comparableVersion=version.substr(1);if(version[1]==="="){isLoose=true;comparableVersion=version.substr(2)}else{expectedResults=[]}if(version[0]===">"){expectedResults.push(1)}else{expectedResults.push(-1)}}else if(version[0]==="="){comparableVersion=version.substr(1)}else if(version[0]==="~"){isLoose=true;comparableVersion=version.substr(1)}return expectedResults.indexOf(Utils.compareVersions(currentBrowserVersion,comparableVersion,isLoose))>-1}isOS(osName){return this.getOSName(true)===String(osName).toLowerCase()}isPlatform(platformType){return this.getPlatformType(true)===String(platformType).toLowerCase()}isEngine(engineName){return this.getEngineName(true)===String(engineName).toLowerCase()}is(anything,includingAlias=false){return this.isBrowser(anything,includingAlias)||this.isOS(anything)||this.isPlatform(anything)}some(anythings=[]){return anythings.some(anything=>this.is(anything))}}class Bowser{static getParser(UA,skipParsing=false){if(typeof UA!=="string"){throw new Error("UserAgent should be a string")}return new Parser(UA,skipParsing)}static parse(UA){return new Parser(UA).getResult()}static get BROWSER_MAP(){return BROWSER_MAP}static get ENGINE_MAP(){return ENGINE_MAP}static get OS_MAP(){return OS_MAP}static get PLATFORMS_MAP(){return PLATFORMS_MAP}}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t=this._data.length){return undefined}var res=this._data.slice(this._pos,this._pos+bytes);this._pos+=bytes;return res}},{key:"set",value:function set(pos,data){this._pos=pos;this._data=data}},{key:"clear",value:function clear(){this._pos=0;this._data=new Uint8Array}}])}();var PvFileIDB=function(_PvFile){function PvFileIDB(path,meta,db,mode){var _this;_classCallCheck(this,PvFileIDB);_this=_callSuper$1(this,PvFileIDB);_this._pageSize=512*1024;_this._pagePtr=0;_this._pageOffset=0;_this._path=path;_this._meta=meta;_this._db=db;_this._mode=mode;_this._cache=new PvCache;return _this}_inherits(PvFileIDB,_PvFile);return _createClass(PvFileIDB,[{key:"pageSize",get:function get(){return this._pageSize}},{key:"close",value:function(){var _close=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:this._db.close();case 1:case"end":return _context.stop()}},_callee,this)}));function close(){return _close.apply(this,arguments)}return close}()},{key:"read",value:function(){var _read=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(size,count){var _this2=this;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:return _context2.abrupt("return",new Promise(function(resolve,reject){if(!_this2.exists()){reject(new Error("'".concat(_this2._path,"' doesn't exist.")));return}if(_this2._isEOF){var err=new Error("EOF");err.name="EndOfFile";reject(err);return}var copied=0;var maxToCopy=Math.min(size*count,_this2._meta.size);var totalElems=maxToCopy-maxToCopy%size;var buffer=new Uint8Array(totalElems);var res=_this2._cache.get(totalElems);if(res){copied+=res.length;_this2._pageOffset+=res.length;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(totalElems===copied){resolve(res);return}buffer.set(res)}var keyRange=IDBKeyRange.bound("".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr)),"".concat(_this2._path,"-").concat(PvFileIDB.createPage(_this2._pagePtr+Math.floor(totalElems/_this2._pageSize)+1)));var store=_this2._store;var req=store.openCursor(keyRange);req.onsuccess=function(){var cursor=req.result;if(!cursor||_this2._isEOF){return}var toCopy=Math.min(totalElems-copied,cursor.value.length-_this2._pageOffset);buffer.set(cursor.value.slice(_this2._pageOffset,_this2._pageOffset+toCopy),copied);copied+=toCopy;_this2._pageOffset+=toCopy;if(_this2._pageOffset===_this2._pageSize){_this2._pagePtr+=1;_this2._pageOffset=0}if(copied1&&_args4[1]!==undefined?_args4[1]:1;return _context4.abrupt("return",new Promise(function(){var _ref=_asyncToGenerator(_regeneratorRuntime.mark(function _callee3(resolve,reject){var _store$transaction3;var store,getCurrentPage,last,newContent,newSize,newMeta,pages,i,keyRange,_store$transaction4;return _regeneratorRuntime.wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(!(_this3._mode==="readonly")){_context3.next=3;break}reject(new Error("Instance is readonly mode only."));return _context3.abrupt("return");case 3:if(!(typeof version!=="number"&&version<=0)){_context3.next=6;break}reject(new Error("Version should be a positive number"));return _context3.abrupt("return");case 6:store=_this3._store;getCurrentPage=function getCurrentPage(){return new Promise(function(res){var req=store.get("".concat(_this3._path,"-").concat(PvFileIDB.createPage(_this3._pagePtr)));req.onsuccess=function(){if(req.result!==undefined){res(req.result.slice(0,_this3._pageOffset))}else{res(new Uint8Array(0))}}})};_context3.next=10;return getCurrentPage();case 10:last=_context3.sent;newContent=new Uint8Array(last.length+content.length);newContent.set(last);newContent.set(content,last.length);newSize=_this3._pagePtr*_this3._pageSize+newContent.length;newMeta={size:newSize,numPages:Math.ceil(newSize/_this3._pageSize),version:version,pageSize:_this3._pageSize};store.put(newMeta,_this3._path);pages=Math.ceil(newContent.length/_this3._pageSize);for(i=0;i=this._meta.numPages-1&&this._pageOffset>=this._meta.size%this._pageSize}},{key:"_store",get:function get(){return this._db.transaction(PV_FILE_STORE,this._mode).objectStore(PV_FILE_STORE)}}],[{key:"open",value:function open(path,mode){if(!self.indexedDB){var error=new Error("IndexedDB is not supported");error.name="IndexedDBNotSupported";throw error}return new Promise(function(){var _ref3=_asyncToGenerator(_regeneratorRuntime.mark(function _callee7(resolve,reject){var db,req,_error2;return _regeneratorRuntime.wrap(function _callee7$(_context7){while(1)switch(_context7.prev=_context7.next){case 0:_context7.prev=0;_context7.next=3;return getDB();case 3:db=_context7.sent;req=db.transaction(PV_FILE_STORE,"readwrite").objectStore(PV_FILE_STORE).get(path);req.onerror=function(){reject(req.error)};req.onsuccess=function(){var meta=req.result;var dbMode=mode.includes("r")?"readonly":"readwrite";if(meta===undefined&&dbMode==="readonly"){var _error=new Error("'".concat(path,"' doesn't exist."));_error.name="FileNotExists";reject(_error);return}var fileIDB=new PvFileIDB(path,meta,db,dbMode);if(mode.includes("a")){fileIDB.seek(0,2)}resolve(fileIDB)};_context7.next=12;break;case 9:_context7.prev=9;_context7.t0=_context7["catch"](0);if(_context7.t0.name==="InvalidStateError"){_error2=new Error("IndexedDB is not supported");_error2.name="IndexedDBNotSupported";reject(_error2)}else{reject(_context7.t0)}case 12:case"end":return _context7.stop()}},_callee7,null,[[0,9]])}));return function(_x8,_x9){return _ref3.apply(this,arguments)}}())}},{key:"createPage",value:function createPage(page){return("00000"+page).slice(-6)}}])}(PvFile);function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}var PvFileMem=function(_PvFile){function PvFileMem(path,meta,db,mode){var _this;_classCallCheck(this,PvFileMem);_this=_callSuper(this,PvFileMem);_this._pos=0;_this._path=path;_this._meta=meta;_this._mode=mode;return _this}_inherits(PvFileMem,_PvFile);return _createClass(PvFileMem,[{key:"close",value:function close(){return}},{key:"read",value:function read(size,count){if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(this._isEOF){var err=new Error("EOF");err.name="EndOfFile";throw err}var toCopy=Math.min(size*count,this._file.length-this._pos);var totalElems=toCopy-toCopy%size;var buffer=new Uint8Array(totalElems);buffer.set(this._file.slice(this._pos,this._pos+totalElems),0);this._pos+=totalElems;return buffer}},{key:"write",value:function write(content){var version=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;var newFile=new Uint8Array(this._pos+content.length);if(this._file!==undefined){newFile.set(this._file.slice(0,this._pos));newFile.set(content,this._pos)}else{newFile.set(content)}this._file=newFile;this._pos+=content.length}},{key:"seek",value:function seek(offset,whence){if(!this.exists()&&this._mode==="readonly"){throw new Error("'".concat(this._path,"' doesn't exist."))}if(!this.exists()){throw new Error("'".concat(this._path,"' doesn't exist."))}if(offset<0){var err=new Error("EOF");err.name="EndOfFile";throw err}var newOffset;if(whence===0){newOffset=Math.min(offset,this._file.length)}else if(whence===1){newOffset=Math.min(this._pos+offset,this._file.length)}else if(whence===2){newOffset=Math.min(this._file.length+offset,this._file.length)}else{throw new Error("Invalid operation: ".concat(whence,"."))}this._pos=newOffset}},{key:"tell",value:function tell(){if(!this.exists()){return-1}return this._pos}},{key:"remove",value:function(){var _remove=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:if(this.exists()){_context.next=2;break}throw new Error("ENOENT");case 2:PvFileMem._memFiles["delete"](this._path);this._pos=0;case 4:case"end":return _context.stop()}},_callee,this)}));function remove(){return _remove.apply(this,arguments)}return remove}()},{key:"exists",value:function exists(){return this._file!==undefined}},{key:"_isEOF",get:function get(){return this._pos>=this._file.length}},{key:"_file",get:function get(){return PvFileMem._memFiles.get(this._path)},set:function set(content){PvFileMem._memFiles.set(this._path,content)}}],[{key:"open",value:function open(path,mode){var file=PvFileMem._memFiles.get(path);var dbMode=mode.includes("r")?"readonly":"readwrite";if(file===undefined&&dbMode==="readonly"){var error=new Error("'".concat(path,"' doesn't exist."));error.name="FileNotExists";throw error}var fileMem=new PvFileMem(path,undefined,undefined,dbMode);if(mode.includes("a")){fileMem.seek(0,2)}return fileMem}}])}(PvFile);PvFileMem._memFiles=new Map;function unsignedAddress(address){if(address<0){return address>>>0}return address}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayLikeToArray$2(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray$1(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray$1(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray$1(r,a):void 0}}function _arrayLikeToArray$1(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e=16){this.endComputePass();this.flushCommandEncoder()}}},{key:"endComputePass",value:function endComputePass(){if(this._passEncoder){this._passEncoder.end();this._passEncoder=null}}},{key:"getBuffer",value:function getBuffer(sizeBytes,usage){var mappedAtCreation=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var label=arguments.length>3?arguments[3]:undefined;var key=this.getBufferKey(sizeBytes,usage);if(this.bufferReusePool.has(key)){var buffers=this.bufferReusePool.get(key);if(buffers&&buffers.length>0){return buffers.pop()}}return this.device.createBuffer({size:sizeBytes*Uint8Array.BYTES_PER_ELEMENT,usage:usage,mappedAtCreation:mappedAtCreation,label:label})}},{key:"scheduleUniformBufferForRelease",value:function scheduleUniformBufferForRelease(buffer){this._uniformBuffersPendingRelease.push(buffer)}},{key:"releaseBuffer",value:function releaseBuffer(buffer){var clearBuffer=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;if(clearBuffer){this.endComputePass();this.commandEncoder.clearBuffer(buffer,0,buffer.size)}var key=this.getBufferKey(buffer.size,buffer.usage);if(!this.bufferReusePool.has(key)){this.bufferReusePool.set(key,[])}this.bufferReusePool.get(key).push(buffer)}},{key:"sync",value:function(){var _sync=_asyncToGenerator(_regeneratorRuntime.mark(function _callee(){var _this=this;var _iterator,_step,k,buffers,_iterator3,_step3,b,_loop,_i,_Object$entries;return _regeneratorRuntime.wrap(function _callee$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:this.endComputePass();this.flushCommandEncoder();_context3.next=4;return this.device.queue.onSubmittedWorkDone();case 4:_iterator=_createForOfIteratorHelper$1(this.bufferReusePool.keys());try{for(_iterator.s();!(_step=_iterator.n()).done;){k=_step.value;buffers=this.bufferReusePool.get(k);if(buffers&&buffers.length>0){_iterator3=_createForOfIteratorHelper$1(buffers);try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){b=_step3.value;b===null||b===void 0||b.destroy()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}}catch(err){_iterator.e(err)}finally{_iterator.f()}this.bufferReusePool.clear();_loop=_regeneratorRuntime.mark(function _loop(){var _Object$entries$_i,shaderName,timestampBuffers,_iterator2,_step2,_loop2;return _regeneratorRuntime.wrap(function _loop$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_Object$entries$_i=_slicedToArray(_Object$entries[_i],2),shaderName=_Object$entries$_i[0],timestampBuffers=_Object$entries$_i[1];if(!_this.shaderTimes[shaderName]){_this.shaderTimes[shaderName]=[]}_iterator2=_createForOfIteratorHelper$1(timestampBuffers);_context2.prev=3;_loop2=_regeneratorRuntime.mark(function _loop2(){var timestampBuffer;return _regeneratorRuntime.wrap(function _loop2$(_context){while(1)switch(_context.prev=_context.next){case 0:timestampBuffer=_step2.value;timestampBuffer.mapAsync(GPUMapMode.READ).then(function(){var times=new BigInt64Array(timestampBuffer.getMappedRange());var timeDif=times[1]-times[0];timestampBuffer.unmap();timestampBuffer.destroy();_this.shaderTimes[shaderName].push(timeDif)});case 2:case"end":return _context.stop()}},_loop2)});_iterator2.s();case 6:if((_step2=_iterator2.n()).done){_context2.next=10;break}return _context2.delegateYield(_loop2(),"t0",8);case 8:_context2.next=6;break;case 10:_context2.next=15;break;case 12:_context2.prev=12;_context2.t1=_context2["catch"](3);_iterator2.e(_context2.t1);case 15:_context2.prev=15;_iterator2.f();return _context2.finish(15);case 18:case"end":return _context2.stop()}},_loop,null,[[3,12,15,18]])});_i=0,_Object$entries=Object.entries(this.timestampBuffers);case 9:if(!(_i<_Object$entries.length)){_context3.next=14;break}return _context3.delegateYield(_loop(),"t0",11);case 11:_i++;_context3.next=9;break;case 14:this.timestampBuffers={};case 15:case"end":return _context3.stop()}},_callee,this)}));function sync(){return _sync.apply(this,arguments)}return sync}()},{key:"reportShaderTimes",value:function reportShaderTimes(){for(var _i2=0,_Object$entries2=Object.entries(this.shaderTimes);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i2],2),shaderName=_Object$entries2$_i[0],shaderTimes=_Object$entries2$_i[1];var timeSum=0n;var _iterator4=_createForOfIteratorHelper$1(shaderTimes),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var shaderTime=_step4.value;timeSum=timeSum+shaderTime}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}var totalSeconds=Number(timeSum)*1e-9;var avgSeconds=(totalSeconds/shaderTimes.length).toFixed(7);console.log("".concat(shaderName,", ").concat(totalSeconds.toFixed(5),", ").concat(avgSeconds))}this.shaderTimes={}}},{key:"flushCommandEncoder",value:function flushCommandEncoder(){var _this2=this;this.device.queue.submit([this.commandEncoder.finish()]);this._commandEncoder=null;this._numCommandsEncoded=0;this._stageBuffersPendingMap.forEach(function(buffer){buffer.destroy()});this._stageBuffersPendingMap=[];this._uniformBuffersPendingRelease.forEach(function(buffer){_this2.releaseBuffer(buffer,false)});this._uniformBuffersPendingRelease=[]}},{key:"writeBuffer",value:function writeBuffer(sizeBytes,offset,srcArray,dstBuffer){var stagingBuffer=this.getBuffer(sizeBytes,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,true);new Uint8Array(stagingBuffer.getMappedRange()).set(srcArray);stagingBuffer.unmap();this._stageBuffersPendingMap.push(stagingBuffer);this.endComputePass();this.commandEncoder.copyBufferToBuffer(stagingBuffer,0,dstBuffer,offset,sizeBytes);this.numCommandsEncoded++}},{key:"dispatchComputerShader",value:function dispatchComputerShader(bindGroup,pipeline,shaderName,workgroupCountX,workgroupCountY,workgroupCountZ){if(this.isTimerEnabled){var querySet=this.device.createQuerySet({type:"timestamp",count:2});var timestampWrites={querySet:querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1};this.endComputePass();this._passEncoder=this.commandEncoder.beginComputePass({timestampWrites:timestampWrites});this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.endComputePass();var size=2*BigInt64Array.BYTES_PER_ELEMENT;var resolveBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_SRC});this.commandEncoder.resolveQuerySet(querySet,0,2,resolveBuffer,0);var resultBuffer=this.device.createBuffer({size:size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});this.commandEncoder.copyBufferToBuffer(resolveBuffer,0,resultBuffer,0,size);if(!this.timestampBuffers[shaderName]){this.timestampBuffers[shaderName]=[]}this.timestampBuffers[shaderName].push(resultBuffer);this.numCommandsEncoded+=3}else{if(!this._passEncoder){this._passEncoder=this.commandEncoder.beginComputePass()}this._passEncoder.setBindGroup(0,bindGroup);this._passEncoder.setPipeline(pipeline);this._passEncoder.dispatchWorkgroups(workgroupCountX,workgroupCountY,workgroupCountZ);this.numCommandsEncoded++}}}])}();var PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE=256;var gpuDevices=new Map;var gpuBuffers=new Map;var emptyShader="\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main_empty() {}\n";var shaderEntryPoint="main";var PRECOMPUTE_ENCODING_SHADER_NAME="pv_picollm_attention_precompute_encoding_shader";var attentionPrecomputeEncodingShaderSource="\nstruct argsStruct {\n dimension: u32,\n steps: u32,\n theta: f32,\n encoding_offset: u32,\n rope_scale: f32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar rope_scales: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let ds = local_id.x;\n \n for (var t = ts; t < args.steps; t += num_workgroups.x) {\n for (var d = ds; d < (args.dimension / 2u); d += workgroup_size_x) {\n let f = 2u * d;\n let x = f32(t) / (f32(rope_scales[f >> 1]) * pow(args.theta, f32(f) / f32(args.dimension)));\n let encoding_idx = args.encoding_offset + (t * args.dimension) + f;\n encoding[encoding_idx] = cos(x) * args.rope_scale;\n encoding[encoding_idx + 1] = sin(x) * args.rope_scale;\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionPrecomputeEncodingShader=function loadAttentionPrecomputeEncodingShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention precompute encoding bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention precompute encoding pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention precompute encoding shader module",code:attentionPrecomputeEncodingShaderSource});var computePipeline=device.createComputePipeline({label:"attention precompute encoding pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_ROPE_INTERLEAVED_SHADER_NAME="pv_picollm_attention_encode_rope_interleaved_shader";var attentionEncodeRopeInterleavedShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let x_start = args.x_offset + (t * args.num_heads + h) * args.head_dimension;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < (args.head_dimension / 2u); d += workgroup_size_x) {\n let i = 2u * d;\n let x_idx = x_start + i;\n let encoding_idx = encoding_start + i;\n \n let re = x[x_idx];\n let im = x[x_idx + 1];\n x[x_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[x_idx + 1] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeRopeInterleavedShader=function loadAttentionEncodeRopeInterleavedShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode rope interleave bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode rope interleave pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode rope interleave shader module",code:attentionEncodeRopeInterleavedShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode rope interleave pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ENCODE_SHADER_NAME="pv_picollm_attention_encode_shader";var attentionEncodeShaderSource="\nstruct argsStruct { \n n: u32,\n num_heads: u32,\n head_dimension: u32,\n rope_dimension: u32,\n position: u32,\n encoding_offset: u32,\n x_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar encoding: array;\n\n@group(0) @binding(2)\nvar x: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3,\n @builtin(num_workgroups) num_workgroups: vec3\n) {\n let ts = workgroup_id.x;\n let h = workgroup_id.y;\n let ds = local_id.x;\n\n for (var t = ts; t < args.n; t += num_workgroups.x) {\n let half_rope = (args.rope_dimension / 2);\n let xr_start = args.x_offset + ((t * args.num_heads + h) * args.head_dimension);\n let xi_start = xr_start + half_rope;\n let encoding_start = args.encoding_offset + ((t + args.position) * args.rope_dimension); \n for (var d = ds; d < half_rope; d += workgroup_size_x) {\n let xr_idx = xr_start + d;\n let xi_idx = xi_start + d;\n let encoding_idx = encoding_start + (2 * d);\n\n let re = x[xr_idx];\n let im = x[xi_idx];\n x[xr_idx] = (re * encoding[encoding_idx]) - (im * encoding[encoding_idx + 1]);\n x[xi_idx] = (re * encoding[encoding_idx + 1]) + (im * encoding[encoding_idx]);\n }\n }\n}\n\n".concat(emptyShader);var loadAttentionEncodeShader=function loadAttentionEncodeShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention encode bind layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention encode pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention encode shader",code:attentionEncodeShaderSource});var computePipeline=device.createComputePipeline({label:"attention encode pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var DOT_PRODUCT_SHADER_NAME="pv_picollm_attention_dot_product_shader";var attentionDotProductShaderSource="\nstruct argsStruct { \n n: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n norm: f32,\n length1: u32,\n num_keys: u32,\n query_offset: u32,\n keys_offset: u32,\n key_intercepts_offset: u32,\n key_slopes_offset: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar query: array;\n\n@group(0) @binding(2)\nvar keys: array;\n\n@group(0) @binding(3)\nvar key_intercepts: array;\n\n@group(0) @binding(4)\nvar key_slopes: array;\n\n@group(0) @binding(5)\nvar scores: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n \n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n \n let keys_local_a = args.keys_offset + (start_index * args.head_dimension);\n let key_intercepts_local_a = args.key_intercepts_offset + start_index; \n let key_slopes_local_a = args.key_slopes_offset + start_index;\n \n let keys_local_b = args.keys_offset + (head_offset * args.head_dimension);\n let key_intercepts_local_b = args.key_intercepts_offset + head_offset; \n let key_slopes_local_b = args.key_slopes_offset + head_offset;\n \n let scores_local = args.scores_offset + (global_id.x * args.num_keys);\n let query_local = args.query_offset + (((global_id.x * args.n) + args.tq) * args.head_dimension);\n \n for (var i = 0u; i < args.head_dimension; i++) { \n for (var k = 0u; k < args.num_keys; k++) {\n if (k < args.length1) { \n let key_idx = keys_local_a + (k * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_a + k] + (key_slopes[key_slopes_local_a + k] * key_val));\n scores[scores_local + k] += tmp;\n }\n else {\n let j = k - args.length1;\n let key_idx = keys_local_b + (j * args.head_dimension) + i;\n let key_val = f32(extractBits(keys[key_idx / 4], (i * 8u) % 32u, 8u));\n let tmp = query[query_local + i] * (key_intercepts[key_intercepts_local_b + j] + (key_slopes[key_slopes_local_b + j] * key_val));\n scores[scores_local + k] += tmp;\n }\n } \n }\n \n for (var k = 0u; k < args.num_keys; k++) {\n scores[scores_local + k] *= args.norm;\n }\n}\n\n".concat(emptyShader);var loadAttentionDotProductShader=function loadAttentionDotProductShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention dot product bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention dot product pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention dot product shader module",code:attentionDotProductShaderSource});var computePipeline=device.createComputePipeline({label:"attention dot product pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var SOFTMAX_SHADER_NAME="pv_picollm_attention_softmax_shader";var attentionSoftmaxShaderSource="\nstruct argsStruct { \n num_heads: u32,\n num_keys: u32,\n scores_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar scores: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let scores_start = args.scores_offset + (global_id.x * args.num_keys);\n \n var max_index: u32 = 0;\n for (var i = 1u; i < args.num_keys; i++) {\n if (scores[scores_start + i] > scores[scores_start + max_index]) {\n max_index = i;\n }\n }\n let max: f32 = scores[scores_start + max_index];\n\n var sum: f32 = 0.0;\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] = exp(scores[scores_start + i] - max);\n sum += scores[scores_start + i];\n }\n\n for (var i = 0u; i < args.num_keys; i++) {\n scores[scores_start + i] /= sum;\n }\n}\n\n".concat(emptyShader);var loadAttentionSoftmaxShader=function loadAttentionSoftmaxShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention softmax bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention softmax pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention softmax shader module",code:attentionSoftmaxShaderSource});var computePipeline=device.createComputePipeline({label:"attention softmax pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var FIR_SHADER_NAME="pv_picollm_attention_fir_shader";var attentionFirShaderSource="\nstruct argsStruct { \n length1: u32,\n length2: u32,\n tq: u32,\n head_dimension: u32,\n num_heads: u32,\n num_kv_heads: u32,\n window_length: u32,\n start: u32,\n values_offset: u32,\n value_intercepts_offset: u32,\n value_slopes_offset: u32,\n scores_offset: u32,\n output_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar values: array;\n\n@group(0) @binding(2)\nvar value_intercepts: array;\n\n@group(0) @binding(3)\nvar value_slopes: array;\n\n@group(0) @binding(4)\nvar scores: array;\n\n@group(0) @binding(5)\nvar output: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.num_heads) {\n return;\n }\n\n let head = global_id.x / (args.num_heads / args.num_kv_heads);\n\n let head_offset = head * args.window_length;\n let start_index = head_offset + args.start;\n\n let values_local_a = args.values_offset + (start_index * args.head_dimension);\n let value_intercepts_local_a = args.value_intercepts_offset + start_index;\n let value_slopes_local_a = args.value_slopes_offset + start_index;\n let values_local_b = args.values_offset + (head_offset * args.head_dimension);\n let value_intercepts_local_b = args.value_intercepts_offset + head_offset;\n let value_slopes_local_b = args.value_slopes_offset + head_offset;\n let scores_local = args.scores_offset + (global_id.x * (args.length1 + args.length2));\n let output_local = args.output_offset + (((args.tq * args.num_heads) + global_id.x) * args.head_dimension);\n\n for (var i = 0u; i < args.head_dimension; i++) {\n var tmp: f32 = 0.0;\n for (var k = 0u; k < args.length1; k++) {\n let value_idx = values_local_a + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + k] * (value_intercepts[value_intercepts_local_a + k] + (value_slopes[value_slopes_local_a + k] * value_val)); \n }\n for (var k = 0u; k < args.length2; k++) {\n let value_idx = values_local_b + (k * args.head_dimension) + i;\n let value_val = f32(extractBits(values[value_idx / 4], (i * 8u) % 32u, 8u));\n tmp += scores[scores_local + args.length1 + k] * (value_intercepts[value_intercepts_local_b + k] + (value_slopes[value_slopes_local_b + k] * value_val)); \n }\n output[output_local + i] = tmp;\n }\n}\n\n".concat(emptyShader);var loadAttentionFirShader=function loadAttentionFirShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention fir bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention fir pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention fir shader module",code:attentionFirShaderSource});var computePipeline=device.createComputePipeline({label:"attention fir pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var UPDATE_KV_SHADER_NAME="pv_picollm_attention_update_kv_shader";var attentionUpdateKvShaderSource="\nstruct argsStruct {\n n: u32,\n num_kv_heads: u32,\n window_length: u32,\n position: u32,\n head_dimension: u32,\n tf_offset: u32,\n kv_offset: u32,\n kv_intercepts_offset: u32,\n kv_slopes_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar kv: array;\n\n@group(0) @binding(3)\nvar kv_intercepts: array;\n\n@group(0) @binding(4)\nvar kv_slopes: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x >= args.num_kv_heads) {\n return;\n }\n \n for (var i = 0u; i < args.n; i++) {\n let index = (global_id.x * args.window_length) + ((args.position + i) % args.window_length);\n let tf_start = args.tf_offset + (((i * args.num_kv_heads) + global_id.x) * args.head_dimension);\n let kv_start = args.kv_offset + ((index * args.head_dimension) / 4);\n let kv_intercepts_start = args.kv_intercepts_offset + index;\n let kv_slopes_start = args.kv_slopes_offset + index;\n \n var xmax = tf[tf_start]; \n var xmin = tf[tf_start]; \n \n for (var j = 1u; j < args.head_dimension; j++) {\n xmax = max(xmax, tf[tf_start + j]);\n xmin = min(xmin, tf[tf_start + j]);\n }\n\n kv_intercepts[kv_intercepts_start] = xmin;\n kv_slopes[kv_slopes_start] = f32(xmax - xmin) / 255.0;\n\n for (var j = 0u; j < args.head_dimension; j++) {\n let kv_idx = kv_start + (j / 4);\n let kv_val = u32(round((tf[tf_start + j] - xmin) / kv_slopes[kv_slopes_start])); \n kv[kv_idx] = insertBits(kv[kv_idx], extractBits(kv_val, 0u, 8u), (j * 8u) % 32u, 8u); \n }\n }\n}\n\n".concat(emptyShader);var loadAttentionUpdateKvShader=function loadAttentionUpdateKvShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention update kv bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention update kv pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention update kv shader module",code:attentionUpdateKvShaderSource});var computePipeline=device.createComputePipeline({label:"attention update kv pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var TRANSPOSE_QUERY_SHADER_NAME="pv_picollm_attention_transpose_query_shader";var attentionTransposeQueryShaderSource="\nstruct argsStruct {\n n: u32,\n num_heads: u32,\n head_dimension: u32,\n tf_offset: u32,\n hf_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar tf: array;\n\n@group(0) @binding(2)\nvar hf: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n\n if (workgroup_id.x >= args.num_heads || workgroup_id.y >= args.n || local_id.x >= args.head_dimension) {\n return;\n }\n \n let tf_idx = args.tf_offset + (workgroup_id.y * args.num_heads * args.head_dimension) + (workgroup_id.x * args.head_dimension) + local_id.x; \n let hf_idx = args.hf_offset + (workgroup_id.x * args.n * args.head_dimension) + (workgroup_id.y * args.head_dimension) + local_id.x; \n hf[hf_idx] = tf[tf_idx];\n}\n\n".concat(emptyShader);var loadAttentionTransposeQueryShader=function loadAttentionTransposeQueryShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"attention transpose query bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"attention transpose query pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"attention transpose query shader module",code:attentionTransposeQueryShaderSource});var computePipeline=device.createComputePipeline({label:"attention transpose query pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var attentionShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},PRECOMPUTE_ENCODING_SHADER_NAME,loadAttentionPrecomputeEncodingShader),ENCODE_ROPE_INTERLEAVED_SHADER_NAME,loadAttentionEncodeRopeInterleavedShader),ENCODE_SHADER_NAME,loadAttentionEncodeShader),DOT_PRODUCT_SHADER_NAME,loadAttentionDotProductShader),SOFTMAX_SHADER_NAME,loadAttentionSoftmaxShader),FIR_SHADER_NAME,loadAttentionFirShader),UPDATE_KV_SHADER_NAME,loadAttentionUpdateKvShader),TRANSPOSE_QUERY_SHADER_NAME,loadAttentionTransposeQueryShader);var SILU_SHADER_NAME="pv_picollm_feed_forward_silu_shader";var feedForwardSiluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = x[global_id.x] / (1.0 + exp(-x[global_id.x]));\n}\n\n".concat(emptyShader);var loadFeedForwardSiluShader=function loadFeedForwardSiluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff silu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff silu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff silu shader module",code:feedForwardSiluShaderSource});var computePipeline=device.createComputePipeline({label:"ff silu pipline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var GELU_SHADER_NAME="pv_picollm_feed_forward_gelu_shader";var feedForwardGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\nconst a1: f32 = 0.254829592;\nconst a2: f32 = -0.284496736;\nconst a3: f32 = 1.421413741;\nconst a4: f32 = -1.453152027;\nconst a5: f32 = 1.061405429;\nconst p: f32 = 0.3275911;\n\n// A&S formula 7.1.26\nfn erf(x: f32) -> f32 { \n var sign: f32 = 1.0;\n if (x < 0) {\n sign = -1.0;\n }\n var x_abs: f32 = abs(x);\n \n let t: f32 = 1.0 / fma(p, x_abs, 1.0);\n let y: f32 = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-x_abs * x_abs);\n\n return sign * y;\n}\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1.0 + erf(x[global_id.x] * 0.7071067811865475));\n}\n\n".concat(emptyShader);var loadFeedForwardGeluShader=function loadFeedForwardGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff gelu shader module",code:feedForwardGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ALMOST_GELU_SHADER_NAME="pv_picollm_feed_forward_almost_gelu_shader";var feedForwardAlmostGeluShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n x[global_id.x] = 0.5 * x[global_id.x] * (1 + tanh(0.7978845608028654 * (x[global_id.x] + (0.044715f * x[global_id.x] * x[global_id.x] * x[global_id.x]))));\n}\n\n".concat(emptyShader);var loadFeedForwardAlmostGeluShader=function loadFeedForwardAlmostGeluShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff almost gelu bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff almost gelu pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff almost gelu shader module",code:feedForwardAlmostGeluShaderSource});var computePipeline=device.createComputePipeline({label:"ff almost gelu pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var MULTIPLY_BUFFERS_SHADER_NAME="pv_picollm_feed_forward_multiply_buffers_shader";var feedForwardMultiplyBuffersShaderSource="\nstruct argsStruct {\n n: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n y[global_id.x] *= x[global_id.x];\n}\n\n".concat(emptyShader);var loadFeedForwardMultiplyBuffersShader=function loadFeedForwardMultiplyBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"ff multiply buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"ff multiply buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"ff multiply buffers shader module",code:feedForwardMultiplyBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"ff multiply buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var feedForwardShaders=_defineProperty(_defineProperty(_defineProperty(_defineProperty({},SILU_SHADER_NAME,loadFeedForwardSiluShader),GELU_SHADER_NAME,loadFeedForwardGeluShader),ALMOST_GELU_SHADER_NAME,loadFeedForwardAlmostGeluShader),MULTIPLY_BUFFERS_SHADER_NAME,loadFeedForwardMultiplyBuffersShader);var FORWARD_SHADER_NAME$1="pv_picollm_gate_forward_shader";var gateForwardShaderSource="\n\nstruct pv_picollm_gate_ix_t {\n i: u32,\n x: f32,\n}\n\n@group(0) @binding(0)\nvar y: array;\n\n@group(0) @binding(1)\nvar indices: array;\n\n@group(0) @binding(2)\nvar weights: array;\n\noverride n: u32 = 0;\noverride k: u32 = 0;\noverride num_experts: u32 = 0;\n\noverride y_offset: u32 = 0;\noverride indices_offset: u32 = 0;\noverride weights_offset: u32 = 0;\n\nvar ixs: array;\n \noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(global_invocation_id) global_id : vec3\n) {\n if (global_id.x >= n) {\n return;\n }\n \n var y_start: u32 = y_offset + global_id.x * num_experts;\n for (var j = 0u; j < num_experts; j++) {\n ixs[j].i = j;\n ixs[j].x = y[y_start + j];\n }\n\n for (var i = 0u; i < num_experts - 1; i++) {\n for (var j = 0u; j < num_experts - i - 1; j++) {\n if (ixs[j].x < ixs[j + 1].x) {\n let tmp = ixs[j];\n ixs[j] = ixs[j + 1];\n ixs[j + 1] = tmp;\n }\n }\n }\n\n for (var j = 0u; j < k; j++) {\n indices[indices_offset + (global_id.x * k) + j] = ixs[j].i;\n weights[weights_offset + (global_id.x * k) + j] = ixs[j].x;\n }\n\n var max_weight: f32 = weights[weights_offset + (global_id.x * k)];\n for (var j = 1u; j < k; j++) {\n max_weight = max(max_weight, weights[weights_offset + (global_id.x * k) + j]);\n }\n\n var sum_weight: f32 = 0.0;\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] = exp(weights[weights_offset + (global_id.x * k) + j] - max_weight);\n sum_weight += weights[weights_offset + (global_id.x * k) + j];\n }\n\n for (var j = 0u; j < k; j++) {\n weights[weights_offset + (global_id.x * k) + j] /= sum_weight;\n }\n}\n\n".concat(emptyShader);var loadGateForwardShader=function loadGateForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"gate forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"gate forward pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"gate forward shader module",code:gateForwardShaderSource});var computePipeline=device.createComputePipeline({layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{num_experts:1}}});return{computePipeline:computePipeline,pipelineLayout:pipelineLayout,shaderModule:shaderModule}};var gateForwardShader=_defineProperty({},FORWARD_SHADER_NAME$1,loadGateForwardShader);var ADD_TO_BUFFER_SHADER_NAME$1="pv_picollm_moe_transformer_add_to_buffer_shader";var moeTransformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n x_offset: u32,\n buffer_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n\n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddToBufferShader=function loadMoeTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add to buffer shader module",code:moeTransformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME="pv_picollm_moe_transformer_multiply_weight_and_add_to_buffer_shader";var moeTransformerMultiplyWeightAndToBufferShaderSource="\nstruct argsStruct {\n n: u32, \n weights_index: u32,\n y_index: u32,\n weights_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weights: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + args.y_index + global_id.x] += weights[args.weights_index] + x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerMultiplyWeightAndAddToBufferShader=function loadMoeTransformerMultiplyWeightAndAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer multiply weight and add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer multiply weight and add to buffer pipeline",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer multiply weight and add to buffer shader module",code:moeTransformerMultiplyWeightAndToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer multiply weight and add to buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME$1="pv_picollm_moe_transformer_add_buffers_shader";var moeTransformerAddBuffersShaderSource="\nstruct argsStruct {\n n: u32, \n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadMoeTransformerAddBuffersShader=function loadMoeTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"moe transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"moe transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"moe transformer add buffers shader module",code:moeTransformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"moe transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var moeTransformerForwardShaders=_defineProperty(_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME$1,loadMoeTransformerAddToBufferShader),MULTIPLY_WEIGHT_AND_ADD_TO_BUFFER_SHADER_NAME,loadMoeTransformerMultiplyWeightAndAddToBufferShader),ADD_BUFFERS_SHADER_NAME$1,loadMoeTransformerAddBuffersShader);var sdataReduce="\n for (var s: u32 = workgroup_size_x / 2; s > 0; s >>= 1) {\n if tid < s {\n sdata[tid] += sdata[tid + s];\n }\n workgroupBarrier();\n }\n";var dividePadFunction="\n fn divide_pad(a: u32, b: u32) -> u32 { \n return (a + b - 1) / b;\n }\n";var FORWARD_MULTI_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_multi_buffer_shader";var FORWARD_SINGLE_BUFFER_SHADER_NAME$1="pv_picollm_norm_forward_single_buffer_shader";var normForwardShaderSource=function normForwardShaderSource(isMulti){return"\nstruct argsStruct {\n n: u32,\n dimension: u32,\n remainder: u32,\n remainder_start: u32, \n eps: f32, \n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n".concat(isMulti?"\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3) \nvar y: array;\n":" \n@group(0) @binding(2)\nvar x: array;\n","\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\nvar sdata: array, workgroup_size_x>;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n let tid = local_id.x;\n let m = workgroup_id.x;\n let block_size = workgroup_size_x;\n \n var power_vec: vec4;\n let x_start: u32 = args.x_offset + (m * args.dimension);\n let skip = tid * 4;\n let shift = (block_size * 4);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = x_start + j + skip; \n\n let x_vec = vec4(\n x[local_index],\n x[local_index + 1],\n x[local_index + 2],\n x[local_index + 3]);\n \n power_vec += x_vec * x_vec; \n } \n \n if (tid == 0 && args.remainder > 0) {\n var remainder_vec = vec4(0.0, 0.0, 0.0, 0.0);\n let x_idx = x_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) { \n remainder_vec[j] = x[x_idx + j];\n } \n power_vec += remainder_vec * remainder_vec;\n }\n \n sdata[tid] = power_vec;\n workgroupBarrier();\n\n ").concat(sdataReduce,"\n \n let power = sdata[0].x + sdata[0].y + sdata[0].z + sdata[0].w;\n let norm: vec4 = vec4(1.0 / sqrt((power / f32(args.dimension)) + args.eps));\n \n let y_start: u32 = args.y_offset + (m * args.dimension);\n for (var j = 0u; j + skip < args.remainder_start; j += shift) {\n let local_index = j + skip;\n let x_idx = x_start + local_index;\n let x_vec = vec4(\n x[x_idx],\n x[x_idx + 1],\n x[x_idx + 2],\n x[x_idx + 3]);\n \n let weight_vec = vec4(\n weight[local_index],\n weight[local_index + 1],\n weight[local_index + 2],\n weight[local_index + 3]);\n let y_vec = x_vec * norm * weight_vec;\n \n let y_idx = y_start + local_index;\n").concat(isMulti?" \n y[y_idx] = y_vec.x;\n y[y_idx + 1] = y_vec.y;\n y[y_idx + 2] = y_vec.z;\n y[y_idx + 3] = y_vec.w;\n":" \n x[y_idx] = y_vec.x;\n x[y_idx + 1] = y_vec.y;\n x[y_idx + 2] = y_vec.z;\n x[y_idx + 3] = y_vec.w;\n"," \n }\n \n if (tid == 0 && args.remainder > 0) {\n let x_idx = x_start + args.remainder_start;\n let weight_idx = args.remainder_start; \n let y_idx = y_start + args.remainder_start;\n for (var j = 0u; j < args.remainder; j++) {\n").concat(isMulti?" \n y[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n":" \n x[y_idx + j] = x[x_idx + j] * norm[j] * weight[weight_idx + j];\n"," \n } \n }\n}\n\n").concat(emptyShader)};var loadNormForwardShader=function loadNormForwardShader(device,isMulti){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}}];if(isMulti){entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}});entries.push({binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}else{entries.push({binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}})}var bindGroupLayout=device.createBindGroupLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm forward ".concat(isMulti?"multi":"single"," buffer shader module"),code:normForwardShaderSource(isMulti)});var computePipeline=device.createComputePipeline({label:"norm forward ".concat(isMulti?"multi":"single"," buffer pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,false)}),FORWARD_MULTI_BUFFER_SHADER_NAME$1,function(device){return loadNormForwardShader(device,true)});var FORWARD_MULTI_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_multi_buffer_shader";var normLayerForwardMultiBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar x: array;\n\n@group(0) @binding(4)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += x[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (x[x_start + j] - mean) * (x[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((x[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardMultiBufferShader=function loadNormLayerForwardMultiBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward multi buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward multi buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward multi buffer shader module",code:normLayerForwardMultiBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward multi buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var FORWARD_SINGLE_BUFFER_SHADER_NAME="pv_picollm_norm_layer_forward_single_buffer_shader";var normLayerForwardSingleBufferShaderSource="\nstruct argsStruct {\n n: u32,\n dimension: u32,\n eps: f32,\n weight_offset: u32,\n bias_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar weight: array;\n\n@group(0) @binding(2)\nvar bias: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n let x_start: u32 = args.x_offset + (global_id.x * args.dimension);\n\n var mean: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean += y[x_start + j];\n }\n mean /= f32(args.dimension);\n\n var mean2: f32 = 0.0;\n for (var j = 0u; j < args.dimension; j++) {\n mean2 += (y[x_start + j] - mean) * (y[x_start + j] - mean);\n }\n mean2 /= f32(args.dimension);\n\n var norm: f32 = 1.0 / sqrt(mean2 + args.eps);\n\n var y_start = args.y_offset + (global_id.x * args.dimension);\n for (var j = 0u; j < args.dimension; j++) {\n y[y_start + j] = ((y[x_start + j] - mean) * norm * weight[args.weight_offset + j]) + bias[args.bias_offset + j];\n }\n}\n\n".concat(emptyShader);var loadNormLayerForwardSingleBufferShader=function loadNormLayerForwardSingleBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"norm layer forward single buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"norm layer forward single buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"norm layer forward single buffer shader module",code:normLayerForwardSingleBufferShaderSource});var computePipeline=device.createComputePipeline({label:"norm layer forward single buffer pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var normLayerForwardShader=_defineProperty(_defineProperty({},FORWARD_SINGLE_BUFFER_SHADER_NAME,loadNormLayerForwardSingleBufferShader),FORWARD_MULTI_BUFFER_SHADER_NAME,loadNormLayerForwardMultiBufferShader);var ADD_TO_BUFFER_SHADER_NAME="pv_picollm_transformer_add_to_buffer_shader";var transformerAddToBufferShaderSource="\nstruct argsStruct {\n n: u32,\n x_offset: u32,\n buffer_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar buffer: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n buffer[args.buffer_offset + global_id.x] += x[args.x_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddToBufferShader=function loadTransformerAddToBufferShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add to buffer bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add to buffer pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add to buffer shader module",code:transformerAddToBufferShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add to buffer compute",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var ADD_BUFFERS_SHADER_NAME="pv_picollm_transformer_add_buffers_shader";var transformerAddBuffersShaderSource="\n\nstruct argsStruct {\n n: u32,\n buffer1_offset: u32,\n buffer2_offset: u32,\n y_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar buffer1: array;\n\n@group(0) @binding(2)\nvar buffer2: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n) {\n return;\n }\n \n y[args.y_offset + global_id.x] = buffer1[args.buffer1_offset + global_id.x] + buffer2[args.buffer2_offset + global_id.x]; \n}\n\n".concat(emptyShader);var loadTransformerAddBuffersShader=function loadTransformerAddBuffersShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"transformer add buffers bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"transformer add buffers pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"transformer add buffers shader module",code:transformerAddBuffersShaderSource});var computePipeline=device.createComputePipeline({label:"transformer add buffers pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var transformerForwardShaders=_defineProperty(_defineProperty({},ADD_TO_BUFFER_SHADER_NAME,loadTransformerAddToBufferShader),ADD_BUFFERS_SHADER_NAME,loadTransformerAddBuffersShader);var FORWARD_SHADER_NAME="pv_picollm_weight_float_forward_shader";var weightFloatForwardShaderSource="\n\nstruct argsStruct {\n nr: u32,\n nc: u32,\n w_offset: u32,\n x_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar w: array;\n\n@group(0) @binding(2)\nvar x: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(workgroup_id) workgroup_id : vec3,\n @builtin(local_invocation_id) local_id : vec3\n) {\n if (local_id.x >= args.nr) {\n return;\n }\n let x_start: u32 = args.x_offset + (workgroup_id.x * args.nc);\n let y_idx: u32 = local_id.x + args.y_offset + (workgroup_id.x * args.nr);\n \n let w_start: u32 = args.w_offset + (local_id.x * args.nc);\n for (var j = 0u; j < args.nc; j++) {\n y[y_idx] += w[w_start + j] * x[x_start + j]; \n }\n}\n\n".concat(emptyShader);var loadWeightFloatForwardShader=function loadWeightFloatForwardShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight float forward bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight float forward pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight float forward shader module",code:weightFloatForwardShaderSource});var computePipeline=device.createComputePipeline({label:"weight float forward pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var weightFloatForwardShader=_defineProperty({},FORWARD_SHADER_NAME,loadWeightFloatForwardShader);var rowsPerBlock=16;var columnsPerBlock=8;var preprocessDim=16;var weightBlockSize=256;var unpackBlock128BitDepth3="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_3(packed_offset: u32) {\n let val_0 = blocks[packed_offset]; \n unpacked[0] = extractBits(val_0, 0u, 3u);\n unpacked[1] = extractBits(val_0, 3u, 3u);\n unpacked[2] = extractBits(val_0, 6u, 3u);\n unpacked[3] = extractBits(val_0, 9u, 3u);\n unpacked[4] = extractBits(val_0, 12u, 3u);\n unpacked[5] = extractBits(val_0, 15u, 3u);\n unpacked[6] = extractBits(val_0, 18u, 3u);\n unpacked[7] = extractBits(val_0, 21u, 3u);\n unpacked[8] = extractBits(val_0, 24u, 3u);\n unpacked[9] = extractBits(val_0, 27u, 3u);\n unpacked[10] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_1, 0u, 1u), 2u, 1u);\n unpacked[11] = extractBits(val_1, 1u, 3u);\n unpacked[12] = extractBits(val_1, 4u, 3u);\n unpacked[13] = extractBits(val_1, 7u, 3u);\n unpacked[14] = extractBits(val_1, 10u, 3u);\n unpacked[15] = extractBits(val_1, 13u, 3u);\n unpacked[16] = extractBits(val_1, 16u, 3u);\n unpacked[17] = extractBits(val_1, 19u, 3u);\n unpacked[18] = extractBits(val_1, 22u, 3u);\n unpacked[19] = extractBits(val_1, 25u, 3u);\n unpacked[20] = extractBits(val_1, 28u, 3u);\n unpacked[21] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_2, 0u, 2u), 1u, 2u); \n unpacked[22] = extractBits(val_2, 2u, 3u);\n unpacked[23] = extractBits(val_2, 5u, 3u);\n unpacked[24] = extractBits(val_2, 8u, 3u);\n unpacked[25] = extractBits(val_2, 11u, 3u);\n unpacked[26] = extractBits(val_2, 14u, 3u);\n unpacked[27] = extractBits(val_2, 17u, 3u);\n unpacked[28] = extractBits(val_2, 20u, 3u);\n unpacked[29] = extractBits(val_2, 23u, 3u);\n unpacked[30] = extractBits(val_2, 26u, 3u);\n unpacked[31] = extractBits(val_2, 29u, 3u);\n \n let val_3 = blocks[packed_offset + 3]; \n unpacked[32] = extractBits(val_3, 0u, 3u);\n unpacked[33] = extractBits(val_3, 3u, 3u);\n unpacked[34] = extractBits(val_3, 6u, 3u);\n unpacked[35] = extractBits(val_3, 9u, 3u);\n unpacked[36] = extractBits(val_3, 12u, 3u);\n unpacked[37] = extractBits(val_3, 15u, 3u);\n unpacked[38] = extractBits(val_3, 18u, 3u);\n unpacked[39] = extractBits(val_3, 21u, 3u);\n unpacked[40] = extractBits(val_3, 24u, 3u);\n unpacked[41] = extractBits(val_3, 27u, 3u);\n unpacked[42] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_4, 0u, 1u), 2u, 1u);\n unpacked[43] = extractBits(val_4, 1u, 3u);\n unpacked[44] = extractBits(val_4, 4u, 3u);\n unpacked[45] = extractBits(val_4, 7u, 3u);\n unpacked[46] = extractBits(val_4, 10u, 3u);\n unpacked[47] = extractBits(val_4, 13u, 3u);\n unpacked[48] = extractBits(val_4, 16u, 3u);\n unpacked[49] = extractBits(val_4, 19u, 3u);\n unpacked[50] = extractBits(val_4, 22u, 3u);\n unpacked[51] = extractBits(val_4, 25u, 3u);\n unpacked[52] = extractBits(val_4, 28u, 3u);\n unpacked[53] = extractBits(val_4, 31u, 1u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_5, 0u, 2u), 1u, 2u); \n unpacked[54] = extractBits(val_5, 2u, 3u);\n unpacked[55] = extractBits(val_5, 5u, 3u);\n unpacked[56] = extractBits(val_5, 8u, 3u);\n unpacked[57] = extractBits(val_5, 11u, 3u);\n unpacked[58] = extractBits(val_5, 14u, 3u);\n unpacked[59] = extractBits(val_5, 17u, 3u);\n unpacked[60] = extractBits(val_5, 20u, 3u);\n unpacked[61] = extractBits(val_5, 23u, 3u);\n unpacked[62] = extractBits(val_5, 26u, 3u);\n unpacked[63] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[64] = extractBits(val_6, 0u, 3u);\n unpacked[65] = extractBits(val_6, 3u, 3u);\n unpacked[66] = extractBits(val_6, 6u, 3u);\n unpacked[67] = extractBits(val_6, 9u, 3u);\n unpacked[68] = extractBits(val_6, 12u, 3u);\n unpacked[69] = extractBits(val_6, 15u, 3u);\n unpacked[70] = extractBits(val_6, 18u, 3u);\n unpacked[71] = extractBits(val_6, 21u, 3u);\n unpacked[72] = extractBits(val_6, 24u, 3u);\n unpacked[73] = extractBits(val_6, 27u, 3u);\n unpacked[74] = extractBits(val_6, 30u, 2u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_7, 0u, 1u), 2u, 1u);\n unpacked[75] = extractBits(val_7, 1u, 3u);\n unpacked[76] = extractBits(val_7, 4u, 3u);\n unpacked[77] = extractBits(val_7, 7u, 3u);\n unpacked[78] = extractBits(val_7, 10u, 3u);\n unpacked[79] = extractBits(val_7, 13u, 3u);\n unpacked[80] = extractBits(val_7, 16u, 3u);\n unpacked[81] = extractBits(val_7, 19u, 3u);\n unpacked[82] = extractBits(val_7, 22u, 3u);\n unpacked[83] = extractBits(val_7, 25u, 3u);\n unpacked[84] = extractBits(val_7, 28u, 3u);\n unpacked[85] = extractBits(val_7, 31u, 1u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_8, 0u, 2u), 1u, 2u); \n unpacked[86] = extractBits(val_8, 2u, 3u);\n unpacked[87] = extractBits(val_8, 5u, 3u);\n unpacked[88] = extractBits(val_8, 8u, 3u);\n unpacked[89] = extractBits(val_8, 11u, 3u);\n unpacked[90] = extractBits(val_8, 14u, 3u);\n unpacked[91] = extractBits(val_8, 17u, 3u);\n unpacked[92] = extractBits(val_8, 20u, 3u);\n unpacked[93] = extractBits(val_8, 23u, 3u);\n unpacked[94] = extractBits(val_8, 26u, 3u);\n unpacked[95] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[96] = extractBits(val_9, 0u, 3u);\n unpacked[97] = extractBits(val_9, 3u, 3u);\n unpacked[98] = extractBits(val_9, 6u, 3u);\n unpacked[99] = extractBits(val_9, 9u, 3u);\n unpacked[100] = extractBits(val_9, 12u, 3u);\n unpacked[101] = extractBits(val_9, 15u, 3u);\n unpacked[102] = extractBits(val_9, 18u, 3u);\n unpacked[103] = extractBits(val_9, 21u, 3u);\n unpacked[104] = extractBits(val_9, 24u, 3u);\n unpacked[105] = extractBits(val_9, 27u, 3u);\n unpacked[106] = extractBits(val_9, 30u, 2u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_10, 0u, 1u), 2u, 1u);\n unpacked[107] = extractBits(val_10, 1u, 3u);\n unpacked[108] = extractBits(val_10, 4u, 3u);\n unpacked[109] = extractBits(val_10, 7u, 3u);\n unpacked[110] = extractBits(val_10, 10u, 3u);\n unpacked[111] = extractBits(val_10, 13u, 3u);\n unpacked[112] = extractBits(val_10, 16u, 3u);\n unpacked[113] = extractBits(val_10, 19u, 3u);\n unpacked[114] = extractBits(val_10, 22u, 3u);\n unpacked[115] = extractBits(val_10, 25u, 3u);\n unpacked[116] = extractBits(val_10, 28u, 3u);\n unpacked[117] = extractBits(val_10, 31u, 1u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_11, 0u, 2u), 1u, 2u); \n unpacked[118] = extractBits(val_11, 2u, 3u);\n unpacked[119] = extractBits(val_11, 5u, 3u);\n unpacked[120] = extractBits(val_11, 8u, 3u);\n unpacked[121] = extractBits(val_11, 11u, 3u);\n unpacked[122] = extractBits(val_11, 14u, 3u);\n unpacked[123] = extractBits(val_11, 17u, 3u);\n unpacked[124] = extractBits(val_11, 20u, 3u);\n unpacked[125] = extractBits(val_11, 23u, 3u);\n unpacked[126] = extractBits(val_11, 26u, 3u);\n unpacked[127] = extractBits(val_11, 29u, 3u);\n}\n";var unpackBlock128BitDepth5="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_5(packed_offset: u32) { \n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 5u);\n unpacked[1] = extractBits(val_0, 5u, 5u);\n unpacked[2] = extractBits(val_0, 10u, 5u);\n unpacked[3] = extractBits(val_0, 15u, 5u);\n unpacked[4] = extractBits(val_0, 20u, 5u);\n unpacked[5] = extractBits(val_0, 25u, 5u);\n unpacked[6] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[6] = insertBits(unpacked[6], extractBits(val_1, 0u, 3u), 2u, 3u); \n unpacked[7] = extractBits(val_1, 3u, 5u);\n unpacked[8] = extractBits(val_1, 8u, 5u);\n unpacked[9] = extractBits(val_1, 13u, 5u);\n unpacked[10] = extractBits(val_1, 18u, 5u);\n unpacked[11] = extractBits(val_1, 23u, 5u);\n unpacked[12] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[12] = insertBits(unpacked[12], extractBits(val_2, 0u, 1u), 4u, 1u);\n unpacked[13] = extractBits(val_2, 1u, 5u);\n unpacked[14] = extractBits(val_2, 6u, 5u);\n unpacked[15] = extractBits(val_2, 11u, 5u);\n unpacked[16] = extractBits(val_2, 16u, 5u);\n unpacked[17] = extractBits(val_2, 21u, 5u);\n unpacked[18] = extractBits(val_2, 26u, 5u);\n unpacked[19] = extractBits(val_2, 31u, 1u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[19] = insertBits(unpacked[19], extractBits(val_3, 0u, 4u), 1u, 4u);\n unpacked[20] = extractBits(val_3, 4u, 5u);\n unpacked[21] = extractBits(val_3, 9u, 5u);\n unpacked[22] = extractBits(val_3, 14u, 5u);\n unpacked[23] = extractBits(val_3, 19u, 5u);\n unpacked[24] = extractBits(val_3, 24u, 5u);\n unpacked[25] = extractBits(val_3, 29u, 3u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[25] = insertBits(unpacked[25], extractBits(val_4, 0u, 2u), 3u, 2u);\n unpacked[26] = extractBits(val_4, 2u, 5u);\n unpacked[27] = extractBits(val_4, 7u, 5u);\n unpacked[28] = extractBits(val_4, 12u, 5u);\n unpacked[29] = extractBits(val_4, 17u, 5u);\n unpacked[30] = extractBits(val_4, 22u, 5u);\n unpacked[31] = extractBits(val_4, 27u, 5u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[32] = extractBits(val_5, 0u, 5u);\n unpacked[33] = extractBits(val_5, 5u, 5u);\n unpacked[34] = extractBits(val_5, 10u, 5u);\n unpacked[35] = extractBits(val_5, 15u, 5u);\n unpacked[36] = extractBits(val_5, 20u, 5u);\n unpacked[37] = extractBits(val_5, 25u, 5u);\n unpacked[38] = extractBits(val_5, 30u, 2u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[38] = insertBits(unpacked[38], extractBits(val_6, 0u, 3u), 2u, 3u);\n unpacked[39] = extractBits(val_6, 3u, 5u);\n unpacked[40] = extractBits(val_6, 8u, 5u);\n unpacked[41] = extractBits(val_6, 13u, 5u);\n unpacked[42] = extractBits(val_6, 18u, 5u);\n unpacked[43] = extractBits(val_6, 23u, 5u);\n unpacked[44] = extractBits(val_6, 28u, 4u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[44] = insertBits(unpacked[44], extractBits(val_7, 0u, 1u), 4u, 1u);\n unpacked[45] = extractBits(val_7, 1u, 5u);\n unpacked[46] = extractBits(val_7, 6u, 5u);\n unpacked[47] = extractBits(val_7, 11u, 5u);\n unpacked[48] = extractBits(val_7, 16u, 5u);\n unpacked[49] = extractBits(val_7, 21u, 5u);\n unpacked[50] = extractBits(val_7, 26u, 5u);\n unpacked[51] = extractBits(val_7, 31u, 1u);\n\n let val_8 = blocks[packed_offset + 8];\n unpacked[51] = insertBits(unpacked[51], extractBits(val_8, 0u, 4u), 1u, 4u);\n unpacked[52] = extractBits(val_8, 4u, 5u);\n unpacked[53] = extractBits(val_8, 9u, 5u);\n unpacked[54] = extractBits(val_8, 14u, 5u);\n unpacked[55] = extractBits(val_8, 19u, 5u);\n unpacked[56] = extractBits(val_8, 24u, 5u);\n unpacked[57] = extractBits(val_8, 29u, 3u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[57] = insertBits(unpacked[57], extractBits(val_9, 0u, 2u), 3u, 2u);\n unpacked[58] = extractBits(val_9, 2u, 5u);\n unpacked[59] = extractBits(val_9, 7u, 5u);\n unpacked[60] = extractBits(val_9, 12u, 5u);\n unpacked[61] = extractBits(val_9, 17u, 5u);\n unpacked[62] = extractBits(val_9, 22u, 5u);\n unpacked[63] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[64] = extractBits(val_10, 0u, 5u);\n unpacked[65] = extractBits(val_10, 5u, 5u);\n unpacked[66] = extractBits(val_10, 10u, 5u);\n unpacked[67] = extractBits(val_10, 15u, 5u);\n unpacked[68] = extractBits(val_10, 20u, 5u);\n unpacked[69] = extractBits(val_10, 25u, 5u);\n unpacked[70] = extractBits(val_10, 30u, 2u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[70] = insertBits(unpacked[70], extractBits(val_11, 0u, 3u), 2u, 3u);\n unpacked[71] = extractBits(val_11, 3u, 5u);\n unpacked[72] = extractBits(val_11, 8u, 5u);\n unpacked[73] = extractBits(val_11, 13u, 5u);\n unpacked[74] = extractBits(val_11, 18u, 5u);\n unpacked[75] = extractBits(val_11, 23u, 5u);\n unpacked[76] = extractBits(val_11, 28u, 4u);\n\n let val_12 = blocks[packed_offset + 12];\n unpacked[76] = insertBits(unpacked[76], extractBits(val_12, 0u, 1u), 4u, 1u);\n unpacked[77] = extractBits(val_12, 1u, 5u);\n unpacked[78] = extractBits(val_12, 6u, 5u);\n unpacked[79] = extractBits(val_12, 11u, 5u);\n unpacked[80] = extractBits(val_12, 16u, 5u);\n unpacked[81] = extractBits(val_12, 21u, 5u);\n unpacked[82] = extractBits(val_12, 26u, 5u);\n unpacked[83] = extractBits(val_12, 31u, 1u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[83] = insertBits(unpacked[83], extractBits(val_13, 0u, 4u), 1u, 4u);\n unpacked[84] = extractBits(val_13, 4u, 5u);\n unpacked[85] = extractBits(val_13, 9u, 5u);\n unpacked[86] = extractBits(val_13, 14u, 5u);\n unpacked[87] = extractBits(val_13, 19u, 5u);\n unpacked[88] = extractBits(val_13, 24u, 5u);\n unpacked[89] = extractBits(val_13, 29u, 3u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[89] = insertBits(unpacked[89], extractBits(val_14, 0u, 2u), 3u, 2u);\n unpacked[90] = extractBits(val_14, 2u, 5u);\n unpacked[91] = extractBits(val_14, 7u, 5u);\n unpacked[92] = extractBits(val_14, 12u, 5u);\n unpacked[93] = extractBits(val_14, 17u, 5u);\n unpacked[94] = extractBits(val_14, 22u, 5u);\n unpacked[95] = extractBits(val_14, 27u, 5u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[96] = extractBits(val_15, 0u, 5u);\n unpacked[97] = extractBits(val_15, 5u, 5u);\n unpacked[98] = extractBits(val_15, 10u, 5u);\n unpacked[99] = extractBits(val_15, 15u, 5u);\n unpacked[100] = extractBits(val_15, 20u, 5u);\n unpacked[101] = extractBits(val_15, 25u, 5u);\n unpacked[102] = extractBits(val_15, 30u, 2u);\n\n let val_16 = blocks[packed_offset + 16];\n unpacked[102] = insertBits(unpacked[102], extractBits(val_16, 0u, 3u), 2u, 3u);\n unpacked[103] = extractBits(val_16, 3u, 5u);\n unpacked[104] = extractBits(val_16, 8u, 5u);\n unpacked[105] = extractBits(val_16, 13u, 5u);\n unpacked[106] = extractBits(val_16, 18u, 5u);\n unpacked[107] = extractBits(val_16, 23u, 5u);\n unpacked[108] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[108] = insertBits(unpacked[108], extractBits(val_17, 0u, 1u), 4u, 1u);\n unpacked[109] = extractBits(val_17, 1u, 5u);\n unpacked[110] = extractBits(val_17, 6u, 5u);\n unpacked[111] = extractBits(val_17, 11u, 5u);\n unpacked[112] = extractBits(val_17, 16u, 5u);\n unpacked[113] = extractBits(val_17, 21u, 5u);\n unpacked[114] = extractBits(val_17, 26u, 5u);\n unpacked[115] = extractBits(val_17, 31u, 1u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[115] = insertBits(unpacked[115], extractBits(val_18, 0u, 4u), 1u, 4u);\n unpacked[116] = extractBits(val_18, 4u, 5u);\n unpacked[117] = extractBits(val_18, 9u, 5u);\n unpacked[118] = extractBits(val_18, 14u, 5u);\n unpacked[119] = extractBits(val_18, 19u, 5u);\n unpacked[120] = extractBits(val_18, 24u, 5u);\n unpacked[121] = extractBits(val_18, 29u, 3u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[121] = insertBits(unpacked[121], extractBits(val_19, 0u, 2u), 3u, 2u);\n unpacked[122] = extractBits(val_19, 2u, 5u);\n unpacked[123] = extractBits(val_19, 7u, 5u);\n unpacked[124] = extractBits(val_19, 12u, 5u);\n unpacked[125] = extractBits(val_19, 17u, 5u);\n unpacked[126] = extractBits(val_19, 22u, 5u);\n unpacked[127] = extractBits(val_19, 27u, 5u);\n}\n";var unpackBlock128BitDepth6="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_6(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 6u);\n unpacked[1] = extractBits(val_0, 6u, 6u);\n unpacked[2] = extractBits(val_0, 12u, 6u);\n unpacked[3] = extractBits(val_0, 18u, 6u);\n unpacked[4] = extractBits(val_0, 24u, 6u);\n unpacked[5] = extractBits(val_0, 30u, 2u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[5] = insertBits(unpacked[5], extractBits(val_1, 0u, 4u), 2u, 4u);\n unpacked[6] = extractBits(val_1, 4u, 6u);\n unpacked[7] = extractBits(val_1, 10u, 6u);\n unpacked[8] = extractBits(val_1, 16u, 6u);\n unpacked[9] = extractBits(val_1, 22u, 6u);\n unpacked[10] = extractBits(val_1, 28u, 4u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[10] = insertBits(unpacked[10], extractBits(val_2, 0u, 2u), 4u, 2u);\n unpacked[11] = extractBits(val_2, 2u, 6u);\n unpacked[12] = extractBits(val_2, 8u, 6u);\n unpacked[13] = extractBits(val_2, 14u, 6u);\n unpacked[14] = extractBits(val_2, 20u, 6u);\n unpacked[15] = extractBits(val_2, 26u, 6u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[16] = extractBits(val_3, 0u, 6u);\n unpacked[17] = extractBits(val_3, 6u, 6u);\n unpacked[18] = extractBits(val_3, 12u, 6u);\n unpacked[19] = extractBits(val_3, 18u, 6u);\n unpacked[20] = extractBits(val_3, 24u, 6u);\n unpacked[21] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[21] = insertBits(unpacked[21], extractBits(val_4, 0u, 4u), 2u, 4u);\n unpacked[22] = extractBits(val_4, 4u, 6u);\n unpacked[23] = extractBits(val_4, 10u, 6u);\n unpacked[24] = extractBits(val_4, 16u, 6u);\n unpacked[25] = extractBits(val_4, 22u, 6u);\n unpacked[26] = extractBits(val_4, 28u, 4u);\n\n let val_5 = blocks[packed_offset + 5];\n unpacked[26] = insertBits(unpacked[26], extractBits(val_5, 0u, 2u), 4u, 2u);\n unpacked[27] = extractBits(val_5, 2u, 6u);\n unpacked[28] = extractBits(val_5, 8u, 6u);\n unpacked[29] = extractBits(val_5, 14u, 6u);\n unpacked[30] = extractBits(val_5, 20u, 6u);\n unpacked[31] = extractBits(val_5, 26u, 6u);\n\n let val_6 = blocks[packed_offset + 6];\n unpacked[32] = extractBits(val_6, 0u, 6u);\n unpacked[33] = extractBits(val_6, 6u, 6u);\n unpacked[34] = extractBits(val_6, 12u, 6u);\n unpacked[35] = extractBits(val_6, 18u, 6u);\n unpacked[36] = extractBits(val_6, 24u, 6u);\n unpacked[37] = extractBits(val_6, 30u, 2u);\n\n let val_7 = blocks[packed_offset + 7];\n unpacked[37] = insertBits(unpacked[37], extractBits(val_7, 0u, 4u), 2u, 4u);\n unpacked[38] = extractBits(val_7, 4u, 6u);\n unpacked[39] = extractBits(val_7, 10u, 6u);\n unpacked[40] = extractBits(val_7, 16u, 6u);\n unpacked[41] = extractBits(val_7, 22u, 6u);\n unpacked[42] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[42] = insertBits(unpacked[42], extractBits(val_8, 0u, 2u), 4u, 2u);\n unpacked[43] = extractBits(val_8, 2u, 6u);\n unpacked[44] = extractBits(val_8, 8u, 6u);\n unpacked[45] = extractBits(val_8, 14u, 6u);\n unpacked[46] = extractBits(val_8, 20u, 6u);\n unpacked[47] = extractBits(val_8, 26u, 6u);\n\n let val_9 = blocks[packed_offset + 9];\n unpacked[48] = extractBits(val_9, 0u, 6u);\n unpacked[49] = extractBits(val_9, 6u, 6u);\n unpacked[50] = extractBits(val_9, 12u, 6u);\n unpacked[51] = extractBits(val_9, 18u, 6u);\n unpacked[52] = extractBits(val_9, 24u, 6u);\n unpacked[53] = extractBits(val_9, 30u, 2u);\n\n let val_10 = blocks[packed_offset + 10];\n unpacked[53] = insertBits(unpacked[53], extractBits(val_10, 0u, 4u), 2u, 4u);\n unpacked[54] = extractBits(val_10, 4u, 6u);\n unpacked[55] = extractBits(val_10, 10u, 6u);\n unpacked[56] = extractBits(val_10, 16u, 6u);\n unpacked[57] = extractBits(val_10, 22u, 6u);\n unpacked[58] = extractBits(val_10, 28u, 4u);\n\n let val_11 = blocks[packed_offset + 11];\n unpacked[58] = insertBits(unpacked[58], extractBits(val_11, 0u, 2u), 4u, 2u);\n unpacked[59] = extractBits(val_11, 2u, 6u);\n unpacked[60] = extractBits(val_11, 8u, 6u);\n unpacked[61] = extractBits(val_11, 14u, 6u);\n unpacked[62] = extractBits(val_11, 20u, 6u);\n unpacked[63] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[64] = extractBits(val_12, 0u, 6u);\n unpacked[65] = extractBits(val_12, 6u, 6u);\n unpacked[66] = extractBits(val_12, 12u, 6u);\n unpacked[67] = extractBits(val_12, 18u, 6u);\n unpacked[68] = extractBits(val_12, 24u, 6u);\n unpacked[69] = extractBits(val_12, 30u, 2u);\n\n let val_13 = blocks[packed_offset + 13];\n unpacked[69] = insertBits(unpacked[69], extractBits(val_13, 0u, 4u), 2u, 4u);\n unpacked[70] = extractBits(val_13, 4u, 6u);\n unpacked[71] = extractBits(val_13, 10u, 6u);\n unpacked[72] = extractBits(val_13, 16u, 6u);\n unpacked[73] = extractBits(val_13, 22u, 6u);\n unpacked[74] = extractBits(val_13, 28u, 4u);\n\n let val_14 = blocks[packed_offset + 14];\n unpacked[74] = insertBits(unpacked[74], extractBits(val_14, 0u, 2u), 4u, 2u);\n unpacked[75] = extractBits(val_14, 2u, 6u);\n unpacked[76] = extractBits(val_14, 8u, 6u);\n unpacked[77] = extractBits(val_14, 14u, 6u);\n unpacked[78] = extractBits(val_14, 20u, 6u);\n unpacked[79] = extractBits(val_14, 26u, 6u);\n\n let val_15 = blocks[packed_offset + 15];\n unpacked[80] = extractBits(val_15, 0u, 6u);\n unpacked[81] = extractBits(val_15, 6u, 6u);\n unpacked[82] = extractBits(val_15, 12u, 6u);\n unpacked[83] = extractBits(val_15, 18u, 6u);\n unpacked[84] = extractBits(val_15, 24u, 6u);\n unpacked[85] = extractBits(val_15, 30u, 2u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[85] = insertBits(unpacked[85], extractBits(val_16, 0u, 4u), 2u, 4u);\n unpacked[86] = extractBits(val_16, 4u, 6u);\n unpacked[87] = extractBits(val_16, 10u, 6u);\n unpacked[88] = extractBits(val_16, 16u, 6u);\n unpacked[89] = extractBits(val_16, 22u, 6u);\n unpacked[90] = extractBits(val_16, 28u, 4u);\n\n let val_17 = blocks[packed_offset + 17];\n unpacked[90] = insertBits(unpacked[90], extractBits(val_17, 0u, 2u), 4u, 2u);\n unpacked[91] = extractBits(val_17, 2u, 6u);\n unpacked[92] = extractBits(val_17, 8u, 6u);\n unpacked[93] = extractBits(val_17, 14u, 6u);\n unpacked[94] = extractBits(val_17, 20u, 6u);\n unpacked[95] = extractBits(val_17, 26u, 6u);\n\n let val_18 = blocks[packed_offset + 18];\n unpacked[96] = extractBits(val_18, 0u, 6u);\n unpacked[97] = extractBits(val_18, 6u, 6u);\n unpacked[98] = extractBits(val_18, 12u, 6u);\n unpacked[99] = extractBits(val_18, 18u, 6u);\n unpacked[100] = extractBits(val_18, 24u, 6u);\n unpacked[101] = extractBits(val_18, 30u, 2u);\n\n let val_19 = blocks[packed_offset + 19];\n unpacked[101] = insertBits(unpacked[101], extractBits(val_19, 0u, 4u), 2u, 4u);\n unpacked[102] = extractBits(val_19, 4u, 6u);\n unpacked[103] = extractBits(val_19, 10u, 6u);\n unpacked[104] = extractBits(val_19, 16u, 6u);\n unpacked[105] = extractBits(val_19, 22u, 6u);\n unpacked[106] = extractBits(val_19, 28u, 4u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[106] = insertBits(unpacked[106], extractBits(val_20, 0u, 2u), 4u, 2u);\n unpacked[107] = extractBits(val_20, 2u, 6u);\n unpacked[108] = extractBits(val_20, 8u, 6u);\n unpacked[109] = extractBits(val_20, 14u, 6u);\n unpacked[110] = extractBits(val_20, 20u, 6u);\n unpacked[111] = extractBits(val_20, 26u, 6u);\n\n let val_21 = blocks[packed_offset + 21];\n unpacked[112] = extractBits(val_21, 0u, 6u);\n unpacked[113] = extractBits(val_21, 6u, 6u);\n unpacked[114] = extractBits(val_21, 12u, 6u);\n unpacked[115] = extractBits(val_21, 18u, 6u);\n unpacked[116] = extractBits(val_21, 24u, 6u);\n unpacked[117] = extractBits(val_21, 30u, 2u);\n\n let val_22 = blocks[packed_offset + 22];\n unpacked[117] = insertBits(unpacked[117], extractBits(val_22, 0u, 4u), 2u, 4u);\n unpacked[118] = extractBits(val_22, 4u, 6u);\n unpacked[119] = extractBits(val_22, 10u, 6u);\n unpacked[120] = extractBits(val_22, 16u, 6u);\n unpacked[121] = extractBits(val_22, 22u, 6u);\n unpacked[122] = extractBits(val_22, 28u, 4u);\n\n let val_23 = blocks[packed_offset + 23];\n unpacked[122] = insertBits(unpacked[122], extractBits(val_23, 0u, 2u), 4u, 2u);\n unpacked[123] = extractBits(val_23, 2u, 6u);\n unpacked[124] = extractBits(val_23, 8u, 6u);\n unpacked[125] = extractBits(val_23, 14u, 6u);\n unpacked[126] = extractBits(val_23, 20u, 6u);\n unpacked[127] = extractBits(val_23, 26u, 6u);\n}\n";var unpackBlock128BitDepth7="\nvar unpacked: array;\n\nfn unpack_block_128_bit_depth_7(packed_offset: u32) {\n let val_0 = blocks[packed_offset];\n unpacked[0] = extractBits(val_0, 0u, 7u);\n unpacked[1] = extractBits(val_0, 7u, 7u);\n unpacked[2] = extractBits(val_0, 14u, 7u);\n unpacked[3] = extractBits(val_0, 21u, 7u);\n unpacked[4] = extractBits(val_0, 28u, 4u);\n \n let val_1 = blocks[packed_offset + 1];\n unpacked[4] = insertBits(unpacked[4], extractBits(val_1, 0u, 3u), 4u, 3u);\n unpacked[5] = extractBits(val_1, 3u, 7u);\n unpacked[6] = extractBits(val_1, 10u, 7u);\n unpacked[7] = extractBits(val_1, 17u, 7u);\n unpacked[8] = extractBits(val_1, 24u, 7u);\n unpacked[9] = extractBits(val_1, 31u, 1u);\n \n let val_2 = blocks[packed_offset + 2];\n unpacked[9] = insertBits(unpacked[9], extractBits(val_2, 0u, 6u), 1u, 6u);\n unpacked[10] = extractBits(val_2, 6u, 7u);\n unpacked[11] = extractBits(val_2, 13u, 7u);\n unpacked[12] = extractBits(val_2, 20u, 7u);\n unpacked[13] = extractBits(val_2, 27u, 5u);\n \n let val_3 = blocks[packed_offset + 3];\n unpacked[13] = insertBits(unpacked[13], extractBits(val_3, 0u, 2u), 5u, 2u);\n unpacked[14] = extractBits(val_3, 2u, 7u);\n unpacked[15] = extractBits(val_3, 9u, 7u);\n unpacked[16] = extractBits(val_3, 16u, 7u);\n unpacked[17] = extractBits(val_3, 23u, 7u);\n unpacked[18] = extractBits(val_3, 30u, 2u);\n \n let val_4 = blocks[packed_offset + 4];\n unpacked[18] = insertBits(unpacked[18], extractBits(val_4, 0u, 5u), 2u, 5u);\n unpacked[19] = extractBits(val_4, 5u, 7u);\n unpacked[20] = extractBits(val_4, 12u, 7u);\n unpacked[21] = extractBits(val_4, 19u, 7u);\n unpacked[22] = extractBits(val_4, 26u, 6u);\n \n let val_5 = blocks[packed_offset + 5];\n unpacked[22] = insertBits(unpacked[22], extractBits(val_5, 0u, 1u), 6u, 1u);\n unpacked[23] = extractBits(val_5, 1u, 7u);\n unpacked[24] = extractBits(val_5, 8u, 7u);\n unpacked[25] = extractBits(val_5, 15u, 7u);\n unpacked[26] = extractBits(val_5, 22u, 7u);\n unpacked[27] = extractBits(val_5, 29u, 3u);\n \n let val_6 = blocks[packed_offset + 6];\n unpacked[27] = insertBits(unpacked[27], extractBits(val_6, 0u, 4u), 3u, 4u);\n unpacked[28] = extractBits(val_6, 4u, 7u);\n unpacked[29] = extractBits(val_6, 11u, 7u);\n unpacked[30] = extractBits(val_6, 18u, 7u);\n unpacked[31] = extractBits(val_6, 25u, 7u);\n \n let val_7 = blocks[packed_offset + 7];\n unpacked[32] = extractBits(val_7, 0u, 7u);\n unpacked[33] = extractBits(val_7, 7u, 7u);\n unpacked[34] = extractBits(val_7, 14u, 7u);\n unpacked[35] = extractBits(val_7, 21u, 7u);\n unpacked[36] = extractBits(val_7, 28u, 4u);\n \n let val_8 = blocks[packed_offset + 8];\n unpacked[36] = insertBits(unpacked[36], extractBits(val_8, 0u, 3u), 4u, 3u);\n unpacked[37] = extractBits(val_8, 3u, 7u);\n unpacked[38] = extractBits(val_8, 10u, 7u);\n unpacked[39] = extractBits(val_8, 17u, 7u);\n unpacked[40] = extractBits(val_8, 24u, 7u);\n unpacked[41] = extractBits(val_8, 31u, 1u);\n \n let val_9 = blocks[packed_offset + 9];\n unpacked[41] = insertBits(unpacked[41], extractBits(val_9, 0u, 6u), 1u, 6u);\n unpacked[42] = extractBits(val_9, 6u, 7u);\n unpacked[43] = extractBits(val_9, 13u, 7u);\n unpacked[44] = extractBits(val_9, 20u, 7u);\n unpacked[45] = extractBits(val_9, 27u, 5u);\n \n let val_10 = blocks[packed_offset + 10];\n unpacked[45] = insertBits(unpacked[45], extractBits(val_10, 0u, 2u), 5u, 2u);\n unpacked[46] = extractBits(val_10, 2u, 7u);\n unpacked[47] = extractBits(val_10, 9u, 7u);\n unpacked[48] = extractBits(val_10, 16u, 7u);\n unpacked[49] = extractBits(val_10, 23u, 7u);\n unpacked[50] = extractBits(val_10, 30u, 2u);\n \n let val_11 = blocks[packed_offset + 11];\n unpacked[50] = insertBits(unpacked[50], extractBits(val_11, 0u, 5u), 2u, 5u);\n unpacked[51] = extractBits(val_11, 5u, 7u);\n unpacked[52] = extractBits(val_11, 12u, 7u);\n unpacked[53] = extractBits(val_11, 19u, 7u);\n unpacked[54] = extractBits(val_11, 26u, 6u);\n \n let val_12 = blocks[packed_offset + 12];\n unpacked[54] = insertBits(unpacked[54], extractBits(val_12, 0u, 1u), 6u, 1u);\n unpacked[55] = extractBits(val_12, 1u, 7u);\n unpacked[56] = extractBits(val_12, 8u, 7u);\n unpacked[57] = extractBits(val_12, 15u, 7u);\n unpacked[58] = extractBits(val_12, 22u, 7u);\n unpacked[59] = extractBits(val_12, 29u, 3u);\n \n let val_13 = blocks[packed_offset + 13];\n unpacked[59] = insertBits(unpacked[59], extractBits(val_13, 0u, 4u), 3u, 4u);\n unpacked[60] = extractBits(val_13, 4u, 7u);\n unpacked[61] = extractBits(val_13, 11u, 7u);\n unpacked[62] = extractBits(val_13, 18u, 7u);\n unpacked[63] = extractBits(val_13, 25u, 7u);\n \n let val_14 = blocks[packed_offset + 14];\n unpacked[64] = extractBits(val_14, 0u, 7u);\n unpacked[65] = extractBits(val_14, 7u, 7u);\n unpacked[66] = extractBits(val_14, 14u, 7u);\n unpacked[67] = extractBits(val_14, 21u, 7u);\n unpacked[68] = extractBits(val_14, 28u, 4u);\n \n let val_15 = blocks[packed_offset + 15];\n unpacked[68] = insertBits(unpacked[68], extractBits(val_15, 0u, 3u), 4u, 3u);\n unpacked[69] = extractBits(val_15, 3u, 7u);\n unpacked[70] = extractBits(val_15, 10u, 7u);\n unpacked[71] = extractBits(val_15, 17u, 7u);\n unpacked[72] = extractBits(val_15, 24u, 7u);\n unpacked[73] = extractBits(val_15, 31u, 1u);\n \n let val_16 = blocks[packed_offset + 16];\n unpacked[73] = insertBits(unpacked[73], extractBits(val_16, 0u, 6u), 1u, 6u);\n unpacked[74] = extractBits(val_16, 6u, 7u);\n unpacked[75] = extractBits(val_16, 13u, 7u);\n unpacked[76] = extractBits(val_16, 20u, 7u);\n unpacked[77] = extractBits(val_16, 27u, 5u);\n \n let val_17 = blocks[packed_offset + 17];\n unpacked[77] = insertBits(unpacked[77], extractBits(val_17, 0u, 2u), 5u, 2u);\n unpacked[78] = extractBits(val_17, 2u, 7u);\n unpacked[79] = extractBits(val_17, 9u, 7u);\n unpacked[80] = extractBits(val_17, 16u, 7u);\n unpacked[81] = extractBits(val_17, 23u, 7u);\n unpacked[82] = extractBits(val_17, 30u, 2u);\n \n let val_18 = blocks[packed_offset + 18];\n unpacked[82] = insertBits(unpacked[82], extractBits(val_18, 0u, 5u), 2u, 5u);\n unpacked[83] = extractBits(val_18, 5u, 7u);\n unpacked[84] = extractBits(val_18, 12u, 7u);\n unpacked[85] = extractBits(val_18, 19u, 7u);\n unpacked[86] = extractBits(val_18, 26u, 6u);\n \n let val_19 = blocks[packed_offset + 19];\n unpacked[86] = insertBits(unpacked[86], extractBits(val_19, 0u, 1u), 6u, 1u);\n unpacked[87] = extractBits(val_19, 1u, 7u);\n unpacked[88] = extractBits(val_19, 8u, 7u);\n unpacked[89] = extractBits(val_19, 15u, 7u);\n unpacked[90] = extractBits(val_19, 22u, 7u);\n unpacked[91] = extractBits(val_19, 29u, 3u);\n \n let val_20 = blocks[packed_offset + 20];\n unpacked[91] = insertBits(unpacked[91], extractBits(val_20, 0u, 4u), 3u, 4u);\n unpacked[92] = extractBits(val_20, 4u, 7u);\n unpacked[93] = extractBits(val_20, 11u, 7u);\n unpacked[94] = extractBits(val_20, 18u, 7u);\n unpacked[95] = extractBits(val_20, 25u, 7u);\n \n let val_21 = blocks[packed_offset + 21];\n unpacked[96] = extractBits(val_21, 0u, 7u);\n unpacked[97] = extractBits(val_21, 7u, 7u);\n unpacked[98] = extractBits(val_21, 14u, 7u);\n unpacked[99] = extractBits(val_21, 21u, 7u);\n unpacked[100] = extractBits(val_21, 28u, 4u);\n \n let val_22 = blocks[packed_offset + 22];\n unpacked[100] = insertBits(unpacked[100], extractBits(val_22, 0u, 3u), 4u, 3u);\n unpacked[101] = extractBits(val_22, 3u, 7u);\n unpacked[102] = extractBits(val_22, 10u, 7u);\n unpacked[103] = extractBits(val_22, 17u, 7u);\n unpacked[104] = extractBits(val_22, 24u, 7u);\n unpacked[105] = extractBits(val_22, 31u, 1u);\n \n let val_23 = blocks[packed_offset + 23];\n unpacked[105] = insertBits(unpacked[105], extractBits(val_23, 0u, 6u), 1u, 6u);\n unpacked[106] = extractBits(val_23, 6u, 7u);\n unpacked[107] = extractBits(val_23, 13u, 7u);\n unpacked[108] = extractBits(val_23, 20u, 7u);\n unpacked[109] = extractBits(val_23, 27u, 5u);\n \n let val_24 = blocks[packed_offset + 24];\n unpacked[109] = insertBits(unpacked[109], extractBits(val_24, 0u, 2u), 5u, 2u);\n unpacked[110] = extractBits(val_24, 2u, 7u);\n unpacked[111] = extractBits(val_24, 9u, 7u);\n unpacked[112] = extractBits(val_24, 16u, 7u);\n unpacked[113] = extractBits(val_24, 23u, 7u);\n unpacked[114] = extractBits(val_24, 30u, 2u);\n \n let val_25 = blocks[packed_offset + 25];\n unpacked[114] = insertBits(unpacked[114], extractBits(val_25, 0u, 5u), 2u, 5u);\n unpacked[115] = extractBits(val_25, 5u, 7u);\n unpacked[116] = extractBits(val_25, 12u, 7u);\n unpacked[117] = extractBits(val_25, 19u, 7u);\n unpacked[118] = extractBits(val_25, 26u, 6u);\n \n let val_26 = blocks[packed_offset + 26];\n unpacked[118] = insertBits(unpacked[118], extractBits(val_26, 0u, 1u), 6u, 1u);\n unpacked[119] = extractBits(val_26, 1u, 7u);\n unpacked[120] = extractBits(val_26, 8u, 7u);\n unpacked[121] = extractBits(val_26, 15u, 7u);\n unpacked[122] = extractBits(val_26, 22u, 7u);\n unpacked[123] = extractBits(val_26, 29u, 3u);\n \n let val_27 = blocks[packed_offset + 27];\n unpacked[123] = insertBits(unpacked[123], extractBits(val_27, 0u, 4u), 3u, 4u);\n unpacked[124] = extractBits(val_27, 4u, 7u);\n unpacked[125] = extractBits(val_27, 11u, 7u);\n unpacked[126] = extractBits(val_27, 18u, 7u);\n unpacked[127] = extractBits(val_27, 25u, 7u); \n}\n";var fromFP510Function="\n\nconst exponents: array = array(\n 2.9103830456733704e-11, \n 5.820766091346741e-11, \n 1.1641532182693481e-10, \n 2.3283064365386963e-10,\n 4.656612873077393e-10, \n 9.313225746154785e-10, \n 1.862645149230957e-09, \n 3.725290298461914e-09,\n 7.450580596923828e-09, \n 1.4901161193847656e-08, \n 2.9802322387695312e-08, \n 5.960464477539063e-08,\n 1.1920928955078125e-07, \n 2.384185791015625e-07, \n 4.76837158203125e-07, \n 9.5367431640625e-07,\n 1.9073486328125e-06, \n 3.814697265625e-06, \n 7.62939453125e-06, \n 1.52587890625e-05, \n 3.0517578125e-05,\n 6.103515625e-05, \n 0.0001220703125, \n 0.000244140625, \n 0.00048828125, \n 0.0009765625, \n 0.001953125, \n 0.00390625,\n 0.0078125, \n 0.015625, \n 0.03125, \n 0.0625);\n\nfn from_fp510(x: u32) -> f32 {\n let exponent = f32(exponents[extractBits(x, 10u, 5u)]); \n let fractional = f32(extractBits(x, 0u, 10u)); \n let abs = exponent * fractional;\n return abs * (1.0 - (2.0 * f32(extractBits(x, 15u, 1u))));\n}\n";var preprocessBlocks3BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth3,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 12u); \n unpack_block_128_bit_depth_3(blocks_start); \n \n let b01: u32 = blocks_start;\n let b2: u32 = blocks_start + 8u;\n \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n\n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), (r * 16u) % 32u, 16u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), (r * 8u) % 32u, 8u); \n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b01_idx = b01 + (r / 2u);\n let b2_idx = b2 + (r / 4u);\n \n blocks[b01_idx] = insertBits(blocks[b01_idx], extractBits(unpacked[unpacked_idx], 0u, 2u), ((r * 16u) % 32u) + (2u * c), 2u);\n blocks[b2_idx] = insertBits(blocks[b2_idx], extractBits(unpacked[unpacked_idx], 2u, 1u), ((r * 8u) % 32u) + c, 1u); \n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks5BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth5,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n\n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 20u);\n unpack_block_128_bit_depth_5(blocks_start); \n \n let b03: u32 = blocks_start;\n let b4: u32 = blocks_start + 16u;\n\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), (r * 8u) % 32u, 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b4_idx = b4 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b4_idx] = insertBits(blocks[b4_idx], extractBits(unpacked[unpacked_idx], 4u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n } \n}\n\n").concat(emptyShader);var preprocessBlocks6BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth6,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 24u);\n unpack_block_128_bit_depth_6(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0u, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n }\n\n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessBlocks7BitShaderSource="\n\nstruct argsStruct {\n nbr: u32,\n nbc: u32,\n blocks_offset: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar blocks: array;\n\n".concat(unpackBlock128BitDepth7,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.nbr || global_id.y >= args.nbc) {\n return;\n }\n \n let blocks_start: u32 = args.blocks_offset + ((global_id.x * args.nbc + global_id.y) * 28u);\n unpack_block_128_bit_depth_7(blocks_start);\n \n let b03: u32 = blocks_start;\n let b45: u32 = blocks_start + 16u;\n let b6: u32 = blocks_start + 24u; \n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 0, 32u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u), 16u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u), 8u);\n }\n \n for (var c = 1u; c < ").concat(columnsPerBlock,"u; c++) {\n for (var r = 0u; r < ").concat(rowsPerBlock,"u; r++) {\n let unpacked_idx = r * ").concat(columnsPerBlock,"u + c;\n let b03_idx = b03 + r;\n let b45_idx = b45 + (r / 2u);\n let b6_idx = b6 + (r / 4u);\n \n blocks[b03_idx] = insertBits(blocks[b03_idx], extractBits(unpacked[unpacked_idx], 0u, 4u), 4 * c, 4u);\n blocks[b45_idx] = insertBits(blocks[b45_idx], extractBits(unpacked[unpacked_idx], 4u, 2u), ((r * 16u) % 32u) + (2 * c), 2u);\n blocks[b6_idx] = insertBits(blocks[b6_idx], extractBits(unpacked[unpacked_idx], 6u, 1u), ((r * 8u) % 32u) + c, 1u);\n }\n }\n}\n\n").concat(emptyShader);var preprocessShaderSources={3:preprocessBlocks3BitShaderSource,5:preprocessBlocks5BitShaderSource,6:preprocessBlocks6BitShaderSource,7:preprocessBlocks7BitShaderSource};var preprocessShaderNames={3:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_3bit_shader",5:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_5bit_shader",6:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_6bit_shader",7:"pv_picollm_weight_block_mixed_16x8_preprocess_blocks_7bit_shader"};var BM=8;var BN=32;var TM=2;var TN=16;var TC=rowsPerBlock*BM*BN/(TM*TN);var constantSnippet="\nconst BM = ".concat(BM,"u;\nconst BN = ").concat(BN,"u;\n\nconst TM = ").concat(TM,"u;\nconst TN = ").concat(TN,"u;\n\nconst TC = ").concat(TC,"u;\n\nconst ROW_PER_BLOCK = ").concat(rowsPerBlock,"u;\nconst COL_PER_BLOCK = ").concat(columnsPerBlock,"u;\n\nconst VEC_COL_PER_BLOCK = COL_PER_BLOCK / 4u;\n\nconst block_size: u32 = (COL_PER_BLOCK * ROW_PER_BLOCK * bit_depth) / 32u;\n\n");var forwardMultipleInputArgsSnippet="\nstruct argsStruct {\n n: u32,\n m: u32,\n total_nbc: u32,\n k: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array;\n";var forwardMultipleSharedPrivateMemSnippet="\nvar shared_x: array, BN * VEC_COL_PER_BLOCK>;\nvar shared_ab: array;\nvar shared_w: array, BM * ROW_PER_BLOCK * VEC_COL_PER_BLOCK>;\n\nvar local_x: array, TN * VEC_COL_PER_BLOCK>;\nvar local_x_sums: array;\nvar local_results: array;\n";var forwardMultipleLocalVarSnippet="\n let tid = local_id.x;\n let bm_idx = workgroup_id.x;\n let bn_idx = workgroup_id.y;\n\n let local_bm_idx = bm_idx * BM;\n let local_bn_idx = bn_idx * BN;\n \n let n_idx = tid % (BN / TN);\n let k_idx = tid / (BN / TN) / (BM * ROW_PER_BLOCK / TM);\n let m_idx = tid / (BN / TN) % (BM * ROW_PER_BLOCK / TM);\n";var forwardMultipleLoadW1Bit="\n let b0 = blocks[src + (row / 4u)];\n\n let b0_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b0_offset = b0_offset_base + (c * 4u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b0, b0_offset, 1u)), \n f32(extractBits(b0, b0_offset + 1, 1u)),\n f32(extractBits(b0, b0_offset + 2, 1u)),\n f32(extractBits(b0, b0_offset + 3, 1u)));\n }\n";var forwardMultipleLoadW2Bit="\n let b01 = blocks[src + (row / 2u)];\n \n let b01_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b01_offset = b01_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(extractBits(b01, b01_offset, 2u)), \n f32(extractBits(b01, b01_offset + 2, 2u)),\n f32(extractBits(b01, b01_offset + 4, 2u)),\n f32(extractBits(b01, b01_offset + 6, 2u)));\n } \n";var forwardMultipleLoadW3Bit="\n let b01 = blocks[src + (row / 2u)];\n let b2 = blocks[src + 8u + (row / 4u)]; \n\n let b01_offset_base = (row * 16u) % 32u;\n let b2_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b01_offset = b01_offset_base + (c * 8u);\n let b2_offset = b2_offset_base + (c * 4u);\n\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b01, b01_offset, 2u), extractBits(b2, b2_offset, 1u), 2u, 1u)), \n f32(insertBits(extractBits(b01, b01_offset + 2, 2u), extractBits(b2, b2_offset + 1, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 4, 2u), extractBits(b2, b2_offset + 2, 1u), 2u, 1u)),\n f32(insertBits(extractBits(b01, b01_offset + 6, 2u), extractBits(b2, b2_offset + 3, 1u), 2u, 1u))); \n }\n";var forwardMultipleLoadW4Bit="\n let b03 = blocks[src + row];\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u); \n shared_w[dst + c] = vec4(\n f32(extractBits(b03, b03_offset, 4u)), \n f32(extractBits(b03, b03_offset + 4, 4u)),\n f32(extractBits(b03, b03_offset + 8, 4u)),\n f32(extractBits(b03, b03_offset + 12, 4u)));\n }\n";var forwardMultipleLoadW5Bit="\n let b03 = blocks[src + row];\n let b4 = blocks[src + 16u + (row / 4u)];\n \n let b4_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b4_offset = b4_offset_base + (c * 4u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b4, b4_offset, 1u), 4u, 1u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b4, b4_offset + 1, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b4, b4_offset + 2, 1u), 4u, 1u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b4, b4_offset + 3, 1u), 4u, 1u)));\n }\n";var forwardMultipleLoadW6Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n shared_w[dst + c] = vec4(\n f32(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u)), \n f32(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u)),\n f32(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u)));\n }\n";var forwardMultipleLoadW7Bit="\n let b03 = blocks[src + row];\n let b45 = blocks[src + 16u + (row / 2u)];\n let b6 = blocks[src + 24u + (row / 4u)];\n \n let b45_offset_base = (row * 16u) % 32u;\n let b6_offset_base = (row * 8u) % 32u;\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b03_offset = (c * 16u);\n let b45_offset = b45_offset_base + (c * 8u);\n let b6_offset = b6_offset_base + (c * 4u);\n \n shared_w[dst + c] = vec4(\n f32(insertBits(insertBits(extractBits(b03, b03_offset, 4u), extractBits(b45, b45_offset, 2u), 4u, 2u), extractBits(b6, b6_offset, 1u), 6u, 1u)), \n f32(insertBits(insertBits(extractBits(b03, b03_offset + 4, 4u), extractBits(b45, b45_offset + 2, 2u), 4u, 2u), extractBits(b6, b6_offset + 1, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 8, 4u), extractBits(b45, b45_offset + 4, 2u), 4u, 2u), extractBits(b6, b6_offset + 2, 1u), 6u, 1u)),\n f32(insertBits(insertBits(extractBits(b03, b03_offset + 12, 4u), extractBits(b45, b45_offset + 6, 2u), 4u, 2u), extractBits(b6, b6_offset + 3, 1u), 6u, 1u)));\n }\n";var forwardMultipleLoadW8Bit="\n let b07_offset = src + (row * 2);\n \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n let b07 = blocks[b07_offset + c];\n shared_w[dst + c] = vec4(\n f32(extractBits(b07, 0u, 8u)), \n f32(extractBits(b07, 8u, 8u)),\n f32(extractBits(b07, 16u, 8u)),\n f32(extractBits(b07, 24u, 8u)));\n }\n";var forwardLoadWBitDepthSnippets={1:forwardMultipleLoadW1Bit,2:forwardMultipleLoadW2Bit,3:forwardMultipleLoadW3Bit,4:forwardMultipleLoadW4Bit,5:forwardMultipleLoadW5Bit,6:forwardMultipleLoadW6Bit,7:forwardMultipleLoadW7Bit,8:forwardMultipleLoadW8Bit};var forwardMultipleLoadXSnippet="\n let total_work_x = VEC_COL_PER_BLOCK * BN;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_x, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_x) { \n let n_load_idx = local_bn_idx + idx / VEC_COL_PER_BLOCK;\n let inner_idx = idx % VEC_COL_PER_BLOCK;\n \n if (bk_idx < args.k && n_load_idx < args.n) { \n let x_idx = (args.x_offset / 4u) + ((bk_idx * args.n + n_load_idx) * VEC_COL_PER_BLOCK + inner_idx); \n shared_x[idx] = x[x_idx];\n } else {\n shared_x[idx] = vec4(0.0);\n }\n }\n }\n";var forwardMultipleLoadABSnippet="\n let total_work_ab = BM * 2;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_ab, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_ab) {\n let m_load_idx = local_bm_idx + idx / 2; \n let inner_idx = (idx % 2) * 16u;\n \n if (m_load_idx < args.m && bk_idx < args.k) {\n let ab_bits = extractBits(metas[args.metas_offset + (m_load_idx * args.k + bk_idx)], inner_idx, 16u);\n shared_ab[idx] = from_fp510(ab_bits); \n } else {\n shared_ab[idx] = 0.0;\n }\n }\n }\n";var forwardMultipleLoadWSnippet=function forwardMultipleLoadWSnippet(bitDepth){return"\n let total_work_w = BM * ROW_PER_BLOCK;\n for (var local_idx = 0u; local_idx < divide_pad(total_work_w, TC); local_idx++) {\n let idx = local_idx * TC + tid;\n if (idx < total_work_w) {\n let m_load_idx = local_bm_idx + idx / ROW_PER_BLOCK;\n let row = idx % ROW_PER_BLOCK;\n let dst = idx * VEC_COL_PER_BLOCK;\n\n if (m_load_idx < args.m) {\n let src = args.blocks_offset + (m_load_idx * args.k + bk_idx) * block_size;\n ".concat(forwardLoadWBitDepthSnippets[bitDepth],"\n } else { \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n shared_w[dst + c] = vec4(0.0);\n }\n }\n }\n }\n")};var forwardMultipleCopyXSnippet="\nfor (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n var x_sum_vec = vec4(0.0); \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n let shared_x_idx = (n_idx * TN + tn_idx) * VEC_COL_PER_BLOCK + (k_idx * VEC_COL_PER_BLOCK);\n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) {\n local_x[local_x_idx + c] = shared_x[shared_x_idx + c];\n x_sum_vec += local_x[local_x_idx + c];\n }\n local_x_sums[tn_idx] = x_sum_vec.x + x_sum_vec.y + x_sum_vec.z + x_sum_vec.w; \n}\n";var forwardMultipleComputeResultsSnippet="\n for (var tm_idx = 0u; tm_idx < TM; tm_idx++) { \n let shared_ab_idx = ((m_idx * TM + tm_idx) / ROW_PER_BLOCK + k_idx) * 2;\n let alpha = shared_ab[shared_ab_idx];\n let beta = shared_ab[shared_ab_idx + 1]; \n let shared_w_idx = ((m_idx * TM + tm_idx) + k_idx) * VEC_COL_PER_BLOCK;\n \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let local_x_idx = tn_idx * VEC_COL_PER_BLOCK;\n \n var swx_vec = vec4(0.0); \n for (var c = 0u; c < VEC_COL_PER_BLOCK; c++) { \n swx_vec += shared_w[shared_w_idx + c] * local_x[local_x_idx + c];\n }\n let swx = swx_vec.x + swx_vec.y + swx_vec.z + swx_vec.w;\n \n let kappa = alpha * local_x_sums[tn_idx]; \n let results_idx = tm_idx * TN + tn_idx;\n local_results[results_idx] += kappa + (beta * swx);\n }\n }\n";var forwardMultipleWriteResultsSnippet="\nfor (var tm_idx = 0u; tm_idx < TM; tm_idx++) {\n let row = local_bm_idx * ROW_PER_BLOCK + (m_idx * TM + tm_idx); \n for (var tn_idx = 0u; tn_idx < TN; tn_idx++) { \n let col = local_bn_idx + (n_idx * TN + tn_idx);\n if (row < args.m * ROW_PER_BLOCK && col < args.n) {\n let y_idx = args.y_offset + ((row / ROW_PER_BLOCK) * args.n + col) * ROW_PER_BLOCK + (row % ROW_PER_BLOCK);\n let results_idx = tm_idx * TN + tn_idx;\n \n y[y_idx] += local_results[results_idx];\n }\n }\n}\n";var forwardMultipleShaderSources=function forwardMultipleShaderSources(bitDepth){return"\n\n".concat(forwardMultipleInputArgsSnippet,"\n\n").concat(constantSnippet,"\n\n").concat(forwardMultipleSharedPrivateMemSnippet,"\n\n").concat(fromFP510Function,"\n\n").concat(dividePadFunction,"\n\nconst bit_depth: u32 = ").concat(bitDepth,"u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n \n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(\n @builtin(local_invocation_id) local_id: vec3,\n @builtin(workgroup_id) workgroup_id: vec3\n) {\n ").concat(forwardMultipleLocalVarSnippet,"\n \n for (var bk_idx = 0u; bk_idx < args.k; bk_idx++) { \n ").concat(forwardMultipleLoadXSnippet,"\n ").concat(forwardMultipleLoadABSnippet," \n ").concat(forwardMultipleLoadWSnippet(bitDepth)," \n workgroupBarrier();\n \n ").concat(forwardMultipleCopyXSnippet,"\n ").concat(forwardMultipleComputeResultsSnippet,"\n workgroupBarrier();\n }\n \n ").concat(forwardMultipleWriteResultsSnippet,"\n}\n\n").concat(emptyShader,"\n")};var forwardShuffleXShaderSource="\nstruct argsStruct {\n n: u32,\n shape1: u32,\n x_offset: u32,\n indices_offset: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar indices: array;\n\n@group(0) @binding(3)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape1) {\n return;\n } \n\n let b = global_id.x;\n let i = global_id.y;\n \n let c = i / 8u;\n let j = i % 8u;\n y[((c * args.n) + b) * 8 + j] = x[args.x_offset + (b * args.shape1) + indices[args.indices_offset + i]];\n}\n\n".concat(emptyShader,"\n");var forwardSingleReduceYShaderSource="\nstruct argsStruct {\n nvr: u32,\n nbc: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar y: array>;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n if (global_id.x > args.nvr) {\n return;\n }\n\n let x_start = global_id.x * args.nbc;\n var sum: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n for (var i = 0u; i < args.nbc; i++) {\n sum += x[x_start + i]; \n }\n y[global_id.x] += sum;\n}\n\n".concat(emptyShader);var forwardShuffleYShaderSource="\nstruct argsStruct {\n n: u32,\n shape0: u32, \n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array;\n\n@group(0) @binding(2)\nvar y: array;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= args.n || global_id.y >= args.shape0) {\n return;\n } \n \n let b = global_id.x;\n let i = global_id.y;\n \n let r = i / 16u;\n let j = i % 16u;\n y[(b * args.shape0) + (r * 16) + j] = x[(((r * args.n) + b) * 16) + j];\n}\n\n".concat(emptyShader);var addBiasShaderSource="\nstruct argsStruct {\n dimension: u32\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar bias: array;\n\n@group(0) @binding(2)\nvar y: array;\n\n".concat(fromFP510Function,"\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) { \n y[(global_id.x * args.dimension) + global_id.y] += bias[global_id.y];\n}\n\n").concat(emptyShader);var forwardSingleBitDepth1ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 4u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b0_start = row_blocks_start + br_offset + (bc * block_size);\n var b0_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b0 = blocks[b0_start];\n \n let w0_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w0_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w0_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w0_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 8u;\n \n let w1_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w1_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w1_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w1_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 16u;\n \n let w2_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w2_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w2_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w2_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 24u;\n \n let w3_0 = f32(extractBits(b0, b0_offset + j, 1u)); \n let w3_1 = f32(extractBits(b0, b0_offset + j + 1, 1u)); \n let w3_2 = f32(extractBits(b0, b0_offset + j + 2, 1u));\n let w3_3 = f32(extractBits(b0, b0_offset + j + 3, 1u));\n \n b0_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth2ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 8u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n\n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b01_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b01 = blocks[b01_start];\n \n let w0_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w0_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w0_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w0_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w1_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w1_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w1_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w1_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u; \n b01 = blocks[b01_start + 1u];\n \n let w2_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w2_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w2_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w2_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 16u;\n \n let w3_0 = f32(extractBits(b01, b01_offset + (2u * j), 2u)); \n let w3_1 = f32(extractBits(b01, b01_offset + (2u * (j + 1)), 2u)); \n let w3_2 = f32(extractBits(b01, b01_offset + (2u * (j + 2)), 2u));\n let w3_3 = f32(extractBits(b01, b01_offset + (2u * (j + 3)), 2u));\n \n b01_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w; \n }\n \n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth3ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 12u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id : vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n\n let x_start = ((args.x_offset + c) / 4u);\n \n var b01_start = row_blocks_start + (br_offset * 2u) + (bc * block_size);\n var b2_start = row_blocks_start + br_offset + (bc * block_size) + 8u;\n var b01_offset = 0u;\n var b2_offset = 0u;\n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) { \n \n var b01 = blocks[b01_start];\n var b2 = blocks[b2_start];\n \n var b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n var b2_bit = extractBits(b2, b2_offset + j, 1u);\n let w0_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 8u;\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w1_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 16u; \n b01 = blocks[b01_start + 1u];\n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w2_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 16u;\n b2_offset = 24u; \n \n b01_bits = extractBits(b01, b01_offset + (2u * j), 2u);\n b2_bit = extractBits(b2, b2_offset + j, 1u); \n let w3_0 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 1)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 2)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_bits = extractBits(b01, b01_offset + (2u * (j + 3)), 2u);\n b2_bit = extractBits(b2, b2_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b01_bits, b2_bit, 2u, 1u));\n \n b01_offset = 0u;\n b2_offset = 0u; \n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n \n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth4ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 16u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start]; \n \n let w0_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w0_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w0_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w0_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 1];\n \n let w1_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w1_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w1_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w1_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 2];\n \n let w2_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w2_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w2_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w2_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n b03 = blocks[b03_start + 3];\n \n let w3_0 = f32(extractBits(b03, 4u * j, 4u)); \n let w3_1 = f32(extractBits(b03, 4u * (j + 1), 4u)); \n let w3_2 = f32(extractBits(b03, 4u * (j + 2), 4u));\n let w3_3 = f32(extractBits(b03, 4u * (j + 3), 4u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth5ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 20u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b4_start = row_blocks_start + br_offset + (bc * block_size) + 16u;\n \n var b4_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b4 = blocks[b4_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w0_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w0_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w0_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w0_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 1];\n b4_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w1_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w1_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w1_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w1_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 2];\n b4_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w2_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w2_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w2_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w2_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03 = blocks[b03_start + 3];\n b4_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b4_bit = extractBits(b4, b4_offset + j, 1u); \n let w3_0 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 1), 1u);\n let w3_1 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 2), 1u);\n let w3_2 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b4_bit = extractBits(b4, b4_offset + (j + 3), 1u);\n let w3_3 = f32(insertBits(b03_bits, b4_bit, 4u, 1u));\n \n b4_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth6ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 24u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n \n var b45_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w0_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w0_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w0_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w0_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w1_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w1_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w1_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w1_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u)); \n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w2_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w2_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w2_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w2_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n let w3_0 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n let w3_1 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n let w3_2 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n let w3_3 = f32(insertBits(b03_bits, b45_bits, 4u, 2u));\n \n b45_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth7ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 28u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b03_start = row_blocks_start + (br_offset * 4u) + (bc * block_size);\n var b45_start = row_blocks_start + (br_offset * 2u) + (bc * block_size) + 16u;\n var b6_start = row_blocks_start + br_offset + (bc * block_size) + 24u;\n \n var b45_offset = 0u;\n var b6_offset = 0u;\n \n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n \n for (var j = 0u; j < ").concat(columnsPerBlock,"; j+=4) {\n \n var b03 = blocks[b03_start];\n var b45 = blocks[b45_start];\n var b6 = blocks[b6_start];\n \n var b03_bits = extractBits(b03, 4u * j, 4u);\n var b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n var b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w0_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w0_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w0_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w0_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 1];\n b45_offset = 16u;\n b6_offset = 8u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w1_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w1_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w1_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w1_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 2];\n b45 = blocks[b45_start + 1];\n b45_offset = 0u;\n b6_offset = 16u;\n\n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w2_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w2_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w2_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w2_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03 = blocks[b03_start + 3];\n b45_offset = 16u;\n b6_offset = 24u;\n \n b03_bits = extractBits(b03, 4u * j, 4u);\n b45_bits = extractBits(b45, b45_offset + (j * 2), 2u);\n b6_bit = extractBits(b6, b6_offset + j, 1u);\n let w3_0 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 1), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 1)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 1, 1u);\n let w3_1 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b03_bits = extractBits(b03, 4u * (j + 2), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 2)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 2, 1u);\n let w3_2 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u)); \n \n b03_bits = extractBits(b03, 4u * (j + 3), 4u);\n b45_bits = extractBits(b45, b45_offset + (2u * (j + 3)), 2u);\n b6_bit = extractBits(b6, b6_offset + j + 3, 1u);\n let w3_3 = f32(insertBits(insertBits(b03_bits, b45_bits, 4u, 2u), b6_bit, 6u, 1u));\n \n b45_offset = 0u;\n b6_offset = 0u;\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_idx = (j / 4u);\n let x_vec = x[x_start + x_idx];\n res[x_idx] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleBitDepth8ShaderSource="\n\nstruct argsStruct {\n n: u32,\n nbr: u32,\n total_nbc: u32,\n bit_depth_nbc: u32,\n x_offset: u32,\n metas_offset: u32,\n blocks_offset: u32,\n y_offset: u32,\n};\n\n@group(0) @binding(0) \nvar args: argsStruct;\n\n@group(0) @binding(1)\nvar x: array>;\n\n@group(0) @binding(2)\nvar metas: array;\n\n@group(0) @binding(3)\nvar blocks: array;\n\n@group(0) @binding(4)\nvar y: array>;\n\n".concat(fromFP510Function,"\n\nconst block_size: u32 = 32u;\n\noverride workgroup_size_x: u32 = 1;\noverride workgroup_size_y: u32 = 1;\noverride workgroup_size_z: u32 = 1;\n\n@compute @workgroup_size(workgroup_size_x, workgroup_size_y, workgroup_size_z)\nfn main(@builtin(global_invocation_id) global_id: vec3) {\n if (global_id.x >= (args.nbr * 4) || global_id.y >= args.bit_depth_nbc) {\n return;\n }\n \n let r = global_id.x * 4u;\n let c = global_id.y * ").concat(columnsPerBlock,";\n let br = global_id.x / 4u; \n let bc = global_id.y;\n let br_offset = global_id.x % 4u;\n \n let row_metas_start: u32 = args.metas_offset + (br * args.bit_depth_nbc);\n let row_blocks_start: u32 = args.blocks_offset + (br * args.bit_depth_nbc * block_size); \n \n let alpha = from_fp510(extractBits(metas[row_metas_start + bc], 0, 16u)); \n let beta = from_fp510(extractBits(metas[row_metas_start + bc], 16u, 16u));\n \n let x_start = ((args.x_offset + c) / 4u);\n \n var b07_start = row_blocks_start + (br_offset * 8u) + (bc * block_size); \n\n var res: array, 2u>;\n var x_sum: f32 = 0.0;\n\n for (var j = 0u; j < 2; j++) {\n \n var b07 = blocks[b07_start + j];\n \n let w0_0 = f32(extractBits(b07, 0u, 8u)); \n let w0_1 = f32(extractBits(b07, 8u, 8u)); \n let w0_2 = f32(extractBits(b07, 16u, 8u));\n let w0_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 2 + j];\n \n let w1_0 = f32(extractBits(b07, 0u, 8u)); \n let w1_1 = f32(extractBits(b07, 8u, 8u)); \n let w1_2 = f32(extractBits(b07, 16u, 8u));\n let w1_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 4 + j];\n \n let w2_0 = f32(extractBits(b07, 0u, 8u)); \n let w2_1 = f32(extractBits(b07, 8u, 8u)); \n let w2_2 = f32(extractBits(b07, 16u, 8u));\n let w2_3 = f32(extractBits(b07, 24u, 8u));\n \n b07 = blocks[b07_start + 6 + j];\n \n let w3_0 = f32(extractBits(b07, 0u, 8u)); \n let w3_1 = f32(extractBits(b07, 8u, 8u)); \n let w3_2 = f32(extractBits(b07, 16u, 8u));\n let w3_3 = f32(extractBits(b07, 24u, 8u));\n \n let m = mat4x4(\n w0_0, w1_0, w2_0, w3_0,\n w0_1, w1_1, w2_1, w3_1, \n w0_2, w1_2, w2_2, w3_2,\n w0_3, w1_3, w2_3, w3_3);\n\n let x_vec = x[x_start + j];\n res[j] = m * x_vec;\n \n x_sum += x_vec.x + x_vec.y + x_vec.z + x_vec.w;\n }\n let swx = res[0] + res[1];\n let kappa = alpha * x_sum;\n \n let y_start = (args.y_offset + (r * args.total_nbc)) / 4u;\n y[y_start + bc] += (swx * beta) + vec4(kappa);\n}\n\n").concat(emptyShader);var forwardSingleShaderSources={1:forwardSingleBitDepth1ShaderSource,2:forwardSingleBitDepth2ShaderSource,3:forwardSingleBitDepth3ShaderSource,4:forwardSingleBitDepth4ShaderSource,5:forwardSingleBitDepth5ShaderSource,6:forwardSingleBitDepth6ShaderSource,7:forwardSingleBitDepth7ShaderSource,8:forwardSingleBitDepth8ShaderSource};var forwardSingleShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_single_bit_depth_8_shader"};var forwardShaderSources={1:forwardMultipleShaderSources(1),2:forwardMultipleShaderSources(2),3:forwardMultipleShaderSources(3),4:forwardMultipleShaderSources(4),5:forwardMultipleShaderSources(5),6:forwardMultipleShaderSources(6),7:forwardMultipleShaderSources(7),8:forwardMultipleShaderSources(8)};var forwardShaderNames={1:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_1_shader",2:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_2_shader",3:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_3_shader",4:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_4_shader",5:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_5_shader",6:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_6_shader",7:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_7_shader",8:"pv_picollm_weight_block_mixed_16x8_forward_multiple_bit_depth_8_shader"};var forwardShuffleXShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_x_shader";var forwardShuffleYShaderName="pv_picollm_weight_block_mixed_16x8_forward_shuffle_y_shader";var addBiasShaderName="pv_picollm_weight_block_mixed_16x8_add_bias_shader";var forwardSingleReduceYShaderName="pv_picollm_weight_block_mixed_16x8_forward_single_reduce_y_shader";var _weightBlockMixed16x;var loadPreprocessBlocksShader=function loadPreprocessBlocksShader(device,bitDepth){var bindGroupLayout=device.createBindGroupLayout({label:"weight preprocess blocks ".concat(bitDepth," bind group layout"),entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight preprocess blocks ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight preprocess blocks ".concat(bitDepth," shader module"),code:preprocessShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight preprocess blocks ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:preprocessDim,workgroup_size_y:preprocessDim}}});return{computePipeline:computePipeline}};var loadForwardShuffleXShader=function loadForwardShuffleXShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle x bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle x pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle x shader module",code:forwardShuffleXShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle x pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_y:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardSingleReduceYShader=function loadForwardSingleReduceYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight single reduce y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight single reduce y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight single reduce y shader module",code:forwardSingleReduceYShaderSource});var computePipeline=device.createComputePipeline({label:"weight single reduce y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:PV_PICOLLM_WEBGPU_DEFAULT_WORKGROUP_SIZE}}});return{computePipeline:computePipeline}};var loadForwardShuffleYShader=function loadForwardShuffleYShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight shuffle y bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight shuffle y pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight shuffle y shader module",code:forwardShuffleYShaderSource});var computePipeline=device.createComputePipeline({label:"weight shuffle y pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var loadForwardSingleShader=function loadForwardSingleShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward single ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward single ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward single ".concat(bitDepth," shader module"),code:forwardSingleShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward single ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:weightBlockSize,workgroup_size_y:1}}});return{computePipeline:computePipeline}};var loadForwardShader=function loadForwardShader(device,bitDepth){var entries=[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}];var bindGroupLayout=device.createBindGroupLayout({label:"weight forward multi ".concat(bitDepth," bind group layout"),entries:entries});var pipelineLayout=device.createPipelineLayout({label:"weight forward multi ".concat(bitDepth," pipeline layout"),bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight forward multi ".concat(bitDepth," shader module"),code:forwardShaderSources[bitDepth]});var computePipeline=device.createComputePipeline({label:"weight forward multi ".concat(bitDepth," pipeline"),layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint,constants:{workgroup_size_x:TC}}});return{computePipeline:computePipeline}};var loadAddBiasShader=function loadAddBiasShader(device){var bindGroupLayout=device.createBindGroupLayout({label:"weight add bias bind group layout",entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]});var pipelineLayout=device.createPipelineLayout({label:"weight add bias pipeline layout",bindGroupLayouts:[bindGroupLayout]});var shaderModule=device.createShaderModule({label:"weight add bias shader module",code:addBiasShaderSource});var computePipeline=device.createComputePipeline({label:"weight add bias pipeline",layout:pipelineLayout,compute:{module:shaderModule,entryPoint:shaderEntryPoint}});return{computePipeline:computePipeline}};var weightBlockMixed16x8Shaders=(_weightBlockMixed16x={},_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,preprocessShaderNames[3],function(device){return loadPreprocessBlocksShader(device,3)}),preprocessShaderNames[5],function(device){return loadPreprocessBlocksShader(device,5)}),preprocessShaderNames[6],function(device){return loadPreprocessBlocksShader(device,6)}),preprocessShaderNames[7],function(device){return loadPreprocessBlocksShader(device,7)}),forwardShuffleXShaderName,loadForwardShuffleXShader),forwardShuffleYShaderName,loadForwardShuffleYShader),forwardSingleReduceYShaderName,loadForwardSingleReduceYShader),forwardSingleShaderNames[1],function(device){return loadForwardSingleShader(device,1)}),forwardSingleShaderNames[2],function(device){return loadForwardSingleShader(device,2)}),forwardSingleShaderNames[3],function(device){return loadForwardSingleShader(device,3)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardSingleShaderNames[4],function(device){return loadForwardSingleShader(device,4)}),forwardSingleShaderNames[5],function(device){return loadForwardSingleShader(device,5)}),forwardSingleShaderNames[6],function(device){return loadForwardSingleShader(device,6)}),forwardSingleShaderNames[7],function(device){return loadForwardSingleShader(device,7)}),forwardSingleShaderNames[8],function(device){return loadForwardSingleShader(device,8)}),forwardShaderNames[1],function(device){return loadForwardShader(device,1)}),forwardShaderNames[2],function(device){return loadForwardShader(device,2)}),forwardShaderNames[3],function(device){return loadForwardShader(device,3)}),forwardShaderNames[4],function(device){return loadForwardShader(device,4)}),forwardShaderNames[5],function(device){return loadForwardShader(device,5)}),_defineProperty(_defineProperty(_defineProperty(_defineProperty(_weightBlockMixed16x,forwardShaderNames[6],function(device){return loadForwardShader(device,6)}),forwardShaderNames[7],function(device){return loadForwardShader(device,7)}),forwardShaderNames[8],function(device){return loadForwardShader(device,8)}),addBiasShaderName,loadAddBiasShader));function ownKeys$1(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread$1(e){for(var r=1;r=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e1&&_args[1]!==undefined?_args[1]:{};time=_args.length>2&&_args[2]!==undefined?_args[2]:5e3;controller=new AbortController;config=_objectSpread(_objectSpread({},options),{},{signal:controller.signal});timeout=setTimeout(function(){controller.abort()},time);_context.next=7;return fetch(uri,config);case 7:response=_context.sent;clearTimeout(timeout);return _context.abrupt("return",response);case 10:case"end":return _context.stop()}},_callee)}));return _fetchWithTimeout.apply(this,arguments)}function open(_x2,_x3){return _open.apply(this,arguments)}function _open(){_open=_asyncToGenerator(_regeneratorRuntime.mark(function _callee2(path,mode){var error;return _regeneratorRuntime.wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.prev=0;_context2.next=3;return PvFileIDB.open(path,mode);case 3:return _context2.abrupt("return",_context2.sent);case 6:_context2.prev=6;_context2.t0=_context2["catch"](0);if(_context2.t0.name==="IndexedDBNotSupported"){console.warn("IndexedDB is not supported. Fallback to in-memory storage.")}else if(_context2.t0.name!=="FileNotExists"){console.warn("Unable to access IndexedDB (".concat(_context2.t0.toString(),"). Fallback to in-memory storage."))}if(!(typeof WorkerGlobalScope!=="undefined"&&self instanceof WorkerGlobalScope)){_context2.next=16;break}if(!(_context2.t0.name==="FileNotExists")){_context2.next=12;break}throw _context2.t0;case 12:console.error("In-memory storage cannot be used inside a worker.");error=new Error("Failed to start PvFile: ".concat(_context2.t0.toString()));error.name="PvFileNotSupported";throw error;case 16:return _context2.abrupt("return",PvFileMem.open(path,mode));case 17:case"end":return _context2.stop()}},_callee2,null,[[0,6]])}));return _open.apply(this,arguments)}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=url=>{if(isFileURI(url)){return new Promise((reject,resolve)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response)}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}return fetch(url,{credentials:"same-origin"}).then(response=>{if(response.ok){return response.arrayBuffer()}return Promise.reject(new Error(response.status+" : "+response.url))})}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function findWasmBinary(){var f="pv_orca_simd.wasm";if(!isDataURI(f)){return locateFile(f)}return f}var wasmBinaryFile;function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary){return readAsync(binaryFile).then(response=>new Uint8Array(response),()=>getBinarySync(binaryFile))}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function getWasmImports(){return{a:wasmImports}}function createWasm(){var info=getWasmImports();function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmMemory=wasmExports["v"];updateMemoryViews();wasmTable=wasmExports["Ib"];addOnInit(wasmExports["w"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}if(!wasmBinaryFile)wasmBinaryFile=findWasmBinary();instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();function syscallGetVarargI(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url).then(arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},err=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;iFS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS:MEMFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>{abort("")};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _pv_console_log_wasm(index){console.log(arrayBufferToStringAtIndex(Module.HEAPU8,index))}var _pv_file_close_wasm=async function(fileAddress,statusAddress){statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{try{const file=await PvFile.getPtr(fileAddress);await file.close();setInt(statusAddress,0)}catch(e){console.error("pvFileCloseWasm",e);setInt(statusAddress,-1)}})};_pv_file_close_wasm.isAsync=true;var _pv_file_open_wasm=async function(fileAddress,pathAddress,modeAddress,statusAddress){pathAddress=unsignedAddress(pathAddress);modeAddress=unsignedAddress(modeAddress);statusAddress=unsignedAddress(statusAddress);return Asyncify.handleAsync(async()=>{const path=arrayBufferToStringAtIndex(Module.HEAPU8,pathAddress);const mode=arrayBufferToStringAtIndex(Module.HEAPU8,modeAddress);try{const file=await open(path,mode);PvFile.setPtr(fileAddress,file);setInt(statusAddress,0)}catch(e){if(e.name!=="FileNotExists"){console.error("pvFileOpenWasm",e)}setInt(statusAddress,-1)}})};_pv_file_open_wasm.isAsync=true;var _pv_file_read_wasm=async function(fileAddress,contentAddress,size,count,numReadAddress){contentAddress=unsignedAddress(contentAddress);numReadAddress=unsignedAddress(numReadAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=await file.read(size,count);Module.HEAPU8.set(content,contentAddress);setInt(numReadAddress,content.length/size)}catch(e){console.error("pvFileReadWasm",e);setInt(numReadAddress,-1)}})};_pv_file_read_wasm.isAsync=true;function _pv_file_seek_wasm(fileAddress,offset,whence,statusAddress){statusAddress=unsignedAddress(statusAddress);try{const file=PvFile.getPtr(fileAddress);file.seek(offset,whence);setInt(statusAddress,0)}catch(e){console.error("pvFileSeekWasm",e);setInt(statusAddress,-1)}}function _pv_file_tell_wasm(fileAddress,offsetAddress){offsetAddress=unsignedAddress(offsetAddress);try{const file=PvFile.getPtr(fileAddress);setInt(offsetAddress,file.tell())}catch(e){console.error("pvFileTellWasm",e);setInt(offsetAddress,-1)}}var _pv_file_write_wasm=function(fileAddress,contentAddress,size,count,numWriteAddress){contentAddress=unsignedAddress(contentAddress);numWriteAddress=unsignedAddress(numWriteAddress);return Asyncify.handleAsync(async()=>{try{const file=PvFile.getPtr(fileAddress);const content=new Uint8Array(size*count);content.set(Module.HEAPU8.slice(contentAddress,contentAddress+size*count),0);await file.write(content);setInt(numWriteAddress,content.length/size)}catch(e){console.error("pvFileWriteWasm",e);setInt(numWriteAddress,-1)}})};var _pv_https_request_wasm=async function(httpMethodAddress,serverNameAddress,endpointAddress,headerAddress,bodyAddress,timeoutMs,responseAddressAddress,responseSizeAddress,responseCodeAddress){httpMethodAddress=unsignedAddress(httpMethodAddress);serverNameAddress=unsignedAddress(serverNameAddress);endpointAddress=unsignedAddress(endpointAddress);headerAddress=unsignedAddress(headerAddress);bodyAddress=unsignedAddress(bodyAddress);responseAddressAddress=unsignedAddress(responseAddressAddress);responseSizeAddress=unsignedAddress(responseSizeAddress);responseCodeAddress=unsignedAddress(responseCodeAddress);return Asyncify.handleAsync(async()=>{const httpMethod=arrayBufferToStringAtIndex(Module.HEAPU8,httpMethodAddress);const serverName=arrayBufferToStringAtIndex(Module.HEAPU8,serverNameAddress);const endpoint=arrayBufferToStringAtIndex(Module.HEAPU8,endpointAddress);const header=arrayBufferToStringAtIndex(Module.HEAPU8,headerAddress);const body=arrayBufferToStringAtIndex(Module.HEAPU8,bodyAddress);const headerObject=stringHeaderToObject(header);const options={method:httpMethod};if(body.length>0){options.body=body}if(Object.keys(headerObject).length>0){options.headers=headerObject}let response;let responseText;let statusCode;try{response=await fetchWithTimeout("https://"+serverName+endpoint,options,timeoutMs);statusCode=response.status}catch(error){console.error("pvHttpsRequestWasm",`Failed to fetch: ${error}`);return}try{responseText=await response.text()}catch(error){console.error("pvHttpsRequestWasm",`Failed to get response text: ${error}`);return}const responseAddress=Module._malloc((responseText.length+1)*Int8Array.BYTES_PER_ELEMENT);if(responseAddress===0){console.error("pvMallocError","pvHttpsRequestWasm: cannot allocate memory for response");setInt(responseAddressAddress,0);return}setInt(responseSizeAddress,responseText.length+1);setInt(responseAddressAddress,responseAddress);for(let i=0;i{try{return func()}catch(e){abort(e)}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var sigToWasmTypes=sig=>{var typeNames={i:"i32",j:"i64",f:"f32",d:"f64",e:"externref",p:"i32"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};var Asyncify={instrumentWasmImports(imports){var importPattern=/^(pv_https_request_wasm|pv_file_open_wasm|pv_file_close_wasm|pv_file_read_wasm|pv_file_write_wasm|pv_file_remove_wasm|pv_sleep_wasm|pv_xpu_webgpu_device_init_wasm|pv_xpu_webgpu_device_info_wasm|pv_xpu_webgpu_device_mem_copy_from_xpu_wasm|pv_xpu_webgpu_device_wait_wasm|pv_xpu_webgpu_timer_stop_wasm|invoke_.*|__asyncjs__.*)$/;for(let[x,original]of Object.entries(imports)){if(typeof original=="function"){let isAsyncifyImport=original.isAsync||importPattern.test(x)}}},instrumentWasmExports(exports){var ret={};for(let[x,original]of Object.entries(exports)){if(typeof original=="function"){ret[x]=(...args)=>{Asyncify.exportCallStack.push(x);try{return original(...args)}finally{if(!ABORT){var y=Asyncify.exportCallStack.pop();Asyncify.maybeStopUnwind()}}}}else{ret[x]=original}}return ret},State:{Normal:0,Unwinding:1,Rewinding:2,Disabled:3},state:0,StackSize:4096,currData:null,handleSleepReturnValue:0,exportCallStack:[],callStackNameToId:{},callStackIdToName:{},callStackId:0,asyncPromiseHandlers:null,sleepCallbacks:[],getCallStackId(funcName){var id=Asyncify.callStackNameToId[funcName];if(id===undefined){id=Asyncify.callStackId++;Asyncify.callStackNameToId[funcName]=id;Asyncify.callStackIdToName[id]=funcName}return id},maybeStopUnwind(){if(Asyncify.currData&&Asyncify.state===Asyncify.State.Unwinding&&Asyncify.exportCallStack.length===0){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_unwind);if(typeof Fibers!="undefined"){Fibers.trampoline()}}},whenDone(){return new Promise((resolve,reject)=>{Asyncify.asyncPromiseHandlers={resolve:resolve,reject:reject}})},allocateData(){var ptr=_malloc(12+Asyncify.StackSize);Asyncify.setDataHeader(ptr,ptr+12,Asyncify.StackSize);Asyncify.setDataRewindFunc(ptr);return ptr},setDataHeader(ptr,stack,stackSize){HEAPU32[ptr>>2]=stack;HEAPU32[ptr+4>>2]=stack+stackSize},setDataRewindFunc(ptr){var bottomOfCallStack=Asyncify.exportCallStack[0];var rewindId=Asyncify.getCallStackId(bottomOfCallStack);HEAP32[ptr+8>>2]=rewindId},getDataRewindFuncName(ptr){var id=HEAP32[ptr+8>>2];var name=Asyncify.callStackIdToName[id];return name},getDataRewindFunc(name){var func=wasmExports[name];return func},doRewind(ptr){var name=Asyncify.getDataRewindFuncName(ptr);var func=Asyncify.getDataRewindFunc(name);return func()},handleSleep(startAsync){if(ABORT)return;if(Asyncify.state===Asyncify.State.Normal){var reachedCallback=false;var reachedAfterCallback=false;startAsync((handleSleepReturnValue=0)=>{if(ABORT)return;Asyncify.handleSleepReturnValue=handleSleepReturnValue;reachedCallback=true;if(!reachedAfterCallback){return}Asyncify.state=Asyncify.State.Rewinding;runAndAbortIfError(()=>_asyncify_start_rewind(Asyncify.currData));if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.resume()}var asyncWasmReturnValue,isError=false;try{asyncWasmReturnValue=Asyncify.doRewind(Asyncify.currData)}catch(err){asyncWasmReturnValue=err;isError=true}var handled=false;if(!Asyncify.currData){var asyncPromiseHandlers=Asyncify.asyncPromiseHandlers;if(asyncPromiseHandlers){Asyncify.asyncPromiseHandlers=null;(isError?asyncPromiseHandlers.reject:asyncPromiseHandlers.resolve)(asyncWasmReturnValue);handled=true}}if(isError&&!handled){throw asyncWasmReturnValue}});reachedAfterCallback=true;if(!reachedCallback){Asyncify.state=Asyncify.State.Unwinding;Asyncify.currData=Asyncify.allocateData();if(typeof Browser!="undefined"&&Browser.mainLoop.func){Browser.mainLoop.pause()}runAndAbortIfError(()=>_asyncify_start_unwind(Asyncify.currData))}}else if(Asyncify.state===Asyncify.State.Rewinding){Asyncify.state=Asyncify.State.Normal;runAndAbortIfError(_asyncify_stop_rewind);_free(Asyncify.currData);Asyncify.currData=null;Asyncify.sleepCallbacks.forEach(callUserCallback)}else{abort(`invalid state: ${Asyncify.state}`)}return Asyncify.handleSleepReturnValue},handleAsync(startAsync){return Asyncify.handleSleep(wakeUp=>{startAsync().then(wakeUp)})}};var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var generateFuncType=(sig,target)=>{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={i:127,p:127,j:126,f:125,d:124,e:111};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i{if(typeof WebAssembly.Function=="function"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push(...typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{e:{f:func}});var wrappedFunc=instance.exports["f"];return wrappedFunc};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};Module["cwrap"]=cwrap;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();xpu_cpu_support();var wasmImports={g:___syscall_openat,h:__abort_js,s:__tzset_js,p:_emscripten_resize_heap,q:_environ_get,r:_environ_sizes_get,c:_exit,b:_fd_close,f:_fd_read,t:_fd_seek,a:_fd_write,e:_pv_console_log_wasm,n:_pv_file_close_wasm,o:_pv_file_open_wasm,d:_pv_file_read_wasm,m:_pv_file_seek_wasm,l:_pv_file_tell_wasm,j:_pv_file_write_wasm,i:_pv_https_request_wasm,u:_pv_time_wasm,k:_pv_xpu_get_max_workers_wasm};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["w"])();var __Znwm=Module["__Znwm"]=a0=>(__Znwm=Module["__Znwm"]=wasmExports["x"])(a0);var __Znam=Module["__Znam"]=a0=>(__Znam=Module["__Znam"]=wasmExports["y"])(a0);var __ZdlPv=Module["__ZdlPv"]=a0=>(__ZdlPv=Module["__ZdlPv"]=wasmExports["z"])(a0);var __ZdlPvm=Module["__ZdlPvm"]=(a0,a1)=>(__ZdlPvm=Module["__ZdlPvm"]=wasmExports["A"])(a0,a1);var __ZdaPv=Module["__ZdaPv"]=a0=>(__ZdaPv=Module["__ZdaPv"]=wasmExports["B"])(a0);var __ZdaPvm=Module["__ZdaPvm"]=(a0,a1)=>(__ZdaPvm=Module["__ZdaPvm"]=wasmExports["C"])(a0,a1);var __ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=(a0,a1)=>(__ZnwmSt11align_val_t=Module["__ZnwmSt11align_val_t"]=wasmExports["D"])(a0,a1);var __ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=(a0,a1)=>(__ZnamSt11align_val_t=Module["__ZnamSt11align_val_t"]=wasmExports["E"])(a0,a1);var __ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=(a0,a1)=>(__ZdlPvSt11align_val_t=Module["__ZdlPvSt11align_val_t"]=wasmExports["F"])(a0,a1);var __ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdlPvmSt11align_val_t=Module["__ZdlPvmSt11align_val_t"]=wasmExports["G"])(a0,a1,a2);var __ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=(a0,a1)=>(__ZdaPvSt11align_val_t=Module["__ZdaPvSt11align_val_t"]=wasmExports["H"])(a0,a1);var __ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=(a0,a1,a2)=>(__ZdaPvmSt11align_val_t=Module["__ZdaPvmSt11align_val_t"]=wasmExports["I"])(a0,a1,a2);var __ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=a0=>(__ZSt14set_unexpectedPFvvE=Module["__ZSt14set_unexpectedPFvvE"]=wasmExports["J"])(a0);var __ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=a0=>(__ZSt13set_terminatePFvvE=Module["__ZSt13set_terminatePFvvE"]=wasmExports["K"])(a0);var __ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=a0=>(__ZSt15set_new_handlerPFvvE=Module["__ZSt15set_new_handlerPFvvE"]=wasmExports["L"])(a0);var __ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=()=>(__ZSt14get_unexpectedv=Module["__ZSt14get_unexpectedv"]=wasmExports["M"])();var __ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=()=>(__ZSt10unexpectedv=Module["__ZSt10unexpectedv"]=wasmExports["N"])();var __ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=()=>(__ZSt13get_terminatev=Module["__ZSt13get_terminatev"]=wasmExports["O"])();var __ZSt9terminatev=Module["__ZSt9terminatev"]=()=>(__ZSt9terminatev=Module["__ZSt9terminatev"]=wasmExports["P"])();var __ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=()=>(__ZSt15get_new_handlerv=Module["__ZSt15get_new_handlerv"]=wasmExports["Q"])();var ___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=()=>(___cxa_current_primary_exception=Module["___cxa_current_primary_exception"]=wasmExports["R"])();var ___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=a0=>(___cxa_rethrow_primary_exception=Module["___cxa_rethrow_primary_exception"]=wasmExports["S"])(a0);var ___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=()=>(___cxa_uncaught_exception=Module["___cxa_uncaught_exception"]=wasmExports["T"])();var ___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=()=>(___cxa_uncaught_exceptions=Module["___cxa_uncaught_exceptions"]=wasmExports["U"])();var ___cxa_allocate_exception=Module["___cxa_allocate_exception"]=a0=>(___cxa_allocate_exception=Module["___cxa_allocate_exception"]=wasmExports["V"])(a0);var ___cxa_free_exception=Module["___cxa_free_exception"]=a0=>(___cxa_free_exception=Module["___cxa_free_exception"]=wasmExports["W"])(a0);var ___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=(a0,a1,a2)=>(___cxa_init_primary_exception=Module["___cxa_init_primary_exception"]=wasmExports["X"])(a0,a1,a2);var ___cxa_pure_virtual=Module["___cxa_pure_virtual"]=()=>(___cxa_pure_virtual=Module["___cxa_pure_virtual"]=wasmExports["Y"])();var ___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=()=>(___cxa_deleted_virtual=Module["___cxa_deleted_virtual"]=wasmExports["Z"])();var ___dynamic_cast=Module["___dynamic_cast"]=(a0,a1,a2,a3)=>(___dynamic_cast=Module["___dynamic_cast"]=wasmExports["_"])(a0,a1,a2,a3);var __ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=a0=>(__ZNSt9exceptionD2Ev=Module["__ZNSt9exceptionD2Ev"]=wasmExports["$"])(a0);var __ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=a0=>(__ZNSt9exceptionD0Ev=Module["__ZNSt9exceptionD0Ev"]=wasmExports["aa"])(a0);var __ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=a0=>(__ZNSt9exceptionD1Ev=Module["__ZNSt9exceptionD1Ev"]=wasmExports["ba"])(a0);var __ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=a0=>(__ZNKSt9exception4whatEv=Module["__ZNKSt9exception4whatEv"]=wasmExports["ca"])(a0);var __ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=a0=>(__ZNSt13bad_exceptionD0Ev=Module["__ZNSt13bad_exceptionD0Ev"]=wasmExports["da"])(a0);var __ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=a0=>(__ZNSt13bad_exceptionD1Ev=Module["__ZNSt13bad_exceptionD1Ev"]=wasmExports["ea"])(a0);var __ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=a0=>(__ZNKSt13bad_exception4whatEv=Module["__ZNKSt13bad_exception4whatEv"]=wasmExports["fa"])(a0);var __ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=a0=>(__ZNSt9bad_allocC2Ev=Module["__ZNSt9bad_allocC2Ev"]=wasmExports["ga"])(a0);var __ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=a0=>(__ZNSt9bad_allocD0Ev=Module["__ZNSt9bad_allocD0Ev"]=wasmExports["ha"])(a0);var __ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=a0=>(__ZNSt9bad_allocD1Ev=Module["__ZNSt9bad_allocD1Ev"]=wasmExports["ia"])(a0);var __ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=a0=>(__ZNKSt9bad_alloc4whatEv=Module["__ZNKSt9bad_alloc4whatEv"]=wasmExports["ja"])(a0);var __ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=a0=>(__ZNSt20bad_array_new_lengthC2Ev=Module["__ZNSt20bad_array_new_lengthC2Ev"]=wasmExports["ka"])(a0);var __ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=a0=>(__ZNSt20bad_array_new_lengthD0Ev=Module["__ZNSt20bad_array_new_lengthD0Ev"]=wasmExports["la"])(a0);var __ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=a0=>(__ZNSt20bad_array_new_lengthD1Ev=Module["__ZNSt20bad_array_new_lengthD1Ev"]=wasmExports["ma"])(a0);var __ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=a0=>(__ZNKSt20bad_array_new_length4whatEv=Module["__ZNKSt20bad_array_new_length4whatEv"]=wasmExports["na"])(a0);var __ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=a0=>(__ZNSt13bad_exceptionD2Ev=Module["__ZNSt13bad_exceptionD2Ev"]=wasmExports["oa"])(a0);var __ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=a0=>(__ZNSt9bad_allocC1Ev=Module["__ZNSt9bad_allocC1Ev"]=wasmExports["pa"])(a0);var __ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=a0=>(__ZNSt9bad_allocD2Ev=Module["__ZNSt9bad_allocD2Ev"]=wasmExports["qa"])(a0);var __ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=a0=>(__ZNSt20bad_array_new_lengthC1Ev=Module["__ZNSt20bad_array_new_lengthC1Ev"]=wasmExports["ra"])(a0);var __ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=a0=>(__ZNSt20bad_array_new_lengthD2Ev=Module["__ZNSt20bad_array_new_lengthD2Ev"]=wasmExports["sa"])(a0);var __ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=a0=>(__ZNSt11logic_errorD2Ev=Module["__ZNSt11logic_errorD2Ev"]=wasmExports["ta"])(a0);var __ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=a0=>(__ZNSt11logic_errorD0Ev=Module["__ZNSt11logic_errorD0Ev"]=wasmExports["ua"])(a0);var __ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=a0=>(__ZNSt11logic_errorD1Ev=Module["__ZNSt11logic_errorD1Ev"]=wasmExports["va"])(a0);var __ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=a0=>(__ZNKSt11logic_error4whatEv=Module["__ZNKSt11logic_error4whatEv"]=wasmExports["wa"])(a0);var __ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=a0=>(__ZNSt13runtime_errorD2Ev=Module["__ZNSt13runtime_errorD2Ev"]=wasmExports["xa"])(a0);var __ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=a0=>(__ZNSt13runtime_errorD0Ev=Module["__ZNSt13runtime_errorD0Ev"]=wasmExports["ya"])(a0);var __ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=a0=>(__ZNSt13runtime_errorD1Ev=Module["__ZNSt13runtime_errorD1Ev"]=wasmExports["za"])(a0);var __ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=a0=>(__ZNKSt13runtime_error4whatEv=Module["__ZNKSt13runtime_error4whatEv"]=wasmExports["Aa"])(a0);var __ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=a0=>(__ZNSt12domain_errorD0Ev=Module["__ZNSt12domain_errorD0Ev"]=wasmExports["Ba"])(a0);var __ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=a0=>(__ZNSt12domain_errorD1Ev=Module["__ZNSt12domain_errorD1Ev"]=wasmExports["Ca"])(a0);var __ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=a0=>(__ZNSt16invalid_argumentD0Ev=Module["__ZNSt16invalid_argumentD0Ev"]=wasmExports["Da"])(a0);var __ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=a0=>(__ZNSt16invalid_argumentD1Ev=Module["__ZNSt16invalid_argumentD1Ev"]=wasmExports["Ea"])(a0);var __ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=a0=>(__ZNSt12length_errorD0Ev=Module["__ZNSt12length_errorD0Ev"]=wasmExports["Fa"])(a0);var __ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=a0=>(__ZNSt12length_errorD1Ev=Module["__ZNSt12length_errorD1Ev"]=wasmExports["Ga"])(a0);var __ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=a0=>(__ZNSt12out_of_rangeD0Ev=Module["__ZNSt12out_of_rangeD0Ev"]=wasmExports["Ha"])(a0);var __ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=a0=>(__ZNSt12out_of_rangeD1Ev=Module["__ZNSt12out_of_rangeD1Ev"]=wasmExports["Ia"])(a0);var __ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=a0=>(__ZNSt11range_errorD0Ev=Module["__ZNSt11range_errorD0Ev"]=wasmExports["Ja"])(a0);var __ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=a0=>(__ZNSt11range_errorD1Ev=Module["__ZNSt11range_errorD1Ev"]=wasmExports["Ka"])(a0);var __ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=a0=>(__ZNSt14overflow_errorD0Ev=Module["__ZNSt14overflow_errorD0Ev"]=wasmExports["La"])(a0);var __ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=a0=>(__ZNSt14overflow_errorD1Ev=Module["__ZNSt14overflow_errorD1Ev"]=wasmExports["Ma"])(a0);var __ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=a0=>(__ZNSt15underflow_errorD0Ev=Module["__ZNSt15underflow_errorD0Ev"]=wasmExports["Na"])(a0);var __ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=a0=>(__ZNSt15underflow_errorD1Ev=Module["__ZNSt15underflow_errorD1Ev"]=wasmExports["Oa"])(a0);var __ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=a0=>(__ZNSt12domain_errorD2Ev=Module["__ZNSt12domain_errorD2Ev"]=wasmExports["Pa"])(a0);var __ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=a0=>(__ZNSt16invalid_argumentD2Ev=Module["__ZNSt16invalid_argumentD2Ev"]=wasmExports["Qa"])(a0);var __ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=a0=>(__ZNSt12length_errorD2Ev=Module["__ZNSt12length_errorD2Ev"]=wasmExports["Ra"])(a0);var __ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=a0=>(__ZNSt12out_of_rangeD2Ev=Module["__ZNSt12out_of_rangeD2Ev"]=wasmExports["Sa"])(a0);var __ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=a0=>(__ZNSt11range_errorD2Ev=Module["__ZNSt11range_errorD2Ev"]=wasmExports["Ta"])(a0);var __ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=a0=>(__ZNSt14overflow_errorD2Ev=Module["__ZNSt14overflow_errorD2Ev"]=wasmExports["Ua"])(a0);var __ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=a0=>(__ZNSt15underflow_errorD2Ev=Module["__ZNSt15underflow_errorD2Ev"]=wasmExports["Va"])(a0);var __ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=a0=>(__ZNSt9type_infoD2Ev=Module["__ZNSt9type_infoD2Ev"]=wasmExports["Wa"])(a0);var __ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=a0=>(__ZNSt9type_infoD0Ev=Module["__ZNSt9type_infoD0Ev"]=wasmExports["Xa"])(a0);var __ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=a0=>(__ZNSt9type_infoD1Ev=Module["__ZNSt9type_infoD1Ev"]=wasmExports["Ya"])(a0);var __ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=a0=>(__ZNSt8bad_castC2Ev=Module["__ZNSt8bad_castC2Ev"]=wasmExports["Za"])(a0);var __ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=a0=>(__ZNSt8bad_castD2Ev=Module["__ZNSt8bad_castD2Ev"]=wasmExports["_a"])(a0);var __ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=a0=>(__ZNSt8bad_castD0Ev=Module["__ZNSt8bad_castD0Ev"]=wasmExports["$a"])(a0);var __ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=a0=>(__ZNSt8bad_castD1Ev=Module["__ZNSt8bad_castD1Ev"]=wasmExports["ab"])(a0);var __ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=a0=>(__ZNKSt8bad_cast4whatEv=Module["__ZNKSt8bad_cast4whatEv"]=wasmExports["bb"])(a0);var __ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=a0=>(__ZNSt10bad_typeidC2Ev=Module["__ZNSt10bad_typeidC2Ev"]=wasmExports["cb"])(a0);var __ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=a0=>(__ZNSt10bad_typeidD2Ev=Module["__ZNSt10bad_typeidD2Ev"]=wasmExports["db"])(a0);var __ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=a0=>(__ZNSt10bad_typeidD0Ev=Module["__ZNSt10bad_typeidD0Ev"]=wasmExports["eb"])(a0);var __ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=a0=>(__ZNSt10bad_typeidD1Ev=Module["__ZNSt10bad_typeidD1Ev"]=wasmExports["fb"])(a0);var __ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=a0=>(__ZNKSt10bad_typeid4whatEv=Module["__ZNKSt10bad_typeid4whatEv"]=wasmExports["gb"])(a0);var __ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=a0=>(__ZNSt8bad_castC1Ev=Module["__ZNSt8bad_castC1Ev"]=wasmExports["hb"])(a0);var __ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=a0=>(__ZNSt10bad_typeidC1Ev=Module["__ZNSt10bad_typeidC1Ev"]=wasmExports["ib"])(a0);var _pv_orca_init=Module["_pv_orca_init"]=(a0,a1,a2,a3)=>(_pv_orca_init=Module["_pv_orca_init"]=wasmExports["jb"])(a0,a1,a2,a3);var _free=a0=>(_free=wasmExports["kb"])(a0);var _pv_orca_delete=Module["_pv_orca_delete"]=a0=>(_pv_orca_delete=Module["_pv_orca_delete"]=wasmExports["lb"])(a0);var _pv_orca_version=Module["_pv_orca_version"]=()=>(_pv_orca_version=Module["_pv_orca_version"]=wasmExports["mb"])();var _pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=(a0,a1,a2)=>(_pv_orca_valid_characters=Module["_pv_orca_valid_characters"]=wasmExports["nb"])(a0,a1,a2);var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["ob"])(a0);var _pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=(a0,a1)=>(_pv_orca_sample_rate=Module["_pv_orca_sample_rate"]=wasmExports["pb"])(a0,a1);var _pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=(a0,a1)=>(_pv_orca_word_alignments_delete=Module["_pv_orca_word_alignments_delete"]=wasmExports["qb"])(a0,a1);var _pv_orca_synthesize=Module["_pv_orca_synthesize"]=(a0,a1,a2,a3,a4,a5,a6)=>(_pv_orca_synthesize=Module["_pv_orca_synthesize"]=wasmExports["rb"])(a0,a1,a2,a3,a4,a5,a6);var _pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=(a0,a1,a2,a3,a4,a5)=>(_pv_orca_synthesize_to_file=Module["_pv_orca_synthesize_to_file"]=wasmExports["sb"])(a0,a1,a2,a3,a4,a5);var _pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=a0=>(_pv_orca_pcm_delete=Module["_pv_orca_pcm_delete"]=wasmExports["tb"])(a0);var _pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=a0=>(_pv_orca_synthesize_params_init=Module["_pv_orca_synthesize_params_init"]=wasmExports["ub"])(a0);var _pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=a0=>(_pv_orca_synthesize_params_delete=Module["_pv_orca_synthesize_params_delete"]=wasmExports["vb"])(a0);var _pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_set_speech_rate=Module["_pv_orca_synthesize_params_set_speech_rate"]=wasmExports["wb"])(a0,a1);var _pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=(a0,a1)=>(_pv_orca_synthesize_params_get_speech_rate=Module["_pv_orca_synthesize_params_get_speech_rate"]=wasmExports["xb"])(a0,a1);var _pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_set_random_state=Module["_pv_orca_synthesize_params_set_random_state"]=wasmExports["yb"])(a0,a1);var _pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=(a0,a1)=>(_pv_orca_synthesize_params_get_random_state=Module["_pv_orca_synthesize_params_get_random_state"]=wasmExports["zb"])(a0,a1);var _pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=a0=>(_pv_orca_valid_characters_delete=Module["_pv_orca_valid_characters_delete"]=wasmExports["Ab"])(a0);var _pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=(a0,a1)=>(_pv_orca_max_character_limit=Module["_pv_orca_max_character_limit"]=wasmExports["Bb"])(a0,a1);var _pv_orca_stream_open=Module["_pv_orca_stream_open"]=(a0,a1,a2)=>(_pv_orca_stream_open=Module["_pv_orca_stream_open"]=wasmExports["Cb"])(a0,a1,a2);var _pv_orca_stream_close=Module["_pv_orca_stream_close"]=a0=>(_pv_orca_stream_close=Module["_pv_orca_stream_close"]=wasmExports["Db"])(a0);var _pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=(a0,a1,a2,a3)=>(_pv_orca_stream_synthesize=Module["_pv_orca_stream_synthesize"]=wasmExports["Eb"])(a0,a1,a2,a3);var _pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=(a0,a1,a2)=>(_pv_orca_stream_flush=Module["_pv_orca_stream_flush"]=wasmExports["Fb"])(a0,a1,a2);var _pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=(a0,a1)=>(_pv_orca_list_hardware_devices=Module["_pv_orca_list_hardware_devices"]=wasmExports["Gb"])(a0,a1);var _pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=(a0,a1)=>(_pv_orca_free_hardware_devices=Module["_pv_orca_free_hardware_devices"]=wasmExports["Hb"])(a0,a1);var _pv_status_to_string=Module["_pv_status_to_string"]=a0=>(_pv_status_to_string=Module["_pv_status_to_string"]=wasmExports["Jb"])(a0);var _pv_sample_rate=Module["_pv_sample_rate"]=()=>(_pv_sample_rate=Module["_pv_sample_rate"]=wasmExports["Kb"])();var _pv_log_enable=Module["_pv_log_enable"]=()=>(_pv_log_enable=Module["_pv_log_enable"]=wasmExports["Lb"])();var _pv_log_disable=Module["_pv_log_disable"]=()=>(_pv_log_disable=Module["_pv_log_disable"]=wasmExports["Mb"])();var _aligned_alloc=Module["_aligned_alloc"]=(a0,a1)=>(_aligned_alloc=Module["_aligned_alloc"]=wasmExports["Nb"])(a0,a1);var _pv_get_sdk=Module["_pv_get_sdk"]=()=>(_pv_get_sdk=Module["_pv_get_sdk"]=wasmExports["Ob"])();var _pv_set_sdk=Module["_pv_set_sdk"]=a0=>(_pv_set_sdk=Module["_pv_set_sdk"]=wasmExports["Pb"])(a0);var _pv_free=Module["_pv_free"]=a0=>(_pv_free=Module["_pv_free"]=wasmExports["Qb"])(a0);var _pv_get_error_stack=Module["_pv_get_error_stack"]=(a0,a1)=>(_pv_get_error_stack=Module["_pv_get_error_stack"]=wasmExports["Rb"])(a0,a1);var _pv_free_error_stack=Module["_pv_free_error_stack"]=a0=>(_pv_free_error_stack=Module["_pv_free_error_stack"]=wasmExports["Sb"])(a0);var __emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=(a0,a1,a2)=>(__emscripten_memcpy_bulkmem=Module["__emscripten_memcpy_bulkmem"]=wasmExports["Tb"])(a0,a1,a2);var __emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=(a0,a1,a2)=>(__emscripten_memset_bulkmem=Module["__emscripten_memset_bulkmem"]=wasmExports["Ub"])(a0,a1,a2);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["Vb"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["Wb"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["Xb"])();var _asyncify_start_unwind=a0=>(_asyncify_start_unwind=wasmExports["Yb"])(a0);var _asyncify_stop_unwind=()=>(_asyncify_stop_unwind=wasmExports["Zb"])();var _asyncify_start_rewind=a0=>(_asyncify_start_rewind=wasmExports["_b"])(a0);var _asyncify_stop_rewind=()=>(_asyncify_stop_rewind=wasmExports["$b"])();var ___cxa_unexpected_handler=Module["___cxa_unexpected_handler"]=2373932;var ___cxa_terminate_handler=Module["___cxa_terminate_handler"]=2373928;var ___cxa_new_handler=Module["___cxa_new_handler"]=2380288;var __ZTIN10__cxxabiv116__shim_type_infoE=Module["__ZTIN10__cxxabiv116__shim_type_infoE"]=52044;var __ZTIN10__cxxabiv117__class_type_infoE=Module["__ZTIN10__cxxabiv117__class_type_infoE"]=52092;var __ZTIN10__cxxabiv117__pbase_type_infoE=Module["__ZTIN10__cxxabiv117__pbase_type_infoE"]=52140;var __ZTIDn=Module["__ZTIDn"]=52488;var __ZTIN10__cxxabiv119__pointer_type_infoE=Module["__ZTIN10__cxxabiv119__pointer_type_infoE"]=52188;var __ZTIv=Module["__ZTIv"]=52436;var __ZTIN10__cxxabiv120__function_type_infoE=Module["__ZTIN10__cxxabiv120__function_type_infoE"]=52240;var __ZTIN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTIN10__cxxabiv129__pointer_to_member_type_infoE"]=52300;var __ZTSN10__cxxabiv116__shim_type_infoE=Module["__ZTSN10__cxxabiv116__shim_type_infoE"]=52008;var __ZTVN10__cxxabiv120__si_class_type_infoE=Module["__ZTVN10__cxxabiv120__si_class_type_infoE"]=53972;var __ZTSN10__cxxabiv117__class_type_infoE=Module["__ZTSN10__cxxabiv117__class_type_infoE"]=52056;var __ZTSN10__cxxabiv117__pbase_type_infoE=Module["__ZTSN10__cxxabiv117__pbase_type_infoE"]=52104;var __ZTSN10__cxxabiv119__pointer_type_infoE=Module["__ZTSN10__cxxabiv119__pointer_type_infoE"]=52152;var __ZTSN10__cxxabiv120__function_type_infoE=Module["__ZTSN10__cxxabiv120__function_type_infoE"]=52200;var __ZTSN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTSN10__cxxabiv129__pointer_to_member_type_infoE"]=52252;var __ZTVN10__cxxabiv116__shim_type_infoE=Module["__ZTVN10__cxxabiv116__shim_type_infoE"]=52324;var __ZTVN10__cxxabiv123__fundamental_type_infoE=Module["__ZTVN10__cxxabiv123__fundamental_type_infoE"]=52352;var __ZTIN10__cxxabiv123__fundamental_type_infoE=Module["__ZTIN10__cxxabiv123__fundamental_type_infoE"]=52420;var __ZTSN10__cxxabiv123__fundamental_type_infoE=Module["__ZTSN10__cxxabiv123__fundamental_type_infoE"]=52380;var __ZTSv=Module["__ZTSv"]=52432;var __ZTSPv=Module["__ZTSPv"]=52444;var __ZTIPv=Module["__ZTIPv"]=52448;var __ZTVN10__cxxabiv119__pointer_type_infoE=Module["__ZTVN10__cxxabiv119__pointer_type_infoE"]=54184;var __ZTSPKv=Module["__ZTSPKv"]=52464;var __ZTIPKv=Module["__ZTIPKv"]=52468;var __ZTSDn=Module["__ZTSDn"]=52484;var __ZTSPDn=Module["__ZTSPDn"]=52496;var __ZTIPDn=Module["__ZTIPDn"]=52500;var __ZTSPKDn=Module["__ZTSPKDn"]=52516;var __ZTIPKDn=Module["__ZTIPKDn"]=52524;var __ZTSb=Module["__ZTSb"]=52540;var __ZTIb=Module["__ZTIb"]=52544;var __ZTSPb=Module["__ZTSPb"]=52552;var __ZTIPb=Module["__ZTIPb"]=52556;var __ZTSPKb=Module["__ZTSPKb"]=52572;var __ZTIPKb=Module["__ZTIPKb"]=52576;var __ZTSw=Module["__ZTSw"]=52592;var __ZTIw=Module["__ZTIw"]=52596;var __ZTSPw=Module["__ZTSPw"]=52604;var __ZTIPw=Module["__ZTIPw"]=52608;var __ZTSPKw=Module["__ZTSPKw"]=52624;var __ZTIPKw=Module["__ZTIPKw"]=52628;var __ZTSc=Module["__ZTSc"]=52644;var __ZTIc=Module["__ZTIc"]=52648;var __ZTSPc=Module["__ZTSPc"]=52656;var __ZTIPc=Module["__ZTIPc"]=52660;var __ZTSPKc=Module["__ZTSPKc"]=52676;var __ZTIPKc=Module["__ZTIPKc"]=52680;var __ZTSh=Module["__ZTSh"]=52696;var __ZTIh=Module["__ZTIh"]=52700;var __ZTSPh=Module["__ZTSPh"]=52708;var __ZTIPh=Module["__ZTIPh"]=52712;var __ZTSPKh=Module["__ZTSPKh"]=52728;var __ZTIPKh=Module["__ZTIPKh"]=52732;var __ZTSa=Module["__ZTSa"]=52748;var __ZTIa=Module["__ZTIa"]=52752;var __ZTSPa=Module["__ZTSPa"]=52760;var __ZTIPa=Module["__ZTIPa"]=52764;var __ZTSPKa=Module["__ZTSPKa"]=52780;var __ZTIPKa=Module["__ZTIPKa"]=52784;var __ZTSs=Module["__ZTSs"]=52800;var __ZTIs=Module["__ZTIs"]=52804;var __ZTSPs=Module["__ZTSPs"]=52812;var __ZTIPs=Module["__ZTIPs"]=52816;var __ZTSPKs=Module["__ZTSPKs"]=52832;var __ZTIPKs=Module["__ZTIPKs"]=52836;var __ZTSt=Module["__ZTSt"]=52852;var __ZTIt=Module["__ZTIt"]=52856;var __ZTSPt=Module["__ZTSPt"]=52864;var __ZTIPt=Module["__ZTIPt"]=52868;var __ZTSPKt=Module["__ZTSPKt"]=52884;var __ZTIPKt=Module["__ZTIPKt"]=52888;var __ZTSi=Module["__ZTSi"]=52904;var __ZTIi=Module["__ZTIi"]=52908;var __ZTSPi=Module["__ZTSPi"]=52916;var __ZTIPi=Module["__ZTIPi"]=52920;var __ZTSPKi=Module["__ZTSPKi"]=52936;var __ZTIPKi=Module["__ZTIPKi"]=52940;var __ZTSj=Module["__ZTSj"]=52956;var __ZTIj=Module["__ZTIj"]=52960;var __ZTSPj=Module["__ZTSPj"]=52968;var __ZTIPj=Module["__ZTIPj"]=52972;var __ZTSPKj=Module["__ZTSPKj"]=52988;var __ZTIPKj=Module["__ZTIPKj"]=52992;var __ZTSl=Module["__ZTSl"]=53008;var __ZTIl=Module["__ZTIl"]=53012;var __ZTSPl=Module["__ZTSPl"]=53020;var __ZTIPl=Module["__ZTIPl"]=53024;var __ZTSPKl=Module["__ZTSPKl"]=53040;var __ZTIPKl=Module["__ZTIPKl"]=53044;var __ZTSm=Module["__ZTSm"]=53060;var __ZTIm=Module["__ZTIm"]=53064;var __ZTSPm=Module["__ZTSPm"]=53072;var __ZTIPm=Module["__ZTIPm"]=53076;var __ZTSPKm=Module["__ZTSPKm"]=53092;var __ZTIPKm=Module["__ZTIPKm"]=53096;var __ZTSx=Module["__ZTSx"]=53112;var __ZTIx=Module["__ZTIx"]=53116;var __ZTSPx=Module["__ZTSPx"]=53124;var __ZTIPx=Module["__ZTIPx"]=53128;var __ZTSPKx=Module["__ZTSPKx"]=53144;var __ZTIPKx=Module["__ZTIPKx"]=53148;var __ZTSy=Module["__ZTSy"]=53164;var __ZTIy=Module["__ZTIy"]=53168;var __ZTSPy=Module["__ZTSPy"]=53176;var __ZTIPy=Module["__ZTIPy"]=53180;var __ZTSPKy=Module["__ZTSPKy"]=53196;var __ZTIPKy=Module["__ZTIPKy"]=53200;var __ZTSn=Module["__ZTSn"]=53216;var __ZTIn=Module["__ZTIn"]=53220;var __ZTSPn=Module["__ZTSPn"]=53228;var __ZTIPn=Module["__ZTIPn"]=53232;var __ZTSPKn=Module["__ZTSPKn"]=53248;var __ZTIPKn=Module["__ZTIPKn"]=53252;var __ZTSo=Module["__ZTSo"]=53268;var __ZTIo=Module["__ZTIo"]=53272;var __ZTSPo=Module["__ZTSPo"]=53280;var __ZTIPo=Module["__ZTIPo"]=53284;var __ZTSPKo=Module["__ZTSPKo"]=53300;var __ZTIPKo=Module["__ZTIPKo"]=53304;var __ZTSDh=Module["__ZTSDh"]=53320;var __ZTIDh=Module["__ZTIDh"]=53324;var __ZTSPDh=Module["__ZTSPDh"]=53332;var __ZTIPDh=Module["__ZTIPDh"]=53336;var __ZTSPKDh=Module["__ZTSPKDh"]=53352;var __ZTIPKDh=Module["__ZTIPKDh"]=53360;var __ZTSf=Module["__ZTSf"]=53376;var __ZTIf=Module["__ZTIf"]=53380;var __ZTSPf=Module["__ZTSPf"]=53388;var __ZTIPf=Module["__ZTIPf"]=53392;var __ZTSPKf=Module["__ZTSPKf"]=53408;var __ZTIPKf=Module["__ZTIPKf"]=53412;var __ZTSd=Module["__ZTSd"]=53428;var __ZTId=Module["__ZTId"]=53432;var __ZTSPd=Module["__ZTSPd"]=53440;var __ZTIPd=Module["__ZTIPd"]=53444;var __ZTSPKd=Module["__ZTSPKd"]=53460;var __ZTIPKd=Module["__ZTIPKd"]=53464;var __ZTSe=Module["__ZTSe"]=53480;var __ZTIe=Module["__ZTIe"]=53484;var __ZTSPe=Module["__ZTSPe"]=53492;var __ZTIPe=Module["__ZTIPe"]=53496;var __ZTSPKe=Module["__ZTSPKe"]=53512;var __ZTIPKe=Module["__ZTIPKe"]=53516;var __ZTSg=Module["__ZTSg"]=53532;var __ZTIg=Module["__ZTIg"]=53536;var __ZTSPg=Module["__ZTSPg"]=53544;var __ZTIPg=Module["__ZTIPg"]=53548;var __ZTSPKg=Module["__ZTSPKg"]=53564;var __ZTIPKg=Module["__ZTIPKg"]=53568;var __ZTSDu=Module["__ZTSDu"]=53584;var __ZTIDu=Module["__ZTIDu"]=53588;var __ZTSPDu=Module["__ZTSPDu"]=53596;var __ZTIPDu=Module["__ZTIPDu"]=53600;var __ZTSPKDu=Module["__ZTSPKDu"]=53616;var __ZTIPKDu=Module["__ZTIPKDu"]=53624;var __ZTSDs=Module["__ZTSDs"]=53640;var __ZTIDs=Module["__ZTIDs"]=53644;var __ZTSPDs=Module["__ZTSPDs"]=53652;var __ZTIPDs=Module["__ZTIPDs"]=53656;var __ZTSPKDs=Module["__ZTSPKDs"]=53672;var __ZTIPKDs=Module["__ZTIPKDs"]=53680;var __ZTSDi=Module["__ZTSDi"]=53696;var __ZTIDi=Module["__ZTIDi"]=53700;var __ZTSPDi=Module["__ZTSPDi"]=53708;var __ZTIPDi=Module["__ZTIPDi"]=53712;var __ZTSPKDi=Module["__ZTSPKDi"]=53728;var __ZTIPKDi=Module["__ZTIPKDi"]=53736;var __ZTVN10__cxxabiv117__array_type_infoE=Module["__ZTVN10__cxxabiv117__array_type_infoE"]=53752;var __ZTIN10__cxxabiv117__array_type_infoE=Module["__ZTIN10__cxxabiv117__array_type_infoE"]=53816;var __ZTSN10__cxxabiv117__array_type_infoE=Module["__ZTSN10__cxxabiv117__array_type_infoE"]=53780;var __ZTVN10__cxxabiv120__function_type_infoE=Module["__ZTVN10__cxxabiv120__function_type_infoE"]=53828;var __ZTVN10__cxxabiv116__enum_type_infoE=Module["__ZTVN10__cxxabiv116__enum_type_infoE"]=53856;var __ZTIN10__cxxabiv116__enum_type_infoE=Module["__ZTIN10__cxxabiv116__enum_type_infoE"]=53920;var __ZTSN10__cxxabiv116__enum_type_infoE=Module["__ZTSN10__cxxabiv116__enum_type_infoE"]=53884;var __ZTVN10__cxxabiv117__class_type_infoE=Module["__ZTVN10__cxxabiv117__class_type_infoE"]=53932;var __ZTIN10__cxxabiv120__si_class_type_infoE=Module["__ZTIN10__cxxabiv120__si_class_type_infoE"]=54052;var __ZTSN10__cxxabiv120__si_class_type_infoE=Module["__ZTSN10__cxxabiv120__si_class_type_infoE"]=54012;var __ZTVN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTVN10__cxxabiv121__vmi_class_type_infoE"]=54064;var __ZTIN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTIN10__cxxabiv121__vmi_class_type_infoE"]=54144;var __ZTSN10__cxxabiv121__vmi_class_type_infoE=Module["__ZTSN10__cxxabiv121__vmi_class_type_infoE"]=54104;var __ZTVN10__cxxabiv117__pbase_type_infoE=Module["__ZTVN10__cxxabiv117__pbase_type_infoE"]=54156;var __ZTVN10__cxxabiv129__pointer_to_member_type_infoE=Module["__ZTVN10__cxxabiv129__pointer_to_member_type_infoE"]=54212;var __ZTVSt9bad_alloc=Module["__ZTVSt9bad_alloc"]=54240;var __ZTVSt9exception=Module["__ZTVSt9exception"]=54280;var __ZTVSt20bad_array_new_length=Module["__ZTVSt20bad_array_new_length"]=54260;var __ZTISt9bad_alloc=Module["__ZTISt9bad_alloc"]=54392;var __ZTISt20bad_array_new_length=Module["__ZTISt20bad_array_new_length"]=54432;var __ZTISt9exception=Module["__ZTISt9exception"]=54316;var __ZTSSt9exception=Module["__ZTSSt9exception"]=54300;var __ZTVSt13bad_exception=Module["__ZTVSt13bad_exception"]=54324;var __ZTISt13bad_exception=Module["__ZTISt13bad_exception"]=54364;var __ZTSSt13bad_exception=Module["__ZTSSt13bad_exception"]=54344;var __ZTSSt9bad_alloc=Module["__ZTSSt9bad_alloc"]=54376;var __ZTSSt20bad_array_new_length=Module["__ZTSSt20bad_array_new_length"]=54404;var __ZTVSt11logic_error=Module["__ZTVSt11logic_error"]=54444;var __ZTVSt13runtime_error=Module["__ZTVSt13runtime_error"]=54464;var __ZTISt11logic_error=Module["__ZTISt11logic_error"]=54540;var __ZTISt13runtime_error=Module["__ZTISt13runtime_error"]=54780;var __ZTVSt12domain_error=Module["__ZTVSt12domain_error"]=54484;var __ZTISt12domain_error=Module["__ZTISt12domain_error"]=54552;var __ZTSSt12domain_error=Module["__ZTSSt12domain_error"]=54504;var __ZTSSt11logic_error=Module["__ZTSSt11logic_error"]=54521;var __ZTVSt16invalid_argument=Module["__ZTVSt16invalid_argument"]=54564;var __ZTISt16invalid_argument=Module["__ZTISt16invalid_argument"]=54608;var __ZTSSt16invalid_argument=Module["__ZTSSt16invalid_argument"]=54584;var __ZTVSt12length_error=Module["__ZTVSt12length_error"]=54620;var __ZTISt12length_error=Module["__ZTISt12length_error"]=54660;var __ZTSSt12length_error=Module["__ZTSSt12length_error"]=54640;var __ZTVSt12out_of_range=Module["__ZTVSt12out_of_range"]=54672;var __ZTISt12out_of_range=Module["__ZTISt12out_of_range"]=54712;var __ZTSSt12out_of_range=Module["__ZTSSt12out_of_range"]=54692;var __ZTVSt11range_error=Module["__ZTVSt11range_error"]=54724;var __ZTISt11range_error=Module["__ZTISt11range_error"]=54792;var __ZTSSt11range_error=Module["__ZTSSt11range_error"]=54744;var __ZTSSt13runtime_error=Module["__ZTSSt13runtime_error"]=54760;var __ZTVSt14overflow_error=Module["__ZTVSt14overflow_error"]=54804;var __ZTISt14overflow_error=Module["__ZTISt14overflow_error"]=54844;var __ZTSSt14overflow_error=Module["__ZTSSt14overflow_error"]=54824;var __ZTVSt15underflow_error=Module["__ZTVSt15underflow_error"]=54856;var __ZTISt15underflow_error=Module["__ZTISt15underflow_error"]=54896;var __ZTSSt15underflow_error=Module["__ZTSSt15underflow_error"]=54876;var __ZTVSt8bad_cast=Module["__ZTVSt8bad_cast"]=51876;var __ZTVSt10bad_typeid=Module["__ZTVSt10bad_typeid"]=51896;var __ZTISt8bad_cast=Module["__ZTISt8bad_cast"]=51968;var __ZTISt10bad_typeid=Module["__ZTISt10bad_typeid"]=51996;var __ZTVSt9type_info=Module["__ZTVSt9type_info"]=51916;var __ZTISt9type_info=Module["__ZTISt9type_info"]=51948;var __ZTSSt9type_info=Module["__ZTSSt9type_info"]=51932;var __ZTSSt8bad_cast=Module["__ZTSSt8bad_cast"]=51956;var __ZTSSt10bad_typeid=Module["__ZTSSt10bad_typeid"]=51980;Module["addFunction"]=addFunction;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();moduleRtn=readyPromise; return moduleRtn; diff --git a/lib/wasm/pv_orca_simd.wasm b/lib/wasm/pv_orca_simd.wasm index 75c0bc56..54314585 100755 Binary files a/lib/wasm/pv_orca_simd.wasm and b/lib/wasm/pv_orca_simd.wasm differ diff --git a/resources/.lint/spell-check/dict.txt b/resources/.lint/spell-check/dict.txt index 45df415b..bed6987d 100644 --- a/resources/.lint/spell-check/dict.txt +++ b/resources/.lint/spell-check/dict.txt @@ -21,6 +21,7 @@ drwav dtype dylib editdistance +Embedder emscripten finalizer flac @@ -52,6 +53,7 @@ pltf pluginutils Podfile popleft +pthread pvbase pvcheetah pvleopard