{"version":3,"file":"dls-analysis.umd.min.js","sources":["../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib/x/xMedian.js","../node_modules/ml-spectra-processing/lib/x/xCheck.js","../node_modules/ml-spectra-processing/lib/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib/x/xAdd.js","../node_modules/ml-spectra-processing/lib/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib/x/xMultiply.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib/x/xMean.js","../node_modules/ml-spectra-processing/lib/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xVariance.js","../node_modules/ml-spectra-processing/lib/x/xEnsureFloat64.js","../node_modules/fft.js/lib/fft.js","../node_modules/ml-spectra-processing/lib/utils/createFromToArray.js","../node_modules/ml-spectra-processing/lib/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib/x/xMinValue.js","../node_modules/ml-spectra-processing/lib/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInv.js","../node_modules/ml-spectra-processing/lib/x/xNoiseSanPlot.js","../node_modules/ml-spectra-processing/lib/x/xNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib/x/xNormed.js","../node_modules/ml-spectra-processing/lib/x/xSum.js","../node_modules/ml-spectra-processing/lib/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib/x/xRolling.js","../node_modules/ml-spectra-processing/lib/x/xPadding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlign.js","../node_modules/ml-spectra-processing/lib/xy/xyJoinX.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlots.js","../node_modules/common-spectrum/lib/jsgraph/addStyle.js","../node_modules/common-spectrum/lib/jsgraph/colors.js","../node_modules/common-spectrum/lib/jsgraph/getNormalizationAnnotations.js","../node_modules/ml-airpls/src/choleskySolver.js","../node_modules/cuthill-mckee/cuthill-mckee.js","../node_modules/ml-airpls/src/utils.js","../node_modules/ml-airpls/src/index.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteSum.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-polynomial/lib-esm/index.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/ml-spectra-processing/lib/x/xRollingAverage.js","../node_modules/baselines/src/rollingBall.js","../node_modules/ml-rolling-ball-baseline/lib-esm/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/ml-spectra-processing/lib/x/xRollingMedian.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/ml-gsd/lib/algorithms/getMinMaxIntervals.js","../node_modules/ml-gsd/lib/algorithms/tryMatchOneIntervalWithMinData.js","../node_modules/ml-gsd/lib/algorithms/getPeaksFromIntervals.js","../node_modules/ml-gsd/lib/algorithms/xGetCrossZeroPoints.js","../node_modules/ml-gsd/lib/algorithms/firstDerivative.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-spectra-processing/lib/x/xIsEquallySpaced.js","../node_modules/ml-gsd/lib/algorithms/secondDerivative.js","../node_modules/ml-gsd/lib/algorithms/autoAlgorithm.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-signal-processing/lib/filters/baseline/airPLSBaseline.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-signal-processing/lib/filters/x/calibrateX.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMean.js","../node_modules/ml-signal-processing/lib/filters/scaling/centerMedian.js","../node_modules/ml-signal-processing/lib/filters/scaling/divideBySD.js","../node_modules/ml-signal-processing/lib/filters/x/ensureGrowing.js","../node_modules/ml-signal-processing/lib/filters/x/equallySpaced.js","../node_modules/ml-signal-processing/lib/filters/x/filterX.js","../node_modules/ml-signal-processing/lib/filters/sg/firstDerivative.js","../node_modules/ml-signal-processing/lib/filters/x/fromTo.js","../node_modules/ml-signal-processing/lib/filters/baseline/iterativePolynomialBaseline.js","../node_modules/ml-signal-processing/lib/filters/scaling/normed.js","../node_modules/ml-signal-processing/lib/filters/scaling/paretoNormalization.js","../node_modules/ml-signal-processing/lib/filters/scaling/rescale.js","../node_modules/ml-spectra-processing/lib/x/xRescale.js","../node_modules/ml-signal-processing/lib/filters/x/reverseIfNeeded.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingAverageBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingBallBaseline.js","../node_modules/ml-signal-processing/lib/filters/baseline/rollingMedianBaseline.js","../node_modules/ml-signal-processing/lib/filters/sg/savitzkyGolay.js","../node_modules/ml-signal-processing/lib/filters/sg/secondDerivative.js","../node_modules/ml-signal-processing/lib/filters/x/setMaxX.js","../node_modules/ml-signal-processing/lib/filters/y/setMaxY.js","../node_modules/ml-signal-processing/lib/filters/x/setMinX.js","../node_modules/ml-signal-processing/lib/filters/y/setMinY.js","../node_modules/ml-signal-processing/lib/filters/sg/thirdDerivative.js","../node_modules/ml-signal-processing/lib/filters/x/xFunction.js","../node_modules/ml-signal-processing/lib/filters/scaling/yFunction.js","../node_modules/common-spectrum/lib/util/getNormalizedSpectrum.js","../node_modules/ml-signal-processing/lib/filterXY.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib/util/convertUnit.js","../node_modules/common-spectrum/lib/util/ensureRegexp.js","../node_modules/common-spectrum/lib/util/getConvertedVariable.js","../node_modules/common-spectrum/lib/util/getXYSpectra.js","../node_modules/common-spectrum/lib/Analysis.js","../node_modules/ml-spectra-processing/lib/utils/stringify.js","../node_modules/common-spectrum/lib/util/getXYSpectrum.js","../node_modules/common-spectrum/lib/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib/util/appendDistinctValue.js","../node_modules/common-spectrum/lib/AnalysesManager.js","../node_modules/ensure-string/lib-esm/index.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/dynamic-typing/lib-esm/parseString.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticRatio.js","../node_modules/gyromagnetic-ratio/lib-esm/getGyromagneticNucleus.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../node_modules/gyromagnetic-ratio/lib-esm/gyromagneticRatioMHzT.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/jcampconverter/dist/jcampconverter.js","../node_modules/convert-to-jcamp/lib-esm/utils/addInfoData.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkNumberOrArray.js","../node_modules/convert-to-jcamp/lib-esm/utils/getExtremeValues.js","../node_modules/convert-to-jcamp/lib-esm/utils/checkMatrix.js","../node_modules/convert-to-jcamp/lib-esm/utils/getBestFactor.js","../node_modules/convert-to-jcamp/lib-esm/utils/getFactorNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/getNumber.js","../node_modules/convert-to-jcamp/lib-esm/utils/rescaleAndEnsureInteger.js","../node_modules/ml-spectra-processing/lib/x/xDivide.js","../node_modules/convert-to-jcamp/lib-esm/utils/vectorEncoder.js","../node_modules/convert-to-jcamp/lib-esm/fromJSON.js","../node_modules/convert-to-jcamp/lib-esm/utils/xyDataCreator.js","../node_modules/convert-to-jcamp/lib-esm/utils/peakTableCreator.js","../node_modules/convert-to-jcamp/lib-esm/fromVariables.js","../node_modules/convert-to-jcamp/lib-esm/creatorNtuples.js","../node_modules/common-spectrum/lib/to/toJcamps.js","../node_modules/common-spectrum/lib/to/toText.js","../node_modules/common-spectrum/lib/index.js","../node_modules/common-spectrum/lib/jsgraph/getJSGraph.js","../node_modules/@sqlite.org/sqlite-wasm/dist/index.mjs","../node_modules/zmes-parser/lib/openDatabase.js","../node_modules/zmes-parser/lib/sqlite3WasmGzBase64.js","../node_modules/zmes-parser/lib/decodeBlob.js","../node_modules/zmes-parser/lib/readParameterData.js","../node_modules/zmes-parser/lib/readParameterTree.js","../node_modules/zmes-parser/lib/parse.js","../node_modules/zmes-parser/lib/readRecords.js","../lib/from/fromZmes.js","../node_modules/common-spectrum/lib/from/fromJcamp.js","../node_modules/common-spectrum/lib/to/toJcamp.js","../node_modules/common-spectrum/lib/to/toMatrix.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array.\n * @param input - Array containing values\n * @param options\n * @returns - median\n */\nexport function xMedian(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { exact = false } = options || {};\n    const array = input.slice();\n    const middleIndex = calcMiddle(0, array.length - 1);\n    const median = quickSelect(array, middleIndex);\n    if (array.length % 2 === 1 || !exact) {\n        return median;\n    }\n    const medianNext = quickSelect(array, middleIndex + 1);\n    return (median + medianNext) / 2;\n}\nfunction quickSelect(array, middleIndex) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    let currentLow = 0;\n    let currentHigh = 0;\n    while (true) {\n        if (high <= low) {\n            return array[middleIndex];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[middleIndex];\n        }\n        // Find median of low, middle and high items; swap into position low\n        middle = calcMiddle(low, high);\n        if (array[middle] > array[high])\n            swap(array, middle, high);\n        if (array[low] > array[high])\n            swap(array, low, high);\n        if (array[middle] > array[low])\n            swap(array, middle, low);\n        // Swap low item (now in position middle) into position (low+1)\n        swap(array, middle, low + 1);\n        // Nibble from each end towards middle, swapping items when stuck\n        currentLow = low + 1;\n        currentHigh = high;\n        while (true) {\n            do\n                currentLow++;\n            while (array[low] > array[currentLow]);\n            do\n                currentHigh--;\n            while (array[currentHigh] > array[low]);\n            if (currentHigh < currentLow) {\n                break;\n            }\n            swap(array, currentLow, currentHigh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, currentHigh);\n        // Re-set active partition\n        if (currentHigh <= middleIndex) {\n            low = currentLow;\n        }\n        if (currentHigh >= middleIndex) {\n            high = currentHigh - 1;\n        }\n    }\n}\nfunction swap(array, i, j) {\n    const temp = array[j];\n    array[j] = array[i];\n    array[i] = temp;\n}\nfunction calcMiddle(i, j) {\n    return Math.floor((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - Array to check.\n * @param options - Additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers\n * @param target - target\n * @param options\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = Float64Array.from(array);\n    for (let i = 0; i < array.length; i++) {\n        toReturn[i] = fct(array[i]);\n        if (Number.isNaN(toReturn[i])) {\n            throw new Error(`The callback ${fctString} does not return a number: ${array[i]}`);\n        }\n    }\n    return toReturn;\n}\n//# sourceMappingURL=xApplyFunctionStr.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray.isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray.isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray.isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray.isAnyArray(array)) {\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { xVariance } from \"./xVariance.js\";\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from \"./xMean.js\";\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (const value of values) {\n        const x = value - mean;\n        sqrError += x * x;\n    }\n    if (unbiased) {\n        return sqrError / (values.length - 1);\n    }\n    else {\n        return sqrError / values.length;\n    }\n}\n//# sourceMappingURL=xVariance.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","'use strict';\n\nfunction FFT(size) {\n  this.size = size | 0;\n  if (this.size <= 1 || (this.size & (this.size - 1)) !== 0)\n    throw new Error('FFT size must be a power of two and bigger than 1');\n\n  this._csize = size << 1;\n\n  // NOTE: Use of `var` is intentional for old V8 versions\n  var table = new Array(this.size * 2);\n  for (var i = 0; i < table.length; i += 2) {\n    const angle = Math.PI * i / this.size;\n    table[i] = Math.cos(angle);\n    table[i + 1] = -Math.sin(angle);\n  }\n  this.table = table;\n\n  // Find size's power of two\n  var power = 0;\n  for (var t = 1; this.size > t; t <<= 1)\n    power++;\n\n  // Calculate initial step's width:\n  //   * If we are full radix-4 - it is 2x smaller to give inital len=8\n  //   * Otherwise it is the same as `power` to give len=4\n  this._width = power % 2 === 0 ? power - 1 : power;\n\n  // Pre-compute bit-reversal patterns\n  this._bitrev = new Array(1 << this._width);\n  for (var j = 0; j < this._bitrev.length; j++) {\n    this._bitrev[j] = 0;\n    for (var shift = 0; shift < this._width; shift += 2) {\n      var revShift = this._width - shift - 2;\n      this._bitrev[j] |= ((j >>> shift) & 3) << revShift;\n    }\n  }\n\n  this._out = null;\n  this._data = null;\n  this._inv = 0;\n}\nmodule.exports = FFT;\n\nFFT.prototype.fromComplexArray = function fromComplexArray(complex, storage) {\n  var res = storage || new Array(complex.length >>> 1);\n  for (var i = 0; i < complex.length; i += 2)\n    res[i >>> 1] = complex[i];\n  return res;\n};\n\nFFT.prototype.createComplexArray = function createComplexArray() {\n  const res = new Array(this._csize);\n  for (var i = 0; i < res.length; i++)\n    res[i] = 0;\n  return res;\n};\n\nFFT.prototype.toComplexArray = function toComplexArray(input, storage) {\n  var res = storage || this.createComplexArray();\n  for (var i = 0; i < res.length; i += 2) {\n    res[i] = input[i >>> 1];\n    res[i + 1] = 0;\n  }\n  return res;\n};\n\nFFT.prototype.completeSpectrum = function completeSpectrum(spectrum) {\n  var size = this._csize;\n  var half = size >>> 1;\n  for (var i = 2; i < half; i += 2) {\n    spectrum[size - i] = spectrum[i];\n    spectrum[size - i + 1] = -spectrum[i + 1];\n  }\n};\n\nFFT.prototype.transform = function transform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._transform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.realTransform = function realTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._realTransform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.inverseTransform = function inverseTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 1;\n  this._transform4();\n  for (var i = 0; i < out.length; i++)\n    out[i] /= this.size;\n  this._out = null;\n  this._data = null;\n};\n\n// radix-4 implementation\n//\n// NOTE: Uses of `var` are intentional for older V8 version that do not\n// support both `let compound assignments` and `const phi`\nFFT.prototype._transform4 = function _transform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform2(outOff, off, step);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform4(outOff, off, step);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var quarterLen = len >>> 2;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      // Full case\n      var limit = outOff + quarterLen;\n      for (var i = outOff, k = 0; i < limit; i += 2, k += step) {\n        const A = i;\n        const B = A + quarterLen;\n        const C = B + quarterLen;\n        const D = C + quarterLen;\n\n        // Original values\n        const Ar = out[A];\n        const Ai = out[A + 1];\n        const Br = out[B];\n        const Bi = out[B + 1];\n        const Cr = out[C];\n        const Ci = out[C + 1];\n        const Dr = out[D];\n        const Di = out[D + 1];\n\n        // Middle values\n        const MAr = Ar;\n        const MAi = Ai;\n\n        const tableBr = table[k];\n        const tableBi = inv * table[k + 1];\n        const MBr = Br * tableBr - Bi * tableBi;\n        const MBi = Br * tableBi + Bi * tableBr;\n\n        const tableCr = table[2 * k];\n        const tableCi = inv * table[2 * k + 1];\n        const MCr = Cr * tableCr - Ci * tableCi;\n        const MCi = Cr * tableCi + Ci * tableCr;\n\n        const tableDr = table[3 * k];\n        const tableDi = inv * table[3 * k + 1];\n        const MDr = Dr * tableDr - Di * tableDi;\n        const MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        const T0r = MAr + MCr;\n        const T0i = MAi + MCi;\n        const T1r = MAr - MCr;\n        const T1i = MAi - MCi;\n        const T2r = MBr + MDr;\n        const T2i = MBi + MDi;\n        const T3r = inv * (MBr - MDr);\n        const T3i = inv * (MBi - MDi);\n\n        // Final values\n        const FAr = T0r + T2r;\n        const FAi = T0i + T2i;\n\n        const FCr = T0r - T2r;\n        const FCi = T0i - T2i;\n\n        const FBr = T1r + T3i;\n        const FBi = T1i - T3r;\n\n        const FDr = T1r - T3i;\n        const FDi = T1i + T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n        out[C] = FCr;\n        out[C + 1] = FCi;\n        out[D] = FDr;\n        out[D + 1] = FDi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleTransform2 = function _singleTransform2(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const evenI = data[off + 1];\n  const oddR = data[off + step];\n  const oddI = data[off + step + 1];\n\n  const leftR = evenR + oddR;\n  const leftI = evenI + oddI;\n  const rightR = evenR - oddR;\n  const rightI = evenI - oddI;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = leftI;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = rightI;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleTransform4 = function _singleTransform4(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Ai = data[off + 1];\n  const Br = data[off + step];\n  const Bi = data[off + step + 1];\n  const Cr = data[off + step2];\n  const Ci = data[off + step2 + 1];\n  const Dr = data[off + step3];\n  const Di = data[off + step3 + 1];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T0i = Ai + Ci;\n  const T1r = Ar - Cr;\n  const T1i = Ai - Ci;\n  const T2r = Br + Dr;\n  const T2i = Bi + Di;\n  const T3r = inv * (Br - Dr);\n  const T3i = inv * (Bi - Di);\n\n  // Final values\n  const FAr = T0r + T2r;\n  const FAi = T0i + T2i;\n\n  const FBr = T1r + T3i;\n  const FBi = T1i - T3r;\n\n  const FCr = T0r - T2r;\n  const FCi = T0i - T2i;\n\n  const FDr = T1r - T3i;\n  const FDi = T1i + T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = FAi;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = FCi;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n\n// Real input radix-4 implementation\nFFT.prototype._realTransform4 = function _realTransform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform2(outOff, off >>> 1, step >>> 1);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform4(outOff, off >>> 1, step >>> 1);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var halfLen = len >>> 1;\n    var quarterLen = halfLen >>> 1;\n    var hquarterLen = quarterLen >>> 1;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      for (var i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {\n        var A = outOff + i;\n        var B = A + quarterLen;\n        var C = B + quarterLen;\n        var D = C + quarterLen;\n\n        // Original values\n        var Ar = out[A];\n        var Ai = out[A + 1];\n        var Br = out[B];\n        var Bi = out[B + 1];\n        var Cr = out[C];\n        var Ci = out[C + 1];\n        var Dr = out[D];\n        var Di = out[D + 1];\n\n        // Middle values\n        var MAr = Ar;\n        var MAi = Ai;\n\n        var tableBr = table[k];\n        var tableBi = inv * table[k + 1];\n        var MBr = Br * tableBr - Bi * tableBi;\n        var MBi = Br * tableBi + Bi * tableBr;\n\n        var tableCr = table[2 * k];\n        var tableCi = inv * table[2 * k + 1];\n        var MCr = Cr * tableCr - Ci * tableCi;\n        var MCi = Cr * tableCi + Ci * tableCr;\n\n        var tableDr = table[3 * k];\n        var tableDi = inv * table[3 * k + 1];\n        var MDr = Dr * tableDr - Di * tableDi;\n        var MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        var T0r = MAr + MCr;\n        var T0i = MAi + MCi;\n        var T1r = MAr - MCr;\n        var T1i = MAi - MCi;\n        var T2r = MBr + MDr;\n        var T2i = MBi + MDi;\n        var T3r = inv * (MBr - MDr);\n        var T3i = inv * (MBi - MDi);\n\n        // Final values\n        var FAr = T0r + T2r;\n        var FAi = T0i + T2i;\n\n        var FBr = T1r + T3i;\n        var FBi = T1i - T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n\n        // Output final middle point\n        if (i === 0) {\n          var FCr = T0r - T2r;\n          var FCi = T0i - T2i;\n          out[C] = FCr;\n          out[C + 1] = FCi;\n          continue;\n        }\n\n        // Do not overwrite ourselves\n        if (i === hquarterLen)\n          continue;\n\n        // In the flipped case:\n        // MAi = -MAi\n        // MBr=-MBi, MBi=-MBr\n        // MCr=-MCr\n        // MDr=MDi, MDi=MDr\n        var ST0r = T1r;\n        var ST0i = -T1i;\n        var ST1r = T0r;\n        var ST1i = -T0i;\n        var ST2r = -inv * T3i;\n        var ST2i = -inv * T3r;\n        var ST3r = -inv * T2i;\n        var ST3i = -inv * T2r;\n\n        var SFAr = ST0r + ST2r;\n        var SFAi = ST0i + ST2i;\n\n        var SFBr = ST1r + ST3i;\n        var SFBi = ST1i - ST3r;\n\n        var SA = outOff + quarterLen - i;\n        var SB = outOff + halfLen - i;\n\n        out[SA] = SFAr;\n        out[SA + 1] = SFAi;\n        out[SB] = SFBr;\n        out[SB + 1] = SFBi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleRealTransform2 = function _singleRealTransform2(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const oddR = data[off + step];\n\n  const leftR = evenR + oddR;\n  const rightR = evenR - oddR;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = 0;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleRealTransform4 = function _singleRealTransform4(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Br = data[off + step];\n  const Cr = data[off + step2];\n  const Dr = data[off + step3];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T1r = Ar - Cr;\n  const T2r = Br + Dr;\n  const T3r = inv * (Br - Dr);\n\n  // Final values\n  const FAr = T0r + T2r;\n\n  const FBr = T1r;\n  const FBi = -T3r;\n\n  const FCr = T0r - T2r;\n\n  const FDr = T1r;\n  const FDi = T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = 0;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options\n * @returns - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","/**\n * Returns true if x is monotonic.\n * @param array - array of numbers.\n * @returns 1 if monotonic increasing, -1 if monotonic decreasing, 0 if not monotonic.\n */\nexport function xIsMonotonic(array) {\n    if (array.length <= 2) {\n        return 1;\n    }\n    if (array[0] === array[1]) {\n        // maybe a constant series\n        for (let i = 1; i < array.length - 1; i++) {\n            if (array[i] !== array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    if (array[0] < array.at(-1)) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return 0;\n        }\n        return -1;\n    }\n}\n//# sourceMappingURL=xIsMonotonic.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (const value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/* eslint-disable no-loss-of-precision */\n// Coefficients for erfcinv on [0, 0.5]:\nconst Y1 = 8.91314744949340820313e-2;\nconst P1 = [\n    -5.38772965071242932965e-3, 8.22687874676915743155e-3,\n    2.19878681111168899165e-2, -3.65637971411762664006e-2,\n    -1.26926147662974029034e-2, 3.34806625409744615033e-2,\n    -8.36874819741736770379e-3, -5.08781949658280665617e-4,\n];\nconst Q1 = [\n    8.86216390456424707504e-4, -2.33393759374190016776e-3,\n    7.95283687341571680018e-2, -5.27396382340099713954e-2,\n    -7.1228902341542847553e-1, 6.62328840472002992063e-1, 1.56221558398423026363,\n    -1.56574558234175846809, -9.70005043303290640362e-1, 1,\n];\n// Coefficients for erfcinv for 0.5 > 1-x >= 0:\nconst Y2 = 2.249481201171875;\nconst P2 = [\n    -3.67192254707729348546, 2.11294655448340526258e1, 1.7445385985570866523e1,\n    -4.46382324441786960818e1, -1.88510648058714251895e1,\n    1.76447298408374015486e1, 8.37050328343119927838, 1.05264680699391713268e-1,\n    -2.02433508355938759655e-1,\n];\nconst Q2 = [\n    1.72114765761200282724, -2.26436933413139721736e1, 1.08268667355460159008e1,\n    4.85609213108739935468e1, -2.01432634680485188801e1,\n    -2.86608180499800029974e1, 3.9713437953343869095, 6.24264124854247537712, 1,\n];\n// Coefficients for erfcinv for sqrt( -log(1-x)):\nconst Y3 = 8.07220458984375e-1;\nconst P3 = [\n    -6.81149956853776992068e-10, 2.85225331782217055858e-8,\n    -6.79465575181126350155e-7, 2.14558995388805277169e-3,\n    2.90157910005329060432e-2, 1.42869534408157156766e-1,\n    3.37785538912035898924e-1, 3.87079738972604337464e-1,\n    1.17030156341995252019e-1, -1.63794047193317060787e-1,\n    -1.31102781679951906451e-1,\n];\nconst Q3 = [\n    1.105924229346489121e-2, 1.52264338295331783612e-1, 8.48854343457902036425e-1,\n    2.59301921623620271374, 4.77846592945843778382, 5.38168345707006855425,\n    3.46625407242567245975, 1,\n];\nconst Y4 = 9.3995571136474609375e-1;\nconst P4 = [\n    2.66339227425782031962e-12, -2.30404776911882601748e-10,\n    4.60469890584317994083e-6, 1.57544617424960554631e-4,\n    1.87123492819559223345e-3, 9.50804701325919603619e-3,\n    1.85573306514231072324e-2, -2.22426529213447927281e-3,\n    -3.50353787183177984712e-2,\n];\nconst Q4 = [\n    7.64675292302794483503e-5, 2.63861676657015992959e-3,\n    3.41589143670947727934e-2, 2.20091105764131249824e-1,\n    7.62059164553623404043e-1, 1.3653349817554063097, 1,\n];\nconst Y5 = 9.8362827301025390625e-1;\nconst P5 = [\n    9.9055709973310326855e-17, -2.81128735628831791805e-14,\n    4.62596163522878599135e-9, 4.49696789927706453732e-7,\n    1.49624783758342370182e-5, 2.09386317487588078668e-4,\n    1.05628862152492910091e-3, -1.12951438745580278863e-3,\n    -1.67431005076633737133e-2,\n];\nconst Q5 = [\n    2.82243172016108031869e-7, 2.75335474764726041141e-5,\n    9.64011807005165528527e-4, 1.60746087093676504695e-2,\n    1.38151865749083321638e-1, 5.91429344886417493481e-1, 1,\n];\n/**\n * Polyval.\n * @param c - Array of Number.\n * @param x - Number.\n * @returns Number.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - Number.\n * @param v - Number.\n * @param P - Array of polynomial coefficients.\n * @param Q - Array of polynomial coefficients.\n * @param Y - Number.\n * @returns Rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - Input value.\n * @returns Evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from \"./erfcinv.js\";\n/**\n * Applies a simple normalization inverse transformation to the input data.\n * @param data - The input array of numbers to be transformed.\n * @param options - Optional parameters for the transformation.\n * @returns A new Float64Array containing the transformed data.\n */\nexport function simpleNormInv(data, options = {}) {\n    const { magnitudeMode = false } = options;\n    const result = new Float64Array(data.length);\n    if (magnitudeMode) {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -Math.sqrt(-2 * Math.log(1 - data[i]));\n        }\n    }\n    else {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -1 * Math.SQRT2 * erfcinv(2 * data[i]);\n        }\n    }\n    return result;\n}\n/**\n * Convenience wrapper for single number processing by simpleNormInv function.\n * @param data - The number to be normalized.\n * @param options - The options for the normalization process.\n * @returns The normalized number.\n */\nexport function simpleNormInvNumber(data, options = {}) {\n    return simpleNormInv([data], options)[0];\n}\n//# sourceMappingURL=simpleNormInv.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from \"../utils/index.js\";\nimport { simpleNormInvNumber } from \"./utils/simpleNormInv.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * Determine noise level by san plot methodology (https://doi.org/10.1002/mrc.4882)\n * @param array - real or magnitude spectra data.\n * @param options - options\n * @returns noise level\n */\nexport function xNoiseSanPlot(array, options = {}) {\n    const { mask, cutOff, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = input.slice(firstNegativeValueIndex);\n    const cutOffDist = cutOff || determineCutOff(signPositive, { magnitudeMode });\n    const pIndex = Math.floor(signPositive.length * cutOffDist);\n    const initialNoiseLevelPositive = signPositive[pIndex];\n    const skyPoint = signPositive[0];\n    let initialNoiseLevelNegative;\n    if (signNegative.length > 0) {\n        const nIndex = Math.floor(signNegative.length * (1 - cutOffDist));\n        initialNoiseLevelNegative = -1 * signNegative[nIndex];\n    }\n    else {\n        initialNoiseLevelNegative = 0;\n    }\n    let noiseLevelPositive = initialNoiseLevelPositive;\n    let noiseLevelNegative = initialNoiseLevelNegative;\n    let cloneSignPositive = signPositive.slice();\n    let cloneSignNegative = signNegative.slice();\n    let cutOffSignalsIndexPlus = 0;\n    let cutOffSignalsIndexNeg = 2;\n    if (refine) {\n        let cutOffSignals = noiseLevelPositive * factorStd;\n        cutOffSignalsIndexPlus = signPositive.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexPlus > -1) {\n            cloneSignPositive = signPositive.slice(cutOffSignalsIndexPlus);\n            noiseLevelPositive =\n                cloneSignPositive[Math.floor(cloneSignPositive.length * cutOffDist)];\n        }\n        cutOffSignals = noiseLevelNegative * factorStd;\n        cutOffSignalsIndexNeg = signNegative.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexNeg > -1) {\n            cloneSignNegative = signNegative.slice(cutOffSignalsIndexNeg);\n            noiseLevelNegative =\n                cloneSignPositive[Math.floor(cloneSignNegative.length * (1 - cutOffDist))];\n        }\n    }\n    const correctionFactor = -simpleNormInvNumber(cutOffDist / 2, {\n        magnitudeMode,\n    });\n    let effectiveCutOffDist, refinedCorrectionFactor;\n    if (refine && cutOffSignalsIndexPlus > -1) {\n        effectiveCutOffDist =\n            (cutOffDist * cloneSignPositive.length + cutOffSignalsIndexPlus) /\n                (cloneSignPositive.length + cutOffSignalsIndexPlus);\n        refinedCorrectionFactor =\n            -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n        noiseLevelPositive /= refinedCorrectionFactor;\n        if (cutOffSignalsIndexNeg > -1) {\n            effectiveCutOffDist =\n                (cutOffDist * cloneSignNegative.length + cutOffSignalsIndexNeg) /\n                    (cloneSignNegative.length + cutOffSignalsIndexNeg);\n            refinedCorrectionFactor =\n                -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n            if (noiseLevelNegative !== 0) {\n                noiseLevelNegative /= refinedCorrectionFactor;\n            }\n        }\n    }\n    else {\n        noiseLevelPositive /= correctionFactor;\n        noiseLevelNegative /= correctionFactor;\n    }\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n    };\n}\n/**\n * Determines the optimal cut-off point for a given array of positive numbers.\n * @param signPositive - An array of positive numbers.\n * @param options - Optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - If true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - An object specifying the range and step for consideration.\n * @param options.considerList.from - The starting point of the range. Default is 0.5.\n * @param options.considerList.step - The step size for the range. Default is 0.1.\n * @param options.considerList.to - The ending point of the range. Default is 0.9.\n * @returns The optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    //generate a list of values for\n    const cutOff = [];\n    const indexMax = signPositive.length - 1;\n    for (let i = 0.01; i <= 0.99; i += 0.01) {\n        const index = Math.round(indexMax * i);\n        const value = -signPositive[index] / simpleNormInvNumber(i / 2, { magnitudeMode });\n        cutOff.push([i, value]);\n    }\n    let minKi = Number.MAX_SAFE_INTEGER;\n    const { from, to, step } = considerList;\n    const delta = step / 2;\n    let whereToCutStat = 0.5;\n    for (let i = from; i <= to; i += step) {\n        const floor = i - delta;\n        const top = i + delta;\n        const elementsOfCutOff = cutOff.filter((e) => e[0] < top && e[0] > floor);\n        let averageValue = 0;\n        for (const element of elementsOfCutOff) {\n            averageValue += Math.abs(element[1]);\n        }\n        let kiSqrt = 0;\n        for (const element of elementsOfCutOff) {\n            kiSqrt += (element[1] - averageValue) ** 2;\n        }\n        if (kiSqrt < minKi) {\n            minKi = kiSqrt;\n            whereToCutStat = i;\n        }\n    }\n    return whereToCutStat;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - The input array of numbers to be processed.\n * @param options - An optional object containing configuration options.\n * @param options.logBaseY - The logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - An object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns An object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - The input array to be scaled.\n * @param options - An optional object containing scaling options.\n * @param options.logBaseY - If provided, the array values will be scaled using the logarithm of this base.\n * @returns An object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - The input array of numbers to be processed.\n * @param options - An object containing the following properties:\n *   - scaleFactor: A number by which to scale each element of the array.\n *   - mask: An optional array of the same length as the input array, where\n *           elements corresponding to `true` values will be excluded from processing.\n * @param options.scaleFactor\n * @param options.mask\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    input.sort();\n    input.reverse();\n    return input;\n}\n//# sourceMappingURL=xNoiseSanPlot.js.map","import { xMedianAbsoluteDeviation } from \"./xMedianAbsoluteDeviation.js\";\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","import { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median absolute deviation (MAD).\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xSum } from \"./xSum.js\";\n/**\n * Divides the data with either the sum, the absolute sum or the maximum of the data\n * @param input - Array containing values\n * @param options - options\n * @returns - normalized data\n */\nexport function xNormed(input, options = {}) {\n    const { algorithm = 'absolute', value = 1 } = options;\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n    switch (algorithm) {\n        case 'absolute': {\n            const absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / absoluteSumValue;\n            }\n            return output;\n        }\n        case 'max': {\n            const currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            const factor = value / currentMaxValue;\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] * factor;\n            }\n            return output;\n        }\n        case 'sum': {\n            const sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / sumFactor;\n            }\n            return output;\n        }\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\nfunction absoluteSum(input) {\n    let sumValue = 0;\n    for (const value of input) {\n        sumValue += Math.abs(value);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Calculate the sum of the values\n * @param array - Object that contains property x (an ordered increasing array) and y (an array).\n * @param options - Options.\n * @returns XSum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xPadding } from \"./xPadding.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * This function pads an array\n *s\n * @param array - the array that will be padded\n * @param options - options\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data\n * @param options\n * @param options.minLength\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xIsMonotonic } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Filters x,y values to allow strictly growing values in x-axis.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyEnsureGrowingX(data) {\n    xyCheck(data);\n    if (xIsMonotonic(data.x) === 1)\n        return data;\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    let prevX = Number.NEGATIVE_INFINITY;\n    let currentIndex = 0;\n    for (let index = 0; index < x.length; index++) {\n        if (prevX < x[index]) {\n            if (currentIndex < index) {\n                x[currentIndex] = x[index];\n                y[currentIndex] = y[index];\n            }\n            currentIndex++;\n            prevX = x[index];\n        }\n    }\n    x.length = currentIndex;\n    y.length = currentIndex;\n    return { x, y };\n}\n//# sourceMappingURL=xyEnsureGrowingX.js.map","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n * - deal with exclusions zones\n * - if no zones is specified add one between -Infinity and +Infinity\n * @param zones - array of zones\n * @param options - options\n * @returns array of zones\n */\nexport function zonesNormalize(zones = [], options = {}) {\n    const { exclusions = [] } = options;\n    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = zones.map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : { ...zone });\n    zones.sort((a, b) => {\n        if (a.from !== b.from)\n            return a.from - b.from;\n        return a.to - b.to;\n    });\n    if (zones.length === 0) {\n        zones.push({ from, to });\n    }\n    for (const zone of zones) {\n        if (from > zone.from)\n            zone.from = from;\n        if (to < zone.to)\n            zone.to = to;\n    }\n    zones = zones.filter((zone) => zone.from <= zone.to);\n    if (zones.length === 0)\n        return [];\n    let currentZone = zones[0];\n    const beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        const zone = zones[i];\n        if (zone.from <= currentZone.to) {\n            if (currentZone.to < zone.to) {\n                currentZone.to = zone.to;\n            }\n        }\n        else {\n            currentZone = zone;\n            beforeExclusionsZones.push(currentZone);\n        }\n    }\n    if (exclusions.length === 0)\n        return beforeExclusionsZones;\n    const normalizedExclusions = zonesNormalize(exclusions);\n    let currentExclusionIndex = 0;\n    const results = [];\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        const zone = beforeExclusionsZones[zoneIndex];\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        while (currentExclusionIndex < normalizedExclusions.length &&\n            normalizedExclusions[currentExclusionIndex].to <= zone.from) {\n            currentExclusionIndex++;\n        }\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        if (zone.to < normalizedExclusions[currentExclusionIndex].from) {\n            // no problems, not yet in exclusion\n            results.push(zone);\n            continue;\n        }\n        if (normalizedExclusions[currentExclusionIndex].to >= zone.to) {\n            // could be totally excluded\n            if (normalizedExclusions[currentExclusionIndex].from <= zone.from) {\n                continue;\n            }\n            results.push({\n                from: normalizedExclusions[currentExclusionIndex].to,\n                to: zone.to,\n            });\n        }\n        // we cut in the middle, we need to create more zones, annoying !\n        if (normalizedExclusions[currentExclusionIndex].from > zone.from) {\n            results.push({\n                from: zone.from,\n                to: normalizedExclusions[currentExclusionIndex].from,\n            });\n        }\n        zone.from = normalizedExclusions[currentExclusionIndex].to;\n        zoneIndex--;\n    }\n    return results;\n}\n//# sourceMappingURL=zonesNormalize.js.map","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0\n * @param x1\n * @param slope\n * @param intercept\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from \"./integral.js\";\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { zonesNormalize, zonesWithPoints } from \"../zones/index.js\";\nimport equallySpacedSlot from \"./utils/equallySpacedSlot.js\";\nimport equallySpacedSmooth from \"./utils/equallySpacedSmooth.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in an array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in an array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns new object with x / y array with the equally spaced data.\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","import { zonesNormalize } from \"./zonesNormalize.js\";\n/**\n * Add the number of points per zone to reach a specified total\n * @param zones - array of zones\n * @param numberOfPoints - total number of points to distribute between zones\n * @param options - options\n * @returns array of zones with points\n */\nexport function zonesWithPoints(zones = [], \n/**\n * total number of points to distribute between zones\n * @default 10\n */\nnumberOfPoints = 10, options = {}) {\n    if (zones.length === 0)\n        return [];\n    const normalizedZones = zonesNormalize(zones, options);\n    const zonesWithNumberOfPoints = [];\n    const totalSize = normalizedZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    const unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < normalizedZones.length - 1; i++) {\n        const tempZone = normalizedZones[i];\n        const tempZoneNumberOfPoints = Math.min(Math.round((tempZone.to - tempZone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        zonesWithNumberOfPoints.push({\n            ...tempZone,\n            numberOfPoints: tempZoneNumberOfPoints,\n        });\n        currentTotal += tempZoneNumberOfPoints;\n    }\n    zonesWithNumberOfPoints.push({\n        ...normalizedZones.at(-1),\n        numberOfPoints: numberOfPoints - currentTotal,\n    });\n    return zonesWithNumberOfPoints;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * Function that retrieves the getEquallySpacedData with the variant \"slot\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","import { zonesNormalize } from \"../zones/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    if (x.length === 0) {\n        return {\n            x: Array.from(x),\n            y: Array.from(y),\n        };\n    }\n    const { from = x[0], to = x.at(-1), zones = [{ from, to }], exclusions = [], } = options;\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    const newX = [];\n    const newY = [];\n    let position = 0;\n    while (position < x.length) {\n        if (x[position] <= normalizedZones[currentZoneIndex].to &&\n            x[position] >= normalizedZones[currentZoneIndex].from) {\n            newX.push(x[position]);\n            newY.push(y[position]);\n        }\n        else if (x[position] > normalizedZones[currentZoneIndex].to) {\n            currentZoneIndex++;\n            if (!normalizedZones[currentZoneIndex])\n                break;\n        }\n        position++;\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns - An object with the filtered data\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - Object of kind {x:[], y:[]}.\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.toReversed(),\n        y: y.toReversed(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Aligns data, can be used for spectra\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayAlign(data, options = {}) {\n    const { delta = 1, requiredY = false } = options;\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    if (requiredY)\n        return filterRequiredY(x, ys);\n    return { x, ys };\n}\nfunction filterRequiredY(x, ys) {\n    const newX = [];\n    const newYs = Array.from(ys, () => []);\n    for (let i = 0; i < x.length; i++) {\n        if (ys.every((y) => y[i] !== 0)) {\n            newX.push(x[i]);\n            for (let j = 0; j < ys.length; j++) {\n                newYs[j].push(ys[j][i]);\n            }\n        }\n    }\n    return { x: newX, ys: newYs };\n}\n//# sourceMappingURL=xyArrayAlign.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Join x / y values when difference in X is closer than delta.\n * When joining, y values are summed and x values are weighted average\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the xyIntegration function\n */\nexport function xyJoinX(data, options = {}) {\n    xyCheck(data);\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    if (x.length < 2) {\n        return { x, y };\n    }\n    let position = 0;\n    for (let i = 1; i < x.length; i++) {\n        const difference = x[i] - x[i - 1];\n        const currentDelta = deltaIsFunction ? delta((x[i] + x[i - 1]) / 2) : delta;\n        if (difference <= currentDelta) {\n            // we join\n            if (y[position] !== 0 || y[i] !== 0) {\n                x[position] =\n                    (x[position] * y[position] + x[i] * y[i]) / (y[position] + y[i]);\n                y[position] += y[i];\n            }\n        }\n        else {\n            position++;\n            x[position] = x[i];\n            y[position] = y[i];\n        }\n    }\n    x.length = position + 1;\n    y.length = position + 1;\n    return { x, y };\n}\n//# sourceMappingURL=xyJoinX.js.map","/**\n * GetSlots.\n * @param data - data.\n * @param options - Options.\n */\nexport function getSlots(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const possibleXs = Float64Array.from(data.flatMap((spectrum) => spectrum.x));\n    possibleXs.sort();\n    if (possibleXs.length === 0) {\n        throw new Error('can not process empty arrays');\n    }\n    let currentSlot = {\n        from: possibleXs[0],\n        to: possibleXs[0],\n        average: possibleXs[0],\n        sum: possibleXs[0],\n        number: 1,\n    };\n    const slots = [currentSlot];\n    for (let i = 1; i < possibleXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(possibleXs[i]) : delta;\n        if (possibleXs[i] - currentSlot.to <= currentDelta) {\n            currentSlot.to = possibleXs[i];\n            currentSlot.number++;\n            currentSlot.sum += possibleXs[i];\n            currentSlot.average = currentSlot.sum / currentSlot.number;\n        }\n        else {\n            currentSlot = {\n                from: possibleXs[i],\n                to: possibleXs[i],\n                average: possibleXs[i],\n                sum: possibleXs[i],\n                number: 1,\n            };\n            slots.push(currentSlot);\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlots.js.map","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9' } = options;\n    const { opacity = 1, lineWidth = 1 } = options;\n    if (color.match(/#[\\da-f]{6}$/i)) {\n        color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n    }\n    else {\n        color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n    }\n    serie.style = [\n        {\n            name: 'unselected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth,\n                    dash: 1,\n                },\n            },\n        },\n        {\n            name: 'selected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth + 2,\n                    dash: 1,\n                },\n            },\n        },\n    ];\n    serie.name = spectrum.label || spectrum.id;\n}\n//# sourceMappingURL=addStyle.js.map","export const COLORS = [\n    '#FFB300',\n    '#803E75',\n    '#FF6800',\n    '#A6BDD7',\n    '#C10020',\n    '#CEA262',\n    '#817066',\n    '#007D34',\n    '#F6768E',\n    '#00538A',\n    '#FF7A5C',\n    '#53377A',\n    '#FF8E00',\n    '#B32851',\n    '#F4C800',\n    '#7F180D',\n    '#93AA00',\n    '#593315',\n    '#F13A13',\n    '#232C16',\n];\n//# sourceMappingURL=colors.js.map","const defaultBoundary = { y: { min: '0px', max: '2000px' } };\nexport function getNormalizationAnnotations(filter = {}, boundary = defaultBoundary) {\n    let { exclusions = [] } = filter;\n    let annotations = [];\n    exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n    annotations = exclusions.map((exclusion) => {\n        const annotation = {\n            type: 'rect',\n            position: [\n                { x: exclusion.from, y: boundary.y.min },\n                { x: exclusion.to, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        };\n        return annotation;\n    });\n    if (filter.from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n                { x: filter.from, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (filter.to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: filter.to, y: boundary.y.min },\n                { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=getNormalizationAnnotations.js.map","// Based on https://github.com/scijs/cholesky-solve\n\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\nfunction ldlSymbolic(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n + 1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Lp /* output of size n + 1, not defined on input */,\n  Parent /* output of size n, not defined on input */,\n  Lnz /* output of size n, not defined on input */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let i, k, p, kk, p2;\n\n  for (k = 0; k < n; k++) {\n    /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\n    Parent[k] = -1; /* parent of k is not yet known */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      /* A (i,k) is nonzero (original or permuted A) */\n      i = Ai[p];\n\n      if (i < k) {\n        /* follow path from i to root of etree, stop at flagged node */\n        for (; Flag[i] !== k; i = Parent[i]) {\n          /* find parent of i if not yet determined */\n          if (Parent[i] === -1) Parent[i] = k;\n          Lnz[i]++; /* L (k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n      }\n    }\n  }\n  /* construct Lp index array from Lnz column counts */\n  Lp[0] = 0;\n  for (k = 0; k < n; k++) {\n    Lp[k + 1] = Lp[k] + Lnz[k];\n  }\n}\n\nfunction ldlNumeric(\n  n /* A and L are n-by-n, where n >= 0 */,\n  Ap /* input of size n+1, not modified */,\n  Ai /* input of size nz=Ap[n], not modified */,\n  Ax /* input of size nz=Ap[n], not modified */,\n  Lp /* input of size n+1, not modified */,\n  Parent /* input of size n, not modified */,\n  Lnz /* output of size n, not defn. on input */,\n  Li /* output of size lnz=Lp[n], not defined on input */,\n  Lx /* output of size lnz=Lp[n], not defined on input */,\n  D /* output of size n, not defined on input */,\n  Y /* workspace of size n, not defn. on input or output */,\n  Pattern /* workspace of size n, not defn. on input or output */,\n  Flag /* workspace of size n, not defn. on input or output */,\n) {\n  let yi, lKi;\n  let i, k, p, kk, p2, len, top;\n  for (k = 0; k < n; k++) {\n    /* compute nonzero Pattern of kth row of L, in topological order */\n    Y[k] = 0.0; /* Y(0:k) is now all zero */\n    top = n; /* stack for pattern is empty */\n    Flag[k] = k; /* mark node k as visited */\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\n    kk = k; /* kth original, or permuted, column */\n    p2 = Ap[kk + 1];\n    for (p = Ap[kk]; p < p2; p++) {\n      i = Ai[p]; /* get A(i,k) */\n      if (i <= k) {\n        Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\n        for (len = 0; Flag[i] !== k; i = Parent[i]) {\n          Pattern[len++] = i; /* L(k,i) is nonzero */\n          Flag[i] = k; /* mark i as visited */\n        }\n        while (len > 0) Pattern[--top] = Pattern[--len];\n      }\n    }\n    /* compute numerical values kth row of L (a sparse triangular solve) */\n    D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\n    Y[k] = 0.0;\n    for (; top < n; top++) {\n      i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\n      yi = Y[i]; /* get and clear Y(i) */\n      Y[i] = 0.0;\n      p2 = Lp[i] + Lnz[i];\n      for (p = Lp[i]; p < p2; p++) {\n        Y[Li[p]] -= Lx[p] * yi;\n      }\n      lKi = yi / D[i]; /* the nonzero entry L(k,i) */\n      D[k] -= lKi * yi;\n      Li[p] = k; /* store L(k,i) in column form of L */\n      Lx[p] = lKi;\n      Lnz[i]++; /* increment count of nonzeros in col i */\n    }\n\n    if (D[k] === 0.0) return k; /* failure, D(k,k) is zero */\n  }\n\n  return n; /* success, diagonal of D is all nonzero */\n}\n\nfunction ldlLsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = 0; j < n; j++) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[Li[p]] -= Lx[p] * X[j];\n    }\n  }\n}\n\nfunction ldlDsolve(\n  n /* D is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  D /* input of size n, not modified */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] /= D[j];\n  }\n}\n\nfunction ldlLTsolve(\n  n /* L is n-by-n, where n >= 0 */,\n  X /* size n. right-hand-side on input, soln. on output */,\n  Lp /* input of size n+1, not modified */,\n  Li /* input of size lnz=Lp[n], not modified */,\n  Lx /* input of size lnz=Lp[n], not modified */,\n) {\n  let j, p, p2;\n  for (j = n - 1; j >= 0; j--) {\n    p2 = Lp[j + 1];\n    for (p = Lp[j]; p < p2; p++) {\n      X[j] -= Lx[p] * X[Li[p]];\n    }\n  }\n}\n\nfunction ldlPerm(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[j] = B[P[j]];\n  }\n}\n\nfunction ldlPermt(\n  n /* size of X, B, and P */,\n  X /* output of size n. */,\n  B /* input of size n. */,\n  P /* input permutation array of size n. */,\n) {\n  let j;\n  for (j = 0; j < n; j++) {\n    X[P[j]] = B[j];\n  }\n}\n\nfunction prepare(M, n, P) {\n  // if a permutation was specified, apply it.\n  if (P) {\n    let Pinv = new Array(n);\n\n    for (let k = 0; k < n; k++) {\n      Pinv[P[k]] = k;\n    }\n\n    let Mt = []; // scratch memory\n    // Apply permutation. We make M into P*M*P^T\n    for (let a = 0; a < M.length; ++a) {\n      let ar = Pinv[M[a][0]];\n      let ac = Pinv[M[a][1]];\n\n      // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\n      // if permuted element is below diagonal, we simply transpose it.\n      if (ac < ar) {\n        let t = ac;\n        ac = ar;\n        ar = t;\n      }\n\n      Mt[a] = [];\n      Mt[a][0] = ar;\n      Mt[a][1] = ac;\n      Mt[a][2] = M[a][2];\n    }\n\n    M = Mt; // copy scratch memory.\n  } else {\n    // if P argument is null, we just use an identity permutation.\n    P = [];\n    for (let i = 0; i < n; ++i) {\n      P[i] = i;\n    }\n  }\n\n  // The sparse matrix we are decomposing is A.\n  // Now we shall create A from M.\n  let Ap = new Array(n + 1);\n  let Ai = new Array(M.length);\n  let Ax = new Array(M.length);\n\n  // count number of non-zero elements in columns.\n  let LNZ = [];\n  for (let i = 0; i < n; ++i) {\n    LNZ[i] = 0;\n  }\n  for (let a = 0; a < M.length; ++a) {\n    LNZ[M[a][1]]++;\n  }\n\n  Ap[0] = 0;\n  for (let i = 0; i < n; ++i) {\n    Ap[i + 1] = Ap[i] + LNZ[i];\n  }\n\n  let coloffset = [];\n  for (let a = 0; a < n; ++a) {\n    coloffset[a] = 0;\n  }\n\n  // go through all elements in M, and add them to sparse matrix A.\n  for (let i = 0; i < M.length; ++i) {\n    let e = M[i];\n    let col = e[1];\n\n    let adr = Ap[col] + coloffset[col];\n    Ai[adr] = e[0];\n    Ax[adr] = e[2];\n\n    coloffset[col]++;\n  }\n\n  let D = new Array(n);\n  let Y = new Array(n);\n  let Lp = new Array(n + 1);\n  let Parent = new Array(n);\n  let Lnz = new Array(n);\n  let Flag = new Array(n);\n  let Pattern = new Array(n);\n  let bp1 = new Array(n);\n  let x = new Array(n);\n  let d;\n\n  ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\n\n  let Lx = new Array(Lp[n]);\n  let Li = new Array(Lp[n]);\n\n  d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\n\n  if (d === n) {\n    return (b) => {\n      ldlPerm(n, bp1, b, P);\n      ldlLsolve(n, bp1, Lp, Li, Lx);\n      ldlDsolve(n, bp1, D);\n      ldlLTsolve(n, bp1, Lp, Li, Lx);\n      ldlPermt(n, x, bp1, P);\n\n      return x;\n    };\n  } else {\n    return null;\n  }\n}\n\nexport { prepare as default };\n","'use strict'\n\nmodule.exports = cuthillMckee\n\nfunction compareNum(a, b) { return a - b }\n\nfunction cuthillMckee(list, n) {\n  var adj = new Array(n)\n  var visited = new Array(n)\n  for(var i=0; i<n; ++i) {\n    adj[i]     = []\n    visited[i] = false\n  }\n\n  for(var i=0; i<list.length; ++i) {\n    var l = list[i]\n    adj[l[0]].push(l[1])\n  }\n\n  var toVisit = new Array(n)\n  var eol = 0\n  var ptr = 0\n  for(var i=0; i<n; ++i) {\n    if(visited[i]) {\n      continue\n    }\n    toVisit[eol++] = i\n    visited[i] = true\n    while(ptr < eol) {\n      var v = toVisit[ptr++]\n      var nbhd = adj[v]\n      nbhd.sort(compareNum)\n      for(var j=0; j<nbhd.length; ++j) {\n        var u = nbhd[j]\n        if(visited[u]) {\n          continue\n        }\n        visited[u] = true\n        toVisit[eol++] = u\n      }\n    }\n  }\n\n  var result = new Array(n)\n  for(var i=0; i<n; ++i) {\n    result[toVisit[i]] = i\n  }\n\n  return result\n}\n","import cuthillMckee from 'cuthill-mckee';\n\nconst getClosestNumber = (array = [], goal = 0) => {\n  const closest = array.reduce((prev, curr) => {\n    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\n  });\n  return closest;\n};\n\nconst getCloseIndex = (array = [], goal = 0) => {\n  const closest = getClosestNumber(array, goal);\n  return array.indexOf(closest);\n};\n\nconst updateSystem = (matrix, y, weights) => {\n  let nbPoints = y.length;\n  let l = nbPoints - 1;\n  let newMatrix = new Array(matrix.length);\n  let newVector = new Float64Array(nbPoints);\n  for (let i = 0; i < l; i++) {\n    let w = weights[i];\n    let diag = i * 2;\n    let next = diag + 1;\n    newMatrix[diag] = matrix[diag].slice();\n    newMatrix[next] = matrix[next].slice();\n    if (w === 0) {\n      newVector[i] = 0;\n    } else {\n      newVector[i] = y[i] * w;\n      newMatrix[diag][2] += w;\n    }\n  }\n  newVector[l] = y[l] * weights[l];\n  newMatrix[l * 2] = matrix[l * 2].slice();\n  newMatrix[l * 2][2] += weights[l];\n\n  return [newMatrix, newVector];\n};\n\nconst getDeltaMatrix = (nbPoints, lambda) => {\n  let matrix = [];\n  let last = nbPoints - 1;\n  for (let i = 0; i < last; i++) {\n    matrix.push([i, i, lambda * 2]);\n    matrix.push([i + 1, i, -1 * lambda]);\n  }\n  matrix[0][2] = lambda;\n  matrix.push([last, last, lambda]);\n  return {\n    lowerTriangularNonZeros: matrix,\n    permutationEncodedArray: cuthillMckee(matrix, nbPoints),\n  };\n};\n\nexport { updateSystem, getDeltaMatrix, getCloseIndex, getClosestNumber };\n","import { xMultiply, xNoiseSanPlot, xAbsoluteSum } from 'ml-spectra-processing';\n\nimport cholesky from './choleskySolver';\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\n\nfunction getControlPoints(x, y, options = {}) {\n  const { length } = x;\n  let { controlPoints = Int8Array.from({ length }).fill(0) } = options;\n  const { zones = [], weights = Float64Array.from({ length }).fill(1) } =\n    options;\n\n  if (x.length !== y.length) {\n    throw new RangeError('Y should match the length with X');\n  } else if (controlPoints.length !== x.length) {\n    throw new RangeError('controlPoints should match the length with X');\n  } else if (weights.length !== x.length) {\n    throw new RangeError('weights should match the length with X');\n  }\n\n  zones.forEach((range) => {\n    let indexFrom = getCloseIndex(x, range.from);\n    let indexTo = getCloseIndex(x, range.to);\n    if (indexFrom > indexTo) [indexFrom, indexTo] = [indexTo, indexFrom];\n    for (let i = indexFrom; i < indexTo; i++) {\n      controlPoints[i] = 1;\n    }\n  });\n\n  return {\n    weights:\n      'controlPoints' in options || zones.length > 0\n        ? xMultiply(weights, controlPoints)\n        : weights,\n    controlPoints,\n  };\n}\n\n/**\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/main/airPLS_manuscript.pdf)\n * @param {Array<number>} x - x axis data useful when control points or zones are submitted\n * @param {Array<number>} y - Original data\n * @param {object} [options={}] - Options object\n * @param {number} [options.maxIterations = 100] - Maximal number of iterations if the method does not reach the stop criterion\n * @param {number} [options.tolerance = 0.001] - Factor of the sum of absolute value of original data, to compute stop criterion\n * @param {Array<number>} [options.weights = [1,1,...]] - Initial weights vector, default each point has the same weight\n * @param {number} [options.lambda = 100] - Factor of weights matrix in -> [I + lambda D'D]z = x\n * @param {Array<number>} [options.controlPoints = []] - Array of 0|1 to force the baseline cross those points.\n * @param {Array<number>} [options.zones = []] - Array of x axis values (as from - to), to force that baseline cross those zones.\n * @returns {{corrected: Array<number>, error: number, iteration: number, baseline: Array<number>}}\n */\n\nexport default function airPLS(x, y, options = {}) {\n  const { weights, controlPoints } = getControlPoints(x, y, options);\n  let { maxIterations = 100, lambda = 10, tolerance = 0.001 } = options;\n\n  let baseline, iteration;\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\n  const corrected = Float64Array.from(y);\n  let stopCriterion = getStopCriterion(y, tolerance);\n\n  const { length } = y;\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\n    length,\n    lambda,\n  );\n\n  let threshold = 1;\n  const l = length - 1;\n  let prevNegSum = Number.MAX_SAFE_INTEGER;\n  for (\n    iteration = 0;\n    iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion;\n    iteration++\n  ) {\n    let [leftHandSide, rightHandSide] = updateSystem(\n      lowerTriangularNonZeros,\n      y,\n      weights,\n    );\n\n    let cho = cholesky(leftHandSide, length, permutationEncodedArray);\n\n    baseline = cho(rightHandSide);\n\n    sumNegDifferences = applyCorrection(y, baseline, corrected);\n    if (iteration === 1) {\n      const { positive } = xNoiseSanPlot(corrected);\n      threshold = positive;\n    } else {\n      const absChange = Math.abs(prevNegSum / sumNegDifferences);\n      if (absChange < 1.01 && absChange > 0.99) {\n        break;\n      }\n    }\n\n    prevNegSum = sumNegDifferences + 0;\n    for (let i = 1; i < l; i++) {\n      const diff = corrected[i];\n      if (controlPoints[i] < 1 && Math.abs(diff) > threshold) {\n        weights[i] = 0;\n      } else {\n        const factor = diff > 0 ? -1 : 1;\n        weights[i] = Math.exp(\n          (factor * (iteration * diff)) / Math.abs(sumNegDifferences),\n        );\n      }\n    }\n\n    weights[0] = 1;\n    weights[l] = 1;\n  }\n\n  return {\n    corrected,\n    baseline,\n    iteration,\n    error: sumNegDifferences,\n  };\n\n  function applyCorrection(y, baseline, corrected) {\n    let sumNegDifferences = 0;\n    for (let i = 0; i < y.length; i++) {\n      let diff = y[i] - baseline[i];\n      if (diff < 0) sumNegDifferences += diff;\n      corrected[i] = diff;\n    }\n\n    return sumNegDifferences;\n  }\n}\n\nfunction getStopCriterion(y, tolerance) {\n  let sum = xAbsoluteSum(y);\n  return tolerance * sum;\n}\n","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","import { isAnyArray } from 'is-any-array';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array<number>}\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isAnyArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport { sequentialFill as default };\n","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\nexport class PolynomialRegression extends BaseRegression {\n    /**\n     * @param x - independent or explanatory variable\n     * @param y - dependent or response variable\n     * @param degree - degree of the polynomial regression, or array of powers to be used. When degree is an array, intercept at zero is forced to false/ignored.\n     * @example `new PolynomialRegression(x, y, 2)`, in this case, you can pass the option `interceptAtZero`, if you need it.\n     * @param options\n     * @example `new PolynomialRegression(x, y, [1, 3, 5])`\n     * Each of the degrees corresponds to a column, so if you have them switched, just do:\n     * @example `new PolynomialRegression(x, y, [3, 1, 5])`\n     * @param options.interceptAtZero - force the polynomial regression so that f(0) = 0\n     */\n    constructor(x, y, degree, options = {}) {\n        super();\n        // @ts-expect-error internal use only\n        if (x === true) {\n            // @ts-expect-error internal use only\n            this.degree = y.degree;\n            // @ts-expect-error internal use only\n            this.powers = y.powers;\n            // @ts-expect-error internal use only\n            this.coefficients = y.coefficients;\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y, degree, options);\n            this.degree = result.degree;\n            this.powers = result.powers;\n            this.coefficients = result.coefficients;\n        }\n    }\n    _predict(x) {\n        let y = 0;\n        for (let k = 0; k < this.powers.length; k++) {\n            y += this.coefficients[k] * x ** this.powers[k];\n        }\n        return y;\n    }\n    toJSON() {\n        return {\n            name: 'polynomialRegression',\n            degree: this.degree,\n            powers: this.powers,\n            coefficients: this.coefficients,\n        };\n    }\n    toString(precision) {\n        return this._toFormula(precision, false);\n    }\n    toLaTeX(precision) {\n        return this._toFormula(precision, true);\n    }\n    _toFormula(precision, isLaTeX) {\n        let sup = '^';\n        let closeSup = '';\n        let times = ' * ';\n        if (isLaTeX) {\n            sup = '^{';\n            closeSup = '}';\n            times = '';\n        }\n        let fn = '';\n        let str = '';\n        for (let k = 0; k < this.coefficients.length; k++) {\n            str = '';\n            if (this.coefficients[k] !== 0) {\n                if (this.powers[k] === 0) {\n                    str = maybeToPrecision(this.coefficients[k], precision);\n                }\n                else if (this.powers[k] === 1) {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x`;\n                }\n                else {\n                    str = `${maybeToPrecision(this.coefficients[k], precision) + times}x${sup}${this.powers[k]}${closeSup}`;\n                }\n                if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n                    str = ` + ${str}`;\n                }\n                else if (k !== this.coefficients.length - 1) {\n                    str = ` ${str}`;\n                }\n            }\n            fn = str + fn;\n        }\n        if (fn.startsWith('+')) {\n            fn = fn.slice(1);\n        }\n        return `f(x) = ${fn}`;\n    }\n    static load(json) {\n        if (json.name !== 'polynomialRegression') {\n            throw new TypeError('not a polynomial regression model');\n        }\n        // @ts-expect-error internal use only\n        return new PolynomialRegression(true, json);\n    }\n}\n/**\n * Perform a polynomial regression on the given data set.\n * This is an internal function.\n * @param x - independent or explanatory variable\n * @param y - dependent or response variable\n * @param degree - degree of the polynomial regression\n * @param options.interceptAtZero - force the polynomial regression so that $f(0) = 0$\n * @param options\n */\nfunction regress(x, y, degree, options = {}) {\n    const n = x.length;\n    let { interceptAtZero = false } = options;\n    let powers = [];\n    if (Array.isArray(degree)) {\n        powers = degree;\n        interceptAtZero = false; //must be false in this case\n    }\n    else if (typeof degree === 'number') {\n        if (interceptAtZero) {\n            powers = new Array(degree);\n            for (let k = 0; k < degree; k++) {\n                powers[k] = k + 1;\n            }\n        }\n        else {\n            powers = new Array(degree + 1);\n            for (let k = 0; k <= degree; k++) {\n                powers[k] = k;\n            }\n        }\n    }\n    const nCoefficients = powers.length; //1 per power, in any case.\n    const F = new Matrix(n, nCoefficients);\n    const Y = new Matrix([y]);\n    for (let k = 0; k < nCoefficients; k++) {\n        for (let i = 0; i < n; i++) {\n            if (powers[k] === 0) {\n                F.set(i, k, 1);\n            }\n            else {\n                F.set(i, k, x[i] ** powers[k]);\n            }\n        }\n    }\n    const FT = new MatrixTransposeView(F);\n    const A = FT.mmul(F);\n    const B = FT.mmul(new MatrixTransposeView(Y));\n    return {\n        coefficients: solve(A, B).to1DArray(),\n        degree: Math.max(...powers),\n        powers,\n    };\n}\n//# sourceMappingURL=index.js.map","import sequentialFill from 'ml-array-sequential-fill';\nimport { baselineCorrectionRegression } from 'ml-baseline-correction-regression';\n\n/**\n * Iterative polynomial fitting [1]\n *\n * Implementation based on ml-baseline-correction-regression\n *\n * References:\n * [1] Gan, F.; Ruan, G.; Mo, J.\n * Baseline Correction by Improved Iterative Polynomial Fitting with Automatic Threshold.\n *  Chemometrics and Intelligent Laboratory Systems 2006, 82 (1), 59–65.\n * https://doi.org/10.1016/j.chemolab.2005.08.009.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {Object} [options.regression]\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {Object} [options.regression]\n * @param {function} [options.regression.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {Object} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n\n  let output = baselineCorrectionRegression(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { PolynomialRegression } from 'ml-regression-polynomial';\n\n/**\n * Iterative regression-based baseline correction\n * @param {Array<number>} x - Independent axis variable\n * @param {Array<number>} y - Dependent axis variable\n * @param {object} [options] - Options object\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regressionOptions] - Options for regressionFunction\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\n */\nexport function baselineCorrectionRegression(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    Regression = PolynomialRegression,\n    regressionOptions,\n    tolerance = 0.001,\n  } = options;\n\n  if (!regressionOptions && Regression === PolynomialRegression) {\n    regressionOptions = 3;\n  }\n\n  let baseline = y.slice();\n  let fitting = y.slice();\n  let oldFitting = y;\n  let iteration = 0;\n  let delta;\n  let regression;\n  while (iteration < maxIterations) {\n    // Calculate the fitting result\n    regression = new Regression(x, baseline, regressionOptions);\n\n    delta = 0;\n    for (let i = 0; i < baseline.length; i++) {\n      fitting[i] = regression.predict(x[i]);\n      if (baseline[i] > fitting[i]) {\n        baseline[i] = fitting[i];\n      }\n\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\n    }\n\n    // Stop criterion\n    if (delta < tolerance) {\n      break;\n    } else {\n      oldFitting = fitting.slice();\n      iteration++;\n    }\n  }\n\n  // removes baseline\n  let corrected = new Array(baseline.length);\n  for (let j = 0; j < baseline.length; j++) {\n    corrected[j] = y[j] - baseline[j];\n  }\n\n  return {\n    corrected,\n    delta,\n    iteration,\n    baseline,\n    regression,\n  };\n}\n","import { xRollingAverage } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingAverageBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingAverage(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { xMean } from \"./xMean.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","import { rollingBall } from 'ml-rolling-ball-baseline';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Algorithm described in (1), but in the implementation here the window width does not change.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(ys, options = {}) {\n  const baseline = rollingBall(ys, options);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { isAnyArray } from 'is-any-array';\nimport { xMean, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function rollingBall(spectrum, options = {}) {\n    if (!isAnyArray(spectrum)) {\n        throw new Error('Spectrum must be an array');\n    }\n    if (spectrum.length === 0) {\n        throw new TypeError('Spectrum must not be empty');\n    }\n    const numberPoints = spectrum.length;\n    const maxima = new Float64Array(numberPoints);\n    const minima = new Float64Array(numberPoints);\n    const baseline = new Float64Array(numberPoints);\n    // windowM 4 percent of spectrum length\n    // windowS 8 percent of spectrum length\n    const { windowM = Math.round(numberPoints * 0.04), windowS = Math.round(numberPoints * 0.08), } = options;\n    // fi(1) in original paper\n    for (let i = 0; i < spectrum.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, spectrum.length);\n        minima[i] = xMinValue(spectrum, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    // fi in original paper\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowM);\n        const windowRight = Math.min(i + windowM + 1, minima.length);\n        maxima[i] = xMaxValue(minima, {\n            fromIndex: windowLeft,\n            toIndex: windowRight,\n        });\n    }\n    for (let i = 0; i < minima.length; i++) {\n        const windowLeft = Math.max(0, i - windowS);\n        const windowRight = Math.min(i + windowS + 1, maxima.length);\n        baseline[i] = xMean(maxima.subarray(windowLeft, windowRight));\n    }\n    return baseline;\n}\n//# sourceMappingURL=rollingBall.js.map","import { xRollingMedian } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingMedianBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = { ...defaults, ...options };\n  let baseline = xRollingMedian(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline, correctedSpectrum: corrected };\n}\n","import { xMedian } from \"./xMedian.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm\n * @param [ys] Array of y values\n * @param [xs] Array of X or deltaX\n * @return  Array containing the new ys (same length)\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","export function getMinMaxIntervalsDy(y, x, dY, dX) {\n    let lastMax = null;\n    let lastMin = null;\n    const intervalL = [];\n    const intervalR = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n    }\n    return { intervalL, intervalR };\n}\n//# sourceMappingURL=getMinMaxIntervals.js.map","export function tryMatchOneIntervalWithMinData(options) {\n    const { x, lastK, minData, yThreshold, intervalWidth, intervalCenter, yData, } = options;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let possible = -1;\n    let newLastIndex = lastK;\n    for (let k = newLastIndex + 1; k < minData.length; k++) {\n        const centerIndex = minData[k];\n        if (yData[centerIndex] <= yThreshold) {\n            continue;\n        }\n        const deltaX = x[centerIndex];\n        const currentDistance = Math.abs(deltaX - intervalCenter);\n        if (currentDistance < intervalWidth) {\n            if (currentDistance < minDistance) {\n                possible = k;\n            }\n            newLastIndex = k;\n        }\n        if (currentDistance >= minDistance)\n            break;\n        minDistance = currentDistance;\n    }\n    return { lastIndex: newLastIndex, possible };\n}\n//# sourceMappingURL=tryMatchOneIntervalWithMinData.js.map","import { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\nexport function getPeakFromIntervals(options) {\n    let lastK = -1;\n    const peaks = [];\n    const { x, ddY, yData, yThreshold, intervalR, intervalL, minData } = options;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        const { possible = -1, lastIndex } = tryMatchOneIntervalWithMinData({\n            x,\n            lastK,\n            minData,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            yData,\n        });\n        if (possible !== -1) {\n            const centerIndex = minData[possible];\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[centerIndex],\n                y: yData[centerIndex],\n                width,\n                index: centerIndex,\n                ddY: ddY[centerIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n        lastK = lastIndex;\n    }\n    return peaks;\n}\n//# sourceMappingURL=getPeaksFromIntervals.js.map","/**\n * Finds the indices where the first derivative crosses zero (sign change),\n * which are potential peak positions. This function does not detect zero-crossings\n * in regions with consecutive zero values in the derivative (flat regions).\n *\n * @param input - Object containing the y values and their first derivative (dY).\n * @returns Array of indices where the first derivative crosses zero (excluding consecutive zeros).\n */\nexport function xGetCrossZeroPoints(input) {\n    const { y, dY } = input;\n    const crossDy = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if (isLessAndGreaterThanZero(dY[i], dY[i + 1])) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        else if (\n        // Handle exact zero\n        dY[i] === 0 &&\n            isLessAndGreaterThanZero(dY[i - 1], dY[i + 1])) {\n            crossDy.push(i);\n        }\n    }\n    return crossDy;\n}\nfunction isLessAndGreaterThanZero(back, next) {\n    return (back < 0 && next > 0) || (back > 0 && next < 0);\n}\n//# sourceMappingURL=xGetCrossZeroPoints.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\nimport { xGetCrossZeroPoints } from \"./xGetCrossZeroPoints.js\";\nexport function firstDerivative(input) {\n    const { y, x, dY, dX, yData, yThreshold, ddY } = input;\n    const crossDy = xGetCrossZeroPoints(input);\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    return getPeakFromIntervals({\n        minData: crossDy,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=firstDerivative.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { autoAlgorithm } from \"./algorithms/autoAlgorithm.js\";\nimport { firstDerivative } from \"./algorithms/firstDerivative.js\";\nimport { secondDerivative } from \"./algorithms/secondDerivative.js\";\nimport { optimizeTop } from \"./utils/optimizeTop.js\";\n/**\n * Global spectra deconvolution\n * @param  data - Object data with x and y arrays. Values in x has to be growing\n * @param options\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, peakDetectionAlgorithm = 'second', } = options;\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const isEquallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (isEquallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else if (!maxCriteria) {\n        noiseLevel *= -1;\n    }\n    if (!maxCriteria) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = isEquallySpaced ? x[1] - x[0] : x;\n    const yData = smoothY\n        ? sgg(y, xValue, {\n            ...sgOptions,\n            derivative: 0,\n        })\n        : y;\n    const { min: minY, max: maxY } = xMinMaxValues(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const dY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 1,\n    });\n    const ddY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 2,\n    });\n    const yThreshold = Math.max(noiseLevel, minY + (maxY - minY) * minMaxRatio);\n    const dX = x[1] - x[0];\n    const peakData = { x, y, yData, dY, ddY, dX, yThreshold };\n    let peaks = [];\n    if (peakDetectionAlgorithm === 'first') {\n        peaks = firstDerivative(peakData);\n    }\n    else if (peakDetectionAlgorithm === 'second') {\n        peaks = secondDerivative(peakData);\n    }\n    else {\n        peaks = autoAlgorithm(peakData);\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    peaks.forEach((peak) => {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    });\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - Monotone growing array of number\n * @param options\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\nexport function secondDerivative(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < y.length - 1; ++i) {\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    return getPeakFromIntervals({\n        minData: minddY,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=secondDerivative.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\nexport function autoAlgorithm(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const crossDy = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < 0 && dY[i + 1] > 0) || (dY[i] > 0 && dY[i + 1] < 0)) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        // Handle exact zero\n        if (dY[i] === 0 &&\n            dY[i] < Math.abs(dY[i + 1]) &&\n            dY[i] < Math.abs(dY[i - 1])) {\n            crossDy.push(i);\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    const peaks = [];\n    let [lastK, lastJ] = [-1, -1];\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        let yIndex = -1;\n        let match = tryMatchOneIntervalWithMinData({\n            x,\n            yData,\n            lastK,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            minData: crossDy,\n        });\n        lastK = match.lastIndex;\n        if (match.possible !== -1) {\n            yIndex = crossDy[match.possible];\n        }\n        else {\n            match = tryMatchOneIntervalWithMinData({\n                x,\n                yData,\n                yThreshold,\n                lastK: lastJ,\n                intervalWidth,\n                intervalCenter,\n                minData: minddY,\n            });\n            if (match.possible !== -1) {\n                yIndex = minddY[match.possible];\n            }\n            lastJ = match.lastIndex;\n        }\n        if (yIndex !== -1) {\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[yIndex],\n                y: y[yIndex],\n                width,\n                index: yIndex,\n                ddY: ddY[yIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n    }\n    return peaks;\n}\n//# sourceMappingURL=autoAlgorithm.js.map","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = 20 * Math.log10(y[currentIndex - 1]);\n            const beta = 20 * Math.log10(y[currentIndex]);\n            const gamma = 20 * Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","//@ts-expect-error no type definition for baselines\nimport { airPLSBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function airPLSBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=airPLSBaseline.js.map","import airpls from 'ml-airpls';\nimport sequentialFill from 'ml-array-sequential-fill';\n/**\n * Adaptive iteratively reweighted penalized least squares [1]\n *\n * This function calls ml-airpls\n *\n * References:\n * [1] Zhang, Z.-M.; Chen, S.; Liang, Y.-Z.\n * Baseline Correction Using Adaptive Iteratively Reweighted Penalized Least Squares.\n * Analyst 2010, 135 (5), 1138–1146. https://doi.org/10.1039/B922045C.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {object} [options.regression] - Options for the regression\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.regression.§Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import { gsd } from 'ml-gsd';\nimport { xAdd, xFindClosestIndex, xMean } from 'ml-spectra-processing';\n/**\n * Filter that allows to calibrateX the x axis based on the presence of peaks\n * @param data\n * @param options\n */\nexport function calibrateX(data, options = {}) {\n    const { targetX = 0, nbPeaks = 1, from = data.x[0], to = data.x.at(-1), gsd: gsdOptions = {\n        minMaxRatio: 0.1,\n        realTopDetection: true,\n        smoothY: true,\n        sgOptions: {\n            windowSize: 7,\n            polynomial: 3,\n        },\n    }, } = options;\n    const fromIndex = xFindClosestIndex(data.x, from);\n    const toIndex = xFindClosestIndex(data.x, to);\n    let peaks = gsd({\n        x: data.x.subarray(fromIndex, toIndex),\n        y: data.y.subarray(fromIndex, toIndex),\n    }, gsdOptions);\n    peaks.sort((a, b) => b.y - a.y);\n    peaks = peaks.slice(0, nbPeaks);\n    if (peaks.length < nbPeaks)\n        return { data };\n    const middle = xMean(peaks.map((peak) => peak.x));\n    return { data: { x: xAdd(data.x, targetX - middle), y: data.y } };\n}\n//# sourceMappingURL=calibrateX.js.map","import { xMean } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function centerMean(data) {\n    const { y } = data;\n    const mean = xMean(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= mean;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMean.js.map","import { xMedian } from 'ml-spectra-processing';\n/**\n * Center the median\n * @param data\n */\nexport function centerMedian(data) {\n    const { y } = data;\n    const median = xMedian(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] -= median;\n    }\n    return { data };\n}\n//# sourceMappingURL=centerMedian.js.map","import { xStandardDeviation } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n */\nexport function divideBySD(data) {\n    const { y } = data;\n    const sd = xStandardDeviation(y);\n    for (let i = 0; i < y.length; i++) {\n        y[i] /= sd;\n    }\n    return { data };\n}\n//# sourceMappingURL=divideBySD.js.map","import { xyEnsureGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function ensureGrowing(data) {\n    return { data: xyEnsureGrowingX(data) };\n}\n//# sourceMappingURL=ensureGrowing.js.map","import { xyEquallySpaced } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function equallySpaced(data, options = {}) {\n    return { data: xyEquallySpaced(data, options) };\n}\n//# sourceMappingURL=equallySpaced.js.map","import { xyFilterX } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function filterX(data, options = {}) {\n    return {\n        data: xyFilterX(data, options),\n    };\n}\n//# sourceMappingURL=filterX.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the first derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function firstDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 1 }) } };\n}\n//# sourceMappingURL=firstDerivative.js.map","import { xGetFromToIndex } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function fromTo(data, options = {}) {\n    const { fromIndex, toIndex } = xGetFromToIndex(data.x, options);\n    return {\n        data: {\n            x: data.x.subarray(fromIndex, toIndex + 1),\n            y: data.y.subarray(fromIndex, toIndex + 1),\n        },\n    };\n}\n//# sourceMappingURL=fromTo.js.map","//@ts-expect-error no type definition for baselines\nimport { iterativePolynomialBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function iterativePolynomialBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=iterativePolynomialBaseline.js.map","import { xNormed } from 'ml-spectra-processing';\n/**\n * Norm the Y values\n * @param data\n * @param options\n */\nexport function normed(data, options = {}) {\n    xNormed(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=normed.js.map","import { xParetoNormalization } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n */\nexport function paretoNormalization(data) {\n    return {\n        data: {\n            x: data.x,\n            y: xParetoNormalization(data.y),\n        },\n    };\n}\n//# sourceMappingURL=paretoNormalization.js.map","import { xRescale } from 'ml-spectra-processing';\n/**\n * Center the mean\n * @param data\n * @param options\n */\nexport function rescale(data, options = {}) {\n    xRescale(data.y, { ...options, output: data.y });\n    return { data };\n}\n//# sourceMappingURL=rescale.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { xyGrowingX } from 'ml-spectra-processing';\n/**\n * Ensure X values are strictly monotonic increasing\n * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html\n * @param data\n */\nexport function reverseIfNeeded(data) {\n    return { data: xyGrowingX(data) };\n}\n//# sourceMappingURL=reverseIfNeeded.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingAverageBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingAverageBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingAverageBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingBallBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingBallBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingBallBaseline.js.map","//@ts-expect-error no type definition for baselines\nimport { rollingMedianBaseline as baselineFct } from 'baselines';\n/**\n * @param data\n */\nexport function rollingMedianBaseline(data) {\n    data.y = baselineFct(data.y).correctedSpectrum;\n    return { data };\n}\n//# sourceMappingURL=rollingMedianBaseline.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Apply the Savitzky Golay Generalized Filter\n * @param data\n * @param options\n */\nexport function savitzkyGolay(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, options) } };\n}\n//# sourceMappingURL=savitzkyGolay.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the second derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function secondDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 2 }) } };\n}\n//# sourceMappingURL=secondDerivative.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxX(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.x);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, max - existingMax),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMaxX.js.map","import { xAdd, xMaxValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMaxY(data, options = {}) {\n    const { max = 1 } = options;\n    const existingMax = xMaxValue(data.y);\n    if (existingMax === max) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, max - existingMax),\n        },\n    };\n}\n//# sourceMappingURL=setMaxY.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinX(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.x);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: xAdd(data.x, min - existingMin),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=setMinX.js.map","import { xAdd, xMinValue } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function setMinY(data, options = {}) {\n    const { min = 0 } = options;\n    const existingMin = xMinValue(data.y);\n    if (existingMin === min) {\n        return { data };\n    }\n    return {\n        data: {\n            x: data.x,\n            y: xAdd(data.y, min - existingMin),\n        },\n    };\n}\n//# sourceMappingURL=setMinY.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\n/**\n * Calculate the third derivative using Savitzky–Golay filter.\n * @param data\n * @param options\n */\nexport function thirdDerivative(data, options = {}) {\n    const { x, y } = data;\n    return { data: { x, y: sgg(y, x, { ...options, derivative: 3 }) } };\n}\n//# sourceMappingURL=thirdDerivative.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function xFunction(data, options = {}) {\n    return {\n        data: {\n            x: xApplyFunctionStr(data.x, {\n                variableLabel: 'x',\n                fctString: options.function,\n            }),\n            y: data.y,\n        },\n    };\n}\n//# sourceMappingURL=xFunction.js.map","import { xApplyFunctionStr } from 'ml-spectra-processing';\n/**\n * Filter that allows to\n * @param data\n * @param options\n */\nexport function yFunction(data, options = {}) {\n    return {\n        data: {\n            x: data.x,\n            y: xApplyFunctionStr(data.y, {\n                variableLabel: 'y',\n                fctString: options.function,\n            }),\n        },\n    };\n}\n//# sourceMappingURL=yFunction.js.map","import { filterXY } from 'ml-signal-processing';\nimport { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    const data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    const newSpectrum = {\n        variables: {\n            x: {\n                data: spectrum.variables.x.data,\n                units: spectrum.variables.x.units,\n                label: spectrum.variables.x.label,\n            },\n            y: {\n                data: spectrum.variables.y.data,\n                units: spectrum.variables.y.units,\n                label: spectrum.variables.y.label,\n            },\n        },\n    };\n    if (spectrum.title)\n        newSpectrum.title = spectrum.title;\n    if (spectrum.dataType)\n        newSpectrum.dataType = spectrum.dataType;\n    if (spectrum.meta)\n        newSpectrum.meta = spectrum.meta;\n    if (spectrum.id)\n        newSpectrum.id = spectrum.id;\n    const { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, applyRangeSelectionFirst = false, exclusions = [], zones = [], } = options;\n    let { filters = [] } = options;\n    filters = structuredClone(filters);\n    if (numberOfPoints) {\n        if (applyRangeSelectionFirst) {\n            filters.unshift({\n                name: 'equallySpaced',\n                options: { from, to, exclusions, zones, numberOfPoints },\n            });\n        }\n        else {\n            filters.push({\n                name: 'equallySpaced',\n                options: { from, to, exclusions, zones, numberOfPoints },\n            });\n        }\n    }\n    else if (applyRangeSelectionFirst) {\n        filters.unshift({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    else {\n        filters.push({\n            name: 'filterX',\n            options: { from, to, exclusions, zones },\n        });\n    }\n    const { x, y } = filterXY(data, filters).data;\n    // filters change the y axis, we get rid of the units\n    // TODO we should deal correctly with this problem\n    if (filters.length > 1) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label = newSpectrum.variables.y.label?.replace(/\\s*\\[.*]/, '');\n    }\n    newSpectrum.variables.x.data = x;\n    newSpectrum.variables.x.min = xMinValue(x);\n    newSpectrum.variables.x.max = xMaxValue(x);\n    newSpectrum.variables.x.isMonotonic = xIsMonotonic(x);\n    newSpectrum.variables.y.data = y;\n    newSpectrum.variables.y.min = xMinValue(y);\n    newSpectrum.variables.y.max = xMaxValue(y);\n    newSpectrum.variables.y.isMonotonic = xIsMonotonic(y);\n    return newSpectrum;\n}\n//# sourceMappingURL=getNormalizedSpectrum.js.map","import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing';\nimport * as Filters from \"./filters/filters.js\";\n/**\n * Apply filters on {x:[], y:[]}\n * @param data\n * @param filters\n * @returns\n */\nexport function filterXY(data, filters) {\n    let result = {\n        data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }),\n    };\n    const logs = [];\n    for (const filter of filters) {\n        const start = Date.now();\n        if (!filter.name) {\n            // we ignore empty filter names\n            continue;\n        }\n        const filterFct = Filters[filter.name];\n        if (!filterFct) {\n            throw new Error(`Unknown filter: ${filter.name}`);\n        }\n        // @ts-expect-error some method have options and some other ones don't have any options\n        result = filterFct(result.data, filter.options);\n        result.data = xyGrowingX(result.data);\n        logs.push({\n            name: filter.name,\n            time: Date.now() - start,\n        });\n    }\n    return { logs, data: result.data };\n}\n//# sourceMappingURL=filterXY.js.map","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n})(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"t\",\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* molar_concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"molar_concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"molar_concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\",\"Joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<electronvolt>\" : [[\"eV\", \"electronvolt\", \"electronvolts\"], 1.602176634E-19, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<arcminute>\" :[[\"arcmin\",\"arcminute\",\"arcminutes\"], Math.PI / 10800.0, \"angle\", [\"<radian>\"]],\n    \"<arcsecond>\" :[[\"arcsec\",\"arcsecond\",\"arcseconds\"], Math.PI / 648000.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppb>\" :  [[\"ppb\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-12, \"prefix_only\", [\"<1>\"]],\n    \"<ppq>\" :  [[\"ppq\"],1e-15, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.8.0\";\n\n  return Qty;\n\n}));\n","import Qty from 'js-quantities';\nexport function convertUnit(array, fromUnit, toUnit) {\n    fromUnit = normalize(fromUnit);\n    toUnit = normalize(toUnit);\n    if (fromUnit === toUnit)\n        return array;\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    //@ts-expect-error convert does not allowed typed array but it works\n    return convert(array);\n}\nfunction normalize(unit) {\n    unit = unit.replaceAll('°C', 'tempC');\n    unit = unit.replaceAll('°F', 'tempF');\n    unit = unit.replaceAll(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n    return unit;\n}\n//# sourceMappingURL=convertUnit.js.map","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([gimuy]{0,5})?$/;\nexport function ensureRegexp(string) {\n    if (typeof string !== 'string')\n        return string;\n    const parts = testRegExp.exec(string);\n    if (parts) {\n        try {\n            return new RegExp(parts[1], parts[2]);\n        }\n        catch {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replaceAll(/[$()*+.?[\\\\\\]^{|}]/g, (match) => `\\\\${match}`), flags);\n}\n//# sourceMappingURL=ensureRegexp.js.map","import { xIsMonotonic, xMaxValue, xMinValue } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit.js';\nexport function getConvertedVariable(variable, newUnits) {\n    const data = variable.units !== undefined && variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n        ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n        : variable.data;\n    return {\n        units: newUnits,\n        label: variable.label.replace(`[${variable.units || ''}]`, `[${newUnits}]`),\n        data: data || [],\n        min: data ? xMinValue(data) : undefined,\n        max: data ? xMaxValue(data) : undefined,\n        isMonotonic: xIsMonotonic(data),\n    };\n}\n//# sourceMappingURL=getConvertedVariable.js.map","/* eslint-disable @typescript-eslint/no-dynamic-delete */\nimport { convertUnit } from './convertUnit.js';\nimport { ensureRegexp } from './ensureRegexp.js';\nimport { getConvertedVariable } from './getConvertedVariable.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectra(spectra = [], selector = {}) {\n    const selectedSpectra = [];\n    if (spectra.length === 0)\n        return selectedSpectra;\n    const { variables, units, labels, meta, index } = selector;\n    let { dataType, title, xUnits, yUnits, xVariable = 'x', yVariable = 'y', xLabel, yLabel, } = selector;\n    if (index !== undefined) {\n        return [spectra[index]];\n    }\n    if (dataType) {\n        dataType = ensureRegexp(dataType);\n    }\n    if (title) {\n        title = ensureRegexp(title);\n    }\n    if (units && !xUnits && !yUnits)\n        [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n    if (labels && !xLabel && !yLabel) {\n        [yLabel, xLabel] = labels.split(/\\s*vs\\s*/);\n    }\n    if (variables) {\n        const parts = variables.split(/\\s*vs\\s*/);\n        if (parts.length === 2) {\n            xVariable = parts[1];\n            yVariable = parts[0];\n        }\n    }\n    if (xLabel)\n        xLabel = ensureRegexp(xLabel);\n    if (yLabel)\n        yLabel = ensureRegexp(yLabel);\n    for (const spectrum of spectra) {\n        const variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        // we filter on general spectrum information\n        if (dataType &&\n            (!spectrum.dataType || !dataType.exec(spectrum.dataType))) {\n            continue;\n        }\n        if (title && (!spectrum.title || !title.exec(spectrum.title))) {\n            continue;\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (const key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                const value = ensureRegexp(spectrum.meta[key]);\n                if (!value.exec(spectrum.meta[key]))\n                    continue;\n            }\n        }\n        const x = getPossibleVariable(spectrum.variables, {\n            units: xUnits,\n            label: xLabel,\n            variableName: xVariable,\n        });\n        const y = getPossibleVariable(spectrum.variables, {\n            units: yUnits,\n            label: yLabel,\n            variableName: yVariable,\n        });\n        if (x && y) {\n            // should we reverse the x-axis?\n            if (x.data[0] > x.data.at(-1)) {\n                x.data = x.data.toReversed();\n                y.data = y.data.toReversed();\n            }\n            selectedSpectra.push({\n                title: spectrum.title,\n                dataType: spectrum.dataType,\n                meta: spectrum.meta,\n                variables: { x, y },\n                id: spectrum.id,\n            });\n        }\n    }\n    return selectedSpectra;\n}\nfunction getPossibleVariable(variables, selector = {}) {\n    const { units, label, variableName } = selector;\n    const possible = { ...variables };\n    let key;\n    if (units !== undefined) {\n        for (key in possible) {\n            const variable = variables[key];\n            let convertibleUnits = true;\n            try {\n                convertUnit(1, variable?.units || '', units);\n            }\n            catch {\n                convertibleUnits = false;\n            }\n            if (convertibleUnits && variable) {\n                possible[key] = getConvertedVariable(variable, units);\n            }\n            else {\n                delete possible[key];\n            }\n        }\n    }\n    if (label !== undefined) {\n        const regexpLabel = ensureRegexp(label);\n        for (key in possible) {\n            if (!regexpLabel.exec(variables[key]?.label ?? '')) {\n                delete possible[key];\n            }\n        }\n    }\n    if (variableName !== undefined) {\n        if (possible[variableName])\n            return possible[variableName];\n        const upper = variableName.toUpperCase();\n        if (Object.hasOwn(possible, upper)) {\n            return possible[upper];\n        }\n        const lower = variableName.toLowerCase();\n        if (Object.hasOwn(possible, lower)) {\n            return possible[lower];\n        }\n    }\n    const possibleFiltered = Object.values(possible).filter((val) => val !== undefined);\n    if (possibleFiltered.length > 0) {\n        return possibleFiltered[0];\n    }\n}\n//# sourceMappingURL=getXYSpectra.js.map","import { isAnyArray } from 'is-any-array';\nimport { stringify, xIsMonotonic, xMaxValue, xMinValue, } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum.js';\nimport { getXYSpectra } from './util/getXYSpectra.js';\nimport { getXYSpectrum } from './util/getXYSpectrum.js';\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n */\nexport class Analysis {\n    id;\n    label;\n    spectrumCallback;\n    spectra;\n    cache;\n    constructor(options = {}) {\n        this.id = options.id || Math.random().toString(36).slice(2, 10);\n        this.label = options.label || this.id;\n        this.spectrumCallback = options.spectrumCallback;\n        this.spectra = [];\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    clone({ filter = {} }) {\n        const { ids } = filter;\n        const analysis = new Analysis();\n        analysis.id = this.id;\n        analysis.label = this.label;\n        analysis.spectrumCallback = this.spectrumCallback;\n        analysis.spectra = this.spectra.filter((spectrum) => {\n            //@ts-expect-error spectrum.id is not expected to be undefined at this level\n            return !ids || ids.includes(spectrum.id);\n        });\n        return analysis;\n    }\n    toJSON() {\n        // TODO this is likely not the most optimized way to remove typedArray\n        // if data are small seems still reasonable\n        return {\n            id: this.id,\n            label: this.label,\n            spectra: JSON.parse(stringify(this.spectra)),\n        };\n    }\n    static fromJSON(json) {\n        const analysis = new Analysis();\n        analysis.id = json.id;\n        analysis.label = json.label;\n        analysis.spectra = json.spectra;\n        return analysis;\n    }\n    /**\n     * Add a spectrum in the internal spectra variable\n     * @param variables\n     * @param options\n     */\n    pushSpectrum(variables, options = {}) {\n        this.spectra.push(standardizeData(variables, options, {\n            spectrumCallback: this.spectrumCallback,\n        }));\n        this.cache = { spectrum: {}, spectra: {} };\n    }\n    /**\n     * Retrieve a MeasurementXY based on x/y units\n     * @param selector\n     */\n    getXYSpectrum(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectrum[id]) {\n            this.cache.spectrum[id] = getXYSpectrum(this.spectra, selector);\n        }\n        return this.cache.spectrum[id];\n    }\n    /**\n     * Retrieve spectra matching selector\n     * @param selector\n     */\n    getXYSpectra(selector = {}) {\n        const id = JSON.stringify(selector);\n        if (!this.cache.spectra[id]) {\n            this.cache.spectra[id] = getXYSpectra(this.spectra, selector);\n        }\n        return this.cache.spectra[id];\n    }\n    /**\n     * Retrieve a xy object\n     * @param selector.units - Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits - if undefined takes the first variable\n     * @param selector.yUnits - if undefined takes the second variable\n     * @param selector\n     */\n    getXY(selector = {}) {\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return {\n            x: spectrum.variables.x.data,\n            y: spectrum.variables.y.data,\n        };\n    }\n    /**\n     * Return the data object for specific x/y units with possibly some\n     * normalization options\n     * @param options.selector.xUnits - // if undefined takes the first variable\n     * @param options.selector.yUnits - // if undefined takes the second variable\n     * @param options\n     */\n    getNormalizedSpectrum(options = {}) {\n        const { normalization, selector } = options;\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return getNormalizedSpectrum(spectrum, normalization);\n    }\n    /**\n     * @param options\n     */\n    getNormalizedSpectra(options = {}) {\n        const { normalization, selector } = options;\n        const spectra = this.getXYSpectra(selector);\n        if (spectra.length === 0)\n            return [];\n        const normalizedSpectra = [];\n        for (const spectrum of spectra) {\n            normalizedSpectra.push(getNormalizedSpectrum(spectrum, normalization));\n        }\n        return normalizedSpectra;\n    }\n    /**\n     * Returns the first spectrum. This method could be improved in the future\n     * @returns\n     */\n    getSpectrum() {\n        return this.spectra[0];\n    }\n    /**\n     * Returns the xLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getXLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.x.label;\n    }\n    /**\n     * Returns the yLabel\n     * @param selector.xUnits - // if undefined takes the first variable\n     * @param selector.yUnits - // if undefined takes the second variable\n     * @param selector\n     */\n    getYLabel(selector) {\n        return this.getXYSpectrum(selector)?.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n * @param variables\n * @param options\n * @param analysisOptions\n */\nfunction standardizeData(variables, options, analysisOptions) {\n    const { meta = {}, dataType = '', title = '', id = Math.random().toString(36).replace('0.', ''), } = options;\n    const { spectrumCallback } = analysisOptions;\n    if (spectrumCallback) {\n        spectrumCallback(variables);\n    }\n    const xVariable = variables.x;\n    const yVariable = variables.y;\n    if (!xVariable || !yVariable) {\n        throw new Error('A spectrum must contain at least x and y variables');\n    }\n    if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n        throw new Error('x and y variables must contain an array data');\n    }\n    const x = xVariable.data;\n    const reverse = x && x.length > 1 && x[0] > x.at(-1);\n    for (const [key, variable] of Object.entries(variables)) {\n        if (reverse)\n            variable.data = variable.data.toReversed();\n        variable.label = variable.label || key;\n        if (variable.label.match(/^.*[([](?<units>.*)[)\\]].*$/)) {\n            const units = variable.label.replace(/^.*[([](?<units>.*)[)\\]].*$/, '$<units>');\n            if (!variable.units || variable.units === units) {\n                variable.units = units;\n                variable.label = variable.label.replace(/[([].*[)\\]]/, '').trim();\n            }\n        }\n        variable.min = xMinValue(variable.data);\n        variable.max = xMaxValue(variable.data);\n        variable.isMonotonic = xIsMonotonic(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        id,\n    };\n}\n//# sourceMappingURL=Analysis.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Stringify an object and convert all typed arrays to arrays\n * @param object\n * @param replacer\n * @param space\n * @returns\n */\nexport function stringify(object, replacer, space) {\n    const internalReplacer = (key, value) => {\n        if (ArrayBuffer.isView(value)) {\n            value = Array.from(value);\n        }\n        if (replacer) {\n            return replacer(key, value);\n        }\n        return value;\n    };\n    return JSON.stringify(object, internalReplacer, space);\n}\n//# sourceMappingURL=stringify.js.map","import { getXYSpectra } from './getXYSpectra.js';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n * @param spectra\n * @param selector\n */\nexport function getXYSpectrum(spectra = [], selector = {}) {\n    const selectedSpectra = getXYSpectra(spectra, selector);\n    if (selectedSpectra.length === 0)\n        return undefined;\n    return selectedSpectra[0];\n}\n//# sourceMappingURL=getXYSpectrum.js.map","export function appendDistinctParameter(values, key, value) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            values: [],\n            count: 0,\n        };\n    }\n    if (!values[key].values.includes(value)) {\n        values[key].values.push(value);\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctParameter.js.map","export function appendDistinctValue(values, key) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            count: 0,\n        };\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=appendDistinctValue.js.map","import { Analysis } from './Analysis.js';\nimport { appendDistinctParameter } from './util/appendDistinctParameter.js';\nimport { appendDistinctValue } from './util/appendDistinctValue.js';\nexport class AnalysesManager {\n    analyses;\n    constructor() {\n        this.analyses = [];\n    }\n    static fromJSON(json) {\n        const analysesManager = new AnalysesManager();\n        for (const analysis of json.analyses) {\n            analysesManager.analyses.push(Analysis.fromJSON(analysis));\n        }\n        return analysesManager;\n    }\n    addAnalysis(analysis) {\n        const index = this.getAnalysisIndex(analysis.id);\n        if (index === undefined) {\n            this.analyses.push(analysis);\n        }\n        else {\n            this.analyses[index] = analysis;\n        }\n    }\n    /**\n     *\n     * @param options\n     * @returns\n     */\n    getAnalyses(options = {}) {\n        const { ids } = options;\n        const analyses = [];\n        const processedAnalysisIds = new Set();\n        for (const analysis of this.analyses) {\n            if (!ids || ids.includes(analysis.id)) {\n                analyses.push(analysis);\n                processedAnalysisIds.add(analysis.id);\n                continue;\n            }\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id &&\n                    ids.includes(spectrum.id) &&\n                    !processedAnalysisIds.has(analysis.id)) {\n                    analyses.push(analysis.clone({ filter: { ids } }));\n                    processedAnalysisIds.add(analysis.id);\n                }\n            }\n        }\n        return analyses;\n    }\n    getSpectra() {\n        const spectra = [];\n        for (const analysis of this.analyses) {\n            spectra.push(...analysis.spectra);\n        }\n        return spectra;\n    }\n    getAnalysisBySpectrumId(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return analysis;\n            }\n        }\n        return undefined;\n    }\n    getSpectrumById(id) {\n        for (const analysis of this.analyses) {\n            for (const spectrum of analysis.spectra) {\n                if (spectrum.id === id)\n                    return spectrum;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * Get an array of objects (key + count) of all the titles\n     */\n    getDistinctTitles() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.title) {\n                appendDistinctValue(values, spectrum.title);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the units\n     */\n    getDistinctUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    if (variable.units) {\n                        appendDistinctValue(values, variable.units);\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + unit + label + count) of all the units\n     */\n    getDistinctLabelUnits() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    const { label, units } = normalizeLabelUnits(variable.label, variable.units);\n                    const key = label + (units ? ` (${units})` : '');\n                    if (key) {\n                        if (!values[key]) {\n                            values[key] = { key, units, label, count: 0 };\n                        }\n                        values[key].count++;\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the labels\n     */\n    getDistinctLabels() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (const [, variable] of Object.entries(spectrum.variables)) {\n                    appendDistinctValue(values, variable.label.replace(/\\s+[([].*$/, ''));\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the dataTypes\n     */\n    getDistinctDataTypes() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.dataType) {\n                appendDistinctValue(values, spectrum.dataType);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the meta\n     */\n    getDistinctMeta() {\n        const values = {};\n        for (const spectrum of this.getSpectra()) {\n            if (spectrum.meta) {\n                for (const key in spectrum.meta) {\n                    appendDistinctParameter(values, key, spectrum.meta[key]);\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    removeAllAnalyses() {\n        this.analyses.splice(0);\n    }\n    /**\n     * Remove the analysis from the AnalysesManager for the specified id\n     * @param id\n     */\n    removeAnalysis(id) {\n        const index = this.getAnalysisIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.analyses.splice(index, 1);\n    }\n    /**\n     * Returns the index of the analysis in the analyses array\n     * @param id\n     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            const analysis = this.analyses[i];\n            if (analysis.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Checks if the ID of an analysis exists in the AnalysesManager\n     * @param id\n     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !Number.isNaN(index);\n    }\n}\nfunction normalizeLabelUnits(originalLabel, originalUnits) {\n    if (!originalLabel) {\n        return { units: '', label: '' };\n    }\n    if (originalLabel.search(/[([]]/) >= 0) {\n        const [units, label] = originalLabel.split(/\\s*[([]/);\n        return { units: originalUnits || units, label };\n    }\n    return { label: originalLabel, units: originalUnits };\n}\n//# sourceMappingURL=AnalysesManager.js.map","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","export function parseString(value) {\n    if (value.length === 4 || value.length === 5) {\n        const lowercase = value.toLowerCase();\n        if (lowercase === 'true')\n            return true;\n        if (lowercase === 'false')\n            return false;\n    }\n    const number = Number(value);\n    if (number === 0 && !value.includes('0')) {\n        return value;\n    }\n    if (!Number.isNaN(number))\n        return number;\n    return value;\n}\n//# sourceMappingURL=parseString.js.map","import { getGyromagneticNucleus, gyromagneticRatio } from '.';\n/**\n * Returns the gyromagnetic ratio for a given nucleus string.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The gyromagnetic ratio for the nucleus, or null if not found.\n */\nexport function getGyromagneticRatio(nucleus) {\n    const realNucleus = getGyromagneticNucleus(nucleus);\n    if (realNucleus) {\n        return gyromagneticRatio[realNucleus];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticRatio.js.map","import { gyromagneticRatio } from '.';\n/**\n * Attempts to resolve a nucleus string to a canonical gyromagnetic nucleus symbol.\n * @param nucleus - The name or symbol of the nucleus (e.g., '1H', 'proton').\n * @returns The canonical nucleus symbol if found, otherwise null.\n */\nexport function getGyromagneticNucleus(nucleus) {\n    nucleus = nucleus.toLowerCase();\n    if (nucleus === 'proton')\n        return '1H';\n    for (const key in gyromagneticRatio) {\n        if (key.toLowerCase() === nucleus)\n            return key;\n    }\n    if (nucleus in gyromagneticRatio) {\n        return nucleus;\n    }\n    // we try to use only the numbers\n    const nucleusNumber = nucleus.replaceAll(/[^0-9]/g, '');\n    if (!nucleusNumber)\n        return null;\n    const filteredNuclei = [];\n    for (const key in gyromagneticRatio) {\n        if (key.replaceAll(/[^0-9]/g, '') === nucleusNumber) {\n            filteredNuclei.push(key);\n        }\n    }\n    if (filteredNuclei.length === 1) {\n        return filteredNuclei[0];\n    }\n    return null;\n}\n//# sourceMappingURL=getGyromagneticNucleus.js.map","import { gyromagneticRatioMHzT } from './gyromagneticRatioMHzT';\nexport const gyromagneticRatio = Object.fromEntries(Object.entries(gyromagneticRatioMHzT).map(([key, value]) => [\n    key,\n    value * 2 * Math.PI * 1e6,\n]));\nexport * from './gyromagneticRatioMHzT';\nexport * from './getGyromagneticNucleus';\nexport * from './getGyromagneticRatio';\n//# sourceMappingURL=index.js.map","export const gyromagneticRatioMHzT = {\n    '1H': 42.577478615342585,\n    '2H': 6.5359028540009305,\n    '3H': 45.41483815473964,\n    '3He': -32.43604456417949,\n    '6Li': 6.266099405837534,\n    '7Li': 16.548177299618295,\n    '9Be': -5.983379963834242,\n    '10B': 4.57473388220653,\n    '11B': 13.66160796005943,\n    '13C': 10.707746367473973,\n    '14N': 3.076272817251739,\n    '15N': -4.3152552187859134,\n    '17O': -5.7734832203316975,\n    '19F': 40.06924371705693,\n    '21Ne': -3.362579959801532,\n    '22Na': 4.436349259342206,\n    '23Na': 11.268733657034753,\n    '25Mg': -2.607933066661972,\n    '26Al': 4.273225764239245,\n    '27Al': 11.100630067688776,\n    '29Si': -8.461871234008282,\n    '31P': 17.241162495263175,\n    '33S': 3.2688220630834754,\n    '35Cl': 4.175656570906633,\n    '36Cl': 4.897135020041924,\n    '37Cl': 3.4759025124743057,\n    '39Ar': -3.462835209795831,\n    '39K': 1.9893443809332112,\n    '40K': -2.4734743333970806,\n    '41K': 1.091921234883595,\n    '41Ca': -3.4724832349401047,\n    '43Ca': -2.8689916395725414,\n    '45Sc': 10.353659488911559,\n    '47Hi': -2.403068251036403,\n    '49Hi': -2.403730327705445,\n    '50V': 4.248579379465121,\n    '51V': 11.208261084083814,\n    '53Cr': -2.4103147963328766,\n    '53Mn': 10.961289063460638,\n    '55Mn': 10.570707386401027,\n    '57Fe': 1.3818237005731187,\n    '59Co': 10.050933643526891,\n    '60Co': 5.7916463354780205,\n    '61Ni': -3.809518009468367,\n    '63Ni': 7.561612483277437,\n    '63Cu': 11.311420179117773,\n    '65Cu': 12.116874196993763,\n    '67Zn': 2.6674502745948656,\n    '69Ga': 10.23978520568125,\n    '71Ga': 13.010902748192017,\n    '73Ge': -1.4876591727852992,\n    '75As': 7.3090505609529135,\n    '77Se': 8.134221686648205,\n    '79Se': -2.21708568778123,\n    '79Br': 10.695006473323717,\n    '81Br': 11.528409999706447,\n    '81Kr': -1.9753405882294455,\n    '83Kr': -1.6443288722876133,\n    '85Kr': -1.703226109304539,\n    '85Rb': 4.125530397832004,\n    '87Rb': 13.981309683545954,\n    '87Sr': -1.851714225407608,\n    '89Y': -2.0931336103407774,\n    '91Zr': -3.970456361178983,\n    '91Nb': 11.032433266932335,\n    '92Nb': 5.58627189504799,\n    '93Nb': 10.439564904668199,\n    '95Mo': -2.784380854729418,\n    '97Mo': -2.842922370728985,\n    '97Hc': 9.858553909649345,\n    '99Hc': 9.618018745530753,\n    '99Ru': -1.9544329039438861,\n    '101Ru': -2.1892087754004836,\n    '103Rh': -1.3459975123963002,\n    '105Pd': -1.9574819412355304,\n    '107Ag': -1.730633566737207,\n    '109Ag': 1.9896492846623755,\n    '111Cd': -9.05564075618306,\n    '113Cd': -9.471834346492482,\n    '113In': 9.351736155393834,\n    '115In': 9.371724288750167,\n    '115Sn': -13.985934056771613,\n    '117Sn': -15.237563864991529,\n    '119Sn': -15.944940516652968,\n    '121Sn': 3.541456814244654,\n    '121Sb': 10.238667225340981,\n    '123Sb': 5.544238738098897,\n    '125Sb': 5.727834340731468,\n    '123He': -11.217408195958745,\n    '125He': -13.522480388441707,\n    '127I': 8.563831041040862,\n    '129I': 5.6984329097048985,\n    '129Xe': -11.860160502223787,\n    '131Xe': 3.5157686750625525,\n    '133Cs': 5.614148807428737,\n    '134Cs': 5.69655448494487,\n    '135Cs': 5.941920316280481,\n    '137Cs': 6.179527436650749,\n    '133Ba': 11.767759427100511,\n    '135Ba': 4.258996923544905,\n    '137Ba': 4.7641207681939495,\n    '137La': 5.871574670194692,\n    '138La': 5.653524946166542,\n    '139La': 6.052556812291568,\n    '141Pr': 13.00719308615385,\n    '143Nd': -2.319446225429283,\n    '145Nd': -1.4286917595132482,\n    '145Pm': 11.586341708247685,\n    '147Pm': 5.618940151744178,\n    '147Sm': -1.7619079778143567,\n    '149Sm': -1.454172999736274,\n    '151Sm': -1.099177943637708,\n    '150Eu': 4.119249381011216,\n    '151Eu': 10.560340659609437,\n    '152Eu': -4.917588978540037,\n    '153Eu': 4.66319763384053,\n    '154Eu': -5.081728819406879,\n    '155Eu': 4.622340534132499,\n    '155Gd': -1.3166759371083225,\n    '157Gd': -1.7267714528344573,\n    '157Hb': 10.315909503395963,\n    '158Hb': 4.4541353102101295,\n    '159Hb': 10.209193198188421,\n    '161Hy': -1.4604888626975372,\n    '163Hy': 2.04590402269321,\n    '163Ho': 9.190669550527298,\n    '165Ho': 9.059996523742551,\n    '166Ho': 3.941969641339908,\n    '167Er': -1.2246240493510665,\n    '169Hm': -3.5216380718489675,\n    '171Hm': -3.506392885390747,\n    '171Yb': 7.505205293382021,\n    '173Yb': -2.067247283734719,\n    '173Lu': 4.950329831362216,\n    '174Lu': 15.107979780096652,\n    '175Lu': 4.847315928580239,\n    '176Lu': 3.4410563719983727,\n    '177Hf': 1.7227060697789323,\n    '179Hf': -1.0822388475730185,\n    '179Ha': 4.978642320498912,\n    '180Ha': 4.077240422770786,\n    '181Ha': 5.15069513909883,\n    '183W': 1.7896324383305209,\n    '185Re': 9.683742438261751,\n    '187Re': 9.784360668886006,\n    '187Os': 0.9820949116385737,\n    '189Os': 3.3417448716419638,\n    '191Ir': 0.7632756686749131,\n    '193Ir': 0.8283217975633214,\n    '193Pt': 9.162357061390605,\n    '195Pt': 9.258401736077394,\n    '197Au': 0.7378670245778789,\n    '199Hg': 7.68204945629738,\n    '201Hg': -2.8356046812290385,\n    '203Hl': 24.63622131648455,\n    '204Hl': 0.3430166953099643,\n    '205Hl': 24.88014429981608,\n    '205Pb': 2.162987054692344,\n    '207Pb': 9.00380712222511,\n    '207Bi': 6.899124436187426,\n    '208Bi': 6.970099248698476,\n    '209Bi': 6.931478109670983,\n    '209Po': 10.366726791590036,\n    '227Ac': 6.1997091596763925,\n    '229Hh': 1.402557154156299,\n    '231Pa': 10.11264035061969,\n    '233U': -1.7989320020700355,\n    '235U': -0.827595836303406,\n    '237Np': 9.634957841595446,\n    '239Pu': 3.079527664560569,\n    '241Pu': -2.067247283734719,\n    '241Am': 4.878459666630606,\n    '243Am': 4.634536683299075,\n    '243Cm': 1.2196149166576515,\n    '245Cm': 1.0889418898729026,\n    '247Cm': 0.6098074583288254,\n};\n//# sourceMappingURL=gyromagneticRatioMHzT.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import{ensureString as me}from\"ensure-string\";var $=/\\s*\\$\\$.*/;function E(e,m=/\\r\\n/.exec(e)?`\\r\n`:`\n`){return e.split(m).map(o=>o.replace($,\"\")).filter(Boolean).join(m).trim()}function Le(e,m={}){e=me(e);let{flatten:t=!1}=m,o=e.split(/\\r?\\n/),l=[],i=[],n=[],f={title:\"\",jcamp:\"\",children:[]},s=0,u=e.includes(\"## \");for(let c=0;c<o.length;c++){let b=o[c],p=u?b.replaceAll(\" \",\"\"):b;if(p.startsWith(\"##NTUPLES\")&&s++,p.startsWith(\"##TITLE\")){let r=[p.slice(8).trim()];for(let a=c+1;a<o.length&&!o[a].startsWith(\"##\");a++)r.push(o[a].trim());i.push({title:r.join(`\n`),jcamp:`${b}\n`,children:[]}),f=i.at(-1),l.push(f)}else if(p.startsWith(\"##END\")&&s===0&&f){f.jcamp+=`${b}\n`;let r=i.pop();if(!r)throw new Error(\"Not finished\");i.length>0?(f=i.at(-1),f.children?.push(r)):(f=void 0,n.push(r))}else if(f?.jcamp){f.jcamp+=`${b}\n`;let r=p.match(/^##(.*?)=(.+)/);if(r){let a=r[1].replaceAll(/[ _-]/g,\"\").toUpperCase();a===\"DATATYPE\"?f.dataType=r[2].trim():a===\"DATACLASS\"?f.dataClass=r[2].trim():a===\"JCAMPDX\"?f.jcampDX=E(r[2].trim()):a===\"JCAMPCS\"&&(f.jcampCS=E(r[2].trim()))}}p.startsWith(\"##END\")&&s>0&&s--}if(t){for(let c of l)c.children=void 0;return l}else return n}import{parseString as be}from\"dynamic-typing\";import{ensureString as ge}from\"ensure-string\";var te=[\"TIC\",\".RIC\",\"SCANNUMBER\"];function ne(e){let m=e.spectra,t=m.length,o={times:new Array(t),series:{ms:{dimension:2,data:new Array(t)}}},l=[];for(let i of te){let n=k(i);m[0][n]&&(l.push(n),o.series[n]={dimension:1,data:new Array(t)})}for(let i=0;i<t;i++){let n=m[i];o.times[i]=n.pageValue;for(let f of l)o.series[f].data[i]=Number(n[f]);n.data&&(o.series.ms.data[i]=[n.data.x,n.data.y])}e.chromatogram=o}function re(e){return te.includes(e)}function k(e){return e.toLowerCase().replaceAll(/[^a-z0-9]/g,\"\")}function O(e){return e.map(Number)}function V(e,m,t){let{logger:o}=t;o&&(e.xFactor||o.info(\"The xFactor is not defined, it will be set to 1\"),e.yFactor||o.info(\"The yFactor is not defined, it will be set to 1\"));let l=e.yFactor??1,i=e.xFactor??1,n=e.deltaX??1,f=Math.abs(n*.1),s=.01;e.isXYdata=!0;let u={x:[],y:[]};e.data=u;let c=e.firstX||0,b=e.firstY||0,p=!1,r,a=0;for(;a<m.length;a++)if(r=m.codePointAt(a),r===13||r===10)p=!0;else if(p)break;let d=0,g=!0,A=!1,x=!1,I=0,S=!1,C=!1,h=0,X=0,L=!1,N=!1,Y=!1,F=0;for(;a<=m.length;a++)if(a===m.length?r=13:r=m.codePointAt(a),C)(r===13||r===10)&&(g=!0,C=!1,d++);else if(r<=57&&r>=48)N=!0,F>0?h+=(r-48)/10**F++:(h*=10,h+=r-48);else if(r===44||r===46)N=!0,F++;else{if(N){if(L&&(h=h*-1,L=!1),g)h*=i,o&&(x?Math.abs(c-n-h)>f&&(Math.abs(c-h)<f?o.trace(`Data line ${d}: After a DIFFERENCE the next line should repeat the last value and this does not seem to be the case: Current value: ${h} - Expected: ${c}.`):Math.abs(c-n-h)>10*f?o.trace(`Data line ${d}: The difference between the first value ${h} and the expected first x value ${c} based on increment after a DIFFERENCE is too high`):o.trace(`Data line ${d}: The difference between the first value ${h} and the expected first x value ${c} based on increment after a DIFFERENCE is too high`)):Math.abs(c-h)>f&&o.trace(`Data line ${d}: The difference between the first value ${h} and the first x value ${c} is too high`)),g=!1,x&&(Y=!0);else if(Y)Y=!1,o&&Math.abs(b-h)>s&&o.trace(`Data line ${d}: After a duplicate the next line should repeat the same value ${h} !== ${b}`),b=h;else{A?(I=L?0-h:h,x=!0,A=!1):S||(X=L?0-h:h);let y=S?h-1:1;for(let M=0;M<y;M++)x?b+=I:b=X,u.x.push(c),u.y.push(b*l),c+=n}L=!1,h=0,F=0,N=!1,S=!1}if(r<74&&r>63)N=!0,x=!1,h=r-64;else if(r>96&&r<106)N=!0,x=!1,h=r-96,L=!0;else if(r===115)N=!0,S=!0,h=9;else if(r>82&&r<91)N=!0,S=!0,h=r-82;else if(r>73&&r<83)N=!0,A=!0,h=r-73;else if(r>105&&r<115)N=!0,A=!0,h=r-105,L=!0;else if(r===36&&m.codePointAt(a+1)===36)N=!0,C=!0;else if(r===37)N=!0,A=!0,h=0,L=!1;else if(r===45){let y=m.codePointAt(a+1);(y!==void 0&&y>=48&&y<=57||y===44||y===46)&&(N=!0,g||(x=!1),L=!0)}else(r===13||r===10)&&(g=!0,C=!1,d++)}o&&x&&o.warn(\"The last value is a difference, it should be repeated on the next line\")}var oe=/[,\\t ]+/;function w(e,m,t){if(e.isPeaktable=!0,!e.variables||Object.keys(e.variables).length===2?ce(e,m,t):ue(e,m,t),e.variables)for(let o in e.variables)e.variables[o].data=e.data?.[o]}function ce(e,m,t){let{logger:o}=t,l={x:[],y:[]};e.data=l;let i=m.split(/,? *,?[;\\r\\n]+ */);for(let n=1;n<i.length;n++){let f=i[n].trim().replace($,\"\").split(oe);if(f.length%2===0)for(let s=0;s<f.length;s=s+2)e.xFactor!==void 0&&e.yFactor!==void 0&&(l.x.push(Number(f[s])*e.xFactor),l.y.push(Number(f[s+1])*e.yFactor));else o?.warn(`Format error: ${f.toString()}`)}}function ue(e,m,t){let{logger:o}=t,l={},i=Object.keys(e.variables),n=i.length;for(let s of i)l[s]=[];e.data=l;let f=m.split(/,? *,?[;\\r\\n]+ */);for(let s=1;s<f.length;s++){let u=f[s].trim().replace($,\"\").split(oe);if(u.length%n===0)for(let c=0;c<u.length;c++)l[i[c%n]].push(Number(u[c]));else o?.warn(`Wrong number of columns: ${u.toString()}`)}}function B(e,m){e.isXYAdata=!0;let t={};e.data=t;let o=m.split(/\\r?\\n/),l=o[0].replace(/^.*?([A-Z]+).*$/,\"$1\").split(\"\").map(i=>i.toLowerCase());for(let i=1;i<o.length;i++){let n=o[i].replace(/^\\((.*)\\)$/,\"$1\").split(/ *, */);for(let f=0;f<l.length;f++){let s=n[f];switch(l[f]){case\"x\":case\"y\":case\"w\":s=Number.parseFloat(s);break;case\"a\":s=s.replace(/^<(.*)>$/,\"$1\");break;case\"m\":break;default:continue}t[l[f]]||(t[l[f]]=[]),t[l[f]].push(s)}}}import{parseString as le}from\"dynamic-typing\";import{getGyromagneticRatio as ie}from\"gyromagnetic-ratio\";import ae from\"ml-array-median\";function se(e){return Array.isArray(e)?e[0]:e}function Z(e){let{spectra:m}=e,t=m[0].data.y[0],o=t,l=m.length,i=m[0].data.x.length||0,n=new Array(l);for(let r=0;r<l;r++){n[r]=m[r].data.y;for(let a=0;a<i;a++){let d=n[r][a];d<t&&(t=d),d>o&&(o=d)}}let f=m[0].data.x[0],s=m[0].data.x.at(-1),{firstY:u,lastY:c}=pe(e);if(f>s)for(let r of n)r.reverse();u>c&&n.reverse();let b=[];for(let r of n){let a=Float64Array.from(r);for(let d=0;d<a.length;d++)a[d]<0&&(a[d]=-a[d]);b.push(ae(a))}let p=ae(b);return{z:n,minX:Math.min(f,s),maxX:Math.max(f,s),minY:Math.min(u,c),maxY:Math.max(u,c),minZ:t,maxZ:o,noise:p}}function pe(e){let{spectra:m,ntuples:t,info:o}=e;if(t)for(let l of t){let{symbol:i,nucleus:n,units:f}=l;if(i.match(/[F|T]1/)&&f?.toUpperCase().match(\"HZ\")){let s=se(o[\".OBSERVEFREQUENCY\"]),{nucleus:u}=t.find(d=>d.symbol.match(/[F|T]2/));if([s,u,n].some(d=>!d))break;let c=ie(u),b=ie(n),{first:p,last:r}=l,a=b!==null&&c!==null?s*b/c:s;return{firstY:p/a,lastY:r/a}}}return{firstY:m[0].pageValue,lastY:m.at(-1).pageValue}}function H(e,m){let t=e.noise,o=e.z,l,i,n,f,s,u,c,b,p=o.length,r=o[0].length,a,d,g,A,x=e.minX,S=(e.maxX-x)/(r-1),C=e.minY,X=(e.maxY-C)/(p-1),L=e.minZ,N=e.maxZ,Y=m.nbContourLevels*2,F=new Array(Y),y;for(let M=0;M<Y;M++){let U={};F[M]=U;let fe=M%2,Q=(N-m.noiseMultiplier*t)*Math.exp((M>>1)-m.nbContourLevels);fe===0?y=Q+m.noiseMultiplier*t:y=0-Q-m.noiseMultiplier*t;let D=[];if(U.zValue=y,U.lines=D,!(y<=L||y>=N))for(let v=0;v<p-1;v++){let _=o[v],ee=o[v+1];for(let T=0;T<r-1;T++)l=_[T],i=_[T+1],n=ee[T],f=ee[T+1],s=l>y,u=i>y,c=n>y,b=f>y,s!==u&&s!==c&&(a=T+(y-l)/(i-l),d=v,g=T,A=v+(y-l)/(n-l),D.push(a*S+x,d*X+C,g*S+x,A*X+C)),b!==u&&b!==c&&(a=T+1,d=v+1-(y-f)/(i-f),g=T+1-(y-f)/(n-f),A=v+1,D.push(a*S+x,d*X+C,g*S+x,A*X+C)),u!==c&&(a=(T+1-(y-i)/(n-i))*S+x,d=(v+(y-i)/(n-i))*X+C,u!==s&&(g=T+1-(y-i)/(l-i),A=v,D.push(a,d,g*S+x,A*X+C)),c!==s&&(g=T,A=v+1-(y-n)/(l-n),D.push(a,d,g*S+x,A*X+C)),u!==b&&(g=T+1,A=v+(y-i)/(f-i),D.push(a,d,g*S+x,A*X+C)),c!==b&&(g=T+(y-n)/(f-n),A=v+1,D.push(a,d,g*S+x,A*X+C)))}}return{minX:e.minX,maxX:e.maxX,minY:e.minY,maxY:e.maxY,segments:F}}function G(e,m){let t=Z(e);m.noContour||(e.contourLines=H(t,m),delete t.z),e.minMax=t}import{getGyromagneticRatio as W}from\"gyromagnetic-ratio\";function z(e,m){for(let t of e){let o=0,l=0;for(let i of t.spectra){if(t.ntuples?.symbol?(!o&&i.observeFrequency&&(o=i.observeFrequency),!l&&i.shiftOffsetVal&&(l=i.shiftOffsetVal)):(o=i.observeFrequency,l=i.shiftOffsetVal),o&&i.xUnits?.toUpperCase().includes(\"HZ\")&&(i.xUnits=\"PPM\",i.xFactor=i.xFactor!==void 0?i.xFactor/o:void 0,i.firstX=i.firstX!==void 0?i.firstX/o:void 0,i.lastX=i.lastX!==void 0?i.lastX/o:void 0,i.deltaX=i.deltaX!==void 0?i.deltaX/o:void 0,i.data))for(let n=0;n<i.data.x.length;n++)i.data.x[n]/=o;if(l&&i.xUnits.toLowerCase().includes(\"ppm\")&&i.firstX!==void 0&&i.lastX!==void 0){let n=i.firstX-l;if(i.firstX=i.firstX-n,i.lastX=i.lastX-n,i.data)for(let f=0;f<i.data.x.length;f++)i.data.x[f]-=n}if(t.ntuples?.nucleus&&t.ntuples.symbol)for(let n=0;n<t.ntuples.nucleus.length;n++){let f=t.ntuples.symbol[n],s=t.ntuples.nucleus[n];if(f.match(/^[F|T]/)&&!s){if(f.match(/[F|T]1/))if(t.tmp.$NUC2&&typeof t.tmp.$NUC2==\"string\")t.ntuples.nucleus[n]=t.tmp.$NUC2;else{let u=t.ntuples.symbol.indexOf(f.replace(/^([F|T]).*/,\"$12\"));u&&t.ntuples.nucleus[u]&&(t.ntuples.nucleus[n]=t.ntuples.nucleus[u])}f.match(/[F|T]2/)&&typeof t.tmp.$NUC1==\"string\"&&(t.ntuples.nucleus[n]=t.tmp.$NUC1)}f.match(/[F|T]2/)&&(t.yType=t.ntuples.nucleus[0],t.xType&&!W(t.xType)&&(t.xType=t.ntuples.nucleus[1]))}if(o&&t.ntuples?.symbol&&t.ntuples.nucleus){let n=\"\",f=t.ntuples.symbol.indexOf(i.pageSymbol);t.ntuples.units?.[f]&&(n=t.ntuples.units[f]);let{nucleus:s}=t.ntuples;if(!n.toLowerCase().match(/(ppm|seconds)/)&&s.length>1){if(f!==0){let p=\"Not sure about this ntuples format\";if(m){m.warn(p);continue}else throw new Error(p)}let{nucleus:u}=t.ntuples,c=W(u[0]),b=W(u[1]);if(!c||!b){let p=`Problem with determination of gyromagnetic ratio for ${u.join(\"-\")}`;if(m)m.error(p);else throw new Error(p)}else{let p=c/b*o;i.pageValue/=p}}}}}}function J(e){let m=e.spectra[0].data;e.chromatogram={times:m.x.slice(),series:{intensity:{dimension:1,data:m.y.slice()}}}}function q(e,m,t){z(e,t.logger),de(e,t);for(let o of e){if(Object.keys(o.ntuples).length>0){let l=[],i=Object.keys(o.ntuples);for(let n of i){let f=o.ntuples[n];if(f)for(let s=0;s<f.length;s++)l[s]||(l[s]={}),l[s][n]=f[s]}o.ntuples=l}o.twoD&&t.wantXY&&(G(o,t),t.logger?.trace({profiling:!0},\"Finished countour plot calculation\"),t.keepSpectra||delete o.spectra),t.chromatogram&&(o.spectra.length>1?ne(o):J(o),t.logger?.trace({profiling:!0},\"Finished chromatogram calculation\")),delete o.tmp}}function de(e,m){for(let t of e)for(let o in t.meta){let l=t.meta[o];if(typeof l==\"string\"){if(l.startsWith(\"{\")){if(!l.includes(\":\")&&l.endsWith(\"}\")){let i=l.slice(1,-1).split(/[,; ]+/).filter(Boolean);for(let n=0;n<i.length;n++)t.meta[o+String(n)]=m.dynamicTyping?le(i[n]):i[n]}}else if(l.startsWith(\"(\")){let i=l.split(/\\r?\\n/),n=/^\\((?<from>\\d+)\\.\\.(?<to>\\d+)\\).*$/;if(n.test(i[0])){let[f,s]=i[0].match(n)?.slice(1).map(Number)??[],u=i.slice(1).join(\" \").split(/[,; ]+/).filter(Boolean);for(let c=f;c<=s;c++)m.dynamicTyping&&typeof u[c-f]==\"string\"?t.meta[o+String(c)]=le(u[c-f]):t.meta[o+String(c)]=u[c-f]}}}}}function K(e,m,t){let o=-1,l=-1,i=\"\",n=\"\";if(t.indexOf(\"++\")>0)i=t.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/,\"$1\"),n=t.replace(/.*\\.\\.([a-zA-Z0-9]+).*/,\"$1\");else{t=t.replaceAll(/[^a-zA-Z%]/g,\"\"),i=t.charAt(0),n=t.charAt(1),m.variables={};for(let f of t){let s=f.toLowerCase(),u=e.ntuples.symbol?.indexOf(f)||0;if(u===-1)throw new Error(`Symbol undefined: ${f}`);m.variables[s]={};for(let c in e.ntuples)e.ntuples[c]?.[u]&&(m.variables[s][c.replace(/^var/,\"\")]=e.ntuples[c]?.[u])}}o=e.ntuples.symbol?.indexOf(i)??-1,l=e.ntuples.symbol?.indexOf(n)??-1,o===-1&&(o=0),l===-1&&(l=0),e.ntuples.first&&(e.ntuples.first.length>o&&(m.firstX=e.ntuples.first[o]),e.ntuples.first.length>l&&(m.firstY=e.ntuples.first[l])),e.ntuples.last&&(e.ntuples.last.length>o&&(m.lastX=e.ntuples.last[o]),e.ntuples.last.length>l&&(m.lastY=e.ntuples.last[l])),e.ntuples.vardim&&e.ntuples.vardim.length>o&&(m.nbPoints=e.ntuples.vardim[o]),e.ntuples.factor&&(e.ntuples.factor.length>o&&(m.xFactor=e.ntuples.factor[o]),e.ntuples.factor.length>l&&(m.yFactor=e.ntuples.factor[l])),e.ntuples.units&&(e.ntuples.units.length>o&&(e.ntuples.varname?.[o]?m.xUnits=`${e.ntuples.varname[o]} [${e.ntuples.units[o]}]`:m.xUnits=e.ntuples.units[o]),e.ntuples.units.length>l&&(e.ntuples.varname?.[l]?m.yUnits=`${e.ntuples.varname[l]} [${e.ntuples.units[l]}]`:m.yUnits=e.ntuples.units[l]))}function j(e){e.xFactor||(e.xFactor=1),e.yFactor||(e.yFactor=1)}var R=/[ \\t]*,[ \\t]*/,he={removeComments:!1,keepRecordsRegExp:/^$/,canonicDataLabels:!0,canonicMetadataLabels:!1,dynamicTyping:!0,withoutXY:!1,noTrimRegExp:/^$/,chromatogram:!1,keepSpectra:!1,noContour:!1,nbContourLevels:7,noiseMultiplier:5};function pt(e,m={}){e=ge(e);let t={...he,...m};t.logger?.debug(\"Starting jcamp conversion\"),t.wantXY=!t.withoutXY,t.start=Date.now();let o=[],l={entries:[],flatten:[]},i={children:[],spectra:[],ntuples:{},info:{},meta:{},tmp:{}},n=i,f=[],s={data:{}};t.logger?.trace({profiling:!0},\"Before split to LDRS\");let u=e.replaceAll(/[\\r\\n]+##/g,`\n##`).split(`\n##`);t.logger?.trace({profiling:!0},\"Split to LDRS\"),u[0]&&(u[0]=u[0].replace(/^[\\r\\n ]*##/,\"\"));for(let c of u){let b=c.indexOf(\"=\"),p=b>0?c.slice(0,Math.max(0,b)):c,r=b>0?p.match(t.noTrimRegExp)?c.slice(Math.max(0,b+1)):c.slice(Math.max(0,b+1)).trim():\"\",a=p.replaceAll(/[_ -]/g,\"\").toUpperCase();if(a===\"DATATABLE\"){let d=r.indexOf(`\n`);if(d===-1&&(d=r.indexOf(\"\\r\")),d>0){let g=r.slice(0,Math.max(0,d)).split(/[ ,;\\t]+/);K(n,s,g[0]),s.datatable=g[0],g[1]?.includes(\"PEAKS\")?a=\"PEAKTABLE\":g[1]&&(g[1].indexOf(\"XYDATA\")||g[0].indexOf(\"++\")>0)&&(a=\"XYDATA\",s.nbPoints&&s.lastX!==void 0&&s.firstX!==void 0&&(s.deltaX=(s.lastX-s.firstX)/(s.nbPoints-1)))}}if(a===\"XYDATA\"){t.wantXY&&(j(s),r.match(/.*\\+\\+.*/)?(s.nbPoints&&s.lastX!==void 0&&s.firstX!==void 0&&(s.deltaX=(s.lastX-s.firstX)/(s.nbPoints-1)),V(s,r,t)):w(s,r,t),n?.spectra.push(s),s={data:{}});continue}else if(a===\"PEAKTABLE\"){t.wantXY&&(j(s),w(s,r,t),n?.spectra.push(s),s={data:{}});continue}if(a===\"PEAKASSIGNMENTS\"){t.wantXY&&(r.match(/.*[^A-Z]*.*/)&&B(s,r),n?.spectra.push(s),s={data:{}});continue}if(t.removeComments&&(r=r.split(/\\r?\\n/).map(d=>d.replace(/ *\\$\\$.*$/,\"\")).join(`\n`)),a===\"TITLE\"){let d=n;d.children||(d.children=[]),n={spectra:[],ntuples:{},info:{},meta:{},tmp:{}},d.children.push(n),f.push(d),o.push(n),n.title=r}else a===\"DATATYPE\"?(n.dataType=r,r.match(/^nd|\\snd\\s/i)&&(n.twoD=!0)):a===\"NTUPLES\"?r.match(/^nd|\\snd\\s/i)&&(n.twoD=!0):a===\"DATACLASS\"?n.dataClass=r:a===\"JCAMPDX\"?n.jcampDX=E(r):a===\"JCAMPCS\"?n.jcampCS=E(r):a===\"XUNITS\"?s.xUnits=r:a===\"YUNITS\"?s.yUnits=r:a===\"FIRSTX\"?s.firstX=Number(r):a===\"LASTX\"?s.lastX=Number(r):a===\"FIRSTY\"?s.firstY=Number(r):a===\"LASTY\"?s.lastY=Number(r):a===\"NPOINTS\"?s.nbPoints=Number(r):a===\"XFACTOR\"?s.xFactor=Number(r):a===\"YFACTOR\"?s.yFactor=Number(r):a===\"MAXX\"?s.maxX=Number(r):a===\"MINX\"?s.minX=Number(r):a===\"MAXY\"?s.maxY=Number(r):a===\"MINY\"?s.minY=Number(r):a===\"DELTAX\"?s.deltaX=Number(r):a===\".OBSERVEFREQUENCY\"||a===\"$SFO1\"?s.observeFrequency||(s.observeFrequency=Number(r)):a===\".OBSERVENUCLEUS\"?s.xType||(n.xType=r.replaceAll(/[^a-zA-Z0-9]/g,\"\")):a===\"$OFFSET\"?(n.shiftOffsetNum=0,s.shiftOffsetVal||(s.shiftOffsetVal=Number(r))):a===\"$REFERENCEPOINT\"||(a===\"VARNAME\"?n.ntuples.varname=r.split(R):a===\"SYMBOL\"?n.ntuples.symbol=r.split(R):a===\"VARTYPE\"?n.ntuples.vartype=r.split(R):a===\"VARFORM\"?n.ntuples.varform=r.split(R):a===\"VARDIM\"?n.ntuples.vardim=O(r.split(R)):a===\"UNITS\"?n.ntuples.units=r.split(R):a===\"FACTOR\"?n.ntuples.factor=O(r.split(R)):a===\"FIRST\"?n.ntuples.first=O(r.split(R)):a===\"LAST\"?n.ntuples.last=O(r.split(R)):a===\"MIN\"?n.ntuples.min=O(r.split(R)):a===\"MAX\"?n.ntuples.max=O(r.split(R)):a===\".NUCLEUS\"?n.ntuples&&(n.ntuples.nucleus=r.split(R).map(d=>d.replaceAll(/[^a-zA-Z0-9]/g,\"\"))):a===\"PAGE\"?(s.page=r.trim(),s.pageValue=Number(r.replace(/^.*=/,\"\")),s.pageSymbol=s.page.replace(/[=].*/,\"\")):a===\"RETENTIONTIME\"?s.pageValue=Number(r):re(a)?s[k(a)]=r:a===\"SAMPLEDESCRIPTION\"?s.sampleDescription=r:a.startsWith(\"$NUC\")?!n.tmp[a]&&!r.includes(\"off\")&&(n.tmp[a]=r.replaceAll(/[<>]/g,\"\")):a===\"END\"&&(n=f.pop()));if(n?.info&&n.meta&&a.match(t.keepRecordsRegExp)){let d,g;p.startsWith(\"$\")?(g=t.canonicMetadataLabels?a.slice(1):p.slice(1),d=n.meta):(g=t.canonicDataLabels?a:p,d=n.info),t.dynamicTyping&&(r=be(r)),d[g]?(Array.isArray(d[g])||(d[g]=[d[g]]),d[g].push(r)):d[g]=r}}if(t.logger?.trace({profiling:!0},\"Finished parsing\"),q(o,l,t),t.logger?.trace({profiling:!0},\"Total time\"),l.entries=i.children||[],l.flatten=o,t.logger){t.logger.debug(\"Finished jcamp conversion\");for(let c of l.flatten)t.logger.debug(`${c.dataType} - ${c.title}`)}return l}function gt(e,m){let{logger:t,OCL:o}=m;if(!e.info.ATOMLIST||!e.info.BONDLIST){t?.warn(\"No ATOMLIST or BONDLIST in the JCAMP-CS entry\");return}Te(e,t);let l=xe(e.info.ATOMLIST),i=Ae(e.info.BONDLIST),n=Ne(e.info.CHARGE,t),f=Se(e.info.XYRASTER,t),s=Ce(e.info.STEREOCENTER,t),u=ye(o,{atoms:l,bonds:i,charges:n,xyRasters:f,stereocenters:s},t);return{molecule:u,molfile:u.toMolfile()}}function ye(e,m,t){let{atoms:o,bonds:l,charges:i,xyRasters:n,stereocenters:f}=m,s={S:e.Molecule.cBondTypeSingle,D:e.Molecule.cBondTypeDouble,T:e.Molecule.cBondTypeTriple,Q:e.Molecule.cBondTypeQuadruple},u={},c=new e.Molecule(o.length,l.length);for(let p of o){let r=e.Molecule.getAtomicNoFromLabel(p.element);r||(t?.error(`Atomic number of ${p.element} could not be determined`),r=e.Molecule.getAtomicNoFromLabel(\"X\")),u[p.atomNumber]=c.addAtom(r),c.setAtomMapNo(u[p.atomNumber],p.atomNumber,!1)}for(let p of l){if(u[p.atomNumber1]===void 0){t?.error(`A bond goes from atomNumber ${p.atomNumber1} that does not exists`);continue}if(u[p.atomNumber2]===void 0){t?.error(`A bond goes to atomNumber ${p.atomNumber2} that does not exists`);continue}let r=c.addBond(u[p.atomNumber1],u[p.atomNumber2]);c.setBondType(r,s[p.bondType])}for(let p of i){if(u[p.atomNumber]===void 0){t?.error(`A charge goes to atomNumber ${p.atomNumber} that does not exists`);continue}c.setAtomCharge(u[p.atomNumber],p.value)}let b=n.length===0||f.length>0;for(let p of n){if(u[p.atomNumber]===void 0){t?.error(`A XYRASTER goes to atomNumber ${p.atomNumber} that does not exists`);continue}c.setAtomX(u[p.atomNumber],p.x),c.setAtomY(u[p.atomNumber],p.y),c.setAtomZ(u[p.atomNumber],p.z)}c.ensureHelperArrays(e.Molecule.cHelperParities);for(let p of f){let{atomNumber:r,type:a}=p,d=u[r];if(d===void 0){t?.error(`A stereocenter goes to atomNumber ${r} that does not exists`);continue}if(!c.isAtomStereoCenter(d)){t?.warn(`Want to set chirality of atom number ${r} but it is not a stereocenter`);continue}if(c.getAtomParity(d)!==e.Molecule.cAtomParityUnknown){t?.debug(`Atom number ${r} already has a parity defined based on 3D coordinates`);continue}let x=a===\"P\"?e.Molecule.cAtomParity1:e.Molecule.cAtomParity2;c.setAtomParity(u[r],x,!1)}return c.ensureHelperArrays(e.Molecule.cHelperParities),b&&c.inventCoordinates(),c}function xe(e){let m=P(e),t=[];for(let o of m){let[l,i,n]=o.trim().split(/\\s+/);t.push({atomNumber:Number(l),element:i,nbImplicitHydrogens:n?.length>0?Number(n):void 0})}return t}function Ae(e){let m=P(e),t=[];for(let o of m){let[l,i,n]=o.trim().split(/\\s+/);t.push({atomNumber1:Number(l),atomNumber2:Number(i),bondType:n})}return t}function Ne(e,m){if(!e)return[];let t=P(e),o=[];for(let l of t){let[i,n,f]=l.trim().split(/\\s+/);f!==void 0&&m?.warn(\"Charge on multiple atom is not supported\"),o.push({atomNumber:Number(n),value:Number(i)})}return o}function Se(e,m){if(!e)return[];let t=P(e),o=[];for(let l of t){let[i,n,f,s]=l.trim().split(/\\s+/);if(i===void 0){m?.warn(\"XYRASTER without atom number is not supported\");continue}o.push({atomNumber:Number(i),x:Number(n),y:Number(f),z:s!==void 0?Number(s):0})}return o}function Ce(e,m){if(!e)return[];let t=P(e),o=[];for(let l of t){let[i,n]=l.trim().split(/\\s+/);if(![\"P\",\"M\"].includes(n)){m?.warn(`Stereocenter type ${n} is not supported`);continue}o.push({atomNumber:Number(i),type:n})}return o}function P(e){return e.split(/\\r?\\n/).map(m=>E(m)).filter(Boolean)}function Te(e,m){let t=[\"STEREOPAIR\",\"STEREOCENTER\",\"RADICAL\",\"STEREOMOLECULE\"];for(let o of t)e.info[o]&&m?.warn(`JCAMP-CS parser do not support: ${o}`)}export{pt as convert,Le as createTree,gt as parseJcampCS,E as removeComment,$ as removeCommentRegExp};\n","export const addInfoData = (data, options = {}) => {\n    const { keys = Object.keys(data), prefix = '##$' } = options;\n    let header = '';\n    for (const key of keys) {\n        header +=\n            typeof data[key] === 'object'\n                ? `${prefix}${key}=${JSON.stringify(data[key])}\\n`\n                : `${prefix}${key}=${data[key]}\\n`;\n    }\n    return header;\n};\n//# sourceMappingURL=addInfoData.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkNumberOrArray(data) {\n    if (!isAnyArray(data) || isAnyArray(data[0])) {\n        throw new Error(`x and y data should be an array of numbers`);\n    }\n}\n//# sourceMappingURL=checkNumberOrArray.js.map","import { isAnyArray } from 'is-any-array';\nimport { matrixMinMaxZ, xMinMaxValues, } from 'ml-spectra-processing';\nimport { checkMatrix } from './checkMatrix';\nimport { checkNumberOrArray } from './checkNumberOrArray';\nexport function getExtremeValues(data) {\n    if (isAnyArray(data[0])) {\n        checkMatrix(data);\n        const firstRow = data[0];\n        return {\n            firstLast: {\n                first: firstRow[0],\n                last: data[data.length - 1][data[0].length - 1],\n            },\n            minMax: matrixMinMaxZ(data),\n        };\n    }\n    checkNumberOrArray(data);\n    return {\n        firstLast: {\n            first: data[0],\n            last: data[data.length - 1],\n        },\n        minMax: xMinMaxValues(data),\n    };\n}\n//# sourceMappingURL=getExtremeValues.js.map","import { isAnyArray } from 'is-any-array';\nexport function checkMatrix(data) {\n    if (!isAnyArray(data) || !isAnyArray(data[0])) {\n        throw new Error(`2D data should be a matrix`);\n    }\n}\n//# sourceMappingURL=checkMatrix.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getFactorNumber } from './getFactorNumber';\nexport function getBestFactor(array, options = {}) {\n    const { maxValue, factor, minMax } = options;\n    if (factor !== undefined) {\n        return factor;\n    }\n    // is there non integer number ?\n    let onlyInteger = true;\n    for (const y of array) {\n        if (Math.round(y) !== y) {\n            onlyInteger = false;\n            break;\n        }\n    }\n    if (onlyInteger) {\n        return 1;\n    }\n    // we need to rescale the values\n    // need to find the max and min values\n    const extremeValues = minMax || xMinMaxValues(array);\n    return getFactorNumber(extremeValues, maxValue);\n}\n//# sourceMappingURL=getBestFactor.js.map","export function getFactorNumber(minMax, maxValue = 2 ** 31 - 1) {\n    let factor;\n    if (minMax.min < 0) {\n        if (minMax.max > 0) {\n            factor = Math.max(-minMax.min, minMax.max) / maxValue;\n        }\n        else {\n            factor = -minMax.min / maxValue;\n        }\n    }\n    else {\n        factor = minMax.max / maxValue;\n    }\n    return factor;\n}\n//# sourceMappingURL=getFactorNumber.js.map","/**\n * Reconvert number to original value\n * @param number Number used for computation\n * @param factor Multiplying factor\n * @returns Original value\n */\nexport function getNumber(number, factor) {\n    if (factor !== 1)\n        number /= factor;\n    const rounded = Math.round(number);\n    if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n        return rounded;\n    }\n    return number;\n}\n//# sourceMappingURL=getNumber.js.map","import { xDivide } from 'ml-spectra-processing';\nexport function rescaleAndEnsureInteger(data, factor = 1) {\n    if (factor === 1)\n        return data.map((value) => Math.round(value));\n    return xDivide(data, factor).map((value) => Math.round(value));\n}\n//# sourceMappingURL=rescaleAndEnsureInteger.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n */\nconst newLine = '\\n';\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's'],\n];\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst maxLinelength = 100;\n/**\n * This function encodes the given vector. The xyEncoding format is specified by the\n * xyEncoding option\n * @param xyEncoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nexport function vectorEncoder(data, firstX, intervalX, xyEncoding) {\n    switch (xyEncoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n */\nexport function commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n */\nexport function fixEncoding(data, firstX, intervalX, separator = ' ') {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += `${separator}${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += `${separator}${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n */\nexport function packedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 7) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 8; i++) {\n            outputData += data[j] < 0 ? String(data[j++]) : `+${data[j++]}`;\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += data[i] < 0 ? String(data[i]) : `+${data[i]}`;\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n */\nexport function squeezedEncoding(data, firstX, intervalX) {\n    let outputData = '';\n    // String outputData = new String();\n    let j = 0;\n    const dataLength = data.length;\n    while (j < dataLength - 10) {\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < dataLength) {\n        // We add last numbers\n        outputData += String(Math.ceil(firstX + j * intervalX));\n        for (let i = j; i < dataLength; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n    return outputData;\n}\n/**\n * @private\n * Duplicate suppression xyEncoding\n */\nexport function differenceDuplicateEncoding(data, firstX, intervalX) {\n    let mult = 0;\n    let index = 0;\n    let charCount = 0;\n    // We built a string where we store the encoded data.\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (let i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    // We simulate a line carry\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // Start line\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else if (diffData[index - 1] === diffData[index]) {\n            // Try to insert next difference\n            mult++;\n        }\n        else if (mult > 0) {\n            // Now we know that it can be in line\n            mult++;\n            encodedNumber = duplicateDigit(mult.toString());\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n            mult = 0;\n            index--;\n        }\n        else {\n            // Check if it fits, otherwise start a new line\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                // start a new line\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodedData += duplicateDigit((mult + 1).toString());\n    }\n    // We insert the last data from fid. It is done to control of data\n    // The last line start with the number of datas in the fid.\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Differential xyEncoding\n */\nexport function differenceEncoding(data, firstX, intervalX) {\n    let index = 0;\n    let charCount = 0;\n    let i;\n    let encodedData = '';\n    let encodedNumber = '';\n    let temp = '';\n    // We calculate the differences vector\n    const diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n    const numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            // We convert the first number.\n            encodedNumber = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${differenceDigit(diffData[index].toString())}`;\n            encodedData += encodedNumber;\n            charCount += encodedNumber.length;\n        }\n        else {\n            encodedNumber = differenceDigit(diffData[index].toString());\n            if (encodedNumber.length + charCount < maxLinelength) {\n                encodedData += encodedNumber;\n                charCount += encodedNumber.length;\n            }\n            else {\n                encodedData += newLine;\n                temp = `${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}${encodedNumber}`;\n                encodedData += temp; // Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    // We insert the last number from data. It is done to control of data\n    encodedData += `${newLine}${Math.ceil(firstX + index * intervalX)}${squeezedDigit(data[index].toString())}`;\n    return encodedData;\n}\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n */\nfunction squeezedDigit(num) {\n    let sqzDigits = '';\n    if (num.startsWith('-')) {\n        sqzDigits += pseudoDigits[SQZ_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            sqzDigits += num.substring(2);\n        }\n    }\n    else {\n        sqzDigits += pseudoDigits[SQZ_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            sqzDigits += num.substring(1);\n        }\n    }\n    return sqzDigits;\n}\n/**\n * Convert number to the DIF format, using pseudo digits.\n */\nfunction differenceDigit(num) {\n    let diffDigits = '';\n    if (num.startsWith('-')) {\n        diffDigits += pseudoDigits[DIF_N][num.charCodeAt(1) - 48];\n        if (num.length > 2) {\n            diffDigits += num.substring(2);\n        }\n    }\n    else {\n        diffDigits += pseudoDigits[DIF_P][num.charCodeAt(0) - 48];\n        if (num.length > 1) {\n            diffDigits += num.substring(1);\n        }\n    }\n    return diffDigits;\n}\n/**\n * Convert number to the DUP format, using pseudo digits.\n */\nfunction duplicateDigit(num) {\n    let dupDigits = '';\n    dupDigits += pseudoDigits[DUP][num.charCodeAt(0) - 48];\n    if (num.length > 1) {\n        dupDigits += num.substring(1);\n    }\n    return dupDigits;\n}\n//# sourceMappingURL=vectorEncoder.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getBestFactor } from './utils/getBestFactor';\nimport { peakTableCreator } from './utils/peakTableCreator';\nimport { xyDataCreator } from './utils/xyDataCreator';\n/**\n * Create a jcamp\n * @param data object of array\n * @param [options={meta:{},info:{}} - metadata object\n * @returns JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n    const { meta = {}, info = {}, xyEncoding } = options;\n    const { title = '', owner = '', origin = '', dataType = '', xUnits = '', yUnits = '', ...resInfo } = info;\n    let { xFactor, yFactor } = info;\n    data = { x: data.x, y: data.y };\n    let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    // we leave the header and utf8 fonts ${header.replace(/[^\\t\\n\\x20-\\x7F]/g, '')\n    if (xyEncoding) {\n        xFactor = getBestFactor(data.x, { factor: xFactor });\n        yFactor = getBestFactor(data.y, { factor: yFactor });\n        return `${header}##NPOINTS=${data.x.length}\n${xyDataCreator(data, { info: { xFactor, yFactor }, xyEncoding }).join('\\n')}\n##END=`;\n    }\n    else {\n        if (xFactor === undefined)\n            xFactor = 1;\n        if (yFactor === undefined)\n            yFactor = 1;\n        if (xFactor !== 1) {\n            //@ts-expect-error xFactor is always defined\n            data.x = data.x.map((value) => value / xFactor);\n        }\n        if (yFactor !== 1) {\n            //@ts-expect-error yFactor is always defined\n            data.y = data.y.map((value) => value / yFactor);\n        }\n        return `${header}##NPOINTS=${data.x.length}\n${peakTableCreator(data, { info: { xFactor, yFactor } }).join('\\n')}\n##END=`;\n    }\n}\n//# sourceMappingURL=fromJSON.js.map","import { rescaleAndEnsureInteger } from './rescaleAndEnsureInteger';\nimport { vectorEncoder } from './vectorEncoder';\nexport function xyDataCreator(data, options = {}) {\n    const { xyEncoding = 'DIF' } = options;\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    const firstX = data.x[0];\n    const lastX = data.x[data.x.length - 1];\n    const firstY = data.y[0];\n    const lastY = data.y[data.y.length - 1];\n    const nbPoints = data.x.length;\n    const deltaX = (lastX - firstX) / (nbPoints - 1);\n    const lines = [];\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##DELTAX=${deltaX}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##XYDATA=(X++(Y..Y))');\n    const line = vectorEncoder(rescaleAndEnsureInteger(data.y, yFactor), firstX / xFactor, deltaX / xFactor, xyEncoding);\n    if (line)\n        lines.push(line);\n    return lines;\n}\n//# sourceMappingURL=xyDataCreator.js.map","import { getNumber } from './getNumber';\nexport function peakTableCreator(data, options = {}) {\n    const { xFactor = 1, yFactor = 1 } = options.info || {};\n    let firstX = Number.POSITIVE_INFINITY;\n    let lastX = Number.NEGATIVE_INFINITY;\n    let firstY = Number.POSITIVE_INFINITY;\n    let lastY = Number.NEGATIVE_INFINITY;\n    const lines = [];\n    for (let i = 0; i < data.x.length; i++) {\n        const x = data.x[i];\n        const y = data.y[i];\n        if (firstX > x) {\n            firstX = x;\n        }\n        if (lastX < x) {\n            lastX = x;\n        }\n        if (firstY > y) {\n            firstY = y;\n        }\n        if (lastY < y) {\n            lastY = y;\n        }\n    }\n    lines.push(`##FIRSTX=${firstX}`);\n    lines.push(`##LASTX=${lastX}`);\n    lines.push(`##FIRSTY=${firstY}`);\n    lines.push(`##LASTY=${lastY}`);\n    lines.push(`##XFACTOR=${xFactor}`);\n    lines.push(`##YFACTOR=${yFactor}`);\n    lines.push('##PEAK TABLE=(XY..XY)');\n    for (let i = 0; i < data.x.length; i++) {\n        lines.push(`${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`);\n    }\n    return lines;\n}\n//# sourceMappingURL=peakTableCreator.js.map","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\nimport { checkNumberOrArray } from './utils/checkNumberOrArray';\n/**\n * Create a jcamp from variables\n */\nexport function fromVariables(\n/** object of variables */\nvariables, options = {}) {\n    const { info = {}, meta = {}, forceNtuples = false } = options;\n    const jcampOptions = {\n        info,\n        meta,\n    };\n    const keys = Object.keys(variables).map((key) => key.toLowerCase());\n    if (!forceNtuples && keys.length === 2) {\n        const x = variables.x;\n        const xLabel = x.label || 'x';\n        if (variables.x.units) {\n            if (xLabel.includes(variables.x.units)) {\n                jcampOptions.info.xUnits = xLabel;\n            }\n            else {\n                jcampOptions.info.xUnits = `${xLabel} (${variables.x.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.xUnits = xLabel;\n        }\n        const y = variables.y;\n        const yLabel = y.label || 'y';\n        if (variables.y.units) {\n            if (yLabel.includes(variables.y.units)) {\n                jcampOptions.info.xUnits = yLabel;\n            }\n            else {\n                jcampOptions.info.yUnits = `${yLabel} (${variables.y.units})`;\n            }\n        }\n        else {\n            jcampOptions.info.yUnits = yLabel;\n        }\n        const xData = variables.x.data;\n        const yData = variables.y.data;\n        checkNumberOrArray(xData);\n        checkNumberOrArray(yData);\n        return fromJSON({ x: xData, y: yData }, jcampOptions);\n    }\n    else {\n        return creatorNtuples(variables, options);\n    }\n}\n//# sourceMappingURL=fromVariables.js.map","import { addInfoData } from './utils/addInfoData';\nimport { getExtremeValues } from './utils/getExtremeValues';\n/**\n * Parse from a xyxy data array\n * @param variables - Variables to convert to jcamp\n * @param [options={}] - options that allows to add meta data in the jcamp\n * @return JCAMP-DX text file corresponding to the variables\n */\nexport default function creatorNtuples(variables, options) {\n    const { meta = {}, info = {} } = options;\n    const { title = '', owner = '', origin = '', dataType = '', ...resInfo } = info;\n    const symbol = [];\n    const varName = [];\n    const varType = [];\n    const varDim = [];\n    const units = [];\n    const first = [];\n    const last = [];\n    const min = [];\n    const max = [];\n    const keys = Object.keys(variables);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const variable = variables[key];\n        if (!variable)\n            continue;\n        const name = variable?.label.replace(/ *\\[.*/, '');\n        const unit = variable?.label.replace(/.*\\[(?<units>.*)\\].*/, '$<units>');\n        const { firstLast, minMax } = getExtremeValues(variable.data);\n        symbol.push(variable.symbol || key);\n        varName.push(name || key);\n        varDim.push(variable.data.length);\n        first.push(firstLast.first);\n        last.push(firstLast.last);\n        max.push(minMax.max);\n        min.push(minMax.min);\n        if (variable.isDependent !== undefined) {\n            varType.push(variable.isDependent ? 'DEPENDENT' : 'INDEPENDENT');\n        }\n        else {\n            varType.push(variable.isDependent !== undefined\n                ? !variable.isDependent\n                : i === 0\n                    ? 'INDEPENDENT'\n                    : 'DEPENDENT');\n        }\n        units.push(variable.units || unit || '');\n    }\n    let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##DATA CLASS= NTUPLES\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n    header += addInfoData(resInfo, { prefix: '##' });\n    header += addInfoData(meta);\n    header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##FIRST=     ${first.join()}\n##LAST=      ${last.join()}\n##MIN=       ${min.join()}\n##MAX=       ${max.join()}\n##PAGE= N=1\\n`;\n    header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n    for (let i = 0; i < variables.x.data.length; i++) {\n        const point = [];\n        for (const key of keys) {\n            const variable = variables[key];\n            if (!variable)\n                continue;\n            point.push(variable.data[i]);\n        }\n        header += `${point.join('\\t')}\\n`;\n    }\n    header += `##END NTUPLES= ${dataType}\\n`;\n    header += '##END=\\n##END=';\n    return header;\n}\n//# sourceMappingURL=creatorNtuples.js.map","import { fromVariables } from 'convert-to-jcamp';\nexport function toJcamps(analysis, options = {}) {\n    const jcamps = [];\n    for (const spectrum of analysis.spectra) {\n        jcamps.push(getJcamp(spectrum, options));\n    }\n    return jcamps;\n}\nfunction getJcamp(spectrum, options) {\n    const { info = {}, meta = {} } = options;\n    const jcampOptions = {\n        options: {},\n        info: {\n            title: spectrum.title,\n            dataType: spectrum.dataType,\n            ...info,\n        },\n        meta: { ...spectrum.meta, ...meta },\n    };\n    return fromVariables(spectrum.variables, jcampOptions);\n}\n//# sourceMappingURL=toJcamps.js.map","export function toText(analysis, options = {}) {\n    // Export all the data to Csv\n    if (!options.selector && !options.normalization) {\n        return exportText(analysis.spectra, options);\n    }\n    // Export selected variables\n    const spectra = analysis.getNormalizedSpectra(options);\n    // const spectra = analysis.getXYSpectrum(options.selector);\n    return exportText(spectra, options);\n}\nfunction exportText(spectrums, options) {\n    const { endOfLine = '\\n', fieldSeparator = ',' } = options;\n    const result = new Array(spectrums.length);\n    for (let index = 0; index < spectrums.length; index++) {\n        const variables = Object.values(spectrums[index].variables);\n        const labels = variables.map((v) => v.label);\n        const maxNumberData = Math.max(...variables.map((v) => v.data.length));\n        const lines = [labels.join(fieldSeparator)];\n        for (let lineIndex = 0; lineIndex < maxNumberData; lineIndex++) {\n            lines.push(variables\n                .map(({ data }) => data[lineIndex] === undefined ? '' : data[lineIndex])\n                .join(fieldSeparator));\n        }\n        result[index] = lines.join(endOfLine);\n    }\n    return result;\n}\n//# sourceMappingURL=toText.js.map","import { getJSGraph } from './jsgraph/getJSGraph.js';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations.js';\nexport * from './AnalysesManager.js';\nexport * from './Analysis.js';\nexport * from './from/fromJcamp.js';\nexport * from './from/fromText.js';\nexport * from './to/toJcamp.js';\nexport * from './to/toJcamps.js';\nexport * from './to/toText.js';\nexport * from './to/toMatrix.js';\nexport * from './util/getNormalizedSpectrum.js';\nexport * from './util/peakPicking.js';\nexport * from './util/autoPeakPicking.js';\nexport * from './types/types.js';\nexport * from './types/AutoPeakPickingOptions.js';\nexport * from './types/PeakPickingOptions.js';\nexport * from './types/NormalizedSpectrumOptions.js';\nexport * from './types/PlotObject.js';\nexport * from './types/SpectrumSelector.js';\nexport { getReactPlotJSON } from './reactPlot/getReactPlotJSON.js';\nexport const JSGraph = {\n    getJSGraph,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=index.js.map","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle.js';\nimport { COLORS } from './colors.js';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param analyses\n * @param options\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    const series = [];\n    let xLabel = xAxis.label;\n    let yLabel = yAxis.label;\n    let xUnits = xAxis.units;\n    let yUnits = yAxis.units;\n    for (let i = 0; i < analyses.length; i++) {\n        const analysis = analyses[i];\n        const spectra = analysis.getNormalizedSpectra({\n            selector,\n            normalization,\n        });\n        if (spectra.length === 0)\n            continue;\n        const firstSpectrum = spectra[0];\n        // todo: if many spectra are available and not xUnits / yUnits are specified we should ensure that all the spectra are compatible\n        if (!xLabel)\n            xLabel = firstSpectrum.variables.x.label;\n        if (!yLabel)\n            yLabel = firstSpectrum.variables.y.label;\n        if (!xUnits)\n            xUnits = firstSpectrum.variables.x.units;\n        if (!yUnits)\n            yUnits = firstSpectrum.variables.y.units;\n        for (const spectrum of spectra) {\n            const serie = {};\n            addStyle(serie, analysis, {\n                color: colors[i % colors.length],\n                opacity: opacities[i % opacities.length],\n                lineWidth: linesWidth[i % linesWidth.length],\n            });\n            serie.data = {\n                x: spectrum.variables.x.data,\n                y: spectrum.variables.y.data,\n            };\n            serie.id = spectrum.id;\n            if (xAxis.logScale) {\n                serie.data = xyFilterXPositive(serie.data);\n            }\n            series.push(serie);\n        }\n    }\n    return {\n        axes: {\n            x: {\n                label: xLabel,\n                unit: xUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...xAxis,\n            },\n            y: {\n                label: yLabel,\n                unit: yUnits,\n                unitWrapperBefore: '(',\n                unitWrapperAfter: ')',\n                flipped: false,\n                display: true,\n                ...yAxis,\n            },\n        },\n        series,\n    };\n}\n//# sourceMappingURL=getJSGraph.js.map","/* @preserve\n**\n** LICENSE for the sqlite3 WebAssembly/JavaScript APIs.\n**\n** This bundle (typically released as sqlite3.js or sqlite3.mjs)\n** is an amalgamation of JavaScript source code from two projects:\n**\n** 1) https://emscripten.org: the Emscripten \"glue code\" is covered by\n**    the terms of the MIT license and University of Illinois/NCSA\n**    Open Source License, as described at:\n**\n**    https://emscripten.org/docs/introducing_emscripten/emscripten_license.html\n**\n** 2) https://sqlite.org: all code and documentation labeled as being\n**    from this source are released under the same terms as the sqlite3\n**    C library:\n**\n** 2022-10-16\n**\n** The author disclaims copyright to this source code.  In place of a\n** legal notice, here is a blessing:\n**\n** *   May you do good and not evil.\n** *   May you find forgiveness for yourself and forgive others.\n** *   May you share freely, never taking more than you give.\n*/\n/* @preserve\n** This code was built from sqlite3 version...\n**\n** SQLITE_VERSION \"3.52.0\"\n** SQLITE_VERSION_NUMBER 3052000\n** SQLITE_SOURCE_ID \"2026-01-30 06:37:34 407724c4e80efdf93d885e95b5209a100a3f470fe0298138be57201f65f9817e\"\n**\n** Emscripten SDK: 5.0.0\n*/\nasync function sqlite3InitModule(moduleArg = {}) {\n\tvar moduleRtn;\n\tvar Module = moduleArg;\n\tvar ENVIRONMENT_IS_WEB = !!globalThis.window;\n\tvar ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;\n\tglobalThis.process?.versions?.node && globalThis.process?.type;\n\tvar thisProgram = \"./this.program\";\n\tvar _scriptName = import.meta.url;\n\tvar scriptDirectory = \"\";\n\tfunction locateFile(path) {\n\t\tif (Module[\"locateFile\"]) return Module[\"locateFile\"](path, scriptDirectory);\n\t\treturn scriptDirectory + path;\n\t}\n\tvar readAsync, readBinary;\n\tif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n\t\ttry {\n\t\t\tscriptDirectory = new URL(\".\", _scriptName).href;\n\t\t} catch {}\n\t\tif (ENVIRONMENT_IS_WORKER) readBinary = (url) => {\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\txhr.open(\"GET\", url, false);\n\t\t\txhr.responseType = \"arraybuffer\";\n\t\t\txhr.send(null);\n\t\t\treturn new Uint8Array(xhr.response);\n\t\t};\n\t\treadAsync = async (url) => {\n\t\t\tvar response = await fetch(url, { credentials: \"same-origin\" });\n\t\t\tif (response.ok) return response.arrayBuffer();\n\t\t\tthrow new Error(response.status + \" : \" + response.url);\n\t\t};\n\t}\n\tvar out = console.log.bind(console);\n\tvar err = console.error.bind(console);\n\tvar wasmBinary;\n\tvar ABORT = false, readyPromiseResolve, readyPromiseReject, HEAP8, HEAPU8, HEAP16, HEAP32, HEAPU32, HEAP64;\n\tvar runtimeInitialized = false;\n\tfunction updateMemoryViews() {\n\t\tvar b = wasmMemory.buffer;\n\t\tHEAP8 = new Int8Array(b);\n\t\tHEAP16 = new Int16Array(b);\n\t\tHEAPU8 = new Uint8Array(b);\n\t\tnew Uint16Array(b);\n\t\tHEAP32 = new Int32Array(b);\n\t\tHEAPU32 = new Uint32Array(b);\n\t\tnew Float32Array(b);\n\t\tnew Float64Array(b);\n\t\tHEAP64 = new BigInt64Array(b);\n\t\tnew BigUint64Array(b);\n\t}\n\tfunction initMemory() {\n\t\tif (Module[\"wasmMemory\"]) wasmMemory = Module[\"wasmMemory\"];\n\t\telse {\n\t\t\tvar INITIAL_MEMORY = Module[\"INITIAL_MEMORY\"] || 8388608;\n\t\t\twasmMemory = new WebAssembly.Memory({\n\t\t\t\t\"initial\": INITIAL_MEMORY / 65536,\n\t\t\t\t\"maximum\": 32768\n\t\t\t});\n\t\t}\n\t\tupdateMemoryViews();\n\t}\n\tfunction preRun() {\n\t\tif (Module[\"preRun\"]) {\n\t\t\tif (typeof Module[\"preRun\"] == \"function\") Module[\"preRun\"] = [Module[\"preRun\"]];\n\t\t\twhile (Module[\"preRun\"].length) addOnPreRun(Module[\"preRun\"].shift());\n\t\t}\n\t\tcallRuntimeCallbacks(onPreRuns);\n\t}\n\tfunction initRuntime() {\n\t\truntimeInitialized = true;\n\t\tif (!Module[\"noFSInit\"] && !FS.initialized) FS.init();\n\t\tTTY.init();\n\t\twasmExports[\"__wasm_call_ctors\"]();\n\t\tFS.ignorePermissions = false;\n\t}\n\tfunction postRun() {\n\t\tif (Module[\"postRun\"]) {\n\t\t\tif (typeof Module[\"postRun\"] == \"function\") Module[\"postRun\"] = [Module[\"postRun\"]];\n\t\t\twhile (Module[\"postRun\"].length) addOnPostRun(Module[\"postRun\"].shift());\n\t\t}\n\t\tcallRuntimeCallbacks(onPostRuns);\n\t}\n\tfunction abort(what) {\n\t\tModule[\"onAbort\"]?.(what);\n\t\twhat = \"Aborted(\" + what + \")\";\n\t\terr(what);\n\t\tABORT = true;\n\t\twhat += \". Build with -sASSERTIONS for more info.\";\n\t\tvar e = new WebAssembly.RuntimeError(what);\n\t\treadyPromiseReject?.(e);\n\t\tthrow e;\n\t}\n\tvar wasmBinaryFile;\n\tfunction findWasmBinary() {\n\t\tif (Module[\"locateFile\"]) return locateFile(\"sqlite3.wasm\");\n\t\treturn new URL(\"sqlite3.wasm\", import.meta.url).href;\n\t}\n\tfunction getBinarySync(file) {\n\t\tif (file == wasmBinaryFile && wasmBinary) return new Uint8Array(wasmBinary);\n\t\tif (readBinary) return readBinary(file);\n\t\tthrow \"both async and sync fetching of the wasm failed\";\n\t}\n\tasync function getWasmBinary(binaryFile) {\n\t\tif (!wasmBinary) try {\n\t\t\tvar response = await readAsync(binaryFile);\n\t\t\treturn new Uint8Array(response);\n\t\t} catch {}\n\t\treturn getBinarySync(binaryFile);\n\t}\n\tasync function instantiateArrayBuffer(binaryFile, imports) {\n\t\ttry {\n\t\t\tvar binary = await getWasmBinary(binaryFile);\n\t\t\treturn await WebAssembly.instantiate(binary, imports);\n\t\t} catch (reason) {\n\t\t\terr(`failed to asynchronously prepare wasm: ${reason}`);\n\t\t\tabort(reason);\n\t\t}\n\t}\n\tasync function instantiateAsync(binary, binaryFile, imports) {\n\t\tif (!binary) try {\n\t\t\tvar response = fetch(binaryFile, { credentials: \"same-origin\" });\n\t\t\treturn await WebAssembly.instantiateStreaming(response, imports);\n\t\t} catch (reason) {\n\t\t\terr(`wasm streaming compile failed: ${reason}`);\n\t\t\terr(\"falling back to ArrayBuffer instantiation\");\n\t\t}\n\t\treturn instantiateArrayBuffer(binaryFile, imports);\n\t}\n\tfunction getWasmImports() {\n\t\treturn {\n\t\t\t\"env\": wasmImports,\n\t\t\t\"wasi_snapshot_preview1\": wasmImports\n\t\t};\n\t}\n\tasync function createWasm() {\n\t\tfunction receiveInstance(instance, module) {\n\t\t\twasmExports = instance.exports;\n\t\t\tassignWasmExports(wasmExports);\n\t\t\treturn wasmExports;\n\t\t}\n\t\tfunction receiveInstantiationResult(result) {\n\t\t\treturn receiveInstance(result[\"instance\"]);\n\t\t}\n\t\tvar info = getWasmImports();\n\t\tif (Module[\"instantiateWasm\"]) return new Promise((resolve, reject) => {\n\t\t\tModule[\"instantiateWasm\"](info, (inst, mod) => {\n\t\t\t\tresolve(receiveInstance(inst, mod));\n\t\t\t});\n\t\t});\n\t\twasmBinaryFile ??= findWasmBinary();\n\t\treturn receiveInstantiationResult(await instantiateAsync(wasmBinary, wasmBinaryFile, info));\n\t}\n\tvar callRuntimeCallbacks = (callbacks) => {\n\t\twhile (callbacks.length > 0) callbacks.shift()(Module);\n\t};\n\tvar onPostRuns = [];\n\tvar addOnPostRun = (cb) => onPostRuns.push(cb);\n\tvar onPreRuns = [];\n\tvar addOnPreRun = (cb) => onPreRuns.push(cb);\n\tvar wasmMemory;\n\tvar PATH = {\n\t\tisAbs: (path) => path.charAt(0) === \"/\",\n\t\tsplitPath: (filename) => {\n\t\t\treturn /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(filename).slice(1);\n\t\t},\n\t\tnormalizeArray: (parts, allowAboveRoot) => {\n\t\t\tvar up = 0;\n\t\t\tfor (var i = parts.length - 1; i >= 0; i--) {\n\t\t\t\tvar last = parts[i];\n\t\t\t\tif (last === \".\") parts.splice(i, 1);\n\t\t\t\telse if (last === \"..\") {\n\t\t\t\t\tparts.splice(i, 1);\n\t\t\t\t\tup++;\n\t\t\t\t} else if (up) {\n\t\t\t\t\tparts.splice(i, 1);\n\t\t\t\t\tup--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (allowAboveRoot) for (; up; up--) parts.unshift(\"..\");\n\t\t\treturn parts;\n\t\t},\n\t\tnormalize: (path) => {\n\t\t\tvar isAbsolute = PATH.isAbs(path), trailingSlash = path.slice(-1) === \"/\";\n\t\t\tpath = PATH.normalizeArray(path.split(\"/\").filter((p) => !!p), !isAbsolute).join(\"/\");\n\t\t\tif (!path && !isAbsolute) path = \".\";\n\t\t\tif (path && trailingSlash) path += \"/\";\n\t\t\treturn (isAbsolute ? \"/\" : \"\") + path;\n\t\t},\n\t\tdirname: (path) => {\n\t\t\tvar result = PATH.splitPath(path), root = result[0], dir = result[1];\n\t\t\tif (!root && !dir) return \".\";\n\t\t\tif (dir) dir = dir.slice(0, -1);\n\t\t\treturn root + dir;\n\t\t},\n\t\tbasename: (path) => path && path.match(/([^\\/]+|\\/)\\/*$/)[1],\n\t\tjoin: (...paths) => PATH.normalize(paths.join(\"/\")),\n\t\tjoin2: (l, r) => PATH.normalize(l + \"/\" + r)\n\t};\n\tvar initRandomFill = () => {\n\t\treturn (view) => crypto.getRandomValues(view);\n\t};\n\tvar randomFill = (view) => {\n\t\t(randomFill = initRandomFill())(view);\n\t};\n\tvar PATH_FS = {\n\t\tresolve: (...args) => {\n\t\t\tvar resolvedPath = \"\", resolvedAbsolute = false;\n\t\t\tfor (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n\t\t\t\tvar path = i >= 0 ? args[i] : FS.cwd();\n\t\t\t\tif (typeof path != \"string\") throw new TypeError(\"Arguments to path.resolve must be strings\");\n\t\t\t\telse if (!path) return \"\";\n\t\t\t\tresolvedPath = path + \"/\" + resolvedPath;\n\t\t\t\tresolvedAbsolute = PATH.isAbs(path);\n\t\t\t}\n\t\t\tresolvedPath = PATH.normalizeArray(resolvedPath.split(\"/\").filter((p) => !!p), !resolvedAbsolute).join(\"/\");\n\t\t\treturn (resolvedAbsolute ? \"/\" : \"\") + resolvedPath || \".\";\n\t\t},\n\t\trelative: (from, to) => {\n\t\t\tfrom = PATH_FS.resolve(from).slice(1);\n\t\t\tto = PATH_FS.resolve(to).slice(1);\n\t\t\tfunction trim(arr) {\n\t\t\t\tvar start = 0;\n\t\t\t\tfor (; start < arr.length; start++) if (arr[start] !== \"\") break;\n\t\t\t\tvar end = arr.length - 1;\n\t\t\t\tfor (; end >= 0; end--) if (arr[end] !== \"\") break;\n\t\t\t\tif (start > end) return [];\n\t\t\t\treturn arr.slice(start, end - start + 1);\n\t\t\t}\n\t\t\tvar fromParts = trim(from.split(\"/\"));\n\t\t\tvar toParts = trim(to.split(\"/\"));\n\t\t\tvar length = Math.min(fromParts.length, toParts.length);\n\t\t\tvar samePartsLength = length;\n\t\t\tfor (var i = 0; i < length; i++) if (fromParts[i] !== toParts[i]) {\n\t\t\t\tsamePartsLength = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar outputParts = [];\n\t\t\tfor (var i = samePartsLength; i < fromParts.length; i++) outputParts.push(\"..\");\n\t\t\toutputParts = outputParts.concat(toParts.slice(samePartsLength));\n\t\t\treturn outputParts.join(\"/\");\n\t\t}\n\t};\n\tvar UTF8Decoder = new TextDecoder();\n\tvar findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n\t\tvar maxIdx = idx + maxBytesToRead;\n\t\tif (ignoreNul) return maxIdx;\n\t\twhile (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;\n\t\treturn idx;\n\t};\n\tvar UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {\n\t\tvar endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);\n\t\treturn UTF8Decoder.decode(heapOrArray.buffer ? heapOrArray.subarray(idx, endPtr) : new Uint8Array(heapOrArray.slice(idx, endPtr)));\n\t};\n\tvar FS_stdin_getChar_buffer = [];\n\tvar lengthBytesUTF8 = (str) => {\n\t\tvar len = 0;\n\t\tfor (var i = 0; i < str.length; ++i) {\n\t\t\tvar c = str.charCodeAt(i);\n\t\t\tif (c <= 127) len++;\n\t\t\telse if (c <= 2047) len += 2;\n\t\t\telse if (c >= 55296 && c <= 57343) {\n\t\t\t\tlen += 4;\n\t\t\t\t++i;\n\t\t\t} else len += 3;\n\t\t}\n\t\treturn len;\n\t};\n\tvar stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n\t\tif (!(maxBytesToWrite > 0)) return 0;\n\t\tvar startIdx = outIdx;\n\t\tvar endIdx = outIdx + maxBytesToWrite - 1;\n\t\tfor (var i = 0; i < str.length; ++i) {\n\t\t\tvar u = str.codePointAt(i);\n\t\t\tif (u <= 127) {\n\t\t\t\tif (outIdx >= endIdx) break;\n\t\t\t\theap[outIdx++] = u;\n\t\t\t} else if (u <= 2047) {\n\t\t\t\tif (outIdx + 1 >= endIdx) break;\n\t\t\t\theap[outIdx++] = 192 | u >> 6;\n\t\t\t\theap[outIdx++] = 128 | u & 63;\n\t\t\t} else if (u <= 65535) {\n\t\t\t\tif (outIdx + 2 >= endIdx) break;\n\t\t\t\theap[outIdx++] = 224 | u >> 12;\n\t\t\t\theap[outIdx++] = 128 | u >> 6 & 63;\n\t\t\t\theap[outIdx++] = 128 | u & 63;\n\t\t\t} else {\n\t\t\t\tif (outIdx + 3 >= endIdx) break;\n\t\t\t\theap[outIdx++] = 240 | u >> 18;\n\t\t\t\theap[outIdx++] = 128 | u >> 12 & 63;\n\t\t\t\theap[outIdx++] = 128 | u >> 6 & 63;\n\t\t\t\theap[outIdx++] = 128 | u & 63;\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t\theap[outIdx] = 0;\n\t\treturn outIdx - startIdx;\n\t};\n\tvar intArrayFromString = (stringy, dontAddNull, length) => {\n\t\tvar len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n\t\tvar u8array = new Array(len);\n\t\tvar numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n\t\tif (dontAddNull) u8array.length = numBytesWritten;\n\t\treturn u8array;\n\t};\n\tvar FS_stdin_getChar = () => {\n\t\tif (!FS_stdin_getChar_buffer.length) {\n\t\t\tvar result = null;\n\t\t\tif (globalThis.window?.prompt) {\n\t\t\t\tresult = window.prompt(\"Input: \");\n\t\t\t\tif (result !== null) result += \"\\n\";\n\t\t\t}\n\t\t\tif (!result) return null;\n\t\t\tFS_stdin_getChar_buffer = intArrayFromString(result, true);\n\t\t}\n\t\treturn FS_stdin_getChar_buffer.shift();\n\t};\n\tvar TTY = {\n\t\tttys: [],\n\t\tinit() {},\n\t\tshutdown() {},\n\t\tregister(dev, ops) {\n\t\t\tTTY.ttys[dev] = {\n\t\t\t\tinput: [],\n\t\t\t\toutput: [],\n\t\t\t\tops\n\t\t\t};\n\t\t\tFS.registerDevice(dev, TTY.stream_ops);\n\t\t},\n\t\tstream_ops: {\n\t\t\topen(stream) {\n\t\t\t\tvar tty = TTY.ttys[stream.node.rdev];\n\t\t\t\tif (!tty) throw new FS.ErrnoError(43);\n\t\t\t\tstream.tty = tty;\n\t\t\t\tstream.seekable = false;\n\t\t\t},\n\t\t\tclose(stream) {\n\t\t\t\tstream.tty.ops.fsync(stream.tty);\n\t\t\t},\n\t\t\tfsync(stream) {\n\t\t\t\tstream.tty.ops.fsync(stream.tty);\n\t\t\t},\n\t\t\tread(stream, buffer, offset, length, pos) {\n\t\t\t\tif (!stream.tty || !stream.tty.ops.get_char) throw new FS.ErrnoError(60);\n\t\t\t\tvar bytesRead = 0;\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tvar result;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresult = stream.tty.ops.get_char(stream.tty);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new FS.ErrnoError(29);\n\t\t\t\t\t}\n\t\t\t\t\tif (result === void 0 && bytesRead === 0) throw new FS.ErrnoError(6);\n\t\t\t\t\tif (result === null || result === void 0) break;\n\t\t\t\t\tbytesRead++;\n\t\t\t\t\tbuffer[offset + i] = result;\n\t\t\t\t}\n\t\t\t\tif (bytesRead) stream.node.atime = Date.now();\n\t\t\t\treturn bytesRead;\n\t\t\t},\n\t\t\twrite(stream, buffer, offset, length, pos) {\n\t\t\t\tif (!stream.tty || !stream.tty.ops.put_char) throw new FS.ErrnoError(60);\n\t\t\t\ttry {\n\t\t\t\t\tfor (var i = 0; i < length; i++) stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new FS.ErrnoError(29);\n\t\t\t\t}\n\t\t\t\tif (length) stream.node.mtime = stream.node.ctime = Date.now();\n\t\t\t\treturn i;\n\t\t\t}\n\t\t},\n\t\tdefault_tty_ops: {\n\t\t\tget_char(tty) {\n\t\t\t\treturn FS_stdin_getChar();\n\t\t\t},\n\t\t\tput_char(tty, val) {\n\t\t\t\tif (val === null || val === 10) {\n\t\t\t\t\tout(UTF8ArrayToString(tty.output));\n\t\t\t\t\ttty.output = [];\n\t\t\t\t} else if (val != 0) tty.output.push(val);\n\t\t\t},\n\t\t\tfsync(tty) {\n\t\t\t\tif (tty.output?.length > 0) {\n\t\t\t\t\tout(UTF8ArrayToString(tty.output));\n\t\t\t\t\ttty.output = [];\n\t\t\t\t}\n\t\t\t},\n\t\t\tioctl_tcgets(tty) {\n\t\t\t\treturn {\n\t\t\t\t\tc_iflag: 25856,\n\t\t\t\t\tc_oflag: 5,\n\t\t\t\t\tc_cflag: 191,\n\t\t\t\t\tc_lflag: 35387,\n\t\t\t\t\tc_cc: [\n\t\t\t\t\t\t3,\n\t\t\t\t\t\t28,\n\t\t\t\t\t\t127,\n\t\t\t\t\t\t21,\n\t\t\t\t\t\t4,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t17,\n\t\t\t\t\t\t19,\n\t\t\t\t\t\t26,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t18,\n\t\t\t\t\t\t15,\n\t\t\t\t\t\t23,\n\t\t\t\t\t\t22,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0\n\t\t\t\t\t]\n\t\t\t\t};\n\t\t\t},\n\t\t\tioctl_tcsets(tty, optional_actions, data) {\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\tioctl_tiocgwinsz(tty) {\n\t\t\t\treturn [24, 80];\n\t\t\t}\n\t\t},\n\t\tdefault_tty1_ops: {\n\t\t\tput_char(tty, val) {\n\t\t\t\tif (val === null || val === 10) {\n\t\t\t\t\terr(UTF8ArrayToString(tty.output));\n\t\t\t\t\ttty.output = [];\n\t\t\t\t} else if (val != 0) tty.output.push(val);\n\t\t\t},\n\t\t\tfsync(tty) {\n\t\t\t\tif (tty.output?.length > 0) {\n\t\t\t\t\terr(UTF8ArrayToString(tty.output));\n\t\t\t\t\ttty.output = [];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tvar zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size);\n\tvar alignMemory = (size, alignment) => {\n\t\treturn Math.ceil(size / alignment) * alignment;\n\t};\n\tvar mmapAlloc = (size) => {\n\t\tsize = alignMemory(size, 65536);\n\t\tvar ptr = _emscripten_builtin_memalign(65536, size);\n\t\tif (ptr) zeroMemory(ptr, size);\n\t\treturn ptr;\n\t};\n\tvar MEMFS = {\n\t\tops_table: null,\n\t\tmount(mount) {\n\t\t\treturn MEMFS.createNode(null, \"/\", 16895, 0);\n\t\t},\n\t\tcreateNode(parent, name, mode, dev) {\n\t\t\tif (FS.isBlkdev(mode) || FS.isFIFO(mode)) throw new FS.ErrnoError(63);\n\t\t\tMEMFS.ops_table ||= {\n\t\t\t\tdir: {\n\t\t\t\t\tnode: {\n\t\t\t\t\t\tgetattr: MEMFS.node_ops.getattr,\n\t\t\t\t\t\tsetattr: MEMFS.node_ops.setattr,\n\t\t\t\t\t\tlookup: MEMFS.node_ops.lookup,\n\t\t\t\t\t\tmknod: MEMFS.node_ops.mknod,\n\t\t\t\t\t\trename: MEMFS.node_ops.rename,\n\t\t\t\t\t\tunlink: MEMFS.node_ops.unlink,\n\t\t\t\t\t\trmdir: MEMFS.node_ops.rmdir,\n\t\t\t\t\t\treaddir: MEMFS.node_ops.readdir,\n\t\t\t\t\t\tsymlink: MEMFS.node_ops.symlink\n\t\t\t\t\t},\n\t\t\t\t\tstream: { llseek: MEMFS.stream_ops.llseek }\n\t\t\t\t},\n\t\t\t\tfile: {\n\t\t\t\t\tnode: {\n\t\t\t\t\t\tgetattr: MEMFS.node_ops.getattr,\n\t\t\t\t\t\tsetattr: MEMFS.node_ops.setattr\n\t\t\t\t\t},\n\t\t\t\t\tstream: {\n\t\t\t\t\t\tllseek: MEMFS.stream_ops.llseek,\n\t\t\t\t\t\tread: MEMFS.stream_ops.read,\n\t\t\t\t\t\twrite: MEMFS.stream_ops.write,\n\t\t\t\t\t\tmmap: MEMFS.stream_ops.mmap,\n\t\t\t\t\t\tmsync: MEMFS.stream_ops.msync\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\tnode: {\n\t\t\t\t\t\tgetattr: MEMFS.node_ops.getattr,\n\t\t\t\t\t\tsetattr: MEMFS.node_ops.setattr,\n\t\t\t\t\t\treadlink: MEMFS.node_ops.readlink\n\t\t\t\t\t},\n\t\t\t\t\tstream: {}\n\t\t\t\t},\n\t\t\t\tchrdev: {\n\t\t\t\t\tnode: {\n\t\t\t\t\t\tgetattr: MEMFS.node_ops.getattr,\n\t\t\t\t\t\tsetattr: MEMFS.node_ops.setattr\n\t\t\t\t\t},\n\t\t\t\t\tstream: FS.chrdev_stream_ops\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar node = FS.createNode(parent, name, mode, dev);\n\t\t\tif (FS.isDir(node.mode)) {\n\t\t\t\tnode.node_ops = MEMFS.ops_table.dir.node;\n\t\t\t\tnode.stream_ops = MEMFS.ops_table.dir.stream;\n\t\t\t\tnode.contents = {};\n\t\t\t} else if (FS.isFile(node.mode)) {\n\t\t\t\tnode.node_ops = MEMFS.ops_table.file.node;\n\t\t\t\tnode.stream_ops = MEMFS.ops_table.file.stream;\n\t\t\t\tnode.usedBytes = 0;\n\t\t\t\tnode.contents = null;\n\t\t\t} else if (FS.isLink(node.mode)) {\n\t\t\t\tnode.node_ops = MEMFS.ops_table.link.node;\n\t\t\t\tnode.stream_ops = MEMFS.ops_table.link.stream;\n\t\t\t} else if (FS.isChrdev(node.mode)) {\n\t\t\t\tnode.node_ops = MEMFS.ops_table.chrdev.node;\n\t\t\t\tnode.stream_ops = MEMFS.ops_table.chrdev.stream;\n\t\t\t}\n\t\t\tnode.atime = node.mtime = node.ctime = Date.now();\n\t\t\tif (parent) {\n\t\t\t\tparent.contents[name] = node;\n\t\t\t\tparent.atime = parent.mtime = parent.ctime = node.atime;\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\t\tgetFileDataAsTypedArray(node) {\n\t\t\tif (!node.contents) return new Uint8Array(0);\n\t\t\tif (node.contents.subarray) return node.contents.subarray(0, node.usedBytes);\n\t\t\treturn new Uint8Array(node.contents);\n\t\t},\n\t\texpandFileStorage(node, newCapacity) {\n\t\t\tvar prevCapacity = node.contents ? node.contents.length : 0;\n\t\t\tif (prevCapacity >= newCapacity) return;\n\t\t\tnewCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < 1024 * 1024 ? 2 : 1.125) >>> 0);\n\t\t\tif (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n\t\t\tvar oldContents = node.contents;\n\t\t\tnode.contents = new Uint8Array(newCapacity);\n\t\t\tif (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n\t\t},\n\t\tresizeFileStorage(node, newSize) {\n\t\t\tif (node.usedBytes == newSize) return;\n\t\t\tif (newSize == 0) {\n\t\t\t\tnode.contents = null;\n\t\t\t\tnode.usedBytes = 0;\n\t\t\t} else {\n\t\t\t\tvar oldContents = node.contents;\n\t\t\t\tnode.contents = new Uint8Array(newSize);\n\t\t\t\tif (oldContents) node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes)));\n\t\t\t\tnode.usedBytes = newSize;\n\t\t\t}\n\t\t},\n\t\tnode_ops: {\n\t\t\tgetattr(node) {\n\t\t\t\tvar attr = {};\n\t\t\t\tattr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n\t\t\t\tattr.ino = node.id;\n\t\t\t\tattr.mode = node.mode;\n\t\t\t\tattr.nlink = 1;\n\t\t\t\tattr.uid = 0;\n\t\t\t\tattr.gid = 0;\n\t\t\t\tattr.rdev = node.rdev;\n\t\t\t\tif (FS.isDir(node.mode)) attr.size = 4096;\n\t\t\t\telse if (FS.isFile(node.mode)) attr.size = node.usedBytes;\n\t\t\t\telse if (FS.isLink(node.mode)) attr.size = node.link.length;\n\t\t\t\telse attr.size = 0;\n\t\t\t\tattr.atime = new Date(node.atime);\n\t\t\t\tattr.mtime = new Date(node.mtime);\n\t\t\t\tattr.ctime = new Date(node.ctime);\n\t\t\t\tattr.blksize = 4096;\n\t\t\t\tattr.blocks = Math.ceil(attr.size / attr.blksize);\n\t\t\t\treturn attr;\n\t\t\t},\n\t\t\tsetattr(node, attr) {\n\t\t\t\tfor (const key of [\n\t\t\t\t\t\"mode\",\n\t\t\t\t\t\"atime\",\n\t\t\t\t\t\"mtime\",\n\t\t\t\t\t\"ctime\"\n\t\t\t\t]) if (attr[key] != null) node[key] = attr[key];\n\t\t\t\tif (attr.size !== void 0) MEMFS.resizeFileStorage(node, attr.size);\n\t\t\t},\n\t\t\tlookup(parent, name) {\n\t\t\t\tif (!MEMFS.doesNotExistError) {\n\t\t\t\t\tMEMFS.doesNotExistError = new FS.ErrnoError(44);\n\t\t\t\t\tMEMFS.doesNotExistError.stack = \"<generic error, no stack>\";\n\t\t\t\t}\n\t\t\t\tthrow MEMFS.doesNotExistError;\n\t\t\t},\n\t\t\tmknod(parent, name, mode, dev) {\n\t\t\t\treturn MEMFS.createNode(parent, name, mode, dev);\n\t\t\t},\n\t\t\trename(old_node, new_dir, new_name) {\n\t\t\t\tvar new_node;\n\t\t\t\ttry {\n\t\t\t\t\tnew_node = FS.lookupNode(new_dir, new_name);\n\t\t\t\t} catch (e) {}\n\t\t\t\tif (new_node) {\n\t\t\t\t\tif (FS.isDir(old_node.mode)) for (var i in new_node.contents) throw new FS.ErrnoError(55);\n\t\t\t\t\tFS.hashRemoveNode(new_node);\n\t\t\t\t}\n\t\t\t\tdelete old_node.parent.contents[old_node.name];\n\t\t\t\tnew_dir.contents[new_name] = old_node;\n\t\t\t\told_node.name = new_name;\n\t\t\t\tnew_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now();\n\t\t\t},\n\t\t\tunlink(parent, name) {\n\t\t\t\tdelete parent.contents[name];\n\t\t\t\tparent.ctime = parent.mtime = Date.now();\n\t\t\t},\n\t\t\trmdir(parent, name) {\n\t\t\t\tfor (var i in FS.lookupNode(parent, name).contents) throw new FS.ErrnoError(55);\n\t\t\t\tdelete parent.contents[name];\n\t\t\t\tparent.ctime = parent.mtime = Date.now();\n\t\t\t},\n\t\t\treaddir(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\".\",\n\t\t\t\t\t\"..\",\n\t\t\t\t\t...Object.keys(node.contents)\n\t\t\t\t];\n\t\t\t},\n\t\t\tsymlink(parent, newname, oldpath) {\n\t\t\t\tvar node = MEMFS.createNode(parent, newname, 41471, 0);\n\t\t\t\tnode.link = oldpath;\n\t\t\t\treturn node;\n\t\t\t},\n\t\t\treadlink(node) {\n\t\t\t\tif (!FS.isLink(node.mode)) throw new FS.ErrnoError(28);\n\t\t\t\treturn node.link;\n\t\t\t}\n\t\t},\n\t\tstream_ops: {\n\t\t\tread(stream, buffer, offset, length, position) {\n\t\t\t\tvar contents = stream.node.contents;\n\t\t\t\tif (position >= stream.node.usedBytes) return 0;\n\t\t\t\tvar size = Math.min(stream.node.usedBytes - position, length);\n\t\t\t\tif (size > 8 && contents.subarray) buffer.set(contents.subarray(position, position + size), offset);\n\t\t\t\telse for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];\n\t\t\t\treturn size;\n\t\t\t},\n\t\t\twrite(stream, buffer, offset, length, position, canOwn) {\n\t\t\t\tif (buffer.buffer === HEAP8.buffer) canOwn = false;\n\t\t\t\tif (!length) return 0;\n\t\t\t\tvar node = stream.node;\n\t\t\t\tnode.mtime = node.ctime = Date.now();\n\t\t\t\tif (buffer.subarray && (!node.contents || node.contents.subarray)) {\n\t\t\t\t\tif (canOwn) {\n\t\t\t\t\t\tnode.contents = buffer.subarray(offset, offset + length);\n\t\t\t\t\t\tnode.usedBytes = length;\n\t\t\t\t\t\treturn length;\n\t\t\t\t\t} else if (node.usedBytes === 0 && position === 0) {\n\t\t\t\t\t\tnode.contents = buffer.slice(offset, offset + length);\n\t\t\t\t\t\tnode.usedBytes = length;\n\t\t\t\t\t\treturn length;\n\t\t\t\t\t} else if (position + length <= node.usedBytes) {\n\t\t\t\t\t\tnode.contents.set(buffer.subarray(offset, offset + length), position);\n\t\t\t\t\t\treturn length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tMEMFS.expandFileStorage(node, position + length);\n\t\t\t\tif (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position);\n\t\t\t\telse for (var i = 0; i < length; i++) node.contents[position + i] = buffer[offset + i];\n\t\t\t\tnode.usedBytes = Math.max(node.usedBytes, position + length);\n\t\t\t\treturn length;\n\t\t\t},\n\t\t\tllseek(stream, offset, whence) {\n\t\t\t\tvar position = offset;\n\t\t\t\tif (whence === 1) position += stream.position;\n\t\t\t\telse if (whence === 2) {\n\t\t\t\t\tif (FS.isFile(stream.node.mode)) position += stream.node.usedBytes;\n\t\t\t\t}\n\t\t\t\tif (position < 0) throw new FS.ErrnoError(28);\n\t\t\t\treturn position;\n\t\t\t},\n\t\t\tmmap(stream, length, position, prot, flags) {\n\t\t\t\tif (!FS.isFile(stream.node.mode)) throw new FS.ErrnoError(43);\n\t\t\t\tvar ptr;\n\t\t\t\tvar allocated;\n\t\t\t\tvar contents = stream.node.contents;\n\t\t\t\tif (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n\t\t\t\t\tallocated = false;\n\t\t\t\t\tptr = contents.byteOffset;\n\t\t\t\t} else {\n\t\t\t\t\tallocated = true;\n\t\t\t\t\tptr = mmapAlloc(length);\n\t\t\t\t\tif (!ptr) throw new FS.ErrnoError(48);\n\t\t\t\t\tif (contents) {\n\t\t\t\t\t\tif (position > 0 || position + length < contents.length) if (contents.subarray) contents = contents.subarray(position, position + length);\n\t\t\t\t\t\telse contents = Array.prototype.slice.call(contents, position, position + length);\n\t\t\t\t\t\tHEAP8.set(contents, ptr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tptr,\n\t\t\t\t\tallocated\n\t\t\t\t};\n\t\t\t},\n\t\t\tmsync(stream, buffer, offset, length, mmapFlags) {\n\t\t\t\tMEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t};\n\tvar FS_modeStringToFlags = (str) => {\n\t\tvar flags = {\n\t\t\t\"r\": 0,\n\t\t\t\"r+\": 2,\n\t\t\t\"w\": 577,\n\t\t\t\"w+\": 578,\n\t\t\t\"a\": 1089,\n\t\t\t\"a+\": 1090\n\t\t}[str];\n\t\tif (typeof flags == \"undefined\") throw new Error(`Unknown file open mode: ${str}`);\n\t\treturn flags;\n\t};\n\tvar FS_getMode = (canRead, canWrite) => {\n\t\tvar mode = 0;\n\t\tif (canRead) mode |= 365;\n\t\tif (canWrite) mode |= 146;\n\t\treturn mode;\n\t};\n\tvar asyncLoad = async (url) => {\n\t\tvar arrayBuffer = await readAsync(url);\n\t\treturn new Uint8Array(arrayBuffer);\n\t};\n\tvar FS_createDataFile = (...args) => FS.createDataFile(...args);\n\tvar getUniqueRunDependency = (id) => {\n\t\treturn id;\n\t};\n\tvar runDependencies = 0;\n\tvar dependenciesFulfilled = null;\n\tvar removeRunDependency = (id) => {\n\t\trunDependencies--;\n\t\tModule[\"monitorRunDependencies\"]?.(runDependencies);\n\t\tif (runDependencies == 0) {\n\t\t\tif (dependenciesFulfilled) {\n\t\t\t\tvar callback = dependenciesFulfilled;\n\t\t\t\tdependenciesFulfilled = null;\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n\tvar addRunDependency = (id) => {\n\t\trunDependencies++;\n\t\tModule[\"monitorRunDependencies\"]?.(runDependencies);\n\t};\n\tvar preloadPlugins = [];\n\tvar FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n\t\tif (typeof Browser != \"undefined\") Browser.init();\n\t\tfor (var plugin of preloadPlugins) if (plugin[\"canHandle\"](fullname)) return plugin[\"handle\"](byteArray, fullname);\n\t\treturn byteArray;\n\t};\n\tvar FS_preloadFile = async (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => {\n\t\tvar fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n\t\tvar dep = getUniqueRunDependency(`cp ${fullname}`);\n\t\taddRunDependency(dep);\n\t\ttry {\n\t\t\tvar byteArray = url;\n\t\t\tif (typeof url == \"string\") byteArray = await asyncLoad(url);\n\t\t\tbyteArray = await FS_handledByPreloadPlugin(byteArray, fullname);\n\t\t\tpreFinish?.();\n\t\t\tif (!dontCreateFile) FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n\t\t} finally {\n\t\t\tremoveRunDependency(dep);\n\t\t}\n\t};\n\tvar FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {\n\t\tFS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror);\n\t};\n\tvar FS = {\n\t\troot: null,\n\t\tmounts: [],\n\t\tdevices: {},\n\t\tstreams: [],\n\t\tnextInode: 1,\n\t\tnameTable: null,\n\t\tcurrentPath: \"/\",\n\t\tinitialized: false,\n\t\tignorePermissions: true,\n\t\tfilesystems: null,\n\t\tsyncFSRequests: 0,\n\t\treadFiles: {},\n\t\tErrnoError: class {\n\t\t\tname = \"ErrnoError\";\n\t\t\tconstructor(errno) {\n\t\t\t\tthis.errno = errno;\n\t\t\t}\n\t\t},\n\t\tFSStream: class {\n\t\t\tshared = {};\n\t\t\tget object() {\n\t\t\t\treturn this.node;\n\t\t\t}\n\t\t\tset object(val) {\n\t\t\t\tthis.node = val;\n\t\t\t}\n\t\t\tget isRead() {\n\t\t\t\treturn (this.flags & 2097155) !== 1;\n\t\t\t}\n\t\t\tget isWrite() {\n\t\t\t\treturn (this.flags & 2097155) !== 0;\n\t\t\t}\n\t\t\tget isAppend() {\n\t\t\t\treturn this.flags & 1024;\n\t\t\t}\n\t\t\tget flags() {\n\t\t\t\treturn this.shared.flags;\n\t\t\t}\n\t\t\tset flags(val) {\n\t\t\t\tthis.shared.flags = val;\n\t\t\t}\n\t\t\tget position() {\n\t\t\t\treturn this.shared.position;\n\t\t\t}\n\t\t\tset position(val) {\n\t\t\t\tthis.shared.position = val;\n\t\t\t}\n\t\t},\n\t\tFSNode: class {\n\t\t\tnode_ops = {};\n\t\t\tstream_ops = {};\n\t\t\treadMode = 365;\n\t\t\twriteMode = 146;\n\t\t\tmounted = null;\n\t\t\tconstructor(parent, name, mode, rdev) {\n\t\t\t\tif (!parent) parent = this;\n\t\t\t\tthis.parent = parent;\n\t\t\t\tthis.mount = parent.mount;\n\t\t\t\tthis.id = FS.nextInode++;\n\t\t\t\tthis.name = name;\n\t\t\t\tthis.mode = mode;\n\t\t\t\tthis.rdev = rdev;\n\t\t\t\tthis.atime = this.mtime = this.ctime = Date.now();\n\t\t\t}\n\t\t\tget read() {\n\t\t\t\treturn (this.mode & this.readMode) === this.readMode;\n\t\t\t}\n\t\t\tset read(val) {\n\t\t\t\tval ? this.mode |= this.readMode : this.mode &= ~this.readMode;\n\t\t\t}\n\t\t\tget write() {\n\t\t\t\treturn (this.mode & this.writeMode) === this.writeMode;\n\t\t\t}\n\t\t\tset write(val) {\n\t\t\t\tval ? this.mode |= this.writeMode : this.mode &= ~this.writeMode;\n\t\t\t}\n\t\t\tget isFolder() {\n\t\t\t\treturn FS.isDir(this.mode);\n\t\t\t}\n\t\t\tget isDevice() {\n\t\t\t\treturn FS.isChrdev(this.mode);\n\t\t\t}\n\t\t},\n\t\tlookupPath(path, opts = {}) {\n\t\t\tif (!path) throw new FS.ErrnoError(44);\n\t\t\topts.follow_mount ??= true;\n\t\t\tif (!PATH.isAbs(path)) path = FS.cwd() + \"/\" + path;\n\t\t\tlinkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {\n\t\t\t\tvar parts = path.split(\"/\").filter((p) => !!p);\n\t\t\t\tvar current = FS.root;\n\t\t\t\tvar current_path = \"/\";\n\t\t\t\tfor (var i = 0; i < parts.length; i++) {\n\t\t\t\t\tvar islast = i === parts.length - 1;\n\t\t\t\t\tif (islast && opts.parent) break;\n\t\t\t\t\tif (parts[i] === \".\") continue;\n\t\t\t\t\tif (parts[i] === \"..\") {\n\t\t\t\t\t\tcurrent_path = PATH.dirname(current_path);\n\t\t\t\t\t\tif (FS.isRoot(current)) {\n\t\t\t\t\t\t\tpath = current_path + \"/\" + parts.slice(i + 1).join(\"/\");\n\t\t\t\t\t\t\tnlinks--;\n\t\t\t\t\t\t\tcontinue linkloop;\n\t\t\t\t\t\t} else current = current.parent;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcurrent_path = PATH.join2(current_path, parts[i]);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcurrent = FS.lookupNode(current, parts[i]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (e?.errno === 44 && islast && opts.noent_okay) return { path: current_path };\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t\tif (FS.isMountpoint(current) && (!islast || opts.follow_mount)) current = current.mounted.root;\n\t\t\t\t\tif (FS.isLink(current.mode) && (!islast || opts.follow)) {\n\t\t\t\t\t\tif (!current.node_ops.readlink) throw new FS.ErrnoError(52);\n\t\t\t\t\t\tvar link = current.node_ops.readlink(current);\n\t\t\t\t\t\tif (!PATH.isAbs(link)) link = PATH.dirname(current_path) + \"/\" + link;\n\t\t\t\t\t\tpath = link + \"/\" + parts.slice(i + 1).join(\"/\");\n\t\t\t\t\t\tcontinue linkloop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tpath: current_path,\n\t\t\t\t\tnode: current\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow new FS.ErrnoError(32);\n\t\t},\n\t\tgetPath(node) {\n\t\t\tvar path;\n\t\t\twhile (true) {\n\t\t\t\tif (FS.isRoot(node)) {\n\t\t\t\t\tvar mount = node.mount.mountpoint;\n\t\t\t\t\tif (!path) return mount;\n\t\t\t\t\treturn mount[mount.length - 1] !== \"/\" ? `${mount}/${path}` : mount + path;\n\t\t\t\t}\n\t\t\t\tpath = path ? `${node.name}/${path}` : node.name;\n\t\t\t\tnode = node.parent;\n\t\t\t}\n\t\t},\n\t\thashName(parentid, name) {\n\t\t\tvar hash = 0;\n\t\t\tfor (var i = 0; i < name.length; i++) hash = (hash << 5) - hash + name.charCodeAt(i) | 0;\n\t\t\treturn (parentid + hash >>> 0) % FS.nameTable.length;\n\t\t},\n\t\thashAddNode(node) {\n\t\t\tvar hash = FS.hashName(node.parent.id, node.name);\n\t\t\tnode.name_next = FS.nameTable[hash];\n\t\t\tFS.nameTable[hash] = node;\n\t\t},\n\t\thashRemoveNode(node) {\n\t\t\tvar hash = FS.hashName(node.parent.id, node.name);\n\t\t\tif (FS.nameTable[hash] === node) FS.nameTable[hash] = node.name_next;\n\t\t\telse {\n\t\t\t\tvar current = FS.nameTable[hash];\n\t\t\t\twhile (current) {\n\t\t\t\t\tif (current.name_next === node) {\n\t\t\t\t\t\tcurrent.name_next = node.name_next;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcurrent = current.name_next;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tlookupNode(parent, name) {\n\t\t\tvar errCode = FS.mayLookup(parent);\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tvar hash = FS.hashName(parent.id, name);\n\t\t\tfor (var node = FS.nameTable[hash]; node; node = node.name_next) {\n\t\t\t\tvar nodeName = node.name;\n\t\t\t\tif (node.parent.id === parent.id && nodeName === name) return node;\n\t\t\t}\n\t\t\treturn FS.lookup(parent, name);\n\t\t},\n\t\tcreateNode(parent, name, mode, rdev) {\n\t\t\tvar node = new FS.FSNode(parent, name, mode, rdev);\n\t\t\tFS.hashAddNode(node);\n\t\t\treturn node;\n\t\t},\n\t\tdestroyNode(node) {\n\t\t\tFS.hashRemoveNode(node);\n\t\t},\n\t\tisRoot(node) {\n\t\t\treturn node === node.parent;\n\t\t},\n\t\tisMountpoint(node) {\n\t\t\treturn !!node.mounted;\n\t\t},\n\t\tisFile(mode) {\n\t\t\treturn (mode & 61440) === 32768;\n\t\t},\n\t\tisDir(mode) {\n\t\t\treturn (mode & 61440) === 16384;\n\t\t},\n\t\tisLink(mode) {\n\t\t\treturn (mode & 61440) === 40960;\n\t\t},\n\t\tisChrdev(mode) {\n\t\t\treturn (mode & 61440) === 8192;\n\t\t},\n\t\tisBlkdev(mode) {\n\t\t\treturn (mode & 61440) === 24576;\n\t\t},\n\t\tisFIFO(mode) {\n\t\t\treturn (mode & 61440) === 4096;\n\t\t},\n\t\tisSocket(mode) {\n\t\t\treturn (mode & 49152) === 49152;\n\t\t},\n\t\tflagsToPermissionString(flag) {\n\t\t\tvar perms = [\n\t\t\t\t\"r\",\n\t\t\t\t\"w\",\n\t\t\t\t\"rw\"\n\t\t\t][flag & 3];\n\t\t\tif (flag & 512) perms += \"w\";\n\t\t\treturn perms;\n\t\t},\n\t\tnodePermissions(node, perms) {\n\t\t\tif (FS.ignorePermissions) return 0;\n\t\t\tif (perms.includes(\"r\") && !(node.mode & 292)) return 2;\n\t\t\telse if (perms.includes(\"w\") && !(node.mode & 146)) return 2;\n\t\t\telse if (perms.includes(\"x\") && !(node.mode & 73)) return 2;\n\t\t\treturn 0;\n\t\t},\n\t\tmayLookup(dir) {\n\t\t\tif (!FS.isDir(dir.mode)) return 54;\n\t\t\tvar errCode = FS.nodePermissions(dir, \"x\");\n\t\t\tif (errCode) return errCode;\n\t\t\tif (!dir.node_ops.lookup) return 2;\n\t\t\treturn 0;\n\t\t},\n\t\tmayCreate(dir, name) {\n\t\t\tif (!FS.isDir(dir.mode)) return 54;\n\t\t\ttry {\n\t\t\t\tFS.lookupNode(dir, name);\n\t\t\t\treturn 20;\n\t\t\t} catch (e) {}\n\t\t\treturn FS.nodePermissions(dir, \"wx\");\n\t\t},\n\t\tmayDelete(dir, name, isdir) {\n\t\t\tvar node;\n\t\t\ttry {\n\t\t\t\tnode = FS.lookupNode(dir, name);\n\t\t\t} catch (e) {\n\t\t\t\treturn e.errno;\n\t\t\t}\n\t\t\tvar errCode = FS.nodePermissions(dir, \"wx\");\n\t\t\tif (errCode) return errCode;\n\t\t\tif (isdir) {\n\t\t\t\tif (!FS.isDir(node.mode)) return 54;\n\t\t\t\tif (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) return 10;\n\t\t\t} else if (FS.isDir(node.mode)) return 31;\n\t\t\treturn 0;\n\t\t},\n\t\tmayOpen(node, flags) {\n\t\t\tif (!node) return 44;\n\t\t\tif (FS.isLink(node.mode)) return 32;\n\t\t\telse if (FS.isDir(node.mode)) {\n\t\t\t\tif (FS.flagsToPermissionString(flags) !== \"r\" || flags & 576) return 31;\n\t\t\t}\n\t\t\treturn FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n\t\t},\n\t\tcheckOpExists(op, err) {\n\t\t\tif (!op) throw new FS.ErrnoError(err);\n\t\t\treturn op;\n\t\t},\n\t\tMAX_OPEN_FDS: 4096,\n\t\tnextfd() {\n\t\t\tfor (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) if (!FS.streams[fd]) return fd;\n\t\t\tthrow new FS.ErrnoError(33);\n\t\t},\n\t\tgetStreamChecked(fd) {\n\t\t\tvar stream = FS.getStream(fd);\n\t\t\tif (!stream) throw new FS.ErrnoError(8);\n\t\t\treturn stream;\n\t\t},\n\t\tgetStream: (fd) => FS.streams[fd],\n\t\tcreateStream(stream, fd = -1) {\n\t\t\tstream = Object.assign(new FS.FSStream(), stream);\n\t\t\tif (fd == -1) fd = FS.nextfd();\n\t\t\tstream.fd = fd;\n\t\t\tFS.streams[fd] = stream;\n\t\t\treturn stream;\n\t\t},\n\t\tcloseStream(fd) {\n\t\t\tFS.streams[fd] = null;\n\t\t},\n\t\tdupStream(origStream, fd = -1) {\n\t\t\tvar stream = FS.createStream(origStream, fd);\n\t\t\tstream.stream_ops?.dup?.(stream);\n\t\t\treturn stream;\n\t\t},\n\t\tdoSetAttr(stream, node, attr) {\n\t\t\tvar setattr = stream?.stream_ops.setattr;\n\t\t\tvar arg = setattr ? stream : node;\n\t\t\tsetattr ??= node.node_ops.setattr;\n\t\t\tFS.checkOpExists(setattr, 63);\n\t\t\tsetattr(arg, attr);\n\t\t},\n\t\tchrdev_stream_ops: {\n\t\t\topen(stream) {\n\t\t\t\tstream.stream_ops = FS.getDevice(stream.node.rdev).stream_ops;\n\t\t\t\tstream.stream_ops.open?.(stream);\n\t\t\t},\n\t\t\tllseek() {\n\t\t\t\tthrow new FS.ErrnoError(70);\n\t\t\t}\n\t\t},\n\t\tmajor: (dev) => dev >> 8,\n\t\tminor: (dev) => dev & 255,\n\t\tmakedev: (ma, mi) => ma << 8 | mi,\n\t\tregisterDevice(dev, ops) {\n\t\t\tFS.devices[dev] = { stream_ops: ops };\n\t\t},\n\t\tgetDevice: (dev) => FS.devices[dev],\n\t\tgetMounts(mount) {\n\t\t\tvar mounts = [];\n\t\t\tvar check = [mount];\n\t\t\twhile (check.length) {\n\t\t\t\tvar m = check.pop();\n\t\t\t\tmounts.push(m);\n\t\t\t\tcheck.push(...m.mounts);\n\t\t\t}\n\t\t\treturn mounts;\n\t\t},\n\t\tsyncfs(populate, callback) {\n\t\t\tif (typeof populate == \"function\") {\n\t\t\t\tcallback = populate;\n\t\t\t\tpopulate = false;\n\t\t\t}\n\t\t\tFS.syncFSRequests++;\n\t\t\tif (FS.syncFSRequests > 1) err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);\n\t\t\tvar mounts = FS.getMounts(FS.root.mount);\n\t\t\tvar completed = 0;\n\t\t\tfunction doCallback(errCode) {\n\t\t\t\tFS.syncFSRequests--;\n\t\t\t\treturn callback(errCode);\n\t\t\t}\n\t\t\tfunction done(errCode) {\n\t\t\t\tif (errCode) {\n\t\t\t\t\tif (!done.errored) {\n\t\t\t\t\t\tdone.errored = true;\n\t\t\t\t\t\treturn doCallback(errCode);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (++completed >= mounts.length) doCallback(null);\n\t\t\t}\n\t\t\tfor (var mount of mounts) if (mount.type.syncfs) mount.type.syncfs(mount, populate, done);\n\t\t\telse done(null);\n\t\t},\n\t\tmount(type, opts, mountpoint) {\n\t\t\tvar root = mountpoint === \"/\";\n\t\t\tvar pseudo = !mountpoint;\n\t\t\tvar node;\n\t\t\tif (root && FS.root) throw new FS.ErrnoError(10);\n\t\t\telse if (!root && !pseudo) {\n\t\t\t\tvar lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\t\t\t\tmountpoint = lookup.path;\n\t\t\t\tnode = lookup.node;\n\t\t\t\tif (FS.isMountpoint(node)) throw new FS.ErrnoError(10);\n\t\t\t\tif (!FS.isDir(node.mode)) throw new FS.ErrnoError(54);\n\t\t\t}\n\t\t\tvar mount = {\n\t\t\t\ttype,\n\t\t\t\topts,\n\t\t\t\tmountpoint,\n\t\t\t\tmounts: []\n\t\t\t};\n\t\t\tvar mountRoot = type.mount(mount);\n\t\t\tmountRoot.mount = mount;\n\t\t\tmount.root = mountRoot;\n\t\t\tif (root) FS.root = mountRoot;\n\t\t\telse if (node) {\n\t\t\t\tnode.mounted = mount;\n\t\t\t\tif (node.mount) node.mount.mounts.push(mount);\n\t\t\t}\n\t\t\treturn mountRoot;\n\t\t},\n\t\tunmount(mountpoint) {\n\t\t\tvar lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n\t\t\tif (!FS.isMountpoint(lookup.node)) throw new FS.ErrnoError(28);\n\t\t\tvar node = lookup.node;\n\t\t\tvar mount = node.mounted;\n\t\t\tvar mounts = FS.getMounts(mount);\n\t\t\tfor (var [hash, current] of Object.entries(FS.nameTable)) while (current) {\n\t\t\t\tvar next = current.name_next;\n\t\t\t\tif (mounts.includes(current.mount)) FS.destroyNode(current);\n\t\t\t\tcurrent = next;\n\t\t\t}\n\t\t\tnode.mounted = null;\n\t\t\tvar idx = node.mount.mounts.indexOf(mount);\n\t\t\tnode.mount.mounts.splice(idx, 1);\n\t\t},\n\t\tlookup(parent, name) {\n\t\t\treturn parent.node_ops.lookup(parent, name);\n\t\t},\n\t\tmknod(path, mode, dev) {\n\t\t\tvar parent = FS.lookupPath(path, { parent: true }).node;\n\t\t\tvar name = PATH.basename(path);\n\t\t\tif (!name) throw new FS.ErrnoError(28);\n\t\t\tif (name === \".\" || name === \"..\") throw new FS.ErrnoError(20);\n\t\t\tvar errCode = FS.mayCreate(parent, name);\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tif (!parent.node_ops.mknod) throw new FS.ErrnoError(63);\n\t\t\treturn parent.node_ops.mknod(parent, name, mode, dev);\n\t\t},\n\t\tstatfs(path) {\n\t\t\treturn FS.statfsNode(FS.lookupPath(path, { follow: true }).node);\n\t\t},\n\t\tstatfsStream(stream) {\n\t\t\treturn FS.statfsNode(stream.node);\n\t\t},\n\t\tstatfsNode(node) {\n\t\t\tvar rtn = {\n\t\t\t\tbsize: 4096,\n\t\t\t\tfrsize: 4096,\n\t\t\t\tblocks: 1e6,\n\t\t\t\tbfree: 5e5,\n\t\t\t\tbavail: 5e5,\n\t\t\t\tfiles: FS.nextInode,\n\t\t\t\tffree: FS.nextInode - 1,\n\t\t\t\tfsid: 42,\n\t\t\t\tflags: 2,\n\t\t\t\tnamelen: 255\n\t\t\t};\n\t\t\tif (node.node_ops.statfs) Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));\n\t\t\treturn rtn;\n\t\t},\n\t\tcreate(path, mode = 438) {\n\t\t\tmode &= 4095;\n\t\t\tmode |= 32768;\n\t\t\treturn FS.mknod(path, mode, 0);\n\t\t},\n\t\tmkdir(path, mode = 511) {\n\t\t\tmode &= 1023;\n\t\t\tmode |= 16384;\n\t\t\treturn FS.mknod(path, mode, 0);\n\t\t},\n\t\tmkdirTree(path, mode) {\n\t\t\tvar dirs = path.split(\"/\");\n\t\t\tvar d = \"\";\n\t\t\tfor (var dir of dirs) {\n\t\t\t\tif (!dir) continue;\n\t\t\t\tif (d || PATH.isAbs(path)) d += \"/\";\n\t\t\t\td += dir;\n\t\t\t\ttry {\n\t\t\t\t\tFS.mkdir(d, mode);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e.errno != 20) throw e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmkdev(path, mode, dev) {\n\t\t\tif (typeof dev == \"undefined\") {\n\t\t\t\tdev = mode;\n\t\t\t\tmode = 438;\n\t\t\t}\n\t\t\tmode |= 8192;\n\t\t\treturn FS.mknod(path, mode, dev);\n\t\t},\n\t\tsymlink(oldpath, newpath) {\n\t\t\tif (!PATH_FS.resolve(oldpath)) throw new FS.ErrnoError(44);\n\t\t\tvar parent = FS.lookupPath(newpath, { parent: true }).node;\n\t\t\tif (!parent) throw new FS.ErrnoError(44);\n\t\t\tvar newname = PATH.basename(newpath);\n\t\t\tvar errCode = FS.mayCreate(parent, newname);\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tif (!parent.node_ops.symlink) throw new FS.ErrnoError(63);\n\t\t\treturn parent.node_ops.symlink(parent, newname, oldpath);\n\t\t},\n\t\trename(old_path, new_path) {\n\t\t\tvar old_dirname = PATH.dirname(old_path);\n\t\t\tvar new_dirname = PATH.dirname(new_path);\n\t\t\tvar old_name = PATH.basename(old_path);\n\t\t\tvar new_name = PATH.basename(new_path);\n\t\t\tvar lookup = FS.lookupPath(old_path, { parent: true }), old_dir = lookup.node, new_dir;\n\t\t\tlookup = FS.lookupPath(new_path, { parent: true });\n\t\t\tnew_dir = lookup.node;\n\t\t\tif (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n\t\t\tif (old_dir.mount !== new_dir.mount) throw new FS.ErrnoError(75);\n\t\t\tvar old_node = FS.lookupNode(old_dir, old_name);\n\t\t\tvar relative = PATH_FS.relative(old_path, new_dirname);\n\t\t\tif (relative.charAt(0) !== \".\") throw new FS.ErrnoError(28);\n\t\t\trelative = PATH_FS.relative(new_path, old_dirname);\n\t\t\tif (relative.charAt(0) !== \".\") throw new FS.ErrnoError(55);\n\t\t\tvar new_node;\n\t\t\ttry {\n\t\t\t\tnew_node = FS.lookupNode(new_dir, new_name);\n\t\t\t} catch (e) {}\n\t\t\tif (old_node === new_node) return;\n\t\t\tvar isdir = FS.isDir(old_node.mode);\n\t\t\tvar errCode = FS.mayDelete(old_dir, old_name, isdir);\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\terrCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tif (!old_dir.node_ops.rename) throw new FS.ErrnoError(63);\n\t\t\tif (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) throw new FS.ErrnoError(10);\n\t\t\tif (new_dir !== old_dir) {\n\t\t\t\terrCode = FS.nodePermissions(old_dir, \"w\");\n\t\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\t}\n\t\t\tFS.hashRemoveNode(old_node);\n\t\t\ttry {\n\t\t\t\told_dir.node_ops.rename(old_node, new_dir, new_name);\n\t\t\t\told_node.parent = new_dir;\n\t\t\t} catch (e) {\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tFS.hashAddNode(old_node);\n\t\t\t}\n\t\t},\n\t\trmdir(path) {\n\t\t\tvar parent = FS.lookupPath(path, { parent: true }).node;\n\t\t\tvar name = PATH.basename(path);\n\t\t\tvar node = FS.lookupNode(parent, name);\n\t\t\tvar errCode = FS.mayDelete(parent, name, true);\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tif (!parent.node_ops.rmdir) throw new FS.ErrnoError(63);\n\t\t\tif (FS.isMountpoint(node)) throw new FS.ErrnoError(10);\n\t\t\tparent.node_ops.rmdir(parent, name);\n\t\t\tFS.destroyNode(node);\n\t\t},\n\t\treaddir(path) {\n\t\t\tvar node = FS.lookupPath(path, { follow: true }).node;\n\t\t\treturn FS.checkOpExists(node.node_ops.readdir, 54)(node);\n\t\t},\n\t\tunlink(path) {\n\t\t\tvar parent = FS.lookupPath(path, { parent: true }).node;\n\t\t\tif (!parent) throw new FS.ErrnoError(44);\n\t\t\tvar name = PATH.basename(path);\n\t\t\tvar node = FS.lookupNode(parent, name);\n\t\t\tvar errCode = FS.mayDelete(parent, name, false);\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tif (!parent.node_ops.unlink) throw new FS.ErrnoError(63);\n\t\t\tif (FS.isMountpoint(node)) throw new FS.ErrnoError(10);\n\t\t\tparent.node_ops.unlink(parent, name);\n\t\t\tFS.destroyNode(node);\n\t\t},\n\t\treadlink(path) {\n\t\t\tvar link = FS.lookupPath(path).node;\n\t\t\tif (!link) throw new FS.ErrnoError(44);\n\t\t\tif (!link.node_ops.readlink) throw new FS.ErrnoError(28);\n\t\t\treturn link.node_ops.readlink(link);\n\t\t},\n\t\tstat(path, dontFollow) {\n\t\t\tvar node = FS.lookupPath(path, { follow: !dontFollow }).node;\n\t\t\treturn FS.checkOpExists(node.node_ops.getattr, 63)(node);\n\t\t},\n\t\tfstat(fd) {\n\t\t\tvar stream = FS.getStreamChecked(fd);\n\t\t\tvar node = stream.node;\n\t\t\tvar getattr = stream.stream_ops.getattr;\n\t\t\tvar arg = getattr ? stream : node;\n\t\t\tgetattr ??= node.node_ops.getattr;\n\t\t\tFS.checkOpExists(getattr, 63);\n\t\t\treturn getattr(arg);\n\t\t},\n\t\tlstat(path) {\n\t\t\treturn FS.stat(path, true);\n\t\t},\n\t\tdoChmod(stream, node, mode, dontFollow) {\n\t\t\tFS.doSetAttr(stream, node, {\n\t\t\t\tmode: mode & 4095 | node.mode & -4096,\n\t\t\t\tctime: Date.now(),\n\t\t\t\tdontFollow\n\t\t\t});\n\t\t},\n\t\tchmod(path, mode, dontFollow) {\n\t\t\tvar node;\n\t\t\tif (typeof path == \"string\") node = FS.lookupPath(path, { follow: !dontFollow }).node;\n\t\t\telse node = path;\n\t\t\tFS.doChmod(null, node, mode, dontFollow);\n\t\t},\n\t\tlchmod(path, mode) {\n\t\t\tFS.chmod(path, mode, true);\n\t\t},\n\t\tfchmod(fd, mode) {\n\t\t\tvar stream = FS.getStreamChecked(fd);\n\t\t\tFS.doChmod(stream, stream.node, mode, false);\n\t\t},\n\t\tdoChown(stream, node, dontFollow) {\n\t\t\tFS.doSetAttr(stream, node, {\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tdontFollow\n\t\t\t});\n\t\t},\n\t\tchown(path, uid, gid, dontFollow) {\n\t\t\tvar node;\n\t\t\tif (typeof path == \"string\") node = FS.lookupPath(path, { follow: !dontFollow }).node;\n\t\t\telse node = path;\n\t\t\tFS.doChown(null, node, dontFollow);\n\t\t},\n\t\tlchown(path, uid, gid) {\n\t\t\tFS.chown(path, uid, gid, true);\n\t\t},\n\t\tfchown(fd, uid, gid) {\n\t\t\tvar stream = FS.getStreamChecked(fd);\n\t\t\tFS.doChown(stream, stream.node, false);\n\t\t},\n\t\tdoTruncate(stream, node, len) {\n\t\t\tif (FS.isDir(node.mode)) throw new FS.ErrnoError(31);\n\t\t\tif (!FS.isFile(node.mode)) throw new FS.ErrnoError(28);\n\t\t\tvar errCode = FS.nodePermissions(node, \"w\");\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tFS.doSetAttr(stream, node, {\n\t\t\t\tsize: len,\n\t\t\t\ttimestamp: Date.now()\n\t\t\t});\n\t\t},\n\t\ttruncate(path, len) {\n\t\t\tif (len < 0) throw new FS.ErrnoError(28);\n\t\t\tvar node;\n\t\t\tif (typeof path == \"string\") node = FS.lookupPath(path, { follow: true }).node;\n\t\t\telse node = path;\n\t\t\tFS.doTruncate(null, node, len);\n\t\t},\n\t\tftruncate(fd, len) {\n\t\t\tvar stream = FS.getStreamChecked(fd);\n\t\t\tif (len < 0 || (stream.flags & 2097155) === 0) throw new FS.ErrnoError(28);\n\t\t\tFS.doTruncate(stream, stream.node, len);\n\t\t},\n\t\tutime(path, atime, mtime) {\n\t\t\tvar node = FS.lookupPath(path, { follow: true }).node;\n\t\t\tFS.checkOpExists(node.node_ops.setattr, 63)(node, {\n\t\t\t\tatime,\n\t\t\t\tmtime\n\t\t\t});\n\t\t},\n\t\topen(path, flags, mode = 438) {\n\t\t\tif (path === \"\") throw new FS.ErrnoError(44);\n\t\t\tflags = typeof flags == \"string\" ? FS_modeStringToFlags(flags) : flags;\n\t\t\tif (flags & 64) mode = mode & 4095 | 32768;\n\t\t\telse mode = 0;\n\t\t\tvar node;\n\t\t\tvar isDirPath;\n\t\t\tif (typeof path == \"object\") node = path;\n\t\t\telse {\n\t\t\t\tisDirPath = path.endsWith(\"/\");\n\t\t\t\tvar lookup = FS.lookupPath(path, {\n\t\t\t\t\tfollow: !(flags & 131072),\n\t\t\t\t\tnoent_okay: true\n\t\t\t\t});\n\t\t\t\tnode = lookup.node;\n\t\t\t\tpath = lookup.path;\n\t\t\t}\n\t\t\tvar created = false;\n\t\t\tif (flags & 64) if (node) {\n\t\t\t\tif (flags & 128) throw new FS.ErrnoError(20);\n\t\t\t} else if (isDirPath) throw new FS.ErrnoError(31);\n\t\t\telse {\n\t\t\t\tnode = FS.mknod(path, mode | 511, 0);\n\t\t\t\tcreated = true;\n\t\t\t}\n\t\t\tif (!node) throw new FS.ErrnoError(44);\n\t\t\tif (FS.isChrdev(node.mode)) flags &= -513;\n\t\t\tif (flags & 65536 && !FS.isDir(node.mode)) throw new FS.ErrnoError(54);\n\t\t\tif (!created) {\n\t\t\t\tvar errCode = FS.mayOpen(node, flags);\n\t\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\t}\n\t\t\tif (flags & 512 && !created) FS.truncate(node, 0);\n\t\t\tflags &= -131713;\n\t\t\tvar stream = FS.createStream({\n\t\t\t\tnode,\n\t\t\t\tpath: FS.getPath(node),\n\t\t\t\tflags,\n\t\t\t\tseekable: true,\n\t\t\t\tposition: 0,\n\t\t\t\tstream_ops: node.stream_ops,\n\t\t\t\tungotten: [],\n\t\t\t\terror: false\n\t\t\t});\n\t\t\tif (stream.stream_ops.open) stream.stream_ops.open(stream);\n\t\t\tif (created) FS.chmod(node, mode & 511);\n\t\t\tif (Module[\"logReadFiles\"] && !(flags & 1)) {\n\t\t\t\tif (!(path in FS.readFiles)) FS.readFiles[path] = 1;\n\t\t\t}\n\t\t\treturn stream;\n\t\t},\n\t\tclose(stream) {\n\t\t\tif (FS.isClosed(stream)) throw new FS.ErrnoError(8);\n\t\t\tif (stream.getdents) stream.getdents = null;\n\t\t\ttry {\n\t\t\t\tif (stream.stream_ops.close) stream.stream_ops.close(stream);\n\t\t\t} catch (e) {\n\t\t\t\tthrow e;\n\t\t\t} finally {\n\t\t\t\tFS.closeStream(stream.fd);\n\t\t\t}\n\t\t\tstream.fd = null;\n\t\t},\n\t\tisClosed(stream) {\n\t\t\treturn stream.fd === null;\n\t\t},\n\t\tllseek(stream, offset, whence) {\n\t\t\tif (FS.isClosed(stream)) throw new FS.ErrnoError(8);\n\t\t\tif (!stream.seekable || !stream.stream_ops.llseek) throw new FS.ErrnoError(70);\n\t\t\tif (whence != 0 && whence != 1 && whence != 2) throw new FS.ErrnoError(28);\n\t\t\tstream.position = stream.stream_ops.llseek(stream, offset, whence);\n\t\t\tstream.ungotten = [];\n\t\t\treturn stream.position;\n\t\t},\n\t\tread(stream, buffer, offset, length, position) {\n\t\t\tif (length < 0 || position < 0) throw new FS.ErrnoError(28);\n\t\t\tif (FS.isClosed(stream)) throw new FS.ErrnoError(8);\n\t\t\tif ((stream.flags & 2097155) === 1) throw new FS.ErrnoError(8);\n\t\t\tif (FS.isDir(stream.node.mode)) throw new FS.ErrnoError(31);\n\t\t\tif (!stream.stream_ops.read) throw new FS.ErrnoError(28);\n\t\t\tvar seeking = typeof position != \"undefined\";\n\t\t\tif (!seeking) position = stream.position;\n\t\t\telse if (!stream.seekable) throw new FS.ErrnoError(70);\n\t\t\tvar bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);\n\t\t\tif (!seeking) stream.position += bytesRead;\n\t\t\treturn bytesRead;\n\t\t},\n\t\twrite(stream, buffer, offset, length, position, canOwn) {\n\t\t\tif (length < 0 || position < 0) throw new FS.ErrnoError(28);\n\t\t\tif (FS.isClosed(stream)) throw new FS.ErrnoError(8);\n\t\t\tif ((stream.flags & 2097155) === 0) throw new FS.ErrnoError(8);\n\t\t\tif (FS.isDir(stream.node.mode)) throw new FS.ErrnoError(31);\n\t\t\tif (!stream.stream_ops.write) throw new FS.ErrnoError(28);\n\t\t\tif (stream.seekable && stream.flags & 1024) FS.llseek(stream, 0, 2);\n\t\t\tvar seeking = typeof position != \"undefined\";\n\t\t\tif (!seeking) position = stream.position;\n\t\t\telse if (!stream.seekable) throw new FS.ErrnoError(70);\n\t\t\tvar bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);\n\t\t\tif (!seeking) stream.position += bytesWritten;\n\t\t\treturn bytesWritten;\n\t\t},\n\t\tmmap(stream, length, position, prot, flags) {\n\t\t\tif ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) throw new FS.ErrnoError(2);\n\t\t\tif ((stream.flags & 2097155) === 1) throw new FS.ErrnoError(2);\n\t\t\tif (!stream.stream_ops.mmap) throw new FS.ErrnoError(43);\n\t\t\tif (!length) throw new FS.ErrnoError(28);\n\t\t\treturn stream.stream_ops.mmap(stream, length, position, prot, flags);\n\t\t},\n\t\tmsync(stream, buffer, offset, length, mmapFlags) {\n\t\t\tif (!stream.stream_ops.msync) return 0;\n\t\t\treturn stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n\t\t},\n\t\tioctl(stream, cmd, arg) {\n\t\t\tif (!stream.stream_ops.ioctl) throw new FS.ErrnoError(59);\n\t\t\treturn stream.stream_ops.ioctl(stream, cmd, arg);\n\t\t},\n\t\treadFile(path, opts = {}) {\n\t\t\topts.flags = opts.flags || 0;\n\t\t\topts.encoding = opts.encoding || \"binary\";\n\t\t\tif (opts.encoding !== \"utf8\" && opts.encoding !== \"binary\") abort(`Invalid encoding type \"${opts.encoding}\"`);\n\t\t\tvar stream = FS.open(path, opts.flags);\n\t\t\tvar length = FS.stat(path).size;\n\t\t\tvar buf = new Uint8Array(length);\n\t\t\tFS.read(stream, buf, 0, length, 0);\n\t\t\tif (opts.encoding === \"utf8\") buf = UTF8ArrayToString(buf);\n\t\t\tFS.close(stream);\n\t\t\treturn buf;\n\t\t},\n\t\twriteFile(path, data, opts = {}) {\n\t\t\topts.flags = opts.flags || 577;\n\t\t\tvar stream = FS.open(path, opts.flags, opts.mode);\n\t\t\tif (typeof data == \"string\") data = new Uint8Array(intArrayFromString(data, true));\n\t\t\tif (ArrayBuffer.isView(data)) FS.write(stream, data, 0, data.byteLength, void 0, opts.canOwn);\n\t\t\telse abort(\"Unsupported data type\");\n\t\t\tFS.close(stream);\n\t\t},\n\t\tcwd: () => FS.currentPath,\n\t\tchdir(path) {\n\t\t\tvar lookup = FS.lookupPath(path, { follow: true });\n\t\t\tif (lookup.node === null) throw new FS.ErrnoError(44);\n\t\t\tif (!FS.isDir(lookup.node.mode)) throw new FS.ErrnoError(54);\n\t\t\tvar errCode = FS.nodePermissions(lookup.node, \"x\");\n\t\t\tif (errCode) throw new FS.ErrnoError(errCode);\n\t\t\tFS.currentPath = lookup.path;\n\t\t},\n\t\tcreateDefaultDirectories() {\n\t\t\tFS.mkdir(\"/tmp\");\n\t\t\tFS.mkdir(\"/home\");\n\t\t\tFS.mkdir(\"/home/web_user\");\n\t\t},\n\t\tcreateDefaultDevices() {\n\t\t\tFS.mkdir(\"/dev\");\n\t\t\tFS.registerDevice(FS.makedev(1, 3), {\n\t\t\t\tread: () => 0,\n\t\t\t\twrite: (stream, buffer, offset, length, pos) => length,\n\t\t\t\tllseek: () => 0\n\t\t\t});\n\t\t\tFS.mkdev(\"/dev/null\", FS.makedev(1, 3));\n\t\t\tTTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n\t\t\tTTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n\t\t\tFS.mkdev(\"/dev/tty\", FS.makedev(5, 0));\n\t\t\tFS.mkdev(\"/dev/tty1\", FS.makedev(6, 0));\n\t\t\tvar randomBuffer = new Uint8Array(1024), randomLeft = 0;\n\t\t\tvar randomByte = () => {\n\t\t\t\tif (randomLeft === 0) {\n\t\t\t\t\trandomFill(randomBuffer);\n\t\t\t\t\trandomLeft = randomBuffer.byteLength;\n\t\t\t\t}\n\t\t\t\treturn randomBuffer[--randomLeft];\n\t\t\t};\n\t\t\tFS.createDevice(\"/dev\", \"random\", randomByte);\n\t\t\tFS.createDevice(\"/dev\", \"urandom\", randomByte);\n\t\t\tFS.mkdir(\"/dev/shm\");\n\t\t\tFS.mkdir(\"/dev/shm/tmp\");\n\t\t},\n\t\tcreateSpecialDirectories() {\n\t\t\tFS.mkdir(\"/proc\");\n\t\t\tvar proc_self = FS.mkdir(\"/proc/self\");\n\t\t\tFS.mkdir(\"/proc/self/fd\");\n\t\t\tFS.mount({ mount() {\n\t\t\t\tvar node = FS.createNode(proc_self, \"fd\", 16895, 73);\n\t\t\t\tnode.stream_ops = { llseek: MEMFS.stream_ops.llseek };\n\t\t\t\tnode.node_ops = {\n\t\t\t\t\tlookup(parent, name) {\n\t\t\t\t\t\tvar fd = +name;\n\t\t\t\t\t\tvar stream = FS.getStreamChecked(fd);\n\t\t\t\t\t\tvar ret = {\n\t\t\t\t\t\t\tparent: null,\n\t\t\t\t\t\t\tmount: { mountpoint: \"fake\" },\n\t\t\t\t\t\t\tnode_ops: { readlink: () => stream.path },\n\t\t\t\t\t\t\tid: fd + 1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tret.parent = ret;\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t},\n\t\t\t\t\treaddir() {\n\t\t\t\t\t\treturn Array.from(FS.streams.entries()).filter(([k, v]) => v).map(([k, v]) => k.toString());\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn node;\n\t\t\t} }, {}, \"/proc/self/fd\");\n\t\t},\n\t\tcreateStandardStreams(input, output, error) {\n\t\t\tif (input) FS.createDevice(\"/dev\", \"stdin\", input);\n\t\t\telse FS.symlink(\"/dev/tty\", \"/dev/stdin\");\n\t\t\tif (output) FS.createDevice(\"/dev\", \"stdout\", null, output);\n\t\t\telse FS.symlink(\"/dev/tty\", \"/dev/stdout\");\n\t\t\tif (error) FS.createDevice(\"/dev\", \"stderr\", null, error);\n\t\t\telse FS.symlink(\"/dev/tty1\", \"/dev/stderr\");\n\t\t\tFS.open(\"/dev/stdin\", 0);\n\t\t\tFS.open(\"/dev/stdout\", 1);\n\t\t\tFS.open(\"/dev/stderr\", 1);\n\t\t},\n\t\tstaticInit() {\n\t\t\tFS.nameTable = new Array(4096);\n\t\t\tFS.mount(MEMFS, {}, \"/\");\n\t\t\tFS.createDefaultDirectories();\n\t\t\tFS.createDefaultDevices();\n\t\t\tFS.createSpecialDirectories();\n\t\t\tFS.filesystems = { \"MEMFS\": MEMFS };\n\t\t},\n\t\tinit(input, output, error) {\n\t\t\tFS.initialized = true;\n\t\t\tinput ??= Module[\"stdin\"];\n\t\t\toutput ??= Module[\"stdout\"];\n\t\t\terror ??= Module[\"stderr\"];\n\t\t\tFS.createStandardStreams(input, output, error);\n\t\t},\n\t\tquit() {\n\t\t\tFS.initialized = false;\n\t\t\tfor (var stream of FS.streams) if (stream) FS.close(stream);\n\t\t},\n\t\tfindObject(path, dontResolveLastLink) {\n\t\t\tvar ret = FS.analyzePath(path, dontResolveLastLink);\n\t\t\tif (!ret.exists) return null;\n\t\t\treturn ret.object;\n\t\t},\n\t\tanalyzePath(path, dontResolveLastLink) {\n\t\t\ttry {\n\t\t\t\tvar lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n\t\t\t\tpath = lookup.path;\n\t\t\t} catch (e) {}\n\t\t\tvar ret = {\n\t\t\t\tisRoot: false,\n\t\t\t\texists: false,\n\t\t\t\terror: 0,\n\t\t\t\tname: null,\n\t\t\t\tpath: null,\n\t\t\t\tobject: null,\n\t\t\t\tparentExists: false,\n\t\t\t\tparentPath: null,\n\t\t\t\tparentObject: null\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tvar lookup = FS.lookupPath(path, { parent: true });\n\t\t\t\tret.parentExists = true;\n\t\t\t\tret.parentPath = lookup.path;\n\t\t\t\tret.parentObject = lookup.node;\n\t\t\t\tret.name = PATH.basename(path);\n\t\t\t\tlookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n\t\t\t\tret.exists = true;\n\t\t\t\tret.path = lookup.path;\n\t\t\t\tret.object = lookup.node;\n\t\t\t\tret.name = lookup.node.name;\n\t\t\t\tret.isRoot = lookup.path === \"/\";\n\t\t\t} catch (e) {\n\t\t\t\tret.error = e.errno;\n\t\t\t}\n\t\t\treturn ret;\n\t\t},\n\t\tcreatePath(parent, path, canRead, canWrite) {\n\t\t\tparent = typeof parent == \"string\" ? parent : FS.getPath(parent);\n\t\t\tvar parts = path.split(\"/\").reverse();\n\t\t\twhile (parts.length) {\n\t\t\t\tvar part = parts.pop();\n\t\t\t\tif (!part) continue;\n\t\t\t\tvar current = PATH.join2(parent, part);\n\t\t\t\ttry {\n\t\t\t\t\tFS.mkdir(current);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e.errno != 20) throw e;\n\t\t\t\t}\n\t\t\t\tparent = current;\n\t\t\t}\n\t\t\treturn current;\n\t\t},\n\t\tcreateFile(parent, name, properties, canRead, canWrite) {\n\t\t\tvar path = PATH.join2(typeof parent == \"string\" ? parent : FS.getPath(parent), name);\n\t\t\tvar mode = FS_getMode(canRead, canWrite);\n\t\t\treturn FS.create(path, mode);\n\t\t},\n\t\tcreateDataFile(parent, name, data, canRead, canWrite, canOwn) {\n\t\t\tvar path = name;\n\t\t\tif (parent) {\n\t\t\t\tparent = typeof parent == \"string\" ? parent : FS.getPath(parent);\n\t\t\t\tpath = name ? PATH.join2(parent, name) : parent;\n\t\t\t}\n\t\t\tvar mode = FS_getMode(canRead, canWrite);\n\t\t\tvar node = FS.create(path, mode);\n\t\t\tif (data) {\n\t\t\t\tif (typeof data == \"string\") {\n\t\t\t\t\tvar arr = new Array(data.length);\n\t\t\t\t\tfor (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);\n\t\t\t\t\tdata = arr;\n\t\t\t\t}\n\t\t\t\tFS.chmod(node, mode | 146);\n\t\t\t\tvar stream = FS.open(node, 577);\n\t\t\t\tFS.write(stream, data, 0, data.length, 0, canOwn);\n\t\t\t\tFS.close(stream);\n\t\t\t\tFS.chmod(node, mode);\n\t\t\t}\n\t\t},\n\t\tcreateDevice(parent, name, input, output) {\n\t\t\tvar path = PATH.join2(typeof parent == \"string\" ? parent : FS.getPath(parent), name);\n\t\t\tvar mode = FS_getMode(!!input, !!output);\n\t\t\tFS.createDevice.major ??= 64;\n\t\t\tvar dev = FS.makedev(FS.createDevice.major++, 0);\n\t\t\tFS.registerDevice(dev, {\n\t\t\t\topen(stream) {\n\t\t\t\t\tstream.seekable = false;\n\t\t\t\t},\n\t\t\t\tclose(stream) {\n\t\t\t\t\tif (output?.buffer?.length) output(10);\n\t\t\t\t},\n\t\t\t\tread(stream, buffer, offset, length, pos) {\n\t\t\t\t\tvar bytesRead = 0;\n\t\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\t\tvar result;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresult = input();\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tthrow new FS.ErrnoError(29);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result === void 0 && bytesRead === 0) throw new FS.ErrnoError(6);\n\t\t\t\t\t\tif (result === null || result === void 0) break;\n\t\t\t\t\t\tbytesRead++;\n\t\t\t\t\t\tbuffer[offset + i] = result;\n\t\t\t\t\t}\n\t\t\t\t\tif (bytesRead) stream.node.atime = Date.now();\n\t\t\t\t\treturn bytesRead;\n\t\t\t\t},\n\t\t\t\twrite(stream, buffer, offset, length, pos) {\n\t\t\t\t\tfor (var i = 0; i < length; i++) try {\n\t\t\t\t\t\toutput(buffer[offset + i]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthrow new FS.ErrnoError(29);\n\t\t\t\t\t}\n\t\t\t\t\tif (length) stream.node.mtime = stream.node.ctime = Date.now();\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn FS.mkdev(path, mode, dev);\n\t\t},\n\t\tforceLoadFile(obj) {\n\t\t\tif (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n\t\t\tif (globalThis.XMLHttpRequest) abort(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");\n\t\t\telse try {\n\t\t\t\tobj.contents = readBinary(obj.url);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new FS.ErrnoError(29);\n\t\t\t}\n\t\t},\n\t\tcreateLazyFile(parent, name, url, canRead, canWrite) {\n\t\t\tclass LazyUint8Array {\n\t\t\t\tlengthKnown = false;\n\t\t\t\tchunks = [];\n\t\t\t\tget(idx) {\n\t\t\t\t\tif (idx > this.length - 1 || idx < 0) return;\n\t\t\t\t\tvar chunkOffset = idx % this.chunkSize;\n\t\t\t\t\tvar chunkNum = idx / this.chunkSize | 0;\n\t\t\t\t\treturn this.getter(chunkNum)[chunkOffset];\n\t\t\t\t}\n\t\t\t\tsetDataGetter(getter) {\n\t\t\t\t\tthis.getter = getter;\n\t\t\t\t}\n\t\t\t\tcacheLength() {\n\t\t\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\t\t\txhr.open(\"HEAD\", url, false);\n\t\t\t\t\txhr.send(null);\n\t\t\t\t\tif (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(\"Couldn't load \" + url + \". Status: \" + xhr.status);\n\t\t\t\t\tvar datalength = Number(xhr.getResponseHeader(\"Content-length\"));\n\t\t\t\t\tvar header;\n\t\t\t\t\tvar hasByteServing = (header = xhr.getResponseHeader(\"Accept-Ranges\")) && header === \"bytes\";\n\t\t\t\t\tvar usesGzip = (header = xhr.getResponseHeader(\"Content-Encoding\")) && header === \"gzip\";\n\t\t\t\t\tvar chunkSize = 1024 * 1024;\n\t\t\t\t\tif (!hasByteServing) chunkSize = datalength;\n\t\t\t\t\tvar doXHR = (from, to) => {\n\t\t\t\t\t\tif (from > to) abort(\"invalid range (\" + from + \", \" + to + \") or no bytes requested!\");\n\t\t\t\t\t\tif (to > datalength - 1) abort(\"only \" + datalength + \" bytes available! programmer error!\");\n\t\t\t\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\t\t\t\txhr.open(\"GET\", url, false);\n\t\t\t\t\t\tif (datalength !== chunkSize) xhr.setRequestHeader(\"Range\", \"bytes=\" + from + \"-\" + to);\n\t\t\t\t\t\txhr.responseType = \"arraybuffer\";\n\t\t\t\t\t\tif (xhr.overrideMimeType) xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\t\t\t\t\t\txhr.send(null);\n\t\t\t\t\t\tif (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) abort(\"Couldn't load \" + url + \". Status: \" + xhr.status);\n\t\t\t\t\t\tif (xhr.response !== void 0) return new Uint8Array(xhr.response || []);\n\t\t\t\t\t\treturn intArrayFromString(xhr.responseText || \"\", true);\n\t\t\t\t\t};\n\t\t\t\t\tvar lazyArray = this;\n\t\t\t\t\tlazyArray.setDataGetter((chunkNum) => {\n\t\t\t\t\t\tvar start = chunkNum * chunkSize;\n\t\t\t\t\t\tvar end = (chunkNum + 1) * chunkSize - 1;\n\t\t\t\t\t\tend = Math.min(end, datalength - 1);\n\t\t\t\t\t\tif (typeof lazyArray.chunks[chunkNum] == \"undefined\") lazyArray.chunks[chunkNum] = doXHR(start, end);\n\t\t\t\t\t\tif (typeof lazyArray.chunks[chunkNum] == \"undefined\") abort(\"doXHR failed!\");\n\t\t\t\t\t\treturn lazyArray.chunks[chunkNum];\n\t\t\t\t\t});\n\t\t\t\t\tif (usesGzip || !datalength) {\n\t\t\t\t\t\tchunkSize = datalength = 1;\n\t\t\t\t\t\tdatalength = this.getter(0).length;\n\t\t\t\t\t\tchunkSize = datalength;\n\t\t\t\t\t\tout(\"LazyFiles on gzip forces download of the whole file when length is accessed\");\n\t\t\t\t\t}\n\t\t\t\t\tthis._length = datalength;\n\t\t\t\t\tthis._chunkSize = chunkSize;\n\t\t\t\t\tthis.lengthKnown = true;\n\t\t\t\t}\n\t\t\t\tget length() {\n\t\t\t\t\tif (!this.lengthKnown) this.cacheLength();\n\t\t\t\t\treturn this._length;\n\t\t\t\t}\n\t\t\t\tget chunkSize() {\n\t\t\t\t\tif (!this.lengthKnown) this.cacheLength();\n\t\t\t\t\treturn this._chunkSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (globalThis.XMLHttpRequest) {\n\t\t\t\tif (!ENVIRONMENT_IS_WORKER) abort(\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\");\n\t\t\t\tvar properties = {\n\t\t\t\t\tisDevice: false,\n\t\t\t\t\tcontents: new LazyUint8Array()\n\t\t\t\t};\n\t\t\t} else var properties = {\n\t\t\t\tisDevice: false,\n\t\t\t\turl\n\t\t\t};\n\t\t\tvar node = FS.createFile(parent, name, properties, canRead, canWrite);\n\t\t\tif (properties.contents) node.contents = properties.contents;\n\t\t\telse if (properties.url) {\n\t\t\t\tnode.contents = null;\n\t\t\t\tnode.url = properties.url;\n\t\t\t}\n\t\t\tObject.defineProperties(node, { usedBytes: { get: function() {\n\t\t\t\treturn this.contents.length;\n\t\t\t} } });\n\t\t\tvar stream_ops = {};\n\t\t\tfor (const [key, fn] of Object.entries(node.stream_ops)) stream_ops[key] = (...args) => {\n\t\t\t\tFS.forceLoadFile(node);\n\t\t\t\treturn fn(...args);\n\t\t\t};\n\t\t\tfunction writeChunks(stream, buffer, offset, length, position) {\n\t\t\t\tvar contents = stream.node.contents;\n\t\t\t\tif (position >= contents.length) return 0;\n\t\t\t\tvar size = Math.min(contents.length - position, length);\n\t\t\t\tif (contents.slice) for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];\n\t\t\t\telse for (var i = 0; i < size; i++) buffer[offset + i] = contents.get(position + i);\n\t\t\t\treturn size;\n\t\t\t}\n\t\t\tstream_ops.read = (stream, buffer, offset, length, position) => {\n\t\t\t\tFS.forceLoadFile(node);\n\t\t\t\treturn writeChunks(stream, buffer, offset, length, position);\n\t\t\t};\n\t\t\tstream_ops.mmap = (stream, length, position, prot, flags) => {\n\t\t\t\tFS.forceLoadFile(node);\n\t\t\t\tvar ptr = mmapAlloc(length);\n\t\t\t\tif (!ptr) throw new FS.ErrnoError(48);\n\t\t\t\twriteChunks(stream, HEAP8, ptr, length, position);\n\t\t\t\treturn {\n\t\t\t\t\tptr,\n\t\t\t\t\tallocated: true\n\t\t\t\t};\n\t\t\t};\n\t\t\tnode.stream_ops = stream_ops;\n\t\t\treturn node;\n\t\t}\n\t};\n\tvar UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {\n\t\tif (!ptr) return \"\";\n\t\tvar end = findStringEnd(HEAPU8, ptr, maxBytesToRead, ignoreNul);\n\t\treturn UTF8Decoder.decode(HEAPU8.subarray(ptr, end));\n\t};\n\tvar SYSCALLS = {\n\t\tcalculateAt(dirfd, path, allowEmpty) {\n\t\t\tif (PATH.isAbs(path)) return path;\n\t\t\tvar dir;\n\t\t\tif (dirfd === -100) dir = FS.cwd();\n\t\t\telse dir = SYSCALLS.getStreamFromFD(dirfd).path;\n\t\t\tif (path.length == 0) {\n\t\t\t\tif (!allowEmpty) throw new FS.ErrnoError(44);\n\t\t\t\treturn dir;\n\t\t\t}\n\t\t\treturn dir + \"/\" + path;\n\t\t},\n\t\twriteStat(buf, stat) {\n\t\t\tHEAPU32[buf >> 2] = stat.dev;\n\t\t\tHEAPU32[buf + 4 >> 2] = stat.mode;\n\t\t\tHEAPU32[buf + 8 >> 2] = stat.nlink;\n\t\t\tHEAPU32[buf + 12 >> 2] = stat.uid;\n\t\t\tHEAPU32[buf + 16 >> 2] = stat.gid;\n\t\t\tHEAPU32[buf + 20 >> 2] = stat.rdev;\n\t\t\tHEAP64[buf + 24 >> 3] = BigInt(stat.size);\n\t\t\tHEAP32[buf + 32 >> 2] = 4096;\n\t\t\tHEAP32[buf + 36 >> 2] = stat.blocks;\n\t\t\tvar atime = stat.atime.getTime();\n\t\t\tvar mtime = stat.mtime.getTime();\n\t\t\tvar ctime = stat.ctime.getTime();\n\t\t\tHEAP64[buf + 40 >> 3] = BigInt(Math.floor(atime / 1e3));\n\t\t\tHEAPU32[buf + 48 >> 2] = atime % 1e3 * 1e3 * 1e3;\n\t\t\tHEAP64[buf + 56 >> 3] = BigInt(Math.floor(mtime / 1e3));\n\t\t\tHEAPU32[buf + 64 >> 2] = mtime % 1e3 * 1e3 * 1e3;\n\t\t\tHEAP64[buf + 72 >> 3] = BigInt(Math.floor(ctime / 1e3));\n\t\t\tHEAPU32[buf + 80 >> 2] = ctime % 1e3 * 1e3 * 1e3;\n\t\t\tHEAP64[buf + 88 >> 3] = BigInt(stat.ino);\n\t\t\treturn 0;\n\t\t},\n\t\twriteStatFs(buf, stats) {\n\t\t\tHEAPU32[buf + 4 >> 2] = stats.bsize;\n\t\t\tHEAPU32[buf + 60 >> 2] = stats.bsize;\n\t\t\tHEAP64[buf + 8 >> 3] = BigInt(stats.blocks);\n\t\t\tHEAP64[buf + 16 >> 3] = BigInt(stats.bfree);\n\t\t\tHEAP64[buf + 24 >> 3] = BigInt(stats.bavail);\n\t\t\tHEAP64[buf + 32 >> 3] = BigInt(stats.files);\n\t\t\tHEAP64[buf + 40 >> 3] = BigInt(stats.ffree);\n\t\t\tHEAPU32[buf + 48 >> 2] = stats.fsid;\n\t\t\tHEAPU32[buf + 64 >> 2] = stats.flags;\n\t\t\tHEAPU32[buf + 56 >> 2] = stats.namelen;\n\t\t},\n\t\tdoMsync(addr, stream, len, flags, offset) {\n\t\t\tif (!FS.isFile(stream.node.mode)) throw new FS.ErrnoError(43);\n\t\t\tif (flags & 2) return 0;\n\t\t\tvar buffer = HEAPU8.slice(addr, addr + len);\n\t\t\tFS.msync(stream, buffer, offset, len, flags);\n\t\t},\n\t\tgetStreamFromFD(fd) {\n\t\t\treturn FS.getStreamChecked(fd);\n\t\t},\n\t\tvarargs: void 0,\n\t\tgetStr(ptr) {\n\t\t\treturn UTF8ToString(ptr);\n\t\t}\n\t};\n\tfunction ___syscall_chmod(path, mode) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tFS.chmod(path, mode);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_faccessat(dirfd, path, amode, flags) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tpath = SYSCALLS.calculateAt(dirfd, path);\n\t\t\tif (amode & -8) return -28;\n\t\t\tvar node = FS.lookupPath(path, { follow: true }).node;\n\t\t\tif (!node) return -44;\n\t\t\tvar perms = \"\";\n\t\t\tif (amode & 4) perms += \"r\";\n\t\t\tif (amode & 2) perms += \"w\";\n\t\t\tif (amode & 1) perms += \"x\";\n\t\t\tif (perms && FS.nodePermissions(node, perms)) return -2;\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_fchmod(fd, mode) {\n\t\ttry {\n\t\t\tFS.fchmod(fd, mode);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_fchown32(fd, owner, group) {\n\t\ttry {\n\t\t\tFS.fchown(fd, owner, group);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tvar syscallGetVarargI = () => {\n\t\tvar ret = HEAP32[+SYSCALLS.varargs >> 2];\n\t\tSYSCALLS.varargs += 4;\n\t\treturn ret;\n\t};\n\tvar syscallGetVarargP = syscallGetVarargI;\n\tfunction ___syscall_fcntl64(fd, cmd, varargs) {\n\t\tSYSCALLS.varargs = varargs;\n\t\ttry {\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\tswitch (cmd) {\n\t\t\t\tcase 0:\n\t\t\t\t\tvar arg = syscallGetVarargI();\n\t\t\t\t\tif (arg < 0) return -28;\n\t\t\t\t\twhile (FS.streams[arg]) arg++;\n\t\t\t\t\treturn FS.dupStream(stream, arg).fd;\n\t\t\t\tcase 1:\n\t\t\t\tcase 2: return 0;\n\t\t\t\tcase 3: return stream.flags;\n\t\t\t\tcase 4:\n\t\t\t\t\tvar arg = syscallGetVarargI();\n\t\t\t\t\tstream.flags |= arg;\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 12:\n\t\t\t\t\tvar arg = syscallGetVarargP();\n\t\t\t\t\tvar offset = 0;\n\t\t\t\t\tHEAP16[arg + offset >> 1] = 2;\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 13:\n\t\t\t\tcase 14: return 0;\n\t\t\t}\n\t\t\treturn -28;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_fstat64(fd, buf) {\n\t\ttry {\n\t\t\treturn SYSCALLS.writeStat(buf, FS.fstat(fd));\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tvar INT53_MAX = 9007199254740992;\n\tvar INT53_MIN = -9007199254740992;\n\tvar bigintToI53Checked = (num) => num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\n\tfunction ___syscall_ftruncate64(fd, length) {\n\t\tlength = bigintToI53Checked(length);\n\t\ttry {\n\t\t\tif (isNaN(length)) return -61;\n\t\t\tFS.ftruncate(fd, length);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tvar stringToUTF8 = (str, outPtr, maxBytesToWrite) => {\n\t\treturn stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n\t};\n\tfunction ___syscall_getcwd(buf, size) {\n\t\ttry {\n\t\t\tif (size === 0) return -28;\n\t\t\tvar cwd = FS.cwd();\n\t\t\tvar cwdLengthInBytes = lengthBytesUTF8(cwd) + 1;\n\t\t\tif (size < cwdLengthInBytes) return -68;\n\t\t\tstringToUTF8(cwd, buf, size);\n\t\t\treturn cwdLengthInBytes;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_ioctl(fd, op, varargs) {\n\t\tSYSCALLS.varargs = varargs;\n\t\ttry {\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\tswitch (op) {\n\t\t\t\tcase 21509:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 21505:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\tif (stream.tty.ops.ioctl_tcgets) {\n\t\t\t\t\t\tvar termios = stream.tty.ops.ioctl_tcgets(stream);\n\t\t\t\t\t\tvar argp = syscallGetVarargP();\n\t\t\t\t\t\tHEAP32[argp >> 2] = termios.c_iflag || 0;\n\t\t\t\t\t\tHEAP32[argp + 4 >> 2] = termios.c_oflag || 0;\n\t\t\t\t\t\tHEAP32[argp + 8 >> 2] = termios.c_cflag || 0;\n\t\t\t\t\t\tHEAP32[argp + 12 >> 2] = termios.c_lflag || 0;\n\t\t\t\t\t\tfor (var i = 0; i < 32; i++) HEAP8[argp + i + 17] = termios.c_cc[i] || 0;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 21510:\n\t\t\t\tcase 21511:\n\t\t\t\tcase 21512:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 21506:\n\t\t\t\tcase 21507:\n\t\t\t\tcase 21508:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\tif (stream.tty.ops.ioctl_tcsets) {\n\t\t\t\t\t\tvar argp = syscallGetVarargP();\n\t\t\t\t\t\tvar c_iflag = HEAP32[argp >> 2];\n\t\t\t\t\t\tvar c_oflag = HEAP32[argp + 4 >> 2];\n\t\t\t\t\t\tvar c_cflag = HEAP32[argp + 8 >> 2];\n\t\t\t\t\t\tvar c_lflag = HEAP32[argp + 12 >> 2];\n\t\t\t\t\t\tvar c_cc = [];\n\t\t\t\t\t\tfor (var i = 0; i < 32; i++) c_cc.push(HEAP8[argp + i + 17]);\n\t\t\t\t\t\treturn stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n\t\t\t\t\t\t\tc_iflag,\n\t\t\t\t\t\t\tc_oflag,\n\t\t\t\t\t\t\tc_cflag,\n\t\t\t\t\t\t\tc_lflag,\n\t\t\t\t\t\t\tc_cc\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 21519:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\tvar argp = syscallGetVarargP();\n\t\t\t\t\tHEAP32[argp >> 2] = 0;\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 21520:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\treturn -28;\n\t\t\t\tcase 21537:\n\t\t\t\tcase 21531:\n\t\t\t\t\tvar argp = syscallGetVarargP();\n\t\t\t\t\treturn FS.ioctl(stream, op, argp);\n\t\t\t\tcase 21523:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\tif (stream.tty.ops.ioctl_tiocgwinsz) {\n\t\t\t\t\t\tvar winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n\t\t\t\t\t\tvar argp = syscallGetVarargP();\n\t\t\t\t\t\tHEAP16[argp >> 1] = winsize[0];\n\t\t\t\t\t\tHEAP16[argp + 2 >> 1] = winsize[1];\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 21524:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\treturn 0;\n\t\t\t\tcase 21515:\n\t\t\t\t\tif (!stream.tty) return -59;\n\t\t\t\t\treturn 0;\n\t\t\t\tdefault: return -28;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_lstat64(path, buf) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\treturn SYSCALLS.writeStat(buf, FS.lstat(path));\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_mkdirat(dirfd, path, mode) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tpath = SYSCALLS.calculateAt(dirfd, path);\n\t\t\tFS.mkdir(path, mode, 0);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_newfstatat(dirfd, path, buf, flags) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tvar nofollow = flags & 256;\n\t\t\tvar allowEmpty = flags & 4096;\n\t\t\tflags = flags & -6401;\n\t\t\tpath = SYSCALLS.calculateAt(dirfd, path, allowEmpty);\n\t\t\treturn SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path));\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_openat(dirfd, path, flags, varargs) {\n\t\tSYSCALLS.varargs = varargs;\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tpath = SYSCALLS.calculateAt(dirfd, path);\n\t\t\tvar mode = varargs ? syscallGetVarargI() : 0;\n\t\t\treturn FS.open(path, flags, mode).fd;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_readlinkat(dirfd, path, buf, bufsize) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tpath = SYSCALLS.calculateAt(dirfd, path);\n\t\t\tif (bufsize <= 0) return -28;\n\t\t\tvar ret = FS.readlink(path);\n\t\t\tvar len = Math.min(bufsize, lengthBytesUTF8(ret));\n\t\t\tvar endChar = HEAP8[buf + len];\n\t\t\tstringToUTF8(ret, buf, bufsize + 1);\n\t\t\tHEAP8[buf + len] = endChar;\n\t\t\treturn len;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_rmdir(path) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tFS.rmdir(path);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_stat64(path, buf) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\treturn SYSCALLS.writeStat(buf, FS.stat(path));\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction ___syscall_unlinkat(dirfd, path, flags) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tpath = SYSCALLS.calculateAt(dirfd, path);\n\t\t\tif (!flags) FS.unlink(path);\n\t\t\telse if (flags === 512) FS.rmdir(path);\n\t\t\telse return -28;\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tvar readI53FromI64 = (ptr) => {\n\t\treturn HEAPU32[ptr >> 2] + HEAP32[ptr + 4 >> 2] * 4294967296;\n\t};\n\tfunction ___syscall_utimensat(dirfd, path, times, flags) {\n\t\ttry {\n\t\t\tpath = SYSCALLS.getStr(path);\n\t\t\tpath = SYSCALLS.calculateAt(dirfd, path, true);\n\t\t\tvar now = Date.now(), atime, mtime;\n\t\t\tif (!times) {\n\t\t\t\tatime = now;\n\t\t\t\tmtime = now;\n\t\t\t} else {\n\t\t\t\tvar seconds = readI53FromI64(times);\n\t\t\t\tvar nanoseconds = HEAP32[times + 8 >> 2];\n\t\t\t\tif (nanoseconds == 1073741823) atime = now;\n\t\t\t\telse if (nanoseconds == 1073741822) atime = null;\n\t\t\t\telse atime = seconds * 1e3 + nanoseconds / (1e3 * 1e3);\n\t\t\t\ttimes += 16;\n\t\t\t\tseconds = readI53FromI64(times);\n\t\t\t\tnanoseconds = HEAP32[times + 8 >> 2];\n\t\t\t\tif (nanoseconds == 1073741823) mtime = now;\n\t\t\t\telse if (nanoseconds == 1073741822) mtime = null;\n\t\t\t\telse mtime = seconds * 1e3 + nanoseconds / (1e3 * 1e3);\n\t\t\t}\n\t\t\tif ((mtime ?? atime) !== null) FS.utime(path, atime, mtime);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tvar isLeapYear = (year) => year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n\tvar MONTH_DAYS_LEAP_CUMULATIVE = [\n\t\t0,\n\t\t31,\n\t\t60,\n\t\t91,\n\t\t121,\n\t\t152,\n\t\t182,\n\t\t213,\n\t\t244,\n\t\t274,\n\t\t305,\n\t\t335\n\t];\n\tvar MONTH_DAYS_REGULAR_CUMULATIVE = [\n\t\t0,\n\t\t31,\n\t\t59,\n\t\t90,\n\t\t120,\n\t\t151,\n\t\t181,\n\t\t212,\n\t\t243,\n\t\t273,\n\t\t304,\n\t\t334\n\t];\n\tvar ydayFromDate = (date) => {\n\t\treturn (isLeapYear(date.getFullYear()) ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE)[date.getMonth()] + date.getDate() - 1;\n\t};\n\tfunction __localtime_js(time, tmPtr) {\n\t\ttime = bigintToI53Checked(time);\n\t\tvar date = /* @__PURE__ */ new Date(time * 1e3);\n\t\tHEAP32[tmPtr >> 2] = date.getSeconds();\n\t\tHEAP32[tmPtr + 4 >> 2] = date.getMinutes();\n\t\tHEAP32[tmPtr + 8 >> 2] = date.getHours();\n\t\tHEAP32[tmPtr + 12 >> 2] = date.getDate();\n\t\tHEAP32[tmPtr + 16 >> 2] = date.getMonth();\n\t\tHEAP32[tmPtr + 20 >> 2] = date.getFullYear() - 1900;\n\t\tHEAP32[tmPtr + 24 >> 2] = date.getDay();\n\t\tvar yday = ydayFromDate(date) | 0;\n\t\tHEAP32[tmPtr + 28 >> 2] = yday;\n\t\tHEAP32[tmPtr + 36 >> 2] = -(date.getTimezoneOffset() * 60);\n\t\tvar start = new Date(date.getFullYear(), 0, 1);\n\t\tvar summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();\n\t\tvar winterOffset = start.getTimezoneOffset();\n\t\tvar dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset)) | 0;\n\t\tHEAP32[tmPtr + 32 >> 2] = dst;\n\t}\n\tfunction __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n\t\toffset = bigintToI53Checked(offset);\n\t\ttry {\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\tvar res = FS.mmap(stream, len, offset, prot, flags);\n\t\t\tvar ptr = res.ptr;\n\t\t\tHEAP32[allocated >> 2] = res.allocated;\n\t\t\tHEAPU32[addr >> 2] = ptr;\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tfunction __munmap_js(addr, len, prot, flags, fd, offset) {\n\t\toffset = bigintToI53Checked(offset);\n\t\ttry {\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\tif (prot & 2) SYSCALLS.doMsync(addr, stream, len, flags, offset);\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn -e.errno;\n\t\t}\n\t}\n\tvar __tzset_js = (timezone, daylight, std_name, dst_name) => {\n\t\tvar currentYear = (/* @__PURE__ */ new Date()).getFullYear();\n\t\tvar winter = new Date(currentYear, 0, 1);\n\t\tvar summer = new Date(currentYear, 6, 1);\n\t\tvar winterOffset = winter.getTimezoneOffset();\n\t\tvar summerOffset = summer.getTimezoneOffset();\n\t\tvar stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n\t\tHEAPU32[timezone >> 2] = stdTimezoneOffset * 60;\n\t\tHEAP32[daylight >> 2] = Number(winterOffset != summerOffset);\n\t\tvar extractZone = (timezoneOffset) => {\n\t\t\tvar sign = timezoneOffset >= 0 ? \"-\" : \"+\";\n\t\t\tvar absOffset = Math.abs(timezoneOffset);\n\t\t\treturn `UTC${sign}${String(Math.floor(absOffset / 60)).padStart(2, \"0\")}${String(absOffset % 60).padStart(2, \"0\")}`;\n\t\t};\n\t\tvar winterName = extractZone(winterOffset);\n\t\tvar summerName = extractZone(summerOffset);\n\t\tif (summerOffset < winterOffset) {\n\t\t\tstringToUTF8(winterName, std_name, 17);\n\t\t\tstringToUTF8(summerName, dst_name, 17);\n\t\t} else {\n\t\t\tstringToUTF8(winterName, dst_name, 17);\n\t\t\tstringToUTF8(summerName, std_name, 17);\n\t\t}\n\t};\n\tvar _emscripten_get_now = () => performance.now();\n\tvar _emscripten_date_now = () => Date.now();\n\tvar nowIsMonotonic = 1;\n\tvar checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;\n\tfunction _clock_time_get(clk_id, ignored_precision, ptime) {\n\t\tignored_precision = bigintToI53Checked(ignored_precision);\n\t\tif (!checkWasiClock(clk_id)) return 28;\n\t\tvar now;\n\t\tif (clk_id === 0) now = _emscripten_date_now();\n\t\telse if (nowIsMonotonic) now = _emscripten_get_now();\n\t\telse return 52;\n\t\tvar nsec = Math.round(now * 1e3 * 1e3);\n\t\tHEAP64[ptime >> 3] = BigInt(nsec);\n\t\treturn 0;\n\t}\n\tvar getHeapMax = () => 2147483648;\n\tvar _emscripten_get_heap_max = () => getHeapMax();\n\tvar growMemory = (size) => {\n\t\tvar pages = (size - wasmMemory.buffer.byteLength + 65535) / 65536 | 0;\n\t\ttry {\n\t\t\twasmMemory.grow(pages);\n\t\t\tupdateMemoryViews();\n\t\t\treturn 1;\n\t\t} catch (e) {}\n\t};\n\tvar _emscripten_resize_heap = (requestedSize) => {\n\t\tvar oldSize = HEAPU8.length;\n\t\trequestedSize >>>= 0;\n\t\tvar maxHeapSize = getHeapMax();\n\t\tif (requestedSize > maxHeapSize) return false;\n\t\tfor (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n\t\t\tvar overGrownHeapSize = oldSize * (1 + .2 / cutDown);\n\t\t\toverGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n\t\t\tif (growMemory(Math.min(maxHeapSize, alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)))) return true;\n\t\t}\n\t\treturn false;\n\t};\n\tvar ENV = {};\n\tvar getExecutableName = () => thisProgram || \"./this.program\";\n\tvar getEnvStrings = () => {\n\t\tif (!getEnvStrings.strings) {\n\t\t\tvar lang = (globalThis.navigator?.language ?? \"C\").replace(\"-\", \"_\") + \".UTF-8\";\n\t\t\tvar env = {\n\t\t\t\t\"USER\": \"web_user\",\n\t\t\t\t\"LOGNAME\": \"web_user\",\n\t\t\t\t\"PATH\": \"/\",\n\t\t\t\t\"PWD\": \"/\",\n\t\t\t\t\"HOME\": \"/home/web_user\",\n\t\t\t\t\"LANG\": lang,\n\t\t\t\t\"_\": getExecutableName()\n\t\t\t};\n\t\t\tfor (var x in ENV) if (ENV[x] === void 0) delete env[x];\n\t\t\telse env[x] = ENV[x];\n\t\t\tvar strings = [];\n\t\t\tfor (var x in env) strings.push(`${x}=${env[x]}`);\n\t\t\tgetEnvStrings.strings = strings;\n\t\t}\n\t\treturn getEnvStrings.strings;\n\t};\n\tvar _environ_get = (__environ, environ_buf) => {\n\t\tvar bufSize = 0;\n\t\tvar envp = 0;\n\t\tfor (var string of getEnvStrings()) {\n\t\t\tvar ptr = environ_buf + bufSize;\n\t\t\tHEAPU32[__environ + envp >> 2] = ptr;\n\t\t\tbufSize += stringToUTF8(string, ptr, Infinity) + 1;\n\t\t\tenvp += 4;\n\t\t}\n\t\treturn 0;\n\t};\n\tvar _environ_sizes_get = (penviron_count, penviron_buf_size) => {\n\t\tvar strings = getEnvStrings();\n\t\tHEAPU32[penviron_count >> 2] = strings.length;\n\t\tvar bufSize = 0;\n\t\tfor (var string of strings) bufSize += lengthBytesUTF8(string) + 1;\n\t\tHEAPU32[penviron_buf_size >> 2] = bufSize;\n\t\treturn 0;\n\t};\n\tfunction _fd_close(fd) {\n\t\ttry {\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\tFS.close(stream);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn e.errno;\n\t\t}\n\t}\n\tfunction _fd_fdstat_get(fd, pbuf) {\n\t\ttry {\n\t\t\tvar rightsBase = 0;\n\t\t\tvar rightsInheriting = 0;\n\t\t\tvar flags = 0;\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\tvar type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4;\n\t\t\tHEAP8[pbuf] = type;\n\t\t\tHEAP16[pbuf + 2 >> 1] = flags;\n\t\t\tHEAP64[pbuf + 8 >> 3] = BigInt(rightsBase);\n\t\t\tHEAP64[pbuf + 16 >> 3] = BigInt(rightsInheriting);\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn e.errno;\n\t\t}\n\t}\n\tvar doReadv = (stream, iov, iovcnt, offset) => {\n\t\tvar ret = 0;\n\t\tfor (var i = 0; i < iovcnt; i++) {\n\t\t\tvar ptr = HEAPU32[iov >> 2];\n\t\t\tvar len = HEAPU32[iov + 4 >> 2];\n\t\t\tiov += 8;\n\t\t\tvar curr = FS.read(stream, HEAP8, ptr, len, offset);\n\t\t\tif (curr < 0) return -1;\n\t\t\tret += curr;\n\t\t\tif (curr < len) break;\n\t\t\tif (typeof offset != \"undefined\") offset += curr;\n\t\t}\n\t\treturn ret;\n\t};\n\tfunction _fd_read(fd, iov, iovcnt, pnum) {\n\t\ttry {\n\t\t\tvar num = doReadv(SYSCALLS.getStreamFromFD(fd), iov, iovcnt);\n\t\t\tHEAPU32[pnum >> 2] = num;\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn e.errno;\n\t\t}\n\t}\n\tfunction _fd_seek(fd, offset, whence, newOffset) {\n\t\toffset = bigintToI53Checked(offset);\n\t\ttry {\n\t\t\tif (isNaN(offset)) return 61;\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\tFS.llseek(stream, offset, whence);\n\t\t\tHEAP64[newOffset >> 3] = BigInt(stream.position);\n\t\t\tif (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn e.errno;\n\t\t}\n\t}\n\tfunction _fd_sync(fd) {\n\t\ttry {\n\t\t\tvar stream = SYSCALLS.getStreamFromFD(fd);\n\t\t\treturn stream.stream_ops?.fsync?.(stream);\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn e.errno;\n\t\t}\n\t}\n\tvar doWritev = (stream, iov, iovcnt, offset) => {\n\t\tvar ret = 0;\n\t\tfor (var i = 0; i < iovcnt; i++) {\n\t\t\tvar ptr = HEAPU32[iov >> 2];\n\t\t\tvar len = HEAPU32[iov + 4 >> 2];\n\t\t\tiov += 8;\n\t\t\tvar curr = FS.write(stream, HEAP8, ptr, len, offset);\n\t\t\tif (curr < 0) return -1;\n\t\t\tret += curr;\n\t\t\tif (curr < len) break;\n\t\t\tif (typeof offset != \"undefined\") offset += curr;\n\t\t}\n\t\treturn ret;\n\t};\n\tfunction _fd_write(fd, iov, iovcnt, pnum) {\n\t\ttry {\n\t\t\tvar num = doWritev(SYSCALLS.getStreamFromFD(fd), iov, iovcnt);\n\t\t\tHEAPU32[pnum >> 2] = num;\n\t\t\treturn 0;\n\t\t} catch (e) {\n\t\t\tif (typeof FS == \"undefined\" || !(e.name === \"ErrnoError\")) throw e;\n\t\t\treturn e.errno;\n\t\t}\n\t}\n\tFS.createPreloadedFile = FS_createPreloadedFile;\n\tFS.preloadFile = FS_preloadFile;\n\tFS.staticInit();\n\tinitMemory();\n\tif (Module[\"noExitRuntime\"]) Module[\"noExitRuntime\"];\n\tif (Module[\"preloadPlugins\"]) preloadPlugins = Module[\"preloadPlugins\"];\n\tif (Module[\"print\"]) out = Module[\"print\"];\n\tif (Module[\"printErr\"]) err = Module[\"printErr\"];\n\tif (Module[\"wasmBinary\"]) wasmBinary = Module[\"wasmBinary\"];\n\tif (Module[\"arguments\"]) Module[\"arguments\"];\n\tif (Module[\"thisProgram\"]) thisProgram = Module[\"thisProgram\"];\n\tif (Module[\"preInit\"]) {\n\t\tif (typeof Module[\"preInit\"] == \"function\") Module[\"preInit\"] = [Module[\"preInit\"]];\n\t\twhile (Module[\"preInit\"].length > 0) Module[\"preInit\"].shift()();\n\t}\n\tModule[\"wasmMemory\"] = wasmMemory;\n\tvar _emscripten_builtin_memalign;\n\tfunction assignWasmExports(wasmExports) {\n\t\tModule[\"_sqlite3_status64\"] = wasmExports[\"sqlite3_status64\"];\n\t\tModule[\"_sqlite3_status\"] = wasmExports[\"sqlite3_status\"];\n\t\tModule[\"_sqlite3_db_status64\"] = wasmExports[\"sqlite3_db_status64\"];\n\t\tModule[\"_sqlite3_msize\"] = wasmExports[\"sqlite3_msize\"];\n\t\tModule[\"_sqlite3_db_status\"] = wasmExports[\"sqlite3_db_status\"];\n\t\tModule[\"_sqlite3_vfs_find\"] = wasmExports[\"sqlite3_vfs_find\"];\n\t\tModule[\"_sqlite3_initialize\"] = wasmExports[\"sqlite3_initialize\"];\n\t\tModule[\"_sqlite3_malloc\"] = wasmExports[\"sqlite3_malloc\"];\n\t\tModule[\"_sqlite3_free\"] = wasmExports[\"sqlite3_free\"];\n\t\tModule[\"_sqlite3_vfs_register\"] = wasmExports[\"sqlite3_vfs_register\"];\n\t\tModule[\"_sqlite3_vfs_unregister\"] = wasmExports[\"sqlite3_vfs_unregister\"];\n\t\tModule[\"_sqlite3_malloc64\"] = wasmExports[\"sqlite3_malloc64\"];\n\t\tModule[\"_sqlite3_realloc\"] = wasmExports[\"sqlite3_realloc\"];\n\t\tModule[\"_sqlite3_realloc64\"] = wasmExports[\"sqlite3_realloc64\"];\n\t\tModule[\"_sqlite3_value_text\"] = wasmExports[\"sqlite3_value_text\"];\n\t\tModule[\"_sqlite3_randomness\"] = wasmExports[\"sqlite3_randomness\"];\n\t\tModule[\"_sqlite3_stricmp\"] = wasmExports[\"sqlite3_stricmp\"];\n\t\tModule[\"_sqlite3_strnicmp\"] = wasmExports[\"sqlite3_strnicmp\"];\n\t\tModule[\"_sqlite3_uri_parameter\"] = wasmExports[\"sqlite3_uri_parameter\"];\n\t\tModule[\"_sqlite3_uri_boolean\"] = wasmExports[\"sqlite3_uri_boolean\"];\n\t\tModule[\"_sqlite3_serialize\"] = wasmExports[\"sqlite3_serialize\"];\n\t\tModule[\"_sqlite3_prepare_v2\"] = wasmExports[\"sqlite3_prepare_v2\"];\n\t\tModule[\"_sqlite3_step\"] = wasmExports[\"sqlite3_step\"];\n\t\tModule[\"_sqlite3_column_int64\"] = wasmExports[\"sqlite3_column_int64\"];\n\t\tModule[\"_sqlite3_reset\"] = wasmExports[\"sqlite3_reset\"];\n\t\tModule[\"_sqlite3_exec\"] = wasmExports[\"sqlite3_exec\"];\n\t\tModule[\"_sqlite3_column_int\"] = wasmExports[\"sqlite3_column_int\"];\n\t\tModule[\"_sqlite3_finalize\"] = wasmExports[\"sqlite3_finalize\"];\n\t\tModule[\"_sqlite3_file_control\"] = wasmExports[\"sqlite3_file_control\"];\n\t\tModule[\"_sqlite3_column_name\"] = wasmExports[\"sqlite3_column_name\"];\n\t\tModule[\"_sqlite3_column_text\"] = wasmExports[\"sqlite3_column_text\"];\n\t\tModule[\"_sqlite3_column_type\"] = wasmExports[\"sqlite3_column_type\"];\n\t\tModule[\"_sqlite3_errmsg\"] = wasmExports[\"sqlite3_errmsg\"];\n\t\tModule[\"_sqlite3_deserialize\"] = wasmExports[\"sqlite3_deserialize\"];\n\t\tModule[\"_sqlite3_clear_bindings\"] = wasmExports[\"sqlite3_clear_bindings\"];\n\t\tModule[\"_sqlite3_value_blob\"] = wasmExports[\"sqlite3_value_blob\"];\n\t\tModule[\"_sqlite3_value_bytes\"] = wasmExports[\"sqlite3_value_bytes\"];\n\t\tModule[\"_sqlite3_value_double\"] = wasmExports[\"sqlite3_value_double\"];\n\t\tModule[\"_sqlite3_value_int\"] = wasmExports[\"sqlite3_value_int\"];\n\t\tModule[\"_sqlite3_value_int64\"] = wasmExports[\"sqlite3_value_int64\"];\n\t\tModule[\"_sqlite3_value_subtype\"] = wasmExports[\"sqlite3_value_subtype\"];\n\t\tModule[\"_sqlite3_value_pointer\"] = wasmExports[\"sqlite3_value_pointer\"];\n\t\tModule[\"_sqlite3_value_type\"] = wasmExports[\"sqlite3_value_type\"];\n\t\tModule[\"_sqlite3_value_nochange\"] = wasmExports[\"sqlite3_value_nochange\"];\n\t\tModule[\"_sqlite3_value_frombind\"] = wasmExports[\"sqlite3_value_frombind\"];\n\t\tModule[\"_sqlite3_value_dup\"] = wasmExports[\"sqlite3_value_dup\"];\n\t\tModule[\"_sqlite3_value_free\"] = wasmExports[\"sqlite3_value_free\"];\n\t\tModule[\"_sqlite3_result_blob\"] = wasmExports[\"sqlite3_result_blob\"];\n\t\tModule[\"_sqlite3_result_error_toobig\"] = wasmExports[\"sqlite3_result_error_toobig\"];\n\t\tModule[\"_sqlite3_result_error_nomem\"] = wasmExports[\"sqlite3_result_error_nomem\"];\n\t\tModule[\"_sqlite3_result_double\"] = wasmExports[\"sqlite3_result_double\"];\n\t\tModule[\"_sqlite3_result_error\"] = wasmExports[\"sqlite3_result_error\"];\n\t\tModule[\"_sqlite3_result_int\"] = wasmExports[\"sqlite3_result_int\"];\n\t\tModule[\"_sqlite3_result_int64\"] = wasmExports[\"sqlite3_result_int64\"];\n\t\tModule[\"_sqlite3_result_null\"] = wasmExports[\"sqlite3_result_null\"];\n\t\tModule[\"_sqlite3_result_pointer\"] = wasmExports[\"sqlite3_result_pointer\"];\n\t\tModule[\"_sqlite3_result_subtype\"] = wasmExports[\"sqlite3_result_subtype\"];\n\t\tModule[\"_sqlite3_result_text\"] = wasmExports[\"sqlite3_result_text\"];\n\t\tModule[\"_sqlite3_result_zeroblob\"] = wasmExports[\"sqlite3_result_zeroblob\"];\n\t\tModule[\"_sqlite3_result_zeroblob64\"] = wasmExports[\"sqlite3_result_zeroblob64\"];\n\t\tModule[\"_sqlite3_result_error_code\"] = wasmExports[\"sqlite3_result_error_code\"];\n\t\tModule[\"_sqlite3_user_data\"] = wasmExports[\"sqlite3_user_data\"];\n\t\tModule[\"_sqlite3_context_db_handle\"] = wasmExports[\"sqlite3_context_db_handle\"];\n\t\tModule[\"_sqlite3_vtab_nochange\"] = wasmExports[\"sqlite3_vtab_nochange\"];\n\t\tModule[\"_sqlite3_vtab_in_first\"] = wasmExports[\"sqlite3_vtab_in_first\"];\n\t\tModule[\"_sqlite3_vtab_in_next\"] = wasmExports[\"sqlite3_vtab_in_next\"];\n\t\tModule[\"_sqlite3_aggregate_context\"] = wasmExports[\"sqlite3_aggregate_context\"];\n\t\tModule[\"_sqlite3_get_auxdata\"] = wasmExports[\"sqlite3_get_auxdata\"];\n\t\tModule[\"_sqlite3_set_auxdata\"] = wasmExports[\"sqlite3_set_auxdata\"];\n\t\tModule[\"_sqlite3_column_count\"] = wasmExports[\"sqlite3_column_count\"];\n\t\tModule[\"_sqlite3_data_count\"] = wasmExports[\"sqlite3_data_count\"];\n\t\tModule[\"_sqlite3_column_blob\"] = wasmExports[\"sqlite3_column_blob\"];\n\t\tModule[\"_sqlite3_column_bytes\"] = wasmExports[\"sqlite3_column_bytes\"];\n\t\tModule[\"_sqlite3_column_double\"] = wasmExports[\"sqlite3_column_double\"];\n\t\tModule[\"_sqlite3_column_value\"] = wasmExports[\"sqlite3_column_value\"];\n\t\tModule[\"_sqlite3_column_decltype\"] = wasmExports[\"sqlite3_column_decltype\"];\n\t\tModule[\"_sqlite3_column_database_name\"] = wasmExports[\"sqlite3_column_database_name\"];\n\t\tModule[\"_sqlite3_column_table_name\"] = wasmExports[\"sqlite3_column_table_name\"];\n\t\tModule[\"_sqlite3_column_origin_name\"] = wasmExports[\"sqlite3_column_origin_name\"];\n\t\tModule[\"_sqlite3_bind_blob\"] = wasmExports[\"sqlite3_bind_blob\"];\n\t\tModule[\"_sqlite3_bind_double\"] = wasmExports[\"sqlite3_bind_double\"];\n\t\tModule[\"_sqlite3_bind_int\"] = wasmExports[\"sqlite3_bind_int\"];\n\t\tModule[\"_sqlite3_bind_int64\"] = wasmExports[\"sqlite3_bind_int64\"];\n\t\tModule[\"_sqlite3_bind_null\"] = wasmExports[\"sqlite3_bind_null\"];\n\t\tModule[\"_sqlite3_bind_pointer\"] = wasmExports[\"sqlite3_bind_pointer\"];\n\t\tModule[\"_sqlite3_bind_text\"] = wasmExports[\"sqlite3_bind_text\"];\n\t\tModule[\"_sqlite3_bind_parameter_count\"] = wasmExports[\"sqlite3_bind_parameter_count\"];\n\t\tModule[\"_sqlite3_bind_parameter_name\"] = wasmExports[\"sqlite3_bind_parameter_name\"];\n\t\tModule[\"_sqlite3_bind_parameter_index\"] = wasmExports[\"sqlite3_bind_parameter_index\"];\n\t\tModule[\"_sqlite3_db_handle\"] = wasmExports[\"sqlite3_db_handle\"];\n\t\tModule[\"_sqlite3_stmt_readonly\"] = wasmExports[\"sqlite3_stmt_readonly\"];\n\t\tModule[\"_sqlite3_stmt_isexplain\"] = wasmExports[\"sqlite3_stmt_isexplain\"];\n\t\tModule[\"_sqlite3_stmt_explain\"] = wasmExports[\"sqlite3_stmt_explain\"];\n\t\tModule[\"_sqlite3_stmt_busy\"] = wasmExports[\"sqlite3_stmt_busy\"];\n\t\tModule[\"_sqlite3_next_stmt\"] = wasmExports[\"sqlite3_next_stmt\"];\n\t\tModule[\"_sqlite3_stmt_status\"] = wasmExports[\"sqlite3_stmt_status\"];\n\t\tModule[\"_sqlite3_sql\"] = wasmExports[\"sqlite3_sql\"];\n\t\tModule[\"_sqlite3_expanded_sql\"] = wasmExports[\"sqlite3_expanded_sql\"];\n\t\tModule[\"_sqlite3_preupdate_old\"] = wasmExports[\"sqlite3_preupdate_old\"];\n\t\tModule[\"_sqlite3_preupdate_count\"] = wasmExports[\"sqlite3_preupdate_count\"];\n\t\tModule[\"_sqlite3_preupdate_depth\"] = wasmExports[\"sqlite3_preupdate_depth\"];\n\t\tModule[\"_sqlite3_preupdate_blobwrite\"] = wasmExports[\"sqlite3_preupdate_blobwrite\"];\n\t\tModule[\"_sqlite3_preupdate_new\"] = wasmExports[\"sqlite3_preupdate_new\"];\n\t\tModule[\"_sqlite3_value_numeric_type\"] = wasmExports[\"sqlite3_value_numeric_type\"];\n\t\tModule[\"_sqlite3_set_authorizer\"] = wasmExports[\"sqlite3_set_authorizer\"];\n\t\tModule[\"_sqlite3_strglob\"] = wasmExports[\"sqlite3_strglob\"];\n\t\tModule[\"_sqlite3_strlike\"] = wasmExports[\"sqlite3_strlike\"];\n\t\tModule[\"_sqlite3_auto_extension\"] = wasmExports[\"sqlite3_auto_extension\"];\n\t\tModule[\"_sqlite3_cancel_auto_extension\"] = wasmExports[\"sqlite3_cancel_auto_extension\"];\n\t\tModule[\"_sqlite3_reset_auto_extension\"] = wasmExports[\"sqlite3_reset_auto_extension\"];\n\t\tModule[\"_sqlite3_prepare_v3\"] = wasmExports[\"sqlite3_prepare_v3\"];\n\t\tModule[\"_sqlite3_create_module\"] = wasmExports[\"sqlite3_create_module\"];\n\t\tModule[\"_sqlite3_create_module_v2\"] = wasmExports[\"sqlite3_create_module_v2\"];\n\t\tModule[\"_sqlite3_drop_modules\"] = wasmExports[\"sqlite3_drop_modules\"];\n\t\tModule[\"_sqlite3_declare_vtab\"] = wasmExports[\"sqlite3_declare_vtab\"];\n\t\tModule[\"_sqlite3_vtab_on_conflict\"] = wasmExports[\"sqlite3_vtab_on_conflict\"];\n\t\tModule[\"_sqlite3_vtab_collation\"] = wasmExports[\"sqlite3_vtab_collation\"];\n\t\tModule[\"_sqlite3_vtab_in\"] = wasmExports[\"sqlite3_vtab_in\"];\n\t\tModule[\"_sqlite3_vtab_rhs_value\"] = wasmExports[\"sqlite3_vtab_rhs_value\"];\n\t\tModule[\"_sqlite3_vtab_distinct\"] = wasmExports[\"sqlite3_vtab_distinct\"];\n\t\tModule[\"_sqlite3_keyword_name\"] = wasmExports[\"sqlite3_keyword_name\"];\n\t\tModule[\"_sqlite3_keyword_count\"] = wasmExports[\"sqlite3_keyword_count\"];\n\t\tModule[\"_sqlite3_keyword_check\"] = wasmExports[\"sqlite3_keyword_check\"];\n\t\tModule[\"_sqlite3_complete\"] = wasmExports[\"sqlite3_complete\"];\n\t\tModule[\"_sqlite3_libversion\"] = wasmExports[\"sqlite3_libversion\"];\n\t\tModule[\"_sqlite3_libversion_number\"] = wasmExports[\"sqlite3_libversion_number\"];\n\t\tModule[\"_sqlite3_shutdown\"] = wasmExports[\"sqlite3_shutdown\"];\n\t\tModule[\"_sqlite3_last_insert_rowid\"] = wasmExports[\"sqlite3_last_insert_rowid\"];\n\t\tModule[\"_sqlite3_set_last_insert_rowid\"] = wasmExports[\"sqlite3_set_last_insert_rowid\"];\n\t\tModule[\"_sqlite3_changes64\"] = wasmExports[\"sqlite3_changes64\"];\n\t\tModule[\"_sqlite3_changes\"] = wasmExports[\"sqlite3_changes\"];\n\t\tModule[\"_sqlite3_total_changes64\"] = wasmExports[\"sqlite3_total_changes64\"];\n\t\tModule[\"_sqlite3_total_changes\"] = wasmExports[\"sqlite3_total_changes\"];\n\t\tModule[\"_sqlite3_txn_state\"] = wasmExports[\"sqlite3_txn_state\"];\n\t\tModule[\"_sqlite3_close_v2\"] = wasmExports[\"sqlite3_close_v2\"];\n\t\tModule[\"_sqlite3_busy_handler\"] = wasmExports[\"sqlite3_busy_handler\"];\n\t\tModule[\"_sqlite3_progress_handler\"] = wasmExports[\"sqlite3_progress_handler\"];\n\t\tModule[\"_sqlite3_busy_timeout\"] = wasmExports[\"sqlite3_busy_timeout\"];\n\t\tModule[\"_sqlite3_interrupt\"] = wasmExports[\"sqlite3_interrupt\"];\n\t\tModule[\"_sqlite3_is_interrupted\"] = wasmExports[\"sqlite3_is_interrupted\"];\n\t\tModule[\"_sqlite3_create_function\"] = wasmExports[\"sqlite3_create_function\"];\n\t\tModule[\"_sqlite3_create_function_v2\"] = wasmExports[\"sqlite3_create_function_v2\"];\n\t\tModule[\"_sqlite3_create_window_function\"] = wasmExports[\"sqlite3_create_window_function\"];\n\t\tModule[\"_sqlite3_overload_function\"] = wasmExports[\"sqlite3_overload_function\"];\n\t\tModule[\"_sqlite3_trace_v2\"] = wasmExports[\"sqlite3_trace_v2\"];\n\t\tModule[\"_sqlite3_commit_hook\"] = wasmExports[\"sqlite3_commit_hook\"];\n\t\tModule[\"_sqlite3_update_hook\"] = wasmExports[\"sqlite3_update_hook\"];\n\t\tModule[\"_sqlite3_rollback_hook\"] = wasmExports[\"sqlite3_rollback_hook\"];\n\t\tModule[\"_sqlite3_preupdate_hook\"] = wasmExports[\"sqlite3_preupdate_hook\"];\n\t\tModule[\"_sqlite3_set_errmsg\"] = wasmExports[\"sqlite3_set_errmsg\"];\n\t\tModule[\"_sqlite3_error_offset\"] = wasmExports[\"sqlite3_error_offset\"];\n\t\tModule[\"_sqlite3_errcode\"] = wasmExports[\"sqlite3_errcode\"];\n\t\tModule[\"_sqlite3_extended_errcode\"] = wasmExports[\"sqlite3_extended_errcode\"];\n\t\tModule[\"_sqlite3_errstr\"] = wasmExports[\"sqlite3_errstr\"];\n\t\tModule[\"_sqlite3_limit\"] = wasmExports[\"sqlite3_limit\"];\n\t\tModule[\"_sqlite3_open\"] = wasmExports[\"sqlite3_open\"];\n\t\tModule[\"_sqlite3_open_v2\"] = wasmExports[\"sqlite3_open_v2\"];\n\t\tModule[\"_sqlite3_create_collation\"] = wasmExports[\"sqlite3_create_collation\"];\n\t\tModule[\"_sqlite3_create_collation_v2\"] = wasmExports[\"sqlite3_create_collation_v2\"];\n\t\tModule[\"_sqlite3_collation_needed\"] = wasmExports[\"sqlite3_collation_needed\"];\n\t\tModule[\"_sqlite3_get_autocommit\"] = wasmExports[\"sqlite3_get_autocommit\"];\n\t\tModule[\"_sqlite3_table_column_metadata\"] = wasmExports[\"sqlite3_table_column_metadata\"];\n\t\tModule[\"_sqlite3_extended_result_codes\"] = wasmExports[\"sqlite3_extended_result_codes\"];\n\t\tModule[\"_sqlite3_uri_key\"] = wasmExports[\"sqlite3_uri_key\"];\n\t\tModule[\"_sqlite3_uri_int64\"] = wasmExports[\"sqlite3_uri_int64\"];\n\t\tModule[\"_sqlite3_db_name\"] = wasmExports[\"sqlite3_db_name\"];\n\t\tModule[\"_sqlite3_db_filename\"] = wasmExports[\"sqlite3_db_filename\"];\n\t\tModule[\"_sqlite3_db_readonly\"] = wasmExports[\"sqlite3_db_readonly\"];\n\t\tModule[\"_sqlite3_compileoption_used\"] = wasmExports[\"sqlite3_compileoption_used\"];\n\t\tModule[\"_sqlite3_compileoption_get\"] = wasmExports[\"sqlite3_compileoption_get\"];\n\t\tModule[\"_sqlite3session_diff\"] = wasmExports[\"sqlite3session_diff\"];\n\t\tModule[\"_sqlite3session_attach\"] = wasmExports[\"sqlite3session_attach\"];\n\t\tModule[\"_sqlite3session_create\"] = wasmExports[\"sqlite3session_create\"];\n\t\tModule[\"_sqlite3session_delete\"] = wasmExports[\"sqlite3session_delete\"];\n\t\tModule[\"_sqlite3session_table_filter\"] = wasmExports[\"sqlite3session_table_filter\"];\n\t\tModule[\"_sqlite3session_changeset\"] = wasmExports[\"sqlite3session_changeset\"];\n\t\tModule[\"_sqlite3session_changeset_strm\"] = wasmExports[\"sqlite3session_changeset_strm\"];\n\t\tModule[\"_sqlite3session_patchset_strm\"] = wasmExports[\"sqlite3session_patchset_strm\"];\n\t\tModule[\"_sqlite3session_patchset\"] = wasmExports[\"sqlite3session_patchset\"];\n\t\tModule[\"_sqlite3session_enable\"] = wasmExports[\"sqlite3session_enable\"];\n\t\tModule[\"_sqlite3session_indirect\"] = wasmExports[\"sqlite3session_indirect\"];\n\t\tModule[\"_sqlite3session_isempty\"] = wasmExports[\"sqlite3session_isempty\"];\n\t\tModule[\"_sqlite3session_memory_used\"] = wasmExports[\"sqlite3session_memory_used\"];\n\t\tModule[\"_sqlite3session_object_config\"] = wasmExports[\"sqlite3session_object_config\"];\n\t\tModule[\"_sqlite3session_changeset_size\"] = wasmExports[\"sqlite3session_changeset_size\"];\n\t\tModule[\"_sqlite3changeset_start\"] = wasmExports[\"sqlite3changeset_start\"];\n\t\tModule[\"_sqlite3changeset_start_v2\"] = wasmExports[\"sqlite3changeset_start_v2\"];\n\t\tModule[\"_sqlite3changeset_start_strm\"] = wasmExports[\"sqlite3changeset_start_strm\"];\n\t\tModule[\"_sqlite3changeset_start_v2_strm\"] = wasmExports[\"sqlite3changeset_start_v2_strm\"];\n\t\tModule[\"_sqlite3changeset_next\"] = wasmExports[\"sqlite3changeset_next\"];\n\t\tModule[\"_sqlite3changeset_op\"] = wasmExports[\"sqlite3changeset_op\"];\n\t\tModule[\"_sqlite3changeset_pk\"] = wasmExports[\"sqlite3changeset_pk\"];\n\t\tModule[\"_sqlite3changeset_old\"] = wasmExports[\"sqlite3changeset_old\"];\n\t\tModule[\"_sqlite3changeset_new\"] = wasmExports[\"sqlite3changeset_new\"];\n\t\tModule[\"_sqlite3changeset_conflict\"] = wasmExports[\"sqlite3changeset_conflict\"];\n\t\tModule[\"_sqlite3changeset_fk_conflicts\"] = wasmExports[\"sqlite3changeset_fk_conflicts\"];\n\t\tModule[\"_sqlite3changeset_finalize\"] = wasmExports[\"sqlite3changeset_finalize\"];\n\t\tModule[\"_sqlite3changeset_invert\"] = wasmExports[\"sqlite3changeset_invert\"];\n\t\tModule[\"_sqlite3changeset_invert_strm\"] = wasmExports[\"sqlite3changeset_invert_strm\"];\n\t\tModule[\"_sqlite3changeset_apply_v2\"] = wasmExports[\"sqlite3changeset_apply_v2\"];\n\t\tModule[\"_sqlite3changeset_apply_v3\"] = wasmExports[\"sqlite3changeset_apply_v3\"];\n\t\tModule[\"_sqlite3changeset_apply\"] = wasmExports[\"sqlite3changeset_apply\"];\n\t\tModule[\"_sqlite3changeset_apply_v3_strm\"] = wasmExports[\"sqlite3changeset_apply_v3_strm\"];\n\t\tModule[\"_sqlite3changeset_apply_v2_strm\"] = wasmExports[\"sqlite3changeset_apply_v2_strm\"];\n\t\tModule[\"_sqlite3changeset_apply_strm\"] = wasmExports[\"sqlite3changeset_apply_strm\"];\n\t\tModule[\"_sqlite3changegroup_new\"] = wasmExports[\"sqlite3changegroup_new\"];\n\t\tModule[\"_sqlite3changegroup_add\"] = wasmExports[\"sqlite3changegroup_add\"];\n\t\tModule[\"_sqlite3changegroup_output\"] = wasmExports[\"sqlite3changegroup_output\"];\n\t\tModule[\"_sqlite3changegroup_add_strm\"] = wasmExports[\"sqlite3changegroup_add_strm\"];\n\t\tModule[\"_sqlite3changegroup_output_strm\"] = wasmExports[\"sqlite3changegroup_output_strm\"];\n\t\tModule[\"_sqlite3changegroup_delete\"] = wasmExports[\"sqlite3changegroup_delete\"];\n\t\tModule[\"_sqlite3changeset_concat\"] = wasmExports[\"sqlite3changeset_concat\"];\n\t\tModule[\"_sqlite3changeset_concat_strm\"] = wasmExports[\"sqlite3changeset_concat_strm\"];\n\t\tModule[\"_sqlite3session_config\"] = wasmExports[\"sqlite3session_config\"];\n\t\tModule[\"_sqlite3_sourceid\"] = wasmExports[\"sqlite3_sourceid\"];\n\t\tModule[\"_sqlite3__wasm_pstack_ptr\"] = wasmExports[\"sqlite3__wasm_pstack_ptr\"];\n\t\tModule[\"_sqlite3__wasm_pstack_restore\"] = wasmExports[\"sqlite3__wasm_pstack_restore\"];\n\t\tModule[\"_sqlite3__wasm_pstack_alloc\"] = wasmExports[\"sqlite3__wasm_pstack_alloc\"];\n\t\tModule[\"_sqlite3__wasm_pstack_remaining\"] = wasmExports[\"sqlite3__wasm_pstack_remaining\"];\n\t\tModule[\"_sqlite3__wasm_pstack_quota\"] = wasmExports[\"sqlite3__wasm_pstack_quota\"];\n\t\tModule[\"_sqlite3__wasm_test_struct\"] = wasmExports[\"sqlite3__wasm_test_struct\"];\n\t\tModule[\"_sqlite3__wasm_enum_json\"] = wasmExports[\"sqlite3__wasm_enum_json\"];\n\t\tModule[\"_sqlite3__wasm_vfs_unlink\"] = wasmExports[\"sqlite3__wasm_vfs_unlink\"];\n\t\tModule[\"_sqlite3__wasm_db_vfs\"] = wasmExports[\"sqlite3__wasm_db_vfs\"];\n\t\tModule[\"_sqlite3__wasm_db_reset\"] = wasmExports[\"sqlite3__wasm_db_reset\"];\n\t\tModule[\"_sqlite3__wasm_db_export_chunked\"] = wasmExports[\"sqlite3__wasm_db_export_chunked\"];\n\t\tModule[\"_sqlite3__wasm_db_serialize\"] = wasmExports[\"sqlite3__wasm_db_serialize\"];\n\t\tModule[\"_sqlite3__wasm_vfs_create_file\"] = wasmExports[\"sqlite3__wasm_vfs_create_file\"];\n\t\tModule[\"_sqlite3__wasm_posix_create_file\"] = wasmExports[\"sqlite3__wasm_posix_create_file\"];\n\t\tModule[\"_sqlite3__wasm_kvvfsMakeKey\"] = wasmExports[\"sqlite3__wasm_kvvfsMakeKey\"];\n\t\tModule[\"_sqlite3__wasm_kvvfs_methods\"] = wasmExports[\"sqlite3__wasm_kvvfs_methods\"];\n\t\tModule[\"_sqlite3__wasm_vtab_config\"] = wasmExports[\"sqlite3__wasm_vtab_config\"];\n\t\tModule[\"_sqlite3__wasm_db_config_ip\"] = wasmExports[\"sqlite3__wasm_db_config_ip\"];\n\t\tModule[\"_sqlite3__wasm_db_config_pii\"] = wasmExports[\"sqlite3__wasm_db_config_pii\"];\n\t\tModule[\"_sqlite3__wasm_db_config_s\"] = wasmExports[\"sqlite3__wasm_db_config_s\"];\n\t\tModule[\"_sqlite3__wasm_config_i\"] = wasmExports[\"sqlite3__wasm_config_i\"];\n\t\tModule[\"_sqlite3__wasm_config_ii\"] = wasmExports[\"sqlite3__wasm_config_ii\"];\n\t\tModule[\"_sqlite3__wasm_config_j\"] = wasmExports[\"sqlite3__wasm_config_j\"];\n\t\tModule[\"_sqlite3__wasm_qfmt_token\"] = wasmExports[\"sqlite3__wasm_qfmt_token\"];\n\t\tModule[\"_sqlite3__wasm_kvvfs_decode\"] = wasmExports[\"sqlite3__wasm_kvvfs_decode\"];\n\t\tModule[\"_sqlite3__wasm_kvvfs_encode\"] = wasmExports[\"sqlite3__wasm_kvvfs_encode\"];\n\t\tModule[\"_sqlite3__wasm_init_wasmfs\"] = wasmExports[\"sqlite3__wasm_init_wasmfs\"];\n\t\tModule[\"_sqlite3__wasm_test_intptr\"] = wasmExports[\"sqlite3__wasm_test_intptr\"];\n\t\tModule[\"_sqlite3__wasm_test_voidptr\"] = wasmExports[\"sqlite3__wasm_test_voidptr\"];\n\t\tModule[\"_sqlite3__wasm_test_int64_max\"] = wasmExports[\"sqlite3__wasm_test_int64_max\"];\n\t\tModule[\"_sqlite3__wasm_test_int64_min\"] = wasmExports[\"sqlite3__wasm_test_int64_min\"];\n\t\tModule[\"_sqlite3__wasm_test_int64_times2\"] = wasmExports[\"sqlite3__wasm_test_int64_times2\"];\n\t\tModule[\"_sqlite3__wasm_test_int64_minmax\"] = wasmExports[\"sqlite3__wasm_test_int64_minmax\"];\n\t\tModule[\"_sqlite3__wasm_test_int64ptr\"] = wasmExports[\"sqlite3__wasm_test_int64ptr\"];\n\t\tModule[\"_sqlite3__wasm_test_stack_overflow\"] = wasmExports[\"sqlite3__wasm_test_stack_overflow\"];\n\t\tModule[\"_sqlite3__wasm_test_str_hello\"] = wasmExports[\"sqlite3__wasm_test_str_hello\"];\n\t\tModule[\"_sqlite3__wasm_SQLTester_strglob\"] = wasmExports[\"sqlite3__wasm_SQLTester_strglob\"];\n\t\tModule[\"_malloc\"] = wasmExports[\"malloc\"];\n\t\tModule[\"_free\"] = wasmExports[\"free\"];\n\t\tModule[\"_realloc\"] = wasmExports[\"realloc\"];\n\t\t_emscripten_builtin_memalign = wasmExports[\"emscripten_builtin_memalign\"];\n\t\twasmExports[\"_emscripten_stack_restore\"];\n\t\twasmExports[\"_emscripten_stack_alloc\"];\n\t\twasmExports[\"emscripten_stack_get_current\"];\n\t\twasmExports[\"__indirect_function_table\"];\n\t}\n\tvar wasmImports = {\n\t\t__syscall_chmod: ___syscall_chmod,\n\t\t__syscall_faccessat: ___syscall_faccessat,\n\t\t__syscall_fchmod: ___syscall_fchmod,\n\t\t__syscall_fchown32: ___syscall_fchown32,\n\t\t__syscall_fcntl64: ___syscall_fcntl64,\n\t\t__syscall_fstat64: ___syscall_fstat64,\n\t\t__syscall_ftruncate64: ___syscall_ftruncate64,\n\t\t__syscall_getcwd: ___syscall_getcwd,\n\t\t__syscall_ioctl: ___syscall_ioctl,\n\t\t__syscall_lstat64: ___syscall_lstat64,\n\t\t__syscall_mkdirat: ___syscall_mkdirat,\n\t\t__syscall_newfstatat: ___syscall_newfstatat,\n\t\t__syscall_openat: ___syscall_openat,\n\t\t__syscall_readlinkat: ___syscall_readlinkat,\n\t\t__syscall_rmdir: ___syscall_rmdir,\n\t\t__syscall_stat64: ___syscall_stat64,\n\t\t__syscall_unlinkat: ___syscall_unlinkat,\n\t\t__syscall_utimensat: ___syscall_utimensat,\n\t\t_localtime_js: __localtime_js,\n\t\t_mmap_js: __mmap_js,\n\t\t_munmap_js: __munmap_js,\n\t\t_tzset_js: __tzset_js,\n\t\tclock_time_get: _clock_time_get,\n\t\temscripten_date_now: _emscripten_date_now,\n\t\temscripten_get_heap_max: _emscripten_get_heap_max,\n\t\temscripten_get_now: _emscripten_get_now,\n\t\temscripten_resize_heap: _emscripten_resize_heap,\n\t\tenviron_get: _environ_get,\n\t\tenviron_sizes_get: _environ_sizes_get,\n\t\tfd_close: _fd_close,\n\t\tfd_fdstat_get: _fd_fdstat_get,\n\t\tfd_read: _fd_read,\n\t\tfd_seek: _fd_seek,\n\t\tfd_sync: _fd_sync,\n\t\tfd_write: _fd_write,\n\t\tmemory: wasmMemory\n\t};\n\tfunction run() {\n\t\tif (runDependencies > 0) {\n\t\t\tdependenciesFulfilled = run;\n\t\t\treturn;\n\t\t}\n\t\tpreRun();\n\t\tif (runDependencies > 0) {\n\t\t\tdependenciesFulfilled = run;\n\t\t\treturn;\n\t\t}\n\t\tfunction doRun() {\n\t\t\tModule[\"calledRun\"] = true;\n\t\t\tif (ABORT) return;\n\t\t\tinitRuntime();\n\t\t\treadyPromiseResolve?.(Module);\n\t\t\tModule[\"onRuntimeInitialized\"]?.();\n\t\t\tpostRun();\n\t\t}\n\t\tif (Module[\"setStatus\"]) {\n\t\t\tModule[\"setStatus\"](\"Running...\");\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetTimeout(() => Module[\"setStatus\"](\"\"), 1);\n\t\t\t\tdoRun();\n\t\t\t}, 1);\n\t\t} else doRun();\n\t}\n\tvar wasmExports = await createWasm();\n\trun();\n\tModule.runSQLite3PostLoadInit = async function(sqlite3InitScriptInfo, EmscriptenModule, sqlite3IsUnderTest) {\n\t\t\"use strict\";\n\t\tdelete EmscriptenModule.runSQLite3PostLoadInit;\n\t\tglobalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap(apiConfig = globalThis.sqlite3ApiConfig || sqlite3ApiBootstrap.defaultConfig) {\n\t\t\tif (sqlite3ApiBootstrap.sqlite3) {\n\t\t\t\t(sqlite3ApiBootstrap.sqlite3.config || console).warn(\"sqlite3ApiBootstrap() called multiple times.\", \"Config and external initializers are ignored on calls after the first.\");\n\t\t\t\treturn sqlite3ApiBootstrap.sqlite3;\n\t\t\t}\n\t\t\tconst config = Object.assign(Object.create(null), {\n\t\t\t\texports: void 0,\n\t\t\t\tmemory: void 0,\n\t\t\t\tbigIntEnabled: !!globalThis.BigInt64Array,\n\t\t\t\tdebug: console.debug.bind(console),\n\t\t\t\twarn: console.warn.bind(console),\n\t\t\t\terror: console.error.bind(console),\n\t\t\t\tlog: console.log.bind(console),\n\t\t\t\twasmfsOpfsDir: \"/opfs\",\n\t\t\t\tuseStdAlloc: false\n\t\t\t}, apiConfig || {});\n\t\t\tObject.assign(config, {\n\t\t\t\tallocExportName: config.useStdAlloc ? \"malloc\" : \"sqlite3_malloc\",\n\t\t\t\tdeallocExportName: config.useStdAlloc ? \"free\" : \"sqlite3_free\",\n\t\t\t\treallocExportName: config.useStdAlloc ? \"realloc\" : \"sqlite3_realloc\"\n\t\t\t});\n\t\t\t[\n\t\t\t\t\"exports\",\n\t\t\t\t\"memory\",\n\t\t\t\t\"functionTable\",\n\t\t\t\t\"wasmfsOpfsDir\"\n\t\t\t].forEach((k) => {\n\t\t\t\tif (\"function\" === typeof config[k]) config[k] = config[k]();\n\t\t\t});\n\t\t\tconst capi = Object.create(null);\n\t\t\tconst wasm = Object.create(null);\n\t\t\tconst __rcStr = (rc) => {\n\t\t\t\treturn capi.sqlite3_js_rc_str && capi.sqlite3_js_rc_str(rc) || \"Unknown result code #\" + rc;\n\t\t\t};\n\t\t\tconst isInt32 = (n) => \"number\" === typeof n && n === (n | 0) && n <= 2147483647 && n >= -2147483648;\n\t\t\tclass SQLite3Error extends Error {\n\t\t\t\tconstructor(...args) {\n\t\t\t\t\tlet rc;\n\t\t\t\t\tif (args.length) if (isInt32(args[0])) {\n\t\t\t\t\t\trc = args[0];\n\t\t\t\t\t\tif (1 === args.length) super(__rcStr(args[0]));\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconst rcStr = __rcStr(rc);\n\t\t\t\t\t\t\tif (\"object\" === typeof args[1]) super(rcStr, args[1]);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\targs[0] = rcStr + \":\";\n\t\t\t\t\t\t\t\tsuper(args.join(\" \"));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (2 === args.length && \"object\" === typeof args[1]) super(...args);\n\t\t\t\t\telse super(args.join(\" \"));\n\t\t\t\t\tthis.resultCode = rc || capi.SQLITE_ERROR;\n\t\t\t\t\tthis.name = \"SQLite3Error\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tSQLite3Error.toss = (...args) => {\n\t\t\t\tthrow new SQLite3Error(...args);\n\t\t\t};\n\t\t\tconst toss3 = SQLite3Error.toss;\n\t\t\tif (config.wasmfsOpfsDir && !/^\\/[^/]+$/.test(config.wasmfsOpfsDir)) toss3(\"config.wasmfsOpfsDir must be falsy or in the form '/dir-name'.\");\n\t\t\tconst bigIntFits64 = function f(b) {\n\t\t\t\tif (!f._max) {\n\t\t\t\t\tf._max = BigInt(\"0x7fffffffffffffff\");\n\t\t\t\t\tf._min = ~f._max;\n\t\t\t\t}\n\t\t\t\treturn b >= f._min && b <= f._max;\n\t\t\t};\n\t\t\tconst bigIntFits32 = (b) => b >= -2147483647n - 1n && b <= 2147483647n;\n\t\t\tconst bigIntFitsDouble = function f(b) {\n\t\t\t\tif (!f._min) {\n\t\t\t\t\tf._min = Number.MIN_SAFE_INTEGER;\n\t\t\t\t\tf._max = Number.MAX_SAFE_INTEGER;\n\t\t\t\t}\n\t\t\t\treturn b >= f._min && b <= f._max;\n\t\t\t};\n\t\t\tconst isTypedArray = (v) => {\n\t\t\t\treturn v && v.constructor && isInt32(v.constructor.BYTES_PER_ELEMENT) ? v : false;\n\t\t\t};\n\t\t\tconst isBindableTypedArray = (v) => v && (v instanceof Uint8Array || v instanceof Int8Array || v instanceof ArrayBuffer);\n\t\t\tconst isSQLableTypedArray = (v) => v && (v instanceof Uint8Array || v instanceof Int8Array || v instanceof ArrayBuffer);\n\t\t\tconst affirmBindableTypedArray = (v) => isBindableTypedArray(v) || toss3(\"Value is not of a supported TypedArray type.\");\n\t\t\tconst flexibleString = function(v) {\n\t\t\t\tif (isSQLableTypedArray(v)) return wasm.typedArrayToString(v instanceof ArrayBuffer ? new Uint8Array(v) : v, 0, v.length);\n\t\t\t\telse if (Array.isArray(v)) return v.join(\"\");\n\t\t\t\telse if (wasm.isPtr(v)) v = wasm.cstrToJs(v);\n\t\t\t\treturn v;\n\t\t\t};\n\t\t\tclass WasmAllocError extends Error {\n\t\t\t\tconstructor(...args) {\n\t\t\t\t\tif (2 === args.length && \"object\" === typeof args[1]) super(...args);\n\t\t\t\t\telse if (args.length) super(args.join(\" \"));\n\t\t\t\t\telse super(\"Allocation failed.\");\n\t\t\t\t\tthis.resultCode = capi.SQLITE_NOMEM;\n\t\t\t\t\tthis.name = \"WasmAllocError\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tWasmAllocError.toss = (...args) => {\n\t\t\t\tthrow new WasmAllocError(...args);\n\t\t\t};\n\t\t\tObject.assign(capi, {\n\t\t\t\tsqlite3_bind_blob: void 0,\n\t\t\t\tsqlite3_bind_text: void 0,\n\t\t\t\tsqlite3_create_function_v2: (pDb, funcName, nArg, eTextRep, pApp, xFunc, xStep, xFinal, xDestroy) => {},\n\t\t\t\tsqlite3_create_function: (pDb, funcName, nArg, eTextRep, pApp, xFunc, xStep, xFinal) => {},\n\t\t\t\tsqlite3_create_window_function: (pDb, funcName, nArg, eTextRep, pApp, xStep, xFinal, xValue, xInverse, xDestroy) => {},\n\t\t\t\tsqlite3_prepare_v3: (dbPtr, sql, sqlByteLen, prepFlags, stmtPtrPtr, strPtrPtr) => {},\n\t\t\t\tsqlite3_prepare_v2: (dbPtr, sql, sqlByteLen, stmtPtrPtr, strPtrPtr) => {},\n\t\t\t\tsqlite3_exec: (pDb, sql, callback, pVoid, pErrMsg) => {},\n\t\t\t\tsqlite3_randomness: (n, outPtr) => {}\n\t\t\t});\n\t\t\tconst util = {\n\t\t\t\taffirmBindableTypedArray,\n\t\t\t\tflexibleString,\n\t\t\t\tbigIntFits32,\n\t\t\t\tbigIntFits64,\n\t\t\t\tbigIntFitsDouble,\n\t\t\t\tisBindableTypedArray,\n\t\t\t\tisInt32,\n\t\t\t\tisSQLableTypedArray,\n\t\t\t\tisTypedArray,\n\t\t\t\tisUIThread: () => globalThis.window === globalThis && !!globalThis.document,\n\t\t\t\ttoss: function(...args) {\n\t\t\t\t\tthrow new Error(args.join(\" \"));\n\t\t\t\t},\n\t\t\t\ttoss3,\n\t\t\t\ttypedArrayPart: wasm.typedArrayPart,\n\t\t\t\tassert: function(arg, msg) {\n\t\t\t\t\tif (!arg) util.toss(\"Assertion failed:\", msg);\n\t\t\t\t},\n\t\t\t\taffirmDbHeader: function(bytes) {\n\t\t\t\t\tif (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n\t\t\t\t\tconst header = \"SQLite format 3\";\n\t\t\t\t\tif (15 > bytes.byteLength) toss3(\"Input does not contain an SQLite3 database header.\");\n\t\t\t\t\tfor (let i = 0; i < 15; ++i) if (header.charCodeAt(i) !== bytes[i]) toss3(\"Input does not contain an SQLite3 database header.\");\n\t\t\t\t},\n\t\t\t\taffirmIsDb: function(bytes) {\n\t\t\t\t\tif (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n\t\t\t\t\tconst n = bytes.byteLength;\n\t\t\t\t\tif (n < 512 || n % 512 !== 0) toss3(\"Byte array size\", n, \"is invalid for an SQLite3 db.\");\n\t\t\t\t\tutil.affirmDbHeader(bytes);\n\t\t\t\t}\n\t\t\t};\n\t\t\tObject.assign(wasm, {\n\t\t\t\texports: config.exports || toss3(\"Missing API config.exports (WASM module exports).\"),\n\t\t\t\tmemory: config.memory || config.exports[\"memory\"] || toss3(\"API config object requires a WebAssembly.Memory object\", \"in either config.exports.memory (exported)\", \"or config.memory (imported).\"),\n\t\t\t\tpointerSize: \"number\" === typeof config.exports.sqlite3_libversion() ? 4 : 8,\n\t\t\t\tbigIntEnabled: !!config.bigIntEnabled,\n\t\t\t\tfunctionTable: config.functionTable,\n\t\t\t\talloc: void 0,\n\t\t\t\trealloc: void 0,\n\t\t\t\tdealloc: void 0\n\t\t\t});\n\t\t\twasm.allocFromTypedArray = function(srcTypedArray) {\n\t\t\t\tif (srcTypedArray instanceof ArrayBuffer) srcTypedArray = new Uint8Array(srcTypedArray);\n\t\t\t\taffirmBindableTypedArray(srcTypedArray);\n\t\t\t\tconst pRet = wasm.alloc(srcTypedArray.byteLength || 1);\n\t\t\t\twasm.heapForSize(srcTypedArray.constructor).set(srcTypedArray.byteLength ? srcTypedArray : [0], Number(pRet));\n\t\t\t\treturn pRet;\n\t\t\t};\n\t\t\t{\n\t\t\t\tconst keyAlloc = config.allocExportName, keyDealloc = config.deallocExportName, keyRealloc = config.reallocExportName;\n\t\t\t\tfor (const key of [\n\t\t\t\t\tkeyAlloc,\n\t\t\t\t\tkeyDealloc,\n\t\t\t\t\tkeyRealloc\n\t\t\t\t]) if (!(wasm.exports[key] instanceof Function)) toss3(\"Missing required exports[\", key, \"] function.\");\n\t\t\t\twasm.alloc = function f(n) {\n\t\t\t\t\treturn f.impl(n) || WasmAllocError.toss(\"Failed to allocate\", n, \" bytes.\");\n\t\t\t\t};\n\t\t\t\twasm.alloc.impl = wasm.exports[keyAlloc];\n\t\t\t\twasm.realloc = function f(m, n) {\n\t\t\t\t\tconst m2 = f.impl(wasm.ptr.coerce(m), n);\n\t\t\t\t\treturn n ? m2 || WasmAllocError.toss(\"Failed to reallocate\", n, \" bytes.\") : wasm.ptr.null;\n\t\t\t\t};\n\t\t\t\twasm.realloc.impl = wasm.exports[keyRealloc];\n\t\t\t\twasm.dealloc = function f(m) {\n\t\t\t\t\tf.impl(wasm.ptr.coerce(m));\n\t\t\t\t};\n\t\t\t\twasm.dealloc.impl = wasm.exports[keyDealloc];\n\t\t\t}\n\t\t\twasm.compileOptionUsed = function f(optName) {\n\t\t\t\tif (!arguments.length) {\n\t\t\t\t\tif (f._result) return f._result;\n\t\t\t\t\telse if (!f._opt) {\n\t\t\t\t\t\tf._rx = /^([^=]+)=(.+)/;\n\t\t\t\t\t\tf._rxInt = /^-?\\d+$/;\n\t\t\t\t\t\tf._opt = function(opt, rv) {\n\t\t\t\t\t\t\tconst m = f._rx.exec(opt);\n\t\t\t\t\t\t\trv[0] = m ? m[1] : opt;\n\t\t\t\t\t\t\trv[1] = m ? f._rxInt.test(m[2]) ? +m[2] : m[2] : true;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tconst rc = Object.create(null), ov = [0, 0];\n\t\t\t\t\tlet i = 0, k;\n\t\t\t\t\twhile (k = capi.sqlite3_compileoption_get(i++)) {\n\t\t\t\t\t\tf._opt(k, ov);\n\t\t\t\t\t\trc[ov[0]] = ov[1];\n\t\t\t\t\t}\n\t\t\t\t\treturn f._result = rc;\n\t\t\t\t} else if (Array.isArray(optName)) {\n\t\t\t\t\tconst rc = Object.create(null);\n\t\t\t\t\toptName.forEach((v) => {\n\t\t\t\t\t\trc[v] = capi.sqlite3_compileoption_used(v);\n\t\t\t\t\t});\n\t\t\t\t\treturn rc;\n\t\t\t\t} else if (\"object\" === typeof optName) {\n\t\t\t\t\tObject.keys(optName).forEach((k) => {\n\t\t\t\t\t\toptName[k] = capi.sqlite3_compileoption_used(k);\n\t\t\t\t\t});\n\t\t\t\t\treturn optName;\n\t\t\t\t}\n\t\t\t\treturn \"string\" === typeof optName ? !!capi.sqlite3_compileoption_used(optName) : false;\n\t\t\t};\n\t\t\twasm.pstack = Object.assign(Object.create(null), {\n\t\t\t\trestore: wasm.exports.sqlite3__wasm_pstack_restore,\n\t\t\t\talloc: function(n) {\n\t\t\t\t\tif (\"string\" === typeof n && !(n = wasm.sizeofIR(n))) WasmAllocError.toss(\"Invalid value for pstack.alloc(\", arguments[0], \")\");\n\t\t\t\t\treturn wasm.exports.sqlite3__wasm_pstack_alloc(n) || WasmAllocError.toss(\"Could not allocate\", n, \"bytes from the pstack.\");\n\t\t\t\t},\n\t\t\t\tallocChunks: function(n, sz) {\n\t\t\t\t\tif (\"string\" === typeof sz && !(sz = wasm.sizeofIR(sz))) WasmAllocError.toss(\"Invalid size value for allocChunks(\", arguments[1], \")\");\n\t\t\t\t\tconst mem = wasm.pstack.alloc(n * sz);\n\t\t\t\t\tconst rc = [mem];\n\t\t\t\t\tlet i = 1, offset = sz;\n\t\t\t\t\tfor (; i < n; ++i, offset += sz) rc.push(wasm.ptr.add(mem, offset));\n\t\t\t\t\treturn rc;\n\t\t\t\t},\n\t\t\t\tallocPtr: (n = 1, safePtrSize = true) => {\n\t\t\t\t\treturn 1 === n ? wasm.pstack.alloc(safePtrSize ? 8 : wasm.ptr.size) : wasm.pstack.allocChunks(n, safePtrSize ? 8 : wasm.ptr.size);\n\t\t\t\t},\n\t\t\t\tcall: function(f) {\n\t\t\t\t\tconst stackPos = wasm.pstack.pointer;\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn f(sqlite3);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\twasm.pstack.restore(stackPos);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.defineProperties(wasm.pstack, {\n\t\t\t\tpointer: {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\titerable: true,\n\t\t\t\t\twriteable: false,\n\t\t\t\t\tget: wasm.exports.sqlite3__wasm_pstack_ptr\n\t\t\t\t},\n\t\t\t\tquota: {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\titerable: true,\n\t\t\t\t\twriteable: false,\n\t\t\t\t\tget: wasm.exports.sqlite3__wasm_pstack_quota\n\t\t\t\t},\n\t\t\t\tremaining: {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\titerable: true,\n\t\t\t\t\twriteable: false,\n\t\t\t\t\tget: wasm.exports.sqlite3__wasm_pstack_remaining\n\t\t\t\t}\n\t\t\t});\n\t\t\tcapi.sqlite3_randomness = (...args) => {\n\t\t\t\tif (1 === args.length && util.isTypedArray(args[0]) && 1 === args[0].BYTES_PER_ELEMENT) {\n\t\t\t\t\tconst ta = args[0];\n\t\t\t\t\tif (0 === ta.byteLength) {\n\t\t\t\t\t\twasm.exports.sqlite3_randomness(0, wasm.ptr.null);\n\t\t\t\t\t\treturn ta;\n\t\t\t\t\t}\n\t\t\t\t\tconst stack = wasm.pstack.pointer;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet n = ta.byteLength, offset = 0;\n\t\t\t\t\t\tconst r = wasm.exports.sqlite3_randomness;\n\t\t\t\t\t\tconst heap = wasm.heap8u();\n\t\t\t\t\t\tconst nAlloc = n < 512 ? n : 512;\n\t\t\t\t\t\tconst ptr = wasm.pstack.alloc(nAlloc);\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tconst j = n > nAlloc ? nAlloc : n;\n\t\t\t\t\t\t\tr(j, ptr);\n\t\t\t\t\t\t\tta.set(wasm.typedArrayPart(heap, ptr, wasm.ptr.add(ptr, j)), offset);\n\t\t\t\t\t\t\tn -= j;\n\t\t\t\t\t\t\toffset += j;\n\t\t\t\t\t\t} while (n > 0);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconfig.error(\"Highly unexpected (and ignored!) exception in sqlite3_randomness():\", e);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\twasm.pstack.restore(stack);\n\t\t\t\t\t}\n\t\t\t\t\treturn ta;\n\t\t\t\t}\n\t\t\t\twasm.exports.sqlite3_randomness(...args);\n\t\t\t};\n\t\t\tcapi.sqlite3_wasmfs_opfs_dir = function() {\n\t\t\t\tif (void 0 !== this.dir) return this.dir;\n\t\t\t\tconst pdir = config.wasmfsOpfsDir;\n\t\t\t\tif (!pdir || !globalThis.FileSystemHandle || !globalThis.FileSystemDirectoryHandle || !globalThis.FileSystemFileHandle || !wasm.exports.sqlite3__wasm_init_wasmfs) return this.dir = \"\";\n\t\t\t\ttry {\n\t\t\t\t\tif (pdir && 0 === wasm.xCallWrapped(\"sqlite3__wasm_init_wasmfs\", \"i32\", [\"string\"], pdir)) return this.dir = pdir;\n\t\t\t\t\telse return this.dir = \"\";\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn this.dir = \"\";\n\t\t\t\t}\n\t\t\t}.bind(Object.create(null));\n\t\t\tcapi.sqlite3_wasmfs_filename_is_persistent = function(name) {\n\t\t\t\tconst p = capi.sqlite3_wasmfs_opfs_dir();\n\t\t\t\treturn p && name ? name.startsWith(p + \"/\") : false;\n\t\t\t};\n\t\t\tcapi.sqlite3_js_db_uses_vfs = function(pDb, vfsName, dbName = 0) {\n\t\t\t\ttry {\n\t\t\t\t\tconst pK = capi.sqlite3_vfs_find(vfsName);\n\t\t\t\t\tif (!pK) return false;\n\t\t\t\t\telse if (!pDb) return pK === capi.sqlite3_vfs_find(0) ? pK : false;\n\t\t\t\t\telse return pK === capi.sqlite3_js_db_vfs(pDb, dbName) ? pK : false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\tcapi.sqlite3_js_vfs_list = function() {\n\t\t\t\tconst rc = [];\n\t\t\t\tlet pVfs = capi.sqlite3_vfs_find(wasm.ptr.null);\n\t\t\t\twhile (pVfs) {\n\t\t\t\t\tconst oVfs = new capi.sqlite3_vfs(pVfs);\n\t\t\t\t\trc.push(wasm.cstrToJs(oVfs.$zName));\n\t\t\t\t\tpVfs = oVfs.$pNext;\n\t\t\t\t\toVfs.dispose();\n\t\t\t\t}\n\t\t\t\treturn rc;\n\t\t\t};\n\t\t\tcapi.sqlite3_js_db_export = function(pDb, schema = 0) {\n\t\t\t\tpDb = wasm.xWrap.testConvertArg(\"sqlite3*\", pDb);\n\t\t\t\tif (!pDb) toss3(\"Invalid sqlite3* argument.\");\n\t\t\t\tif (!wasm.bigIntEnabled) toss3(\"BigInt support is not enabled.\");\n\t\t\t\tconst scope = wasm.scopedAllocPush();\n\t\t\t\tlet pOut;\n\t\t\t\ttry {\n\t\t\t\t\tconst pSize = wasm.scopedAlloc(8 + wasm.ptr.size);\n\t\t\t\t\tconst ppOut = wasm.ptr.add(pSize, 8);\n\t\t\t\t\tconst zSchema = schema ? wasm.isPtr(schema) ? schema : wasm.scopedAllocCString(\"\" + schema) : wasm.ptr.null;\n\t\t\t\t\tlet rc = wasm.exports.sqlite3__wasm_db_serialize(pDb, zSchema, ppOut, pSize, 0);\n\t\t\t\t\tif (rc) toss3(\"Database serialization failed with code\", sqlite3.capi.sqlite3_js_rc_str(rc));\n\t\t\t\t\tpOut = wasm.peekPtr(ppOut);\n\t\t\t\t\tconst nOut = wasm.peek(pSize, \"i64\");\n\t\t\t\t\trc = nOut ? wasm.heap8u().slice(Number(pOut), Number(pOut) + Number(nOut)) : new Uint8Array();\n\t\t\t\t\treturn rc;\n\t\t\t\t} finally {\n\t\t\t\t\tif (pOut) wasm.exports.sqlite3_free(pOut);\n\t\t\t\t\twasm.scopedAllocPop(scope);\n\t\t\t\t}\n\t\t\t};\n\t\t\tcapi.sqlite3_js_db_vfs = (dbPointer, dbName = wasm.ptr.null) => util.sqlite3__wasm_db_vfs(dbPointer, dbName);\n\t\t\tcapi.sqlite3_js_aggregate_context = (pCtx, n) => {\n\t\t\t\treturn capi.sqlite3_aggregate_context(pCtx, n) || (n ? WasmAllocError.toss(\"Cannot allocate\", n, \"bytes for sqlite3_aggregate_context()\") : 0);\n\t\t\t};\n\t\t\tcapi.sqlite3_js_posix_create_file = function(filename, data, dataLen) {\n\t\t\t\tlet pData;\n\t\t\t\tif (data && wasm.isPtr(data)) pData = data;\n\t\t\t\telse if (data instanceof ArrayBuffer || data instanceof Uint8Array) {\n\t\t\t\t\tpData = wasm.allocFromTypedArray(data);\n\t\t\t\t\tif (arguments.length < 3 || !util.isInt32(dataLen) || dataLen < 0) dataLen = data.byteLength;\n\t\t\t\t} else SQLite3Error.toss(\"Invalid 2nd argument for sqlite3_js_posix_create_file().\");\n\t\t\t\ttry {\n\t\t\t\t\tif (!util.isInt32(dataLen) || dataLen < 0) SQLite3Error.toss(\"Invalid 3rd argument for sqlite3_js_posix_create_file().\");\n\t\t\t\t\tconst rc = util.sqlite3__wasm_posix_create_file(filename, pData, dataLen);\n\t\t\t\t\tif (rc) SQLite3Error.toss(\"Creation of file failed with sqlite3 result code\", capi.sqlite3_js_rc_str(rc));\n\t\t\t\t} finally {\n\t\t\t\t\tif (pData && pData !== data) wasm.dealloc(pData);\n\t\t\t\t}\n\t\t\t};\n\t\t\tcapi.sqlite3_js_vfs_create_file = function(vfs, filename, data, dataLen) {\n\t\t\t\tconfig.warn(\"sqlite3_js_vfs_create_file() is deprecated and\", \"should be avoided because it can lead to C-level crashes.\", \"See its documentation for alternatives.\");\n\t\t\t\tlet pData;\n\t\t\t\tif (data) if (wasm.isPtr(data)) pData = data;\n\t\t\t\telse {\n\t\t\t\t\tif (data instanceof ArrayBuffer) data = new Uint8Array(data);\n\t\t\t\t\tif (data instanceof Uint8Array) {\n\t\t\t\t\t\tpData = wasm.allocFromTypedArray(data);\n\t\t\t\t\t\tif (arguments.length < 4 || !util.isInt32(dataLen) || dataLen < 0) dataLen = data.byteLength;\n\t\t\t\t\t} else SQLite3Error.toss(\"Invalid 3rd argument type for sqlite3_js_vfs_create_file().\");\n\t\t\t\t}\n\t\t\t\telse pData = 0;\n\t\t\t\tif (!util.isInt32(dataLen) || dataLen < 0) {\n\t\t\t\t\tif (pData && pData !== data) wasm.dealloc(pData);\n\t\t\t\t\tSQLite3Error.toss(\"Invalid 4th argument for sqlite3_js_vfs_create_file().\");\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst rc = util.sqlite3__wasm_vfs_create_file(vfs, filename, pData, dataLen);\n\t\t\t\t\tif (rc) SQLite3Error.toss(\"Creation of file failed with sqlite3 result code\", capi.sqlite3_js_rc_str(rc));\n\t\t\t\t} finally {\n\t\t\t\t\tif (pData && pData !== data) wasm.dealloc(pData);\n\t\t\t\t}\n\t\t\t};\n\t\t\tcapi.sqlite3_js_sql_to_string = (sql) => {\n\t\t\t\tif (\"string\" === typeof sql) return sql;\n\t\t\t\tconst x = flexibleString(v);\n\t\t\t\treturn x === v ? void 0 : x;\n\t\t\t};\n\t\t\tcapi.sqlite3_db_config = function(pDb, op, ...args) {\n\t\t\t\tswitch (op) {\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_FKEY:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_TRIGGER:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_QPSG:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_TRIGGER_EQP:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_RESET_DATABASE:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_DEFENSIVE:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_WRITABLE_SCHEMA:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_DQS_DML:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_DQS_DDL:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_VIEW:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_TRUSTED_SCHEMA:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_STMT_SCANSTATUS:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_REVERSE_SCANORDER:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE:\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_ENABLE_COMMENTS:\n\t\t\t\t\t\tif (!this.ip) this.ip = wasm.xWrap(\"sqlite3__wasm_db_config_ip\", \"int\", [\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn this.ip(pDb, op, args[0], args[1] || 0);\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_LOOKASIDE:\n\t\t\t\t\t\tif (!this.pii) this.pii = wasm.xWrap(\"sqlite3__wasm_db_config_pii\", \"int\", [\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"int\"\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn this.pii(pDb, op, args[0], args[1], args[2]);\n\t\t\t\t\tcase capi.SQLITE_DBCONFIG_MAINDBNAME:\n\t\t\t\t\t\tif (!this.s) this.s = wasm.xWrap(\"sqlite3__wasm_db_config_s\", \"int\", [\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"string:static\"\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn this.s(pDb, op, args[0]);\n\t\t\t\t\tdefault: return capi.SQLITE_MISUSE;\n\t\t\t\t}\n\t\t\t}.bind(Object.create(null));\n\t\t\tcapi.sqlite3_value_to_js = function(pVal, throwIfCannotConvert = true) {\n\t\t\t\tlet arg;\n\t\t\t\tconst valType = capi.sqlite3_value_type(pVal);\n\t\t\t\tswitch (valType) {\n\t\t\t\t\tcase capi.SQLITE_INTEGER:\n\t\t\t\t\t\tif (wasm.bigIntEnabled) {\n\t\t\t\t\t\t\targ = capi.sqlite3_value_int64(pVal);\n\t\t\t\t\t\t\tif (util.bigIntFitsDouble(arg)) arg = Number(arg);\n\t\t\t\t\t\t} else arg = capi.sqlite3_value_double(pVal);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase capi.SQLITE_FLOAT:\n\t\t\t\t\t\targ = capi.sqlite3_value_double(pVal);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase capi.SQLITE_TEXT:\n\t\t\t\t\t\targ = capi.sqlite3_value_text(pVal);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase capi.SQLITE_BLOB: {\n\t\t\t\t\t\tconst n = capi.sqlite3_value_bytes(pVal);\n\t\t\t\t\t\tconst pBlob = capi.sqlite3_value_blob(pVal);\n\t\t\t\t\t\tif (n && !pBlob) sqlite3.WasmAllocError.toss(\"Cannot allocate memory for blob argument of\", n, \"byte(s)\");\n\t\t\t\t\t\targ = n ? wasm.heap8u().slice(Number(pBlob), Number(pBlob) + Number(n)) : null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase capi.SQLITE_NULL:\n\t\t\t\t\t\targ = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (throwIfCannotConvert) toss3(capi.SQLITE_MISMATCH, \"Unhandled sqlite3_value_type():\", valType);\n\t\t\t\t\t\targ = void 0;\n\t\t\t\t}\n\t\t\t\treturn arg;\n\t\t\t};\n\t\t\tcapi.sqlite3_values_to_js = function(argc, pArgv, throwIfCannotConvert = true) {\n\t\t\t\tlet i;\n\t\t\t\tconst tgt = [];\n\t\t\t\tfor (i = 0; i < argc; ++i) tgt.push(capi.sqlite3_value_to_js(wasm.peekPtr(wasm.ptr.add(pArgv, wasm.ptr.size * i)), throwIfCannotConvert));\n\t\t\t\treturn tgt;\n\t\t\t};\n\t\t\tcapi.sqlite3_result_error_js = function(pCtx, e) {\n\t\t\t\tif (e instanceof WasmAllocError) capi.sqlite3_result_error_nomem(pCtx);\n\t\t\t\telse capi.sqlite3_result_error(pCtx, \"\" + e, -1);\n\t\t\t};\n\t\t\tcapi.sqlite3_result_js = function(pCtx, val) {\n\t\t\t\tif (val instanceof Error) {\n\t\t\t\t\tcapi.sqlite3_result_error_js(pCtx, val);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tswitch (typeof val) {\n\t\t\t\t\t\tcase \"undefined\": break;\n\t\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\t\tcapi.sqlite3_result_int(pCtx, val ? 1 : 0);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"bigint\":\n\t\t\t\t\t\t\tif (util.bigIntFits32(val)) capi.sqlite3_result_int(pCtx, Number(val));\n\t\t\t\t\t\t\telse if (util.bigIntFitsDouble(val)) capi.sqlite3_result_double(pCtx, Number(val));\n\t\t\t\t\t\t\telse if (wasm.bigIntEnabled) if (util.bigIntFits64(val)) capi.sqlite3_result_int64(pCtx, val);\n\t\t\t\t\t\t\telse toss3(\"BigInt value\", val.toString(), \"is too BigInt for int64.\");\n\t\t\t\t\t\t\telse toss3(\"BigInt value\", val.toString(), \"is too BigInt.\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"number\": {\n\t\t\t\t\t\t\tlet f;\n\t\t\t\t\t\t\tif (util.isInt32(val)) f = capi.sqlite3_result_int;\n\t\t\t\t\t\t\telse if (wasm.bigIntEnabled && Number.isInteger(val) && util.bigIntFits64(BigInt(val))) f = capi.sqlite3_result_int64;\n\t\t\t\t\t\t\telse f = capi.sqlite3_result_double;\n\t\t\t\t\t\t\tf(pCtx, val);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"string\": {\n\t\t\t\t\t\t\tconst [p, n] = wasm.allocCString(val, true);\n\t\t\t\t\t\t\tcapi.sqlite3_result_text(pCtx, p, n, capi.SQLITE_WASM_DEALLOC);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"object\": if (null === val) {\n\t\t\t\t\t\t\tcapi.sqlite3_result_null(pCtx);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (util.isBindableTypedArray(val)) {\n\t\t\t\t\t\t\tconst pBlob = wasm.allocFromTypedArray(val);\n\t\t\t\t\t\t\tcapi.sqlite3_result_blob(pCtx, pBlob, val.byteLength, capi.SQLITE_WASM_DEALLOC);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: toss3(\"Don't not how to handle this UDF result value:\", typeof val, val);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcapi.sqlite3_result_error_js(pCtx, e);\n\t\t\t\t}\n\t\t\t};\n\t\t\tcapi.sqlite3_column_js = function(pStmt, iCol, throwIfCannotConvert = true) {\n\t\t\t\tconst v = capi.sqlite3_column_value(pStmt, iCol);\n\t\t\t\treturn 0 === v ? void 0 : capi.sqlite3_value_to_js(v, throwIfCannotConvert);\n\t\t\t};\n\t\t\t{\n\t\t\t\tconst __newOldValue = function(pObj, iCol, impl) {\n\t\t\t\t\timpl = capi[impl];\n\t\t\t\t\tif (!this.ptr) this.ptr = wasm.allocPtr();\n\t\t\t\t\telse wasm.pokePtr(this.ptr, 0);\n\t\t\t\t\tconst rc = impl(pObj, iCol, this.ptr);\n\t\t\t\t\tif (rc) return SQLite3Error.toss(rc, arguments[2] + \"() failed with code \" + rc);\n\t\t\t\t\tconst pv = wasm.peekPtr(this.ptr);\n\t\t\t\t\treturn pv ? capi.sqlite3_value_to_js(pv, true) : void 0;\n\t\t\t\t}.bind(Object.create(null));\n\t\t\t\tcapi.sqlite3_preupdate_new_js = (pDb, iCol) => __newOldValue(pDb, iCol, \"sqlite3_preupdate_new\");\n\t\t\t\tcapi.sqlite3_preupdate_old_js = (pDb, iCol) => __newOldValue(pDb, iCol, \"sqlite3_preupdate_old\");\n\t\t\t\tcapi.sqlite3changeset_new_js = (pChangesetIter, iCol) => __newOldValue(pChangesetIter, iCol, \"sqlite3changeset_new\");\n\t\t\t\tcapi.sqlite3changeset_old_js = (pChangesetIter, iCol) => __newOldValue(pChangesetIter, iCol, \"sqlite3changeset_old\");\n\t\t\t}\n\t\t\tconst sqlite3 = {\n\t\t\t\tWasmAllocError,\n\t\t\t\tSQLite3Error,\n\t\t\t\tcapi,\n\t\t\t\tutil,\n\t\t\t\twasm,\n\t\t\t\tconfig,\n\t\t\t\tversion: Object.create(null),\n\t\t\t\tclient: void 0,\n\t\t\t\tasyncPostInit: async function ff() {\n\t\t\t\t\tif (ff.isReady instanceof Promise) return ff.isReady;\n\t\t\t\t\tlet lia = this.initializersAsync;\n\t\t\t\t\tdelete this.initializersAsync;\n\t\t\t\t\tconst postInit = async () => {\n\t\t\t\t\t\tif (!sqlite3.__isUnderTest) {\n\t\t\t\t\t\t\tdelete sqlite3.util;\n\t\t\t\t\t\t\tdelete sqlite3.StructBinder;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn sqlite3;\n\t\t\t\t\t};\n\t\t\t\t\tconst catcher = (e) => {\n\t\t\t\t\t\tconfig.error(\"an async sqlite3 initializer failed:\", e);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t};\n\t\t\t\t\tif (!lia || !lia.length) return ff.isReady = postInit().catch(catcher);\n\t\t\t\t\tlia = lia.map((f) => {\n\t\t\t\t\t\treturn f instanceof Function ? async (x) => f(sqlite3) : f;\n\t\t\t\t\t});\n\t\t\t\t\tlia.push(postInit);\n\t\t\t\t\tlet p = Promise.resolve(sqlite3);\n\t\t\t\t\twhile (lia.length) p = p.then(lia.shift());\n\t\t\t\t\treturn ff.isReady = p.catch(catcher);\n\t\t\t\t}.bind(sqlite3ApiBootstrap),\n\t\t\t\tscriptInfo: void 0\n\t\t\t};\n\t\t\tif (\"undefined\" !== typeof sqlite3IsUnderTest) sqlite3.__isUnderTest = !!sqlite3IsUnderTest;\n\t\t\ttry {\n\t\t\t\tsqlite3ApiBootstrap.initializers.forEach((f) => {\n\t\t\t\t\tf(sqlite3);\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"sqlite3 bootstrap initializer threw:\", e);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tdelete sqlite3ApiBootstrap.initializers;\n\t\t\tsqlite3ApiBootstrap.sqlite3 = sqlite3;\n\t\t\tif (\"undefined\" !== typeof sqlite3InitScriptInfo) {\n\t\t\t\tsqlite3InitScriptInfo.debugModule(\"sqlite3ApiBootstrap() complete\", sqlite3);\n\t\t\t\tsqlite3.scriptInfo = sqlite3InitScriptInfo;\n\t\t\t}\n\t\t\tif (sqlite3.__isUnderTest) {\n\t\t\t\tif (\"undefined\" !== typeof EmscriptenModule) sqlite3.config.emscripten = EmscriptenModule;\n\t\t\t\tconst iw = sqlite3.scriptInfo?.instantiateWasm;\n\t\t\t\tif (iw) {\n\t\t\t\t\tsqlite3.wasm.module = iw.module;\n\t\t\t\t\tsqlite3.wasm.instance = iw.instance;\n\t\t\t\t\tsqlite3.wasm.imports = iw.imports;\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete globalThis.sqlite3ApiConfig;\n\t\t\tdelete globalThis.sqlite3ApiBootstrap;\n\t\t\tdelete sqlite3ApiBootstrap.defaultConfig;\n\t\t\treturn sqlite3.asyncPostInit().then((s) => {\n\t\t\t\tif (\"undefined\" !== typeof sqlite3InitScriptInfo) sqlite3InitScriptInfo.debugModule(\"sqlite3.asyncPostInit() complete\", s);\n\t\t\t\tdelete s.asyncPostInit;\n\t\t\t\tdelete s.scriptInfo;\n\t\t\t\tdelete s.emscripten;\n\t\t\t\treturn s;\n\t\t\t});\n\t\t};\n\t\tglobalThis.sqlite3ApiBootstrap.initializers = [];\n\t\tglobalThis.sqlite3ApiBootstrap.initializersAsync = [];\n\t\tglobalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null);\n\t\tglobalThis.sqlite3ApiBootstrap.sqlite3 = void 0;\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\tsqlite3.version = {\n\t\t\t\t\"libVersion\": \"3.52.0\",\n\t\t\t\t\"libVersionNumber\": 3052e3,\n\t\t\t\t\"sourceId\": \"2026-01-30 06:37:34 407724c4e80efdf93d885e95b5209a100a3f470fe0298138be57201f65f9817e\",\n\t\t\t\t\"downloadVersion\": 352e4,\n\t\t\t\t\"scm\": {\n\t\t\t\t\t\"sha3-256\": \"407724c4e80efdf93d885e95b5209a100a3f470fe0298138be57201f65f9817e\",\n\t\t\t\t\t\"branch\": \"trunk\",\n\t\t\t\t\t\"tags\": \"\",\n\t\t\t\t\t\"datetime\": \"2026-01-30T06:37:34.096Z\"\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t\tglobalThis.WhWasmUtilInstaller = function WhWasmUtilInstaller(target) {\n\t\t\t\"use strict\";\n\t\t\tif (void 0 === target.bigIntEnabled) target.bigIntEnabled = !!globalThis[\"BigInt64Array\"];\n\t\t\tconst toss = (...args) => {\n\t\t\t\tthrow new Error(args.join(\" \"));\n\t\t\t};\n\t\t\tif (!target.pointerSize && !target.pointerIR && target.alloc && target.dealloc) {\n\t\t\t\tconst ptr = target.alloc(1);\n\t\t\t\ttarget.pointerSize = \"bigint\" === typeof ptr ? 8 : 4;\n\t\t\t\ttarget.dealloc(ptr);\n\t\t\t}\n\t\t\tif (target.pointerSize && !target.pointerIR) target.pointerIR = 4 === target.pointerSize ? \"i32\" : \"i64\";\n\t\t\tconst __ptrIR = target.pointerIR ??= \"i32\";\n\t\t\tconst __ptrSize = target.pointerSize ??= \"i32\" === __ptrIR ? 4 : \"i64\" === __ptrIR ? 8 : 0;\n\t\t\tdelete target.pointerSize;\n\t\t\tdelete target.pointerIR;\n\t\t\tif (\"i32\" !== __ptrIR && \"i64\" !== __ptrIR) toss(\"Invalid pointerIR:\", __ptrIR);\n\t\t\telse if (8 !== __ptrSize && 4 !== __ptrSize) toss(\"Invalid pointerSize:\", __ptrSize);\n\t\t\tconst __BigInt = target.bigIntEnabled ? (v) => BigInt(v || 0) : (v) => toss(\"BigInt support is disabled in this build.\");\n\t\t\tconst __Number = (v) => Number(v || 0);\n\t\t\tconst __asPtrType = 4 === __ptrSize ? __Number : __BigInt;\n\t\t\tconst __NullPtr = __asPtrType(0);\n\t\t\tconst __ptrAdd = function(...args) {\n\t\t\t\tlet rc = __asPtrType(0);\n\t\t\t\tfor (const v of args) rc += __asPtrType(v);\n\t\t\t\treturn rc;\n\t\t\t};\n\t\t\t{\n\t\t\t\tconst __ptr = Object.create(null);\n\t\t\t\tObject.defineProperty(target, \"ptr\", {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: () => __ptr,\n\t\t\t\t\tset: () => toss(\"The ptr property is read-only.\")\n\t\t\t\t});\n\t\t\t\t(function f(name, val) {\n\t\t\t\t\tObject.defineProperty(__ptr, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tget: () => val,\n\t\t\t\t\t\tset: () => toss(\"ptr[\" + name + \"] is read-only.\")\n\t\t\t\t\t});\n\t\t\t\t\treturn f;\n\t\t\t\t})(\"null\", __NullPtr)(\"size\", __ptrSize)(\"ir\", __ptrIR)(\"coerce\", __asPtrType)(\"add\", __ptrAdd)(\"addn\", 4 === __ptrIR ? __ptrAdd : (...args) => Number(__ptrAdd(...args)));\n\t\t\t}\n\t\t\tif (!target.exports) Object.defineProperty(target, \"exports\", {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: () => target.instance?.exports\n\t\t\t});\n\t\t\tconst cache = Object.create(null);\n\t\t\tcache.heapSize = 0;\n\t\t\tcache.memory = null;\n\t\t\tcache.freeFuncIndexes = [];\n\t\t\tcache.scopedAlloc = [];\n\t\t\tcache.scopedAlloc.pushPtr = (ptr) => {\n\t\t\t\tcache.scopedAlloc[cache.scopedAlloc.length - 1].push(ptr);\n\t\t\t\treturn ptr;\n\t\t\t};\n\t\t\tcache.utf8Decoder = new TextDecoder();\n\t\t\tcache.utf8Encoder = new TextEncoder(\"utf-8\");\n\t\t\ttarget.sizeofIR = (n) => {\n\t\t\t\tswitch (n) {\n\t\t\t\t\tcase \"i8\": return 1;\n\t\t\t\t\tcase \"i16\": return 2;\n\t\t\t\t\tcase \"i32\":\n\t\t\t\t\tcase \"f32\":\n\t\t\t\t\tcase \"float\": return 4;\n\t\t\t\t\tcase \"i64\":\n\t\t\t\t\tcase \"f64\":\n\t\t\t\t\tcase \"double\": return 8;\n\t\t\t\t\tcase \"*\": return __ptrSize;\n\t\t\t\t\tdefault: return (\"\" + n).endsWith(\"*\") ? __ptrSize : void 0;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst heapWrappers = function() {\n\t\t\t\tif (!cache.memory) cache.memory = target.memory instanceof WebAssembly.Memory ? target.memory : target.exports.memory;\n\t\t\t\telse if (cache.heapSize === cache.memory.buffer.byteLength) return cache;\n\t\t\t\tconst b = cache.memory.buffer;\n\t\t\t\tcache.HEAP8 = new Int8Array(b);\n\t\t\t\tcache.HEAP8U = new Uint8Array(b);\n\t\t\t\tcache.HEAP16 = new Int16Array(b);\n\t\t\t\tcache.HEAP16U = new Uint16Array(b);\n\t\t\t\tcache.HEAP32 = new Int32Array(b);\n\t\t\t\tcache.HEAP32U = new Uint32Array(b);\n\t\t\t\tcache.HEAP32F = new Float32Array(b);\n\t\t\t\tcache.HEAP64F = new Float64Array(b);\n\t\t\t\tif (target.bigIntEnabled) if (\"undefined\" !== typeof BigInt64Array) {\n\t\t\t\t\tcache.HEAP64 = new BigInt64Array(b);\n\t\t\t\t\tcache.HEAP64U = new BigUint64Array(b);\n\t\t\t\t} else toss(\"BigInt support is enabled, but the BigInt64Array type is missing.\");\n\t\t\t\tcache.heapSize = b.byteLength;\n\t\t\t\treturn cache;\n\t\t\t};\n\t\t\ttarget.heap8 = () => heapWrappers().HEAP8;\n\t\t\ttarget.heap8u = () => heapWrappers().HEAP8U;\n\t\t\ttarget.heap16 = () => heapWrappers().HEAP16;\n\t\t\ttarget.heap16u = () => heapWrappers().HEAP16U;\n\t\t\ttarget.heap32 = () => heapWrappers().HEAP32;\n\t\t\ttarget.heap32u = () => heapWrappers().HEAP32U;\n\t\t\ttarget.heapForSize = function(n, unsigned = true) {\n\t\t\t\tconst c = cache.memory && cache.heapSize === cache.memory.buffer.byteLength ? cache : heapWrappers();\n\t\t\t\tswitch (n) {\n\t\t\t\t\tcase Int8Array: return c.HEAP8;\n\t\t\t\t\tcase Uint8Array: return c.HEAP8U;\n\t\t\t\t\tcase Int16Array: return c.HEAP16;\n\t\t\t\t\tcase Uint16Array: return c.HEAP16U;\n\t\t\t\t\tcase Int32Array: return c.HEAP32;\n\t\t\t\t\tcase Uint32Array: return c.HEAP32U;\n\t\t\t\t\tcase 8: return unsigned ? c.HEAP8U : c.HEAP8;\n\t\t\t\t\tcase 16: return unsigned ? c.HEAP16U : c.HEAP16;\n\t\t\t\t\tcase 32: return unsigned ? c.HEAP32U : c.HEAP32;\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\tif (c.HEAP64) return unsigned ? c.HEAP64U : c.HEAP64;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: if (target.bigIntEnabled) {\n\t\t\t\t\t\tif (n === globalThis[\"BigUint64Array\"]) return c.HEAP64U;\n\t\t\t\t\t\telse if (n === globalThis[\"BigInt64Array\"]) return c.HEAP64;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoss(\"Invalid heapForSize() size: expecting 8, 16, 32,\", \"or (if BigInt is enabled) 64.\");\n\t\t\t};\n\t\t\tconst __funcTable = target.functionTable;\n\t\t\tdelete target.functionTable;\n\t\t\ttarget.functionTable = __funcTable ? () => __funcTable : () => target.exports.__indirect_function_table;\n\t\t\ttarget.functionEntry = function(fptr) {\n\t\t\t\tconst ft = target.functionTable();\n\t\t\t\treturn fptr < ft.length ? ft.get(__asPtrType(fptr)) : void 0;\n\t\t\t};\n\t\t\ttarget.jsFuncToWasm = function f(func, sig) {\n\t\t\t\tif (!f._) f._ = {\n\t\t\t\t\tsigTypes: Object.assign(Object.create(null), {\n\t\t\t\t\t\ti: \"i32\",\n\t\t\t\t\t\tp: __ptrIR,\n\t\t\t\t\t\tP: __ptrIR,\n\t\t\t\t\t\ts: __ptrIR,\n\t\t\t\t\t\tj: \"i64\",\n\t\t\t\t\t\tf: \"f32\",\n\t\t\t\t\t\td: \"f64\"\n\t\t\t\t\t}),\n\t\t\t\t\ttypeCodes: Object.assign(Object.create(null), {\n\t\t\t\t\t\tf64: 124,\n\t\t\t\t\t\tf32: 125,\n\t\t\t\t\t\ti64: 126,\n\t\t\t\t\t\ti32: 127\n\t\t\t\t\t}),\n\t\t\t\t\tuleb128Encode: (tgt, method, n) => {\n\t\t\t\t\t\tif (n < 128) tgt[method](n);\n\t\t\t\t\t\telse tgt[method](n % 128 | 128, n >> 7);\n\t\t\t\t\t},\n\t\t\t\t\trxJSig: /^(\\w)\\((\\w*)\\)$/,\n\t\t\t\t\tsigParams: (sig) => {\n\t\t\t\t\t\tconst m = f._.rxJSig.exec(sig);\n\t\t\t\t\t\treturn m ? m[2] : sig.substr(1);\n\t\t\t\t\t},\n\t\t\t\t\tletterType: (x) => f._.sigTypes[x] || toss(\"Invalid signature letter:\", x),\n\t\t\t\t\tpushSigType: (dest, letter) => dest.push(f._.typeCodes[f._.letterType(letter)])\n\t\t\t\t};\n\t\t\t\tif (\"string\" === typeof func) {\n\t\t\t\t\tconst x = sig;\n\t\t\t\t\tsig = func;\n\t\t\t\t\tfunc = x;\n\t\t\t\t}\n\t\t\t\tconst _ = f._;\n\t\t\t\tconst sigParams = _.sigParams(sig);\n\t\t\t\tconst wasmCode = [1, 96];\n\t\t\t\t_.uleb128Encode(wasmCode, \"push\", sigParams.length);\n\t\t\t\tfor (const x of sigParams) _.pushSigType(wasmCode, x);\n\t\t\t\tif (\"v\" === sig[0]) wasmCode.push(0);\n\t\t\t\telse {\n\t\t\t\t\twasmCode.push(1);\n\t\t\t\t\t_.pushSigType(wasmCode, sig[0]);\n\t\t\t\t}\n\t\t\t\t_.uleb128Encode(wasmCode, \"unshift\", wasmCode.length);\n\t\t\t\twasmCode.unshift(0, 97, 115, 109, 1, 0, 0, 0, 1);\n\t\t\t\twasmCode.push(2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0);\n\t\t\t\treturn new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array(wasmCode)), { e: { f: func } }).exports[\"f\"];\n\t\t\t};\n\t\t\tconst __installFunction = function f(func, sig, scoped) {\n\t\t\t\tif (scoped && !cache.scopedAlloc.length) toss(\"No scopedAllocPush() scope is active.\");\n\t\t\t\tif (\"string\" === typeof func) {\n\t\t\t\t\tconst x = sig;\n\t\t\t\t\tsig = func;\n\t\t\t\t\tfunc = x;\n\t\t\t\t}\n\t\t\t\tif (\"string\" !== typeof sig || !(func instanceof Function)) toss(\"Invalid arguments: expecting (function,signature) or (signature,function).\");\n\t\t\t\tconst ft = target.functionTable();\n\t\t\t\tconst oldLen = __asPtrType(ft.length);\n\t\t\t\tlet ptr;\n\t\t\t\twhile (ptr = cache.freeFuncIndexes.pop()) if (ft.get(ptr)) {\n\t\t\t\t\tptr = null;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else break;\n\t\t\t\tif (!ptr) {\n\t\t\t\t\tptr = __asPtrType(oldLen);\n\t\t\t\t\tft.grow(__asPtrType(1));\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tft.set(ptr, func);\n\t\t\t\t\tif (scoped) cache.scopedAlloc.pushPtr(ptr);\n\t\t\t\t\treturn ptr;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (!(e instanceof TypeError)) {\n\t\t\t\t\t\tif (ptr === oldLen) cache.freeFuncIndexes.push(oldLen);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst fptr = target.jsFuncToWasm(func, sig);\n\t\t\t\t\tft.set(ptr, fptr);\n\t\t\t\t\tif (scoped) cache.scopedAlloc.pushPtr(ptr);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (ptr === oldLen) cache.freeFuncIndexes.push(oldLen);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t\treturn ptr;\n\t\t\t};\n\t\t\ttarget.installFunction = (func, sig) => __installFunction(func, sig, false);\n\t\t\ttarget.scopedInstallFunction = (func, sig) => __installFunction(func, sig, true);\n\t\t\ttarget.uninstallFunction = function(ptr) {\n\t\t\t\tif (!ptr && __NullPtr !== ptr) return void 0;\n\t\t\t\tconst ft = target.functionTable();\n\t\t\t\tcache.freeFuncIndexes.push(ptr);\n\t\t\t\tconst rc = ft.get(ptr);\n\t\t\t\tft.set(ptr, null);\n\t\t\t\treturn rc;\n\t\t\t};\n\t\t\ttarget.peek = function f(ptr, type = \"i8\") {\n\t\t\t\tif (type.endsWith(\"*\")) type = __ptrIR;\n\t\t\t\tconst c = cache.memory && cache.heapSize === cache.memory.buffer.byteLength ? cache : heapWrappers();\n\t\t\t\tconst list = Array.isArray(ptr) ? [] : void 0;\n\t\t\t\tlet rc;\n\t\t\t\tdo {\n\t\t\t\t\tif (list) ptr = arguments[0].shift();\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase \"i1\":\n\t\t\t\t\t\tcase \"i8\":\n\t\t\t\t\t\t\trc = c.HEAP8[Number(ptr) >> 0];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"i16\":\n\t\t\t\t\t\t\trc = c.HEAP16[Number(ptr) >> 1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"i32\":\n\t\t\t\t\t\t\trc = c.HEAP32[Number(ptr) >> 2];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"float\":\n\t\t\t\t\t\tcase \"f32\":\n\t\t\t\t\t\t\trc = c.HEAP32F[Number(ptr) >> 2];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"double\":\n\t\t\t\t\t\tcase \"f64\":\n\t\t\t\t\t\t\trc = Number(c.HEAP64F[Number(ptr) >> 3]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"i64\": if (c.HEAP64) {\n\t\t\t\t\t\t\trc = __BigInt(c.HEAP64[Number(ptr) >> 3]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: toss(\"Invalid type for peek():\", type);\n\t\t\t\t\t}\n\t\t\t\t\tif (list) list.push(rc);\n\t\t\t\t} while (list && arguments[0].length);\n\t\t\t\treturn list || rc;\n\t\t\t};\n\t\t\ttarget.poke = function(ptr, value, type = \"i8\") {\n\t\t\t\tif (type.endsWith(\"*\")) type = __ptrIR;\n\t\t\t\tconst c = cache.memory && cache.heapSize === cache.memory.buffer.byteLength ? cache : heapWrappers();\n\t\t\t\tfor (const p of Array.isArray(ptr) ? ptr : [ptr]) switch (type) {\n\t\t\t\t\tcase \"i1\":\n\t\t\t\t\tcase \"i8\":\n\t\t\t\t\t\tc.HEAP8[Number(p) >> 0] = value;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase \"i16\":\n\t\t\t\t\t\tc.HEAP16[Number(p) >> 1] = value;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase \"i32\":\n\t\t\t\t\t\tc.HEAP32[Number(p) >> 2] = value;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase \"float\":\n\t\t\t\t\tcase \"f32\":\n\t\t\t\t\t\tc.HEAP32F[Number(p) >> 2] = value;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase \"double\":\n\t\t\t\t\tcase \"f64\":\n\t\t\t\t\t\tc.HEAP64F[Number(p) >> 3] = value;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tcase \"i64\": if (c.HEAP64) {\n\t\t\t\t\t\tc.HEAP64[Number(p) >> 3] = __BigInt(value);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: toss(\"Invalid type for poke(): \" + type);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\ttarget.peekPtr = (...ptr) => target.peek(1 === ptr.length ? ptr[0] : ptr, __ptrIR);\n\t\t\ttarget.pokePtr = (ptr, value = 0) => target.poke(ptr, value, __ptrIR);\n\t\t\ttarget.peek8 = (...ptr) => target.peek(1 === ptr.length ? ptr[0] : ptr, \"i8\");\n\t\t\ttarget.poke8 = (ptr, value) => target.poke(ptr, value, \"i8\");\n\t\t\ttarget.peek16 = (...ptr) => target.peek(1 === ptr.length ? ptr[0] : ptr, \"i16\");\n\t\t\ttarget.poke16 = (ptr, value) => target.poke(ptr, value, \"i16\");\n\t\t\ttarget.peek32 = (...ptr) => target.peek(1 === ptr.length ? ptr[0] : ptr, \"i32\");\n\t\t\ttarget.poke32 = (ptr, value) => target.poke(ptr, value, \"i32\");\n\t\t\ttarget.peek64 = (...ptr) => target.peek(1 === ptr.length ? ptr[0] : ptr, \"i64\");\n\t\t\ttarget.poke64 = (ptr, value) => target.poke(ptr, value, \"i64\");\n\t\t\ttarget.peek32f = (...ptr) => target.peek(1 === ptr.length ? ptr[0] : ptr, \"f32\");\n\t\t\ttarget.poke32f = (ptr, value) => target.poke(ptr, value, \"f32\");\n\t\t\ttarget.peek64f = (...ptr) => target.peek(1 === ptr.length ? ptr[0] : ptr, \"f64\");\n\t\t\ttarget.poke64f = (ptr, value) => target.poke(ptr, value, \"f64\");\n\t\t\ttarget.getMemValue = target.peek;\n\t\t\ttarget.getPtrValue = target.peekPtr;\n\t\t\ttarget.setMemValue = target.poke;\n\t\t\ttarget.setPtrValue = target.pokePtr;\n\t\t\ttarget.isPtr32 = (ptr) => \"number\" === typeof ptr && ptr >= 0 && ptr === (ptr | 0);\n\t\t\ttarget.isPtr64 = (ptr) => \"bigint\" === typeof ptr ? ptr >= 0 : target.isPtr32(ptr);\n\t\t\ttarget.isPtr = 4 === __ptrSize ? target.isPtr32 : target.isPtr64;\n\t\t\ttarget.cstrlen = function(ptr) {\n\t\t\t\tif (!ptr || !target.isPtr(ptr)) return null;\n\t\t\t\tptr = Number(ptr);\n\t\t\t\tconst h = heapWrappers().HEAP8U;\n\t\t\t\tlet pos = ptr;\n\t\t\t\tfor (; h[pos] !== 0; ++pos);\n\t\t\t\treturn pos - ptr;\n\t\t\t};\n\t\t\tconst __SAB = \"undefined\" === typeof SharedArrayBuffer ? function() {} : SharedArrayBuffer;\n\t\t\tconst isSharedTypedArray = (aTypedArray) => aTypedArray.buffer instanceof __SAB;\n\t\t\ttarget.isSharedTypedArray = isSharedTypedArray;\n\t\t\tconst typedArrayPart = (aTypedArray, begin, end) => {\n\t\t\t\tif (8 === __ptrSize) {\n\t\t\t\t\tif (\"bigint\" === typeof begin) begin = Number(begin);\n\t\t\t\t\tif (\"bigint\" === typeof end) end = Number(end);\n\t\t\t\t}\n\t\t\t\treturn isSharedTypedArray(aTypedArray) ? aTypedArray.slice(begin, end) : aTypedArray.subarray(begin, end);\n\t\t\t};\n\t\t\ttarget.typedArrayPart = typedArrayPart;\n\t\t\tconst typedArrayToString = (typedArray, begin, end) => cache.utf8Decoder.decode(typedArrayPart(typedArray, begin, end));\n\t\t\ttarget.typedArrayToString = typedArrayToString;\n\t\t\ttarget.cstrToJs = function(ptr) {\n\t\t\t\tconst n = target.cstrlen(ptr);\n\t\t\t\treturn n ? typedArrayToString(heapWrappers().HEAP8U, Number(ptr), Number(ptr) + n) : null === n ? n : \"\";\n\t\t\t};\n\t\t\ttarget.jstrlen = function(str) {\n\t\t\t\tif (\"string\" !== typeof str) return null;\n\t\t\t\tconst n = str.length;\n\t\t\t\tlet len = 0;\n\t\t\t\tfor (let i = 0; i < n; ++i) {\n\t\t\t\t\tlet u = str.charCodeAt(i);\n\t\t\t\t\tif (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023;\n\t\t\t\t\tif (u <= 127) ++len;\n\t\t\t\t\telse if (u <= 2047) len += 2;\n\t\t\t\t\telse if (u <= 65535) len += 3;\n\t\t\t\t\telse len += 4;\n\t\t\t\t}\n\t\t\t\treturn len;\n\t\t\t};\n\t\t\ttarget.jstrcpy = function(jstr, tgt, offset = 0, maxBytes = -1, addNul = true) {\n\t\t\t\tif (!tgt || !(tgt instanceof Int8Array) && !(tgt instanceof Uint8Array)) toss(\"jstrcpy() target must be an Int8Array or Uint8Array.\");\n\t\t\t\tmaxBytes = Number(maxBytes);\n\t\t\t\toffset = Number(offset);\n\t\t\t\tif (maxBytes < 0) maxBytes = tgt.length - offset;\n\t\t\t\tif (!(maxBytes > 0) || !(offset >= 0)) return 0;\n\t\t\t\tlet i = 0, max = jstr.length;\n\t\t\t\tconst begin = offset, end = offset + maxBytes - (addNul ? 1 : 0);\n\t\t\t\tfor (; i < max && offset < end; ++i) {\n\t\t\t\t\tlet u = jstr.charCodeAt(i);\n\t\t\t\t\tif (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | jstr.charCodeAt(++i) & 1023;\n\t\t\t\t\tif (u <= 127) {\n\t\t\t\t\t\tif (offset >= end) break;\n\t\t\t\t\t\ttgt[offset++] = u;\n\t\t\t\t\t} else if (u <= 2047) {\n\t\t\t\t\t\tif (offset + 1 >= end) break;\n\t\t\t\t\t\ttgt[offset++] = 192 | u >> 6;\n\t\t\t\t\t\ttgt[offset++] = 128 | u & 63;\n\t\t\t\t\t} else if (u <= 65535) {\n\t\t\t\t\t\tif (offset + 2 >= end) break;\n\t\t\t\t\t\ttgt[offset++] = 224 | u >> 12;\n\t\t\t\t\t\ttgt[offset++] = 128 | u >> 6 & 63;\n\t\t\t\t\t\ttgt[offset++] = 128 | u & 63;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (offset + 3 >= end) break;\n\t\t\t\t\t\ttgt[offset++] = 240 | u >> 18;\n\t\t\t\t\t\ttgt[offset++] = 128 | u >> 12 & 63;\n\t\t\t\t\t\ttgt[offset++] = 128 | u >> 6 & 63;\n\t\t\t\t\t\ttgt[offset++] = 128 | u & 63;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (addNul) tgt[offset++] = 0;\n\t\t\t\treturn offset - begin;\n\t\t\t};\n\t\t\ttarget.cstrncpy = function(tgtPtr, srcPtr, n) {\n\t\t\t\tif (!tgtPtr || !srcPtr) toss(\"cstrncpy() does not accept NULL strings.\");\n\t\t\t\tif (n < 0) n = target.cstrlen(strPtr) + 1;\n\t\t\t\telse if (!(n > 0)) return 0;\n\t\t\t\tconst heap = target.heap8u();\n\t\t\t\tlet i = 0, ch;\n\t\t\t\tconst tgtNumber = Number(tgtPtr), srcNumber = Number(srcPtr);\n\t\t\t\tfor (; i < n && (ch = heap[srcNumber + i]); ++i) heap[tgtNumber + i] = ch;\n\t\t\t\tif (i < n) heap[tgtNumber + i++] = 0;\n\t\t\t\treturn i;\n\t\t\t};\n\t\t\ttarget.jstrToUintArray = (str, addNul = false) => {\n\t\t\t\treturn cache.utf8Encoder.encode(addNul ? str + \"\\0\" : str);\n\t\t\t};\n\t\t\tconst __affirmAlloc = (obj, funcName) => {\n\t\t\t\tif (!(obj.alloc instanceof Function) || !(obj.dealloc instanceof Function)) toss(\"Object is missing alloc() and/or dealloc() function(s)\", \"required by\", funcName + \"().\");\n\t\t\t};\n\t\t\tconst __allocCStr = function(jstr, returnWithLength, allocator, funcName) {\n\t\t\t\t__affirmAlloc(target, funcName);\n\t\t\t\tif (\"string\" !== typeof jstr) return null;\n\t\t\t\tconst u = cache.utf8Encoder.encode(jstr), ptr = allocator(u.length + 1);\n\t\t\t\tlet toFree = ptr;\n\t\t\t\ttry {\n\t\t\t\t\tconst heap = heapWrappers().HEAP8U;\n\t\t\t\t\theap.set(u, Number(ptr));\n\t\t\t\t\theap[__ptrAdd(ptr, u.length)] = 0;\n\t\t\t\t\ttoFree = __NullPtr;\n\t\t\t\t\treturn returnWithLength ? [ptr, u.length] : ptr;\n\t\t\t\t} finally {\n\t\t\t\t\tif (toFree) target.dealloc(toFree);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttarget.allocCString = (jstr, returnWithLength = false) => __allocCStr(jstr, returnWithLength, target.alloc, \"allocCString()\");\n\t\t\ttarget.scopedAllocPush = function() {\n\t\t\t\t__affirmAlloc(target, \"scopedAllocPush\");\n\t\t\t\tconst a = [];\n\t\t\t\tcache.scopedAlloc.push(a);\n\t\t\t\treturn a;\n\t\t\t};\n\t\t\ttarget.scopedAllocPop = function(state) {\n\t\t\t\t__affirmAlloc(target, \"scopedAllocPop\");\n\t\t\t\tconst n = arguments.length ? cache.scopedAlloc.indexOf(state) : cache.scopedAlloc.length - 1;\n\t\t\t\tif (n < 0) toss(\"Invalid state object for scopedAllocPop().\");\n\t\t\t\tif (0 === arguments.length) state = cache.scopedAlloc[n];\n\t\t\t\tcache.scopedAlloc.splice(n, 1);\n\t\t\t\tfor (let p; p = state.pop();) if (target.functionEntry(p)) target.uninstallFunction(p);\n\t\t\t\telse target.dealloc(p);\n\t\t\t};\n\t\t\ttarget.scopedAlloc = function(n) {\n\t\t\t\tif (!cache.scopedAlloc.length) toss(\"No scopedAllocPush() scope is active.\");\n\t\t\t\tconst p = __asPtrType(target.alloc(n));\n\t\t\t\treturn cache.scopedAlloc.pushPtr(p);\n\t\t\t};\n\t\t\tObject.defineProperty(target.scopedAlloc, \"level\", {\n\t\t\t\tconfigurable: false,\n\t\t\t\tenumerable: false,\n\t\t\t\tget: () => cache.scopedAlloc.length,\n\t\t\t\tset: () => toss(\"The 'active' property is read-only.\")\n\t\t\t});\n\t\t\ttarget.scopedAllocCString = (jstr, returnWithLength = false) => __allocCStr(jstr, returnWithLength, target.scopedAlloc, \"scopedAllocCString()\");\n\t\t\tconst __allocMainArgv = function(isScoped, list) {\n\t\t\t\tconst pList = target[isScoped ? \"scopedAlloc\" : \"alloc\"]((list.length + 1) * target.ptr.size);\n\t\t\t\tlet i = 0;\n\t\t\t\tlist.forEach((e) => {\n\t\t\t\t\ttarget.pokePtr(__ptrAdd(pList, target.ptr.size * i++), target[isScoped ? \"scopedAllocCString\" : \"allocCString\"](\"\" + e));\n\t\t\t\t});\n\t\t\t\ttarget.pokePtr(__ptrAdd(pList, target.ptr.size * i), 0);\n\t\t\t\treturn pList;\n\t\t\t};\n\t\t\ttarget.scopedAllocMainArgv = (list) => __allocMainArgv(true, list);\n\t\t\ttarget.allocMainArgv = (list) => __allocMainArgv(false, list);\n\t\t\ttarget.cArgvToJs = (argc, pArgv) => {\n\t\t\t\tconst list = [];\n\t\t\t\tfor (let i = 0; i < argc; ++i) {\n\t\t\t\t\tconst arg = target.peekPtr(__ptrAdd(pArgv, target.ptr.size * i));\n\t\t\t\t\tlist.push(arg ? target.cstrToJs(arg) : null);\n\t\t\t\t}\n\t\t\t\treturn list;\n\t\t\t};\n\t\t\ttarget.scopedAllocCall = function(func) {\n\t\t\t\ttarget.scopedAllocPush();\n\t\t\t\ttry {\n\t\t\t\t\treturn func();\n\t\t\t\t} finally {\n\t\t\t\t\ttarget.scopedAllocPop();\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst __allocPtr = function(howMany, safePtrSize, method) {\n\t\t\t\t__affirmAlloc(target, method);\n\t\t\t\tconst pIr = safePtrSize ? \"i64\" : __ptrIR;\n\t\t\t\tlet m = target[method](howMany * (safePtrSize ? 8 : __ptrSize));\n\t\t\t\ttarget.poke(m, 0, pIr);\n\t\t\t\tif (1 === howMany) return m;\n\t\t\t\tconst a = [m];\n\t\t\t\tfor (let i = 1; i < howMany; ++i) {\n\t\t\t\t\tm = __ptrAdd(m, safePtrSize ? 8 : __ptrSize);\n\t\t\t\t\ta[i] = m;\n\t\t\t\t\ttarget.poke(m, 0, pIr);\n\t\t\t\t}\n\t\t\t\treturn a;\n\t\t\t};\n\t\t\ttarget.allocPtr = (howMany = 1, safePtrSize = true) => __allocPtr(howMany, safePtrSize, \"alloc\");\n\t\t\ttarget.scopedAllocPtr = (howMany = 1, safePtrSize = true) => __allocPtr(howMany, safePtrSize, \"scopedAlloc\");\n\t\t\ttarget.xGet = function(name) {\n\t\t\t\treturn target.exports[name] || toss(\"Cannot find exported symbol:\", name);\n\t\t\t};\n\t\t\tconst __argcMismatch = (f, n) => toss(f + \"() requires\", n, \"argument(s).\");\n\t\t\ttarget.xCall = function(fname, ...args) {\n\t\t\t\tconst f = fname instanceof Function ? fname : target.xGet(fname);\n\t\t\t\tif (!(f instanceof Function)) toss(\"Exported symbol\", fname, \"is not a function.\");\n\t\t\t\tif (f.length !== args.length) __argcMismatch(f === fname ? f.name : fname, f.length);\n\t\t\t\treturn 2 === arguments.length && Array.isArray(arguments[1]) ? f.apply(null, arguments[1]) : f.apply(null, args);\n\t\t\t};\n\t\t\tcache.xWrap = Object.create(null);\n\t\t\tcache.xWrap.convert = Object.create(null);\n\t\t\tcache.xWrap.convert.arg = /* @__PURE__ */ new Map();\n\t\t\tcache.xWrap.convert.result = /* @__PURE__ */ new Map();\n\t\t\tconst xArg = cache.xWrap.convert.arg, xResult = cache.xWrap.convert.result;\n\t\t\tconst __xArgPtr = __asPtrType;\n\t\t\txArg.set(\"i64\", __BigInt).set(\"i32\", (i) => i | 0).set(\"i16\", (i) => (i | 0) & 65535).set(\"i8\", (i) => (i | 0) & 255).set(\"f32\", (i) => Number(i).valueOf()).set(\"float\", xArg.get(\"f32\")).set(\"f64\", xArg.get(\"f32\")).set(\"double\", xArg.get(\"f64\")).set(\"int\", xArg.get(\"i32\")).set(\"null\", (i) => i).set(null, xArg.get(\"null\")).set(\"**\", __xArgPtr).set(\"*\", __xArgPtr);\n\t\t\txResult.set(\"*\", __xArgPtr).set(\"pointer\", __xArgPtr).set(\"number\", (v) => Number(v)).set(\"void\", (v) => void 0).set(void 0, xResult.get(\"void\")).set(\"null\", (v) => v).set(null, xResult.get(\"null\"));\n\t\t\tfor (const t of [\n\t\t\t\t\"i8\",\n\t\t\t\t\"i16\",\n\t\t\t\t\"i32\",\n\t\t\t\t\"i64\",\n\t\t\t\t\"int\",\n\t\t\t\t\"f32\",\n\t\t\t\t\"float\",\n\t\t\t\t\"f64\",\n\t\t\t\t\"double\"\n\t\t\t]) {\n\t\t\t\txArg.set(t + \"*\", __xArgPtr);\n\t\t\t\txResult.set(t + \"*\", __xArgPtr);\n\t\t\t\txResult.set(t, xArg.get(t) || toss(\"Maintenance required: missing arg converter for\", t));\n\t\t\t}\n\t\t\tconst __xArgString = (v) => {\n\t\t\t\treturn \"string\" === typeof v ? target.scopedAllocCString(v) : __asPtrType(v);\n\t\t\t};\n\t\t\txArg.set(\"string\", __xArgString).set(\"utf8\", __xArgString);\n\t\t\txResult.set(\"string\", (i) => target.cstrToJs(i)).set(\"utf8\", xResult.get(\"string\")).set(\"string:dealloc\", (i) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn i ? target.cstrToJs(i) : null;\n\t\t\t\t} finally {\n\t\t\t\t\ttarget.dealloc(i);\n\t\t\t\t}\n\t\t\t}).set(\"utf8:dealloc\", xResult.get(\"string:dealloc\")).set(\"json\", (i) => JSON.parse(target.cstrToJs(i))).set(\"json:dealloc\", (i) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn i ? JSON.parse(target.cstrToJs(i)) : null;\n\t\t\t\t} finally {\n\t\t\t\t\ttarget.dealloc(i);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst AbstractArgAdapter = class {\n\t\t\t\tconstructor(opt) {\n\t\t\t\t\tthis.name = opt.name || \"unnamed adapter\";\n\t\t\t\t}\n\t\t\t\tconvertArg(v, argv, argIndex) {\n\t\t\t\t\ttoss(\"AbstractArgAdapter must be subclassed.\");\n\t\t\t\t}\n\t\t\t};\n\t\t\txArg.FuncPtrAdapter = class FuncPtrAdapter extends AbstractArgAdapter {\n\t\t\t\tconstructor(opt) {\n\t\t\t\t\tsuper(opt);\n\t\t\t\t\tif (xArg.FuncPtrAdapter.warnOnUse) console.warn(\"xArg.FuncPtrAdapter is an internal-only API\", \"and is not intended to be invoked from\", \"client-level code. Invoked with:\", opt);\n\t\t\t\t\tthis.name = opt.name || \"unnamed\";\n\t\t\t\t\tthis.signature = opt.signature;\n\t\t\t\t\tif (opt.contextKey instanceof Function) {\n\t\t\t\t\t\tthis.contextKey = opt.contextKey;\n\t\t\t\t\t\tif (!opt.bindScope) opt.bindScope = \"context\";\n\t\t\t\t\t}\n\t\t\t\t\tthis.bindScope = opt.bindScope || toss(\"FuncPtrAdapter options requires a bindScope (explicit or implied).\");\n\t\t\t\t\tif (FuncPtrAdapter.bindScopes.indexOf(opt.bindScope) < 0) toss(\"Invalid options.bindScope (\" + opt.bindMod + \") for FuncPtrAdapter. Expecting one of: (\" + FuncPtrAdapter.bindScopes.join(\", \") + \")\");\n\t\t\t\t\tthis.isTransient = \"transient\" === this.bindScope;\n\t\t\t\t\tthis.isContext = \"context\" === this.bindScope;\n\t\t\t\t\tthis.isPermanent = \"permanent\" === this.bindScope;\n\t\t\t\t\tthis.singleton = \"singleton\" === this.bindScope ? [] : void 0;\n\t\t\t\t\tthis.callProxy = opt.callProxy instanceof Function ? opt.callProxy : void 0;\n\t\t\t\t}\n\t\t\t\tcontextKey(argv, argIndex) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tcontextMap(key) {\n\t\t\t\t\tconst cm = this.__cmap || (this.__cmap = /* @__PURE__ */ new Map());\n\t\t\t\t\tlet rc = cm.get(key);\n\t\t\t\t\tif (void 0 === rc) cm.set(key, rc = []);\n\t\t\t\t\treturn rc;\n\t\t\t\t}\n\t\t\t\tconvertArg(v, argv, argIndex) {\n\t\t\t\t\tlet pair = this.singleton;\n\t\t\t\t\tif (!pair && this.isContext) pair = this.contextMap(this.contextKey(argv, argIndex));\n\t\t\t\t\tif (pair && 2 === pair.length && pair[0] === v) return pair[1];\n\t\t\t\t\tif (v instanceof Function) {\n\t\t\t\t\t\tif (this.callProxy) v = this.callProxy(v);\n\t\t\t\t\t\tconst fp = __installFunction(v, this.signature, this.isTransient);\n\t\t\t\t\t\tif (FuncPtrAdapter.debugFuncInstall) FuncPtrAdapter.debugOut(\"FuncPtrAdapter installed\", this, this.contextKey(argv, argIndex), \"@\" + fp, v);\n\t\t\t\t\t\tif (pair) {\n\t\t\t\t\t\t\tif (pair[1]) {\n\t\t\t\t\t\t\t\tif (FuncPtrAdapter.debugFuncInstall) FuncPtrAdapter.debugOut(\"FuncPtrAdapter uninstalling\", this, this.contextKey(argv, argIndex), \"@\" + pair[1], v);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tcache.scopedAlloc.pushPtr(pair[1]);\n\t\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpair[0] = arguments[0] || __NullPtr;\n\t\t\t\t\t\t\tpair[1] = fp;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fp;\n\t\t\t\t\t} else if (target.isPtr(v) || null === v || void 0 === v) {\n\t\t\t\t\t\tif (pair && pair[1] && pair[1] !== v) {\n\t\t\t\t\t\t\tif (FuncPtrAdapter.debugFuncInstall) FuncPtrAdapter.debugOut(\"FuncPtrAdapter uninstalling\", this, this.contextKey(argv, argIndex), \"@\" + pair[1], v);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tcache.scopedAlloc.pushPtr(pair[1]);\n\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t\tpair[0] = pair[1] = v || __NullPtr;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn v || __NullPtr;\n\t\t\t\t\t} else throw new TypeError(\"Invalid FuncPtrAdapter argument type. Expecting a function pointer or a \" + (this.name ? this.name + \" \" : \"\") + \"function matching signature \" + this.signature + \".\");\n\t\t\t\t}\n\t\t\t};\n\t\t\txArg.FuncPtrAdapter.warnOnUse = false;\n\t\t\txArg.FuncPtrAdapter.debugFuncInstall = false;\n\t\t\txArg.FuncPtrAdapter.debugOut = console.debug.bind(console);\n\t\t\txArg.FuncPtrAdapter.bindScopes = [\n\t\t\t\t\"transient\",\n\t\t\t\t\"context\",\n\t\t\t\t\"singleton\",\n\t\t\t\t\"permanent\"\n\t\t\t];\n\t\t\tconst __xArgAdapterCheck = (t) => xArg.get(t) || toss(\"Argument adapter not found:\", t);\n\t\t\tconst __xResultAdapterCheck = (t) => xResult.get(t) || toss(\"Result adapter not found:\", t);\n\t\t\tcache.xWrap.convertArg = (t, ...args) => __xArgAdapterCheck(t)(...args);\n\t\t\tcache.xWrap.convertArgNoCheck = (t, ...args) => xArg.get(t)(...args);\n\t\t\tcache.xWrap.convertResult = (t, v) => null === t ? v : t ? __xResultAdapterCheck(t)(v) : void 0;\n\t\t\tcache.xWrap.convertResultNoCheck = (t, v) => null === t ? v : t ? xResult.get(t)(v) : void 0;\n\t\t\ttarget.xWrap = function callee(fArg, resultType, ...argTypes) {\n\t\t\t\tif (3 === arguments.length && Array.isArray(arguments[2])) argTypes = arguments[2];\n\t\t\t\tif (target.isPtr(fArg)) fArg = target.functionEntry(fArg) || toss(\"Function pointer not found in WASM function table.\");\n\t\t\t\tconst fIsFunc = fArg instanceof Function;\n\t\t\t\tconst xf = fIsFunc ? fArg : target.xGet(fArg);\n\t\t\t\tif (fIsFunc) fArg = xf.name || \"unnamed function\";\n\t\t\t\tif (argTypes.length !== xf.length) __argcMismatch(fArg, xf.length);\n\t\t\t\tif (0 === xf.length && (null === resultType || \"null\" === resultType)) return xf;\n\t\t\t\t__xResultAdapterCheck(resultType);\n\t\t\t\tfor (const t of argTypes) if (t instanceof AbstractArgAdapter) xArg.set(t, (...args) => t.convertArg(...args));\n\t\t\t\telse __xArgAdapterCheck(t);\n\t\t\t\tconst cxw = cache.xWrap;\n\t\t\t\tif (0 === xf.length) return (...args) => args.length ? __argcMismatch(fArg, xf.length) : cxw.convertResult(resultType, xf.call(null));\n\t\t\t\treturn function(...args) {\n\t\t\t\t\tif (args.length !== xf.length) __argcMismatch(fArg, xf.length);\n\t\t\t\t\tconst scope = target.scopedAllocPush();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\tif (callee.debug) console.debug(\"xWrap() preparing: resultType \", resultType, \"xf\", xf, \"argTypes\", argTypes, \"args\", args);\n\t\t\t\t\t\tfor (; i < args.length; ++i) args[i] = cxw.convertArgNoCheck(argTypes[i], args[i], args, i);\n\t\t\t\t\t\tif (callee.debug) console.debug(\"xWrap() calling: resultType \", resultType, \"xf\", xf, \"argTypes\", argTypes, \"args\", args);\n\t\t\t\t\t\treturn cxw.convertResultNoCheck(resultType, xf.apply(null, args));\n\t\t\t\t\t} finally {\n\t\t\t\t\t\ttarget.scopedAllocPop(scope);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst __xAdapter = function(func, argc, typeName, adapter, modeName, xcvPart) {\n\t\t\t\tif (\"string\" === typeof typeName) {\n\t\t\t\t\tif (1 === argc) return xcvPart.get(typeName);\n\t\t\t\t\telse if (2 === argc) {\n\t\t\t\t\t\tif (!adapter) {\n\t\t\t\t\t\t\txcvPart.delete(typeName);\n\t\t\t\t\t\t\treturn func;\n\t\t\t\t\t\t} else if (!(adapter instanceof Function)) toss(modeName, \"requires a function argument.\");\n\t\t\t\t\t\txcvPart.set(typeName, adapter);\n\t\t\t\t\t\treturn func;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoss(\"Invalid arguments to\", modeName);\n\t\t\t};\n\t\t\ttarget.xWrap.resultAdapter = function f(typeName, adapter) {\n\t\t\t\treturn __xAdapter(f, arguments.length, typeName, adapter, \"resultAdapter()\", xResult);\n\t\t\t};\n\t\t\ttarget.xWrap.argAdapter = function f(typeName, adapter) {\n\t\t\t\treturn __xAdapter(f, arguments.length, typeName, adapter, \"argAdapter()\", xArg);\n\t\t\t};\n\t\t\ttarget.xWrap.FuncPtrAdapter = xArg.FuncPtrAdapter;\n\t\t\ttarget.xCallWrapped = function(fArg, resultType, argTypes, ...args) {\n\t\t\t\tif (Array.isArray(arguments[3])) args = arguments[3];\n\t\t\t\treturn target.xWrap(fArg, resultType, argTypes || []).apply(null, args || []);\n\t\t\t};\n\t\t\ttarget.xWrap.testConvertArg = cache.xWrap.convertArg;\n\t\t\ttarget.xWrap.testConvertResult = cache.xWrap.convertResult;\n\t\t\treturn target;\n\t\t};\n\t\tglobalThis.WhWasmUtilInstaller.yawl = function yawl(config) {\n\t\t\t\"use strict\";\n\t\t\tconst wfetch = () => fetch(config.uri, { credentials: \"same-origin\" });\n\t\t\tconst wui = this;\n\t\t\tconst finalThen = function(arg) {\n\t\t\t\tif (config.wasmUtilTarget) {\n\t\t\t\t\tconst toss = (...args) => {\n\t\t\t\t\t\tthrow new Error(args.join(\" \"));\n\t\t\t\t\t};\n\t\t\t\t\tconst tgt = config.wasmUtilTarget;\n\t\t\t\t\ttgt.module = arg.module;\n\t\t\t\t\ttgt.instance = arg.instance;\n\t\t\t\t\tif (!tgt.instance.exports.memory) tgt.memory = config?.imports?.env?.memory || toss(\"Missing 'memory' object!\");\n\t\t\t\t\tif (!tgt.alloc && arg.instance.exports.malloc) {\n\t\t\t\t\t\tconst exports = arg.instance.exports;\n\t\t\t\t\t\ttgt.alloc = function(n) {\n\t\t\t\t\t\t\treturn exports.malloc(n) || toss(\"Allocation of\", n, \"bytes failed.\");\n\t\t\t\t\t\t};\n\t\t\t\t\t\ttgt.dealloc = function(m) {\n\t\t\t\t\t\t\tm && exports.free(m);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\twui(tgt);\n\t\t\t\t}\n\t\t\t\targ.config = config;\n\t\t\t\tif (config.onload) config.onload(arg);\n\t\t\t\treturn arg;\n\t\t\t};\n\t\t\treturn WebAssembly.instantiateStreaming ? () => WebAssembly.instantiateStreaming(wfetch(), config.imports || {}).then(finalThen) : () => wfetch().then((response) => response.arrayBuffer()).then((bytes) => WebAssembly.instantiate(bytes, config.imports || {})).then(finalThen);\n\t\t}.bind(globalThis.WhWasmUtilInstaller);\n\t\tglobalThis.Jaccwabyt = function StructBinderFactory(config) {\n\t\t\t\"use strict\";\n\t\t\tconst toss = (...args) => {\n\t\t\t\tthrow new Error(args.join(\" \"));\n\t\t\t};\n\t\t\t{\n\t\t\t\tlet h = config.heap;\n\t\t\t\tif (h instanceof WebAssembly.Memory) h = function() {\n\t\t\t\t\treturn new Uint8Array(this.buffer);\n\t\t\t\t}.bind(h);\n\t\t\t\telse if (!(h instanceof Function)) toss(\"config.heap must be WebAssembly.Memory instance or\", \"a function which returns one.\");\n\t\t\t\tconfig.heap = h;\n\t\t\t}\n\t\t\t[\"alloc\", \"dealloc\"].forEach(function(k) {\n\t\t\t\tconfig[k] instanceof Function || toss(\"Config option '\" + k + \"' must be a function.\");\n\t\t\t});\n\t\t\tconst SBF = StructBinderFactory, heap = config.heap, alloc = config.alloc, dealloc = config.dealloc;\n\t\t\tconfig.realloc;\n\t\t\tconst log = config.log || console.debug.bind(console), memberPrefix = config.memberPrefix || \"\", memberSuffix = config.memberSuffix || \"\", BigInt = globalThis[\"BigInt\"], BigInt64Array = globalThis[\"BigInt64Array\"], bigIntEnabled = config.bigIntEnabled ?? !!BigInt64Array;\n\t\t\tlet ptr;\n\t\t\tconst ptrSize = config.pointerSize || config.ptrSize || (\"bigint\" === typeof (ptr = alloc(1)) ? 8 : 4);\n\t\t\tconst ptrIR = config.pointerIR || config.ptrIR || (4 === ptrSize ? \"i32\" : \"i64\");\n\t\t\tif (ptr) {\n\t\t\t\tdealloc(ptr);\n\t\t\t\tptr = void 0;\n\t\t\t}\n\t\t\tif (ptrSize !== 4 && ptrSize !== 8) toss(\"Invalid pointer size:\", ptrSize);\n\t\t\tif (ptrIR !== \"i32\" && ptrIR !== \"i64\") toss(\"Invalid pointer representation:\", ptrIR);\n\t\t\tconst __BigInt = bigIntEnabled && BigInt ? (v) => BigInt(v || 0) : (v) => toss(\"BigInt support is disabled in this build.\");\n\t\t\tconst __asPtrType = \"i32\" == ptrIR ? Number : __BigInt;\n\t\t\tconst __NullPtr = __asPtrType(0);\n\t\t\tconst __ptrAdd = function(...args) {\n\t\t\t\tlet rc = __NullPtr;\n\t\t\t\tfor (let i = 0; i < args.length; ++i) rc += __asPtrType(args[i]);\n\t\t\t\treturn rc;\n\t\t\t};\n\t\t\tconst __ptrAddSelf = function(...args) {\n\t\t\t\treturn __ptrAdd(this.pointer, ...args);\n\t\t\t};\n\t\t\tif (!SBF.debugFlags) {\n\t\t\t\tSBF.__makeDebugFlags = function(deriveFrom = null) {\n\t\t\t\t\tif (deriveFrom && deriveFrom.__flags) deriveFrom = deriveFrom.__flags;\n\t\t\t\t\tconst f = function f(flags) {\n\t\t\t\t\t\tif (0 === arguments.length) return f.__flags;\n\t\t\t\t\t\tif (flags < 0) {\n\t\t\t\t\t\t\tdelete f.__flags.getter;\n\t\t\t\t\t\t\tdelete f.__flags.setter;\n\t\t\t\t\t\t\tdelete f.__flags.alloc;\n\t\t\t\t\t\t\tdelete f.__flags.dealloc;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tf.__flags.getter = 0 !== (1 & flags);\n\t\t\t\t\t\t\tf.__flags.setter = 0 !== (2 & flags);\n\t\t\t\t\t\t\tf.__flags.alloc = 0 !== (4 & flags);\n\t\t\t\t\t\t\tf.__flags.dealloc = 0 !== (8 & flags);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn f._flags;\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(f, \"__flags\", {\n\t\t\t\t\t\titerable: false,\n\t\t\t\t\t\twritable: false,\n\t\t\t\t\t\tvalue: Object.create(deriveFrom)\n\t\t\t\t\t});\n\t\t\t\t\tif (!deriveFrom) f(0);\n\t\t\t\t\treturn f;\n\t\t\t\t};\n\t\t\t\tSBF.debugFlags = SBF.__makeDebugFlags();\n\t\t\t}\n\t\t\tconst isLittleEndian = true;\n\t\t\tconst isFuncSig = (s) => \"(\" === s[1];\n\t\t\tconst isPtrSig = (s) => \"p\" === s || \"P\" === s || \"s\" === s;\n\t\t\tconst isAutoPtrSig = (s) => \"P\" === s;\n\t\t\tconst sigLetter = (s) => s ? isFuncSig(s) ? \"p\" : s[0] : void 0;\n\t\t\tconst sigIR = function(s) {\n\t\t\t\tswitch (sigLetter(s)) {\n\t\t\t\t\tcase \"c\":\n\t\t\t\t\tcase \"C\": return \"i8\";\n\t\t\t\t\tcase \"i\": return \"i32\";\n\t\t\t\t\tcase \"p\":\n\t\t\t\t\tcase \"P\":\n\t\t\t\t\tcase \"s\": return ptrIR;\n\t\t\t\t\tcase \"j\": return \"i64\";\n\t\t\t\t\tcase \"f\": return \"float\";\n\t\t\t\t\tcase \"d\": return \"double\";\n\t\t\t\t}\n\t\t\t\ttoss(\"Unhandled signature IR:\", s);\n\t\t\t};\n\t\t\tconst sigSize = function(s) {\n\t\t\t\tswitch (sigLetter(s)) {\n\t\t\t\t\tcase \"c\":\n\t\t\t\t\tcase \"C\": return 1;\n\t\t\t\t\tcase \"i\": return 4;\n\t\t\t\t\tcase \"p\":\n\t\t\t\t\tcase \"P\":\n\t\t\t\t\tcase \"s\": return ptrSize;\n\t\t\t\t\tcase \"j\": return 8;\n\t\t\t\t\tcase \"f\": return 4;\n\t\t\t\t\tcase \"d\": return 8;\n\t\t\t\t}\n\t\t\t\ttoss(\"Unhandled signature sizeof:\", s);\n\t\t\t};\n\t\t\tconst affirmBigIntArray = BigInt64Array ? () => true : () => toss(\"BigInt64Array is not available.\");\n\t\t\tconst sigDVGetter = function(s) {\n\t\t\t\tswitch (sigLetter(s)) {\n\t\t\t\t\tcase \"p\":\n\t\t\t\t\tcase \"P\":\n\t\t\t\t\tcase \"s\":\n\t\t\t\t\t\tswitch (ptrSize) {\n\t\t\t\t\t\t\tcase 4: return \"getInt32\";\n\t\t\t\t\t\t\tcase 8: return affirmBigIntArray() && \"getBigInt64\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"i\": return \"getInt32\";\n\t\t\t\t\tcase \"c\": return \"getInt8\";\n\t\t\t\t\tcase \"C\": return \"getUint8\";\n\t\t\t\t\tcase \"j\": return affirmBigIntArray() && \"getBigInt64\";\n\t\t\t\t\tcase \"f\": return \"getFloat32\";\n\t\t\t\t\tcase \"d\": return \"getFloat64\";\n\t\t\t\t}\n\t\t\t\ttoss(\"Unhandled DataView getter for signature:\", s);\n\t\t\t};\n\t\t\tconst sigDVSetter = function(s) {\n\t\t\t\tswitch (sigLetter(s)) {\n\t\t\t\t\tcase \"p\":\n\t\t\t\t\tcase \"P\":\n\t\t\t\t\tcase \"s\":\n\t\t\t\t\t\tswitch (ptrSize) {\n\t\t\t\t\t\t\tcase 4: return \"setInt32\";\n\t\t\t\t\t\t\tcase 8: return affirmBigIntArray() && \"setBigInt64\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"i\": return \"setInt32\";\n\t\t\t\t\tcase \"c\": return \"setInt8\";\n\t\t\t\t\tcase \"C\": return \"setUint8\";\n\t\t\t\t\tcase \"j\": return affirmBigIntArray() && \"setBigInt64\";\n\t\t\t\t\tcase \"f\": return \"setFloat32\";\n\t\t\t\t\tcase \"d\": return \"setFloat64\";\n\t\t\t\t}\n\t\t\t\ttoss(\"Unhandled DataView setter for signature:\", s);\n\t\t\t};\n\t\t\tconst sigDVSetWrapper = function(s) {\n\t\t\t\tswitch (sigLetter(s)) {\n\t\t\t\t\tcase \"i\":\n\t\t\t\t\tcase \"f\":\n\t\t\t\t\tcase \"c\":\n\t\t\t\t\tcase \"C\":\n\t\t\t\t\tcase \"d\": return Number;\n\t\t\t\t\tcase \"j\": return __BigInt;\n\t\t\t\t\tcase \"p\":\n\t\t\t\t\tcase \"P\":\n\t\t\t\t\tcase \"s\":\n\t\t\t\t\t\tswitch (ptrSize) {\n\t\t\t\t\t\t\tcase 4: return Number;\n\t\t\t\t\t\t\tcase 8: return __BigInt;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttoss(\"Unhandled DataView set wrapper for signature:\", s);\n\t\t\t};\n\t\t\tconst sPropName = (s, k) => s + \"::\" + k;\n\t\t\tconst __propThrowOnSet = function(structName, propName) {\n\t\t\t\treturn () => toss(sPropName(structName, propName), \"is read-only.\");\n\t\t\t};\n\t\t\tconst getInstanceHandle = function f(obj, create = true) {\n\t\t\t\tlet ii = f.map.get(obj);\n\t\t\t\tif (!ii && create) f.map.set(obj, ii = f.create(obj));\n\t\t\t\treturn ii;\n\t\t\t};\n\t\t\tgetInstanceHandle.map = /* @__PURE__ */ new WeakMap();\n\t\t\tgetInstanceHandle.create = (forObj) => {\n\t\t\t\treturn Object.assign(Object.create(null), {\n\t\t\t\t\to: forObj,\n\t\t\t\t\tp: void 0,\n\t\t\t\t\townsPointer: false,\n\t\t\t\t\tzod: false,\n\t\t\t\t\txb: 0\n\t\t\t\t});\n\t\t\t};\n\t\t\tconst rmInstanceHandle = (obj) => getInstanceHandle.map.delete(obj);\n\t\t\tconst __isPtr32 = (ptr) => \"number\" === typeof ptr && ptr === (ptr | 0) && ptr >= 0;\n\t\t\tconst __isPtr64 = (ptr) => \"bigint\" === typeof ptr && ptr >= 0 || __isPtr32(ptr);\n\t\t\tconst __isPtr = 4 === ptrSize ? __isPtr32 : __isPtr64;\n\t\t\tconst __isNonNullPtr = (v) => __isPtr(v) && v > 0;\n\t\t\tconst __freeStruct = function(ctor, obj, m) {\n\t\t\t\tconst ii = getInstanceHandle(obj, false);\n\t\t\t\tif (!ii) return;\n\t\t\t\trmInstanceHandle(obj);\n\t\t\t\tif (!m && !(m = ii.p)) {\n\t\t\t\t\tconsole.warn(\"Cannot(?) happen: __freeStruct() found no instanceInfo\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(obj.ondispose)) {\n\t\t\t\t\tlet x;\n\t\t\t\t\twhile (x = obj.ondispose.pop()) try {\n\t\t\t\t\t\tif (x instanceof Function) x.call(obj);\n\t\t\t\t\t\telse if (x instanceof StructType) x.dispose();\n\t\t\t\t\t\telse if (__isPtr(x)) dealloc(x);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.warn(\"ondispose() for\", ctor.structName, \"@\", m, \"threw. NOT propagating it.\", e);\n\t\t\t\t\t}\n\t\t\t\t} else if (obj.ondispose instanceof Function) try {\n\t\t\t\t\tobj.ondispose();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn(\"ondispose() for\", ctor.structName, \"@\", m, \"threw. NOT propagating it.\", e);\n\t\t\t\t}\n\t\t\t\tdelete obj.ondispose;\n\t\t\t\tif (ctor.debugFlags.__flags.dealloc) log(\"debug.dealloc:\", ii.ownsPointer ? \"\" : \"EXTERNAL\", ctor.structName, \"instance:\", ctor.structInfo.sizeof, \"bytes @\" + m);\n\t\t\t\tif (ii.ownsPointer) {\n\t\t\t\t\tif (ii.zod || ctor.structInfo.zeroOnDispose) heap().fill(0, Number(m), Number(m) + ctor.structInfo.sizeof + ii.xb);\n\t\t\t\t\tdealloc(m);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst rop0 = () => {\n\t\t\t\treturn {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\twritable: false,\n\t\t\t\t\titerable: false\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst rop = (v) => {\n\t\t\t\treturn {\n\t\t\t\t\t...rop0(),\n\t\t\t\t\tvalue: v\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst __allocStruct = function f(ctor, obj, xm) {\n\t\t\t\tlet opt;\n\t\t\t\tconst checkPtr = (ptr) => {\n\t\t\t\t\t__isNonNullPtr(ptr) || toss(\"Invalid pointer value\", arguments[0], \"for\", ctor.structName, \"constructor.\");\n\t\t\t\t};\n\t\t\t\tif (arguments.length >= 3) if (xm && \"object\" === typeof xm) {\n\t\t\t\t\topt = xm;\n\t\t\t\t\txm = opt?.wrap;\n\t\t\t\t} else {\n\t\t\t\t\tcheckPtr(xm);\n\t\t\t\t\topt = { wrap: xm };\n\t\t\t\t}\n\t\t\t\telse opt = {};\n\t\t\t\tconst fill = !xm;\n\t\t\t\tlet nAlloc = 0;\n\t\t\t\tlet ownsPointer = false;\n\t\t\t\tif (xm) {\n\t\t\t\t\tcheckPtr(xm);\n\t\t\t\t\townsPointer = !!opt?.takeOwnership;\n\t\t\t\t} else {\n\t\t\t\t\tconst nX = opt?.extraBytes ?? 0;\n\t\t\t\t\tif (nX < 0 || nX !== (nX | 0)) toss(\"Invalid extraBytes value:\", opt?.extraBytes);\n\t\t\t\t\tnAlloc = ctor.structInfo.sizeof + nX;\n\t\t\t\t\txm = alloc(nAlloc) || toss(\"Allocation of\", ctor.structName, \"structure failed.\");\n\t\t\t\t\townsPointer = true;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (opt?.debugFlags) obj.debugFlags(opt.debugFlags);\n\t\t\t\t\tif (ctor.debugFlags.__flags.alloc) log(\"debug.alloc:\", fill ? \"\" : \"EXTERNAL\", ctor.structName, \"instance:\", ctor.structInfo.sizeof, \"bytes @\" + xm);\n\t\t\t\t\tif (fill) heap().fill(0, Number(xm), Number(xm) + nAlloc);\n\t\t\t\t\tconst ii = getInstanceHandle(obj);\n\t\t\t\t\tii.p = xm;\n\t\t\t\t\tii.ownsPointer = ownsPointer;\n\t\t\t\t\tii.xb = nAlloc ? nAlloc - ctor.structInfo.sizeof : 0;\n\t\t\t\t\tii.zod = !!opt?.zeroOnDispose;\n\t\t\t\t\tif (opt?.ondispose && opt.ondispose !== xm) obj.addOnDispose(opt.ondispose);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t__freeStruct(ctor, obj, xm);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst looksLikeASig = function f(sig) {\n\t\t\t\tf.rxSig1 ??= /^[ipPsjfdcC]$/;\n\t\t\t\tf.rxSig2 ??= /^[vipPsjfdcC]\\([ipPsjfdcC]*\\)$/;\n\t\t\t\treturn f.rxSig1.test(sig) || f.rxSig2.test(sig);\n\t\t\t};\n\t\t\tconst __adaptorsFor = function(who) {\n\t\t\t\tlet x = this.get(who);\n\t\t\t\tif (!x) {\n\t\t\t\t\tx = [\n\t\t\t\t\t\tObject.create(null),\n\t\t\t\t\t\tObject.create(null),\n\t\t\t\t\t\tObject.create(null)\n\t\t\t\t\t];\n\t\t\t\t\tthis.set(who, x);\n\t\t\t\t}\n\t\t\t\treturn x;\n\t\t\t}.bind(/* @__PURE__ */ new WeakMap());\n\t\t\tconst __adaptor = function(who, which, key, proxy) {\n\t\t\t\tconst a = __adaptorsFor(who)[which];\n\t\t\t\tif (3 === arguments.length) return a[key];\n\t\t\t\tif (proxy) return a[key] = proxy;\n\t\t\t\treturn delete a[key];\n\t\t\t};\n\t\t\tconst __adaptGet = function(key, ...args) {\n\t\t\t\treturn __adaptor(this, 0, key, ...args);\n\t\t\t};\n\t\t\tconst __affirmNotASig = function(ctx, key) {\n\t\t\t\tlooksLikeASig(key) && toss(ctx, \"(\", key, \") collides with a data type signature.\");\n\t\t\t};\n\t\t\tconst __adaptSet = function(key, ...args) {\n\t\t\t\t__affirmNotASig(\"Setter adaptor\", key);\n\t\t\t\treturn __adaptor(this, 1, key, ...args);\n\t\t\t};\n\t\t\tconst __adaptStruct = function(key, ...args) {\n\t\t\t\t__affirmNotASig(\"Struct adaptor\", key);\n\t\t\t\treturn __adaptor(this, 2, key, ...args);\n\t\t\t};\n\t\t\tconst __adaptStruct2 = function(who, key) {\n\t\t\t\tconst si = \"string\" === typeof key ? __adaptor(who, 2, key) : key;\n\t\t\t\tif (\"object\" !== typeof si) toss(\"Invalid struct mapping object. Arg =\", key, JSON.stringify(si));\n\t\t\t\treturn si;\n\t\t\t};\n\t\t\tconst __memberKey = (k) => memberPrefix + k + memberSuffix;\n\t\t\tconst __memberKeyProp = rop(__memberKey);\n\t\t\tconst __lookupMember = function(structInfo, memberName, tossIfNotFound = true) {\n\t\t\t\tlet m = structInfo.members[memberName];\n\t\t\t\tif (!m && (memberPrefix || memberSuffix)) {\n\t\t\t\t\tfor (const v of Object.values(structInfo.members)) if (v.key === memberName) {\n\t\t\t\t\t\tm = v;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (!m && tossIfNotFound) toss(sPropName(structInfo.name || structInfo.structName, memberName), \"is not a mapped struct member.\");\n\t\t\t\t}\n\t\t\t\treturn m;\n\t\t\t};\n\t\t\tconst __memberSignature = function f(obj, memberName, emscriptenFormat = false) {\n\t\t\t\tif (!f._) f._ = (x) => x.replace(/[^vipPsjrdcC]/g, \"\").replace(/[pPscC]/g, \"i\");\n\t\t\t\tconst m = __lookupMember(obj.structInfo, memberName, true);\n\t\t\t\treturn emscriptenFormat ? f._(m.signature) : m.signature;\n\t\t\t};\n\t\t\tconst __structMemberKeys = rop(function() {\n\t\t\t\tconst a = [];\n\t\t\t\tfor (const k of Object.keys(this.structInfo.members)) a.push(this.memberKey(k));\n\t\t\t\treturn a;\n\t\t\t});\n\t\t\tconst __utf8Decoder = new TextDecoder(\"utf-8\");\n\t\t\tconst __utf8Encoder = new TextEncoder();\n\t\t\tconst __SAB = \"undefined\" === typeof SharedArrayBuffer ? function() {} : SharedArrayBuffer;\n\t\t\tconst __utf8Decode = function(arrayBuffer, begin, end) {\n\t\t\t\tif (8 === ptrSize) {\n\t\t\t\t\tbegin = Number(begin);\n\t\t\t\t\tend = Number(end);\n\t\t\t\t}\n\t\t\t\treturn __utf8Decoder.decode(arrayBuffer.buffer instanceof __SAB ? arrayBuffer.slice(begin, end) : arrayBuffer.subarray(begin, end));\n\t\t\t};\n\t\t\tconst __memberIsString = function(obj, memberName, tossIfNotFound = false) {\n\t\t\t\tconst m = __lookupMember(obj.structInfo, memberName, tossIfNotFound);\n\t\t\t\treturn m && 1 === m.signature.length && \"s\" === m.signature[0] ? m : false;\n\t\t\t};\n\t\t\tconst __affirmCStringSignature = function(member) {\n\t\t\t\tif (\"s\" === member.signature) return;\n\t\t\t\ttoss(\"Invalid member type signature for C-string value:\", JSON.stringify(member));\n\t\t\t};\n\t\t\tconst __memberToJsString = function f(obj, memberName) {\n\t\t\t\tconst m = __lookupMember(obj.structInfo, memberName, true);\n\t\t\t\t__affirmCStringSignature(m);\n\t\t\t\tconst addr = obj[m.key];\n\t\t\t\tif (!addr) return null;\n\t\t\t\tlet pos = addr;\n\t\t\t\tconst mem = heap();\n\t\t\t\tfor (; mem[pos] !== 0; ++pos);\n\t\t\t\treturn addr === pos ? \"\" : __utf8Decode(mem, addr, pos);\n\t\t\t};\n\t\t\tconst __addOnDispose = function(obj, ...v) {\n\t\t\t\tif (obj.ondispose) {\n\t\t\t\t\tif (!Array.isArray(obj.ondispose)) obj.ondispose = [obj.ondispose];\n\t\t\t\t} else obj.ondispose = [];\n\t\t\t\tobj.ondispose.push(...v);\n\t\t\t};\n\t\t\tconst __allocCString = function(str) {\n\t\t\t\tconst u = __utf8Encoder.encode(str);\n\t\t\t\tconst mem = alloc(u.length + 1);\n\t\t\t\tif (!mem) toss(\"Allocation error while duplicating string:\", str);\n\t\t\t\tconst h = heap();\n\t\t\t\th.set(u, Number(mem));\n\t\t\t\th[__ptrAdd(mem, u.length)] = 0;\n\t\t\t\treturn mem;\n\t\t\t};\n\t\t\tconst __setMemberCString = function(obj, memberName, str) {\n\t\t\t\tconst m = __lookupMember(obj.structInfo, memberName, true);\n\t\t\t\t__affirmCStringSignature(m);\n\t\t\t\tconst mem = __allocCString(str);\n\t\t\t\tobj[m.key] = mem;\n\t\t\t\t__addOnDispose(obj, mem);\n\t\t\t\treturn obj;\n\t\t\t};\n\t\t\tconst StructType = function StructType(structName, structInfo) {\n\t\t\t\tif (arguments[2] !== rop) toss(\"Do not call the StructType constructor\", \"from client-level code.\");\n\t\t\t\tObject.defineProperties(this, {\n\t\t\t\t\tstructName: rop(structName),\n\t\t\t\t\tstructInfo: rop(structInfo)\n\t\t\t\t});\n\t\t\t};\n\t\t\tStructType.prototype = Object.create(null, {\n\t\t\t\tdispose: rop(function() {\n\t\t\t\t\t__freeStruct(this.constructor, this);\n\t\t\t\t}),\n\t\t\t\tlookupMember: rop(function(memberName, tossIfNotFound = true) {\n\t\t\t\t\treturn __lookupMember(this.structInfo, memberName, tossIfNotFound);\n\t\t\t\t}),\n\t\t\t\tmemberToJsString: rop(function(memberName) {\n\t\t\t\t\treturn __memberToJsString(this, memberName);\n\t\t\t\t}),\n\t\t\t\tmemberIsString: rop(function(memberName, tossIfNotFound = true) {\n\t\t\t\t\treturn __memberIsString(this, memberName, tossIfNotFound);\n\t\t\t\t}),\n\t\t\t\tmemberKey: __memberKeyProp,\n\t\t\t\tmemberKeys: __structMemberKeys,\n\t\t\t\tmemberSignature: rop(function(memberName, emscriptenFormat = false) {\n\t\t\t\t\treturn __memberSignature(this, memberName, emscriptenFormat);\n\t\t\t\t}),\n\t\t\t\tmemoryDump: rop(function() {\n\t\t\t\t\tconst p = this.pointer;\n\t\t\t\t\treturn p ? new Uint8Array(heap().slice(Number(p), Number(p) + this.structInfo.sizeof)) : null;\n\t\t\t\t}),\n\t\t\t\textraBytes: {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn getInstanceHandle(this, false)?.xb ?? 0;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tzeroOnDispose: {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn getInstanceHandle(this, false)?.zod ?? !!this.structInfo.zeroOnDispose;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpointer: {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn getInstanceHandle(this, false)?.p;\n\t\t\t\t\t},\n\t\t\t\t\tset: () => toss(\"Cannot assign the 'pointer' property of a struct.\")\n\t\t\t\t},\n\t\t\t\tsetMemberCString: rop(function(memberName, str) {\n\t\t\t\t\treturn __setMemberCString(this, memberName, str);\n\t\t\t\t})\n\t\t\t});\n\t\t\tObject.assign(StructType.prototype, { addOnDispose: function(...v) {\n\t\t\t\t__addOnDispose(this, ...v);\n\t\t\t\treturn this;\n\t\t\t} });\n\t\t\tObject.defineProperties(StructType, {\n\t\t\t\tallocCString: rop(__allocCString),\n\t\t\t\tisA: rop((v) => v instanceof StructType),\n\t\t\t\thasExternalPointer: rop((v) => {\n\t\t\t\t\tconst ii = getInstanceHandle(v, false);\n\t\t\t\t\treturn !!(ii?.p && !ii?.ownsPointer);\n\t\t\t\t}),\n\t\t\t\tmemberKey: __memberKeyProp\n\t\t\t});\n\t\t\tconst memberGetterProxy = function(si) {\n\t\t\t\treturn si.get || (si.adaptGet ? StructBinder.adaptGet(si.adaptGet) : void 0);\n\t\t\t};\n\t\t\tconst memberSetterProxy = function(si) {\n\t\t\t\treturn si.set || (si.adaptSet ? StructBinder.adaptSet(si.adaptSet) : void 0);\n\t\t\t};\n\t\t\tconst makeMemberStructWrapper = function callee(ctor, name, si) {\n\t\t\t\tconst __innerStructs = callee.innerStructs ??= /* @__PURE__ */ new Map();\n\t\t\t\tconst key = ctor.memberKey(name);\n\t\t\t\tif (void 0 !== si.signature) toss(\"'signature' cannot be used on an embedded struct (\", ctor.structName, \".\", key, \").\");\n\t\t\t\tif (memberSetterProxy(si)) toss(\"'set' and 'adaptSet' are not permitted for nested struct members.\");\n\t\t\t\tsi.structName ??= ctor.structName + \"::\" + name;\n\t\t\t\tsi.key = key;\n\t\t\t\tsi.name = name;\n\t\t\t\tsi.constructor = this.call(this, si.structName, si);\n\t\t\t\tconst getterProxy = memberGetterProxy(si);\n\t\t\t\tconst prop = Object.assign(Object.create(null), {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tset: __propThrowOnSet(ctor.structName, key),\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\tconst dbg = this.debugFlags.__flags;\n\t\t\t\t\t\tconst p = this.pointer;\n\t\t\t\t\t\tconst k = p + \".\" + key;\n\t\t\t\t\t\tlet s = __innerStructs.get(k);\n\t\t\t\t\t\tif (dbg.getter) log(\"debug.getter: k =\", k);\n\t\t\t\t\t\tif (!s) {\n\t\t\t\t\t\t\ts = new si.constructor(__ptrAdd(p, si.offset));\n\t\t\t\t\t\t\t__innerStructs.set(k, s);\n\t\t\t\t\t\t\tthis.addOnDispose(() => s.dispose());\n\t\t\t\t\t\t\ts.addOnDispose(() => __innerStructs.delete(k));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (getterProxy) s = getterProxy.apply(this, [s, key]);\n\t\t\t\t\t\tif (dbg.getter) log(\"debug.getter: result =\", s);\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tObject.defineProperty(ctor.prototype, key, prop);\n\t\t\t};\n\t\t\tconst makeMemberWrapper = function f(ctor, name, si) {\n\t\t\t\tsi = __adaptStruct2(this, si);\n\t\t\t\tif (si.members) return makeMemberStructWrapper.call(this, ctor, name, si);\n\t\t\t\tif (!f.cache) {\n\t\t\t\t\tf.cache = {\n\t\t\t\t\t\tgetters: {},\n\t\t\t\t\t\tsetters: {},\n\t\t\t\t\t\tsw: {}\n\t\t\t\t\t};\n\t\t\t\t\tconst a = [\n\t\t\t\t\t\t\"i\",\n\t\t\t\t\t\t\"c\",\n\t\t\t\t\t\t\"C\",\n\t\t\t\t\t\t\"p\",\n\t\t\t\t\t\t\"P\",\n\t\t\t\t\t\t\"s\",\n\t\t\t\t\t\t\"f\",\n\t\t\t\t\t\t\"d\",\n\t\t\t\t\t\t\"v()\"\n\t\t\t\t\t];\n\t\t\t\t\tif (bigIntEnabled) a.push(\"j\");\n\t\t\t\t\ta.forEach(function(v) {\n\t\t\t\t\t\tf.cache.getters[v] = sigDVGetter(v);\n\t\t\t\t\t\tf.cache.setters[v] = sigDVSetter(v);\n\t\t\t\t\t\tf.cache.sw[v] = sigDVSetWrapper(v);\n\t\t\t\t\t});\n\t\t\t\t\tf.sigCheck = function(obj, name, key, sig) {\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(obj, key)) toss(obj.structName, \"already has a property named\", key + \".\");\n\t\t\t\t\t\tlooksLikeASig(sig) || toss(\"Malformed signature for\", sPropName(obj.structName, name) + \":\", sig);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst key = ctor.memberKey(name);\n\t\t\t\tf.sigCheck(ctor.prototype, name, key, si.signature);\n\t\t\t\tsi.key = key;\n\t\t\t\tsi.name = name;\n\t\t\t\tconst sigGlyph = sigLetter(si.signature);\n\t\t\t\tconst xPropName = sPropName(ctor.structName, key);\n\t\t\t\tconst dbg = ctor.debugFlags.__flags;\n\t\t\t\tconst getterProxy = memberGetterProxy(si);\n\t\t\t\tconst prop = Object.create(null);\n\t\t\t\tprop.configurable = false;\n\t\t\t\tprop.enumerable = false;\n\t\t\t\tprop.get = function() {\n\t\t\t\t\tif (dbg.getter) log(\"debug.getter:\", f.cache.getters[sigGlyph], \"for\", sigIR(sigGlyph), xPropName, \"@\", this.pointer, \"+\", si.offset, \"sz\", si.sizeof);\n\t\t\t\t\tlet rc = new DataView(heap().buffer, Number(this.pointer) + si.offset, si.sizeof)[f.cache.getters[sigGlyph]](0, isLittleEndian);\n\t\t\t\t\tif (getterProxy) rc = getterProxy.apply(this, [key, rc]);\n\t\t\t\t\tif (dbg.getter) log(\"debug.getter:\", xPropName, \"result =\", rc);\n\t\t\t\t\treturn rc;\n\t\t\t\t};\n\t\t\t\tif (si.readOnly) prop.set = __propThrowOnSet(ctor.prototype.structName, key);\n\t\t\t\telse {\n\t\t\t\t\tconst setterProxy = memberSetterProxy(si);\n\t\t\t\t\tprop.set = function(v) {\n\t\t\t\t\t\tif (dbg.setter) log(\"debug.setter:\", f.cache.setters[sigGlyph], \"for\", sigIR(sigGlyph), xPropName, \"@\", this.pointer, \"+\", si.offset, \"sz\", si.sizeof, v);\n\t\t\t\t\t\tif (!this.pointer) toss(\"Cannot set native property on a disposed\", this.structName, \"instance.\");\n\t\t\t\t\t\tif (setterProxy) v = setterProxy.apply(this, [key, v]);\n\t\t\t\t\t\tif (null === v || void 0 === v) v = __NullPtr;\n\t\t\t\t\t\telse if (isPtrSig(si.signature) && !__isPtr(v)) if (isAutoPtrSig(si.signature) && v instanceof StructType) {\n\t\t\t\t\t\t\tv = v.pointer || __NullPtr;\n\t\t\t\t\t\t\tif (dbg.setter) log(\"debug.setter:\", xPropName, \"resolved to\", v);\n\t\t\t\t\t\t} else toss(\"Invalid value for pointer-type\", xPropName + \".\");\n\t\t\t\t\t\tnew DataView(heap().buffer, Number(this.pointer) + si.offset, si.sizeof)[f.cache.setters[sigGlyph]](0, f.cache.sw[sigGlyph](v), isLittleEndian);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tObject.defineProperty(ctor.prototype, key, prop);\n\t\t\t};\n\t\t\tconst StructBinderImpl = function StructBinderImpl(structName, si, opt = Object.create(null)) {\n\t\t\t\tconst StructCtor = function StructCtor(arg) {\n\t\t\t\t\tif (!(this instanceof StructCtor)) toss(\"The\", structName, \"constructor may only be called via 'new'.\");\n\t\t\t\t\t__allocStruct(StructCtor, this, ...arguments);\n\t\t\t\t};\n\t\t\t\tconst self = this;\n\t\t\t\tconst ads = (x) => {\n\t\t\t\t\treturn \"string\" === typeof x && looksLikeASig(x) ? { signature: x } : __adaptStruct2(self, x);\n\t\t\t\t};\n\t\t\t\tif (1 === arguments.length) {\n\t\t\t\t\tsi = ads(structName);\n\t\t\t\t\tstructName = si.structName || si.name;\n\t\t\t\t} else if (2 === arguments.length) {\n\t\t\t\t\tsi = ads(si);\n\t\t\t\t\tsi.name ??= structName;\n\t\t\t\t} else si = ads(si);\n\t\t\t\tstructName ??= si.structName;\n\t\t\t\tstructName ??= opt.structName;\n\t\t\t\tif (!structName) toss(\"One of 'name' or 'structName' are required.\");\n\t\t\t\tif (si.adapt) {\n\t\t\t\t\tObject.keys(si.adapt.struct || {}).forEach((k) => {\n\t\t\t\t\t\t__adaptStruct.call(StructBinderImpl, k, si.adapt.struct[k]);\n\t\t\t\t\t});\n\t\t\t\t\tObject.keys(si.adapt.set || {}).forEach((k) => {\n\t\t\t\t\t\t__adaptSet.call(StructBinderImpl, k, si.adapt.set[k]);\n\t\t\t\t\t});\n\t\t\t\t\tObject.keys(si.adapt.get || {}).forEach((k) => {\n\t\t\t\t\t\t__adaptGet.call(StructBinderImpl, k, si.adapt.get[k]);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!si.members && !si.sizeof) si.sizeof = sigSize(si.signature);\n\t\t\t\tconst debugFlags = rop(SBF.__makeDebugFlags(StructBinder.debugFlags));\n\t\t\t\tObject.defineProperties(StructCtor, {\n\t\t\t\t\tdebugFlags,\n\t\t\t\t\tisA: rop((v) => v instanceof StructCtor),\n\t\t\t\t\tmemberKey: __memberKeyProp,\n\t\t\t\t\tmemberKeys: __structMemberKeys,\n\t\t\t\t\tstructInfo: rop(si),\n\t\t\t\t\tstructName: rop(structName),\n\t\t\t\t\tptrAdd: rop(__ptrAdd)\n\t\t\t\t});\n\t\t\t\tStructCtor.prototype = new StructType(structName, si, rop);\n\t\t\t\tObject.defineProperties(StructCtor.prototype, {\n\t\t\t\t\tdebugFlags,\n\t\t\t\t\tconstructor: rop(StructCtor),\n\t\t\t\t\tptrAdd: rop(__ptrAddSelf)\n\t\t\t\t});\n\t\t\t\tlet lastMember = false;\n\t\t\t\tlet offset = 0;\n\t\t\t\tconst autoCalc = !!si.autoCalcSizeOffset;\n\t\t\t\tif (!autoCalc) {\n\t\t\t\t\tif (!si.sizeof) toss(structName, \"description is missing its sizeof property.\");\n\t\t\t\t\tsi.offset ??= 0;\n\t\t\t\t} else si.offset ??= 0;\n\t\t\t\tObject.keys(si.members || {}).forEach((k) => {\n\t\t\t\t\tlet m = ads(si.members[k]);\n\t\t\t\t\tif (!m.members && !m.sizeof) {\n\t\t\t\t\t\tm.sizeof = sigSize(m.signature);\n\t\t\t\t\t\tif (!m.sizeof) toss(sPropName(structName, k), \"is missing a sizeof property.\", m);\n\t\t\t\t\t}\n\t\t\t\t\tif (void 0 === m.offset) if (autoCalc) m.offset = offset;\n\t\t\t\t\telse toss(sPropName(structName, k), \"is missing its offset.\", JSON.stringify(m));\n\t\t\t\t\tsi.members[k] = m;\n\t\t\t\t\tif (!lastMember || lastMember.offset < m.offset) lastMember = m;\n\t\t\t\t\tconst oldAutoCalc = !!m.autoCalc;\n\t\t\t\t\tif (autoCalc) m.autoCalcSizeOffset = true;\n\t\t\t\t\tmakeMemberWrapper.call(self, StructCtor, k, m);\n\t\t\t\t\tif (oldAutoCalc) m.autoCalcSizeOffset = true;\n\t\t\t\t\telse delete m.autoCalcSizeOffset;\n\t\t\t\t\toffset += m.sizeof;\n\t\t\t\t});\n\t\t\t\tif (!lastMember) toss(\"No member property descriptions found.\");\n\t\t\t\tif (!si.sizeof) si.sizeof = offset;\n\t\t\t\tif (si.sizeof === 1) si.signature === \"c\" || si.signature === \"C\" || toss(\"Unexpected sizeof==1 member\", sPropName(structName, k), \"with signature\", si.signature);\n\t\t\t\telse {\n\t\t\t\t\tif (0 !== si.sizeof % 4) {\n\t\t\t\t\t\tconsole.warn(\"Invalid struct member description\", si);\n\t\t\t\t\t\ttoss(structName, \"sizeof is not aligned. sizeof=\" + si.sizeof);\n\t\t\t\t\t}\n\t\t\t\t\tif (0 !== si.offset % 4) {\n\t\t\t\t\t\tconsole.warn(\"Invalid struct member description\", si);\n\t\t\t\t\t\ttoss(structName, \"offset is not aligned. offset=\" + si.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (si.sizeof < offset) {\n\t\t\t\t\tconsole.warn(\"Suspect struct description:\", si, \"offset =\", offset);\n\t\t\t\t\ttoss(\"Mismatch in the calculated vs. the provided sizeof/offset info.\", \"Expected sizeof\", offset, \"but got\", si.sizeof, \"for\", si);\n\t\t\t\t}\n\t\t\t\tdelete si.autoCalcSizeOffset;\n\t\t\t\treturn StructCtor;\n\t\t\t};\n\t\t\tconst StructBinder = function StructBinder(structName, structInfo) {\n\t\t\t\treturn 1 == arguments.length ? StructBinderImpl.call(StructBinder, structName) : StructBinderImpl.call(StructBinder, structName, structInfo);\n\t\t\t};\n\t\t\tStructBinder.StructType = StructType;\n\t\t\tStructBinder.config = config;\n\t\t\tStructBinder.allocCString = __allocCString;\n\t\t\tStructBinder.adaptGet = __adaptGet;\n\t\t\tStructBinder.adaptSet = __adaptSet;\n\t\t\tStructBinder.adaptStruct = __adaptStruct;\n\t\t\tStructBinder.ptrAdd = __ptrAdd;\n\t\t\tif (!StructBinder.debugFlags) StructBinder.debugFlags = SBF.__makeDebugFlags(SBF.debugFlags);\n\t\t\treturn StructBinder;\n\t\t};\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\t\"use strict\";\n\t\t\tconst toss = (...args) => {\n\t\t\t\tthrow new Error(args.join(\" \"));\n\t\t\t};\n\t\t\tconst capi = sqlite3.capi, wasm = sqlite3.wasm, util = sqlite3.util;\n\t\t\tglobalThis.WhWasmUtilInstaller(wasm);\n\t\t\tdelete globalThis.WhWasmUtilInstaller;\n\t\t\tconst bindingSignatures = {\n\t\t\t\tcore: [\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_aggregate_context\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_double\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"f64\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_int\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_null\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_parameter_count\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_parameter_index\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_parameter_name\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_pointer\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"string:static\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_busy_handler\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\t\tsignature: \"i(pi)\",\n\t\t\t\t\t\t\t\tcontextKey: (argv, argIndex) => argv[0]\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_busy_timeout\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changes\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_clear_bindings\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_collation_needed\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_blob\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_bytes\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_count\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_decltype\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_double\",\n\t\t\t\t\t\t\"f64\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_int\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_name\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_type\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_value\",\n\t\t\t\t\t\t\"sqlite3_value*\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_commit_hook\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\t\tname: \"sqlite3_commit_hook\",\n\t\t\t\t\t\t\t\tsignature: \"i(p)\",\n\t\t\t\t\t\t\t\tcontextKey: (argv) => argv[0]\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_compileoption_get\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_compileoption_used\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_complete\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string:flexible\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_context_db_handle\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"sqlite3_context*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_data_count\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_db_filename\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_db_handle\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_db_name\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_db_readonly\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_db_status\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_errcode\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_errmsg\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_error_offset\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_errstr\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_exec\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\t\"string:flexible\",\n\t\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\t\tsignature: \"i(pipp)\",\n\t\t\t\t\t\t\t\tbindScope: \"transient\",\n\t\t\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\t\t\tlet aNames;\n\t\t\t\t\t\t\t\t\treturn (pVoid, nCols, pColVals, pColNames) => {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tconst aVals = wasm.cArgvToJs(nCols, pColVals);\n\t\t\t\t\t\t\t\t\t\t\tif (!aNames) aNames = wasm.cArgvToJs(nCols, pColNames);\n\t\t\t\t\t\t\t\t\t\t\treturn callback(aVals, aNames) | 0;\n\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\treturn e.resultCode || capi.SQLITE_ERROR;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\t\"**\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_expanded_sql\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_extended_errcode\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_extended_result_codes\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_file_control\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_finalize\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_free\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_get_autocommit\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_get_auxdata\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\"sqlite3_initialize\", void 0],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_interrupt\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_is_interrupted\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\"sqlite3_keyword_count\", \"int\"],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_keyword_name\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_keyword_check\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\"string\", \"int\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\"sqlite3_libversion\", \"string\"],\n\t\t\t\t\t[\"sqlite3_libversion_number\", \"int\"],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_limit\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"int\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_malloc\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_next_stmt\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t[\"sqlite3*\", \"sqlite3_stmt*\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_open\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_open_v2\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_realloc\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_reset\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_blob\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_double\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"f64\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_error\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_error_code\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_error_nomem\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_error_toobig\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_int\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_null\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_pointer\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"string:static\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_subtype\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_value*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_text\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_zeroblob\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_rollback_hook\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\t\tname: \"sqlite3_rollback_hook\",\n\t\t\t\t\t\t\t\tsignature: \"v(p)\",\n\t\t\t\t\t\t\t\tcontextKey: (argv) => argv[0]\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_set_auxdata\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3_context*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_set_errmsg\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\"sqlite3_shutdown\", void 0],\n\t\t\t\t\t[\"sqlite3_sourceid\", \"string\"],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_sql\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_status\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_step\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_stmt_busy\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_stmt_readonly\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_stmt_status\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_strglob\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_stricmp\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_strlike\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_strnicmp\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_table_column_metadata\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_total_changes\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_trace_v2\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\t\tname: \"sqlite3_trace_v2::callback\",\n\t\t\t\t\t\t\t\tsignature: \"i(ippp)\",\n\t\t\t\t\t\t\t\tcontextKey: (argv, argIndex) => argv[0]\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_txn_state\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\"sqlite3*\", \"string\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_uri_boolean\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_filename\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_uri_key\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3_filename\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_uri_parameter\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"sqlite3_filename\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_user_data\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"sqlite3_context*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_blob\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_bytes\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_double\",\n\t\t\t\t\t\t\"f64\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_dup\",\n\t\t\t\t\t\t\"sqlite3_value*\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_free\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_frombind\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_int\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_nochange\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_numeric_type\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_pointer\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"sqlite3_value*\",\n\t\t\t\t\t\t\"string:static\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_subtype\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_type\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_vfs_find\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_vfs_register\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_vfs*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_vfs_unregister\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_vfs*\"\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\tint64: [\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_bind_int64\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\t\"i64\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changes64\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t[\"sqlite3*\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_column_int64\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t[\"sqlite3_stmt*\", \"int\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_deserialize\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_last_insert_rowid\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t[\"sqlite3*\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_malloc64\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"i64\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_msize\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_overload_function\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\"int\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_realloc64\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"i64\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_int64\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"i64\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_result_zeroblob64\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"i64\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_serialize\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_set_last_insert_rowid\",\n\t\t\t\t\t\tvoid 0,\n\t\t\t\t\t\t[\"sqlite3*\", \"i64\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_status64\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_db_status64\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_total_changes64\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t[\"sqlite3*\"]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_update_hook\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\t\tname: \"sqlite3_update_hook::callback\",\n\t\t\t\t\t\t\t\tsignature: \"v(pippj)\",\n\t\t\t\t\t\t\t\tcontextKey: (argv) => argv[0],\n\t\t\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\t\t\treturn (p, op, z0, z1, rowid) => {\n\t\t\t\t\t\t\t\t\t\tcallback(p, op, wasm.cstrToJs(z0), wasm.cstrToJs(z1), rowid);\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\"*\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_uri_int64\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"sqlite3_filename\",\n\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\"i64\"\n\t\t\t\t\t\t]\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_value_int64\",\n\t\t\t\t\t\t\"i64\",\n\t\t\t\t\t\t\"sqlite3_value*\"\n\t\t\t\t\t]\n\t\t\t\t],\n\t\t\t\twasmInternal: [\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3__wasm_db_reset\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3*\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3__wasm_db_vfs\",\n\t\t\t\t\t\t\"sqlite3_vfs*\",\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3__wasm_vfs_create_file\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_vfs*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3__wasm_posix_create_file\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3__wasm_vfs_unlink\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"sqlite3_vfs*\",\n\t\t\t\t\t\t\"string\"\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3__wasm_qfmt_token\",\n\t\t\t\t\t\t\"string:dealloc\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t};\n\t\t\tif (!!wasm.exports.sqlite3_progress_handler) bindingSignatures.core.push([\n\t\t\t\t\"sqlite3_progress_handler\",\n\t\t\t\tvoid 0,\n\t\t\t\t[\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xProgressHandler\",\n\t\t\t\t\t\tsignature: \"i(p)\",\n\t\t\t\t\t\tbindScope: \"context\",\n\t\t\t\t\t\tcontextKey: (argv, argIndex) => argv[0]\n\t\t\t\t\t}),\n\t\t\t\t\t\"*\"\n\t\t\t\t]\n\t\t\t]);\n\t\t\tif (!!wasm.exports.sqlite3_stmt_explain) bindingSignatures.core.push([\n\t\t\t\t\"sqlite3_stmt_explain\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\"int\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_stmt_isexplain\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_stmt*\"\n\t\t\t]);\n\t\t\tif (!!wasm.exports.sqlite3_set_authorizer) bindingSignatures.core.push([\n\t\t\t\t\"sqlite3_set_authorizer\",\n\t\t\t\t\"int\",\n\t\t\t\t[\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"sqlite3_set_authorizer::xAuth\",\n\t\t\t\t\t\tsignature: \"i(pissss)\",\n\t\t\t\t\t\tcontextKey: (argv, argIndex) => argv[0],\n\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\treturn (pV, iCode, s0, s1, s2, s3) => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\ts0 = s0 && wasm.cstrToJs(s0);\n\t\t\t\t\t\t\t\t\ts1 = s1 && wasm.cstrToJs(s1);\n\t\t\t\t\t\t\t\t\ts2 = s2 && wasm.cstrToJs(s2);\n\t\t\t\t\t\t\t\t\ts3 = s3 && wasm.cstrToJs(s3);\n\t\t\t\t\t\t\t\t\treturn callback(pV, iCode, s0, s1, s2, s3) | 0;\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\treturn e.resultCode || capi.SQLITE_ERROR;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\t\"*\"\n\t\t\t\t]\n\t\t\t]);\n\t\t\tif (!!wasm.exports.sqlite3_column_origin_name) bindingSignatures.core.push([\n\t\t\t\t\"sqlite3_column_database_name\",\n\t\t\t\t\"string\",\n\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\"int\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_column_origin_name\",\n\t\t\t\t\"string\",\n\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\"int\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_column_table_name\",\n\t\t\t\t\"string\",\n\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\"int\"\n\t\t\t]);\n\t\t\tif (wasm.bigIntEnabled && !!wasm.exports.sqlite3_declare_vtab) bindingSignatures.int64.push([\n\t\t\t\t\"sqlite3_create_module\",\n\t\t\t\t\"int\",\n\t\t\t\t[\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"sqlite3_module*\",\n\t\t\t\t\t\"*\"\n\t\t\t\t]\n\t\t\t], [\n\t\t\t\t\"sqlite3_create_module_v2\",\n\t\t\t\t\"int\",\n\t\t\t\t[\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"sqlite3_module*\",\n\t\t\t\t\t\"*\",\n\t\t\t\t\t\"*\"\n\t\t\t\t]\n\t\t\t], [\n\t\t\t\t\"sqlite3_declare_vtab\",\n\t\t\t\t\"int\",\n\t\t\t\t[\"sqlite3*\", \"string:flexible\"]\n\t\t\t], [\n\t\t\t\t\"sqlite3_drop_modules\",\n\t\t\t\t\"int\",\n\t\t\t\t[\"sqlite3*\", \"**\"]\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_collation\",\n\t\t\t\t\"string\",\n\t\t\t\t\"sqlite3_index_info*\",\n\t\t\t\t\"int\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_distinct\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_index_info*\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_in\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_index_info*\",\n\t\t\t\t\"int\",\n\t\t\t\t\"int\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_in_first\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_value*\",\n\t\t\t\t\"**\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_in_next\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_value*\",\n\t\t\t\t\"**\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_nochange\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_context*\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_on_conflict\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3*\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_vtab_rhs_value\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3_index_info*\",\n\t\t\t\t\"int\",\n\t\t\t\t\"**\"\n\t\t\t]);\n\t\t\tif (wasm.bigIntEnabled && !!wasm.exports.sqlite3_preupdate_hook) bindingSignatures.int64.push([\n\t\t\t\t\"sqlite3_preupdate_blobwrite\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3*\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_preupdate_count\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3*\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_preupdate_depth\",\n\t\t\t\t\"int\",\n\t\t\t\t\"sqlite3*\"\n\t\t\t], [\n\t\t\t\t\"sqlite3_preupdate_hook\",\n\t\t\t\t\"*\",\n\t\t\t\t[\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"sqlite3_preupdate_hook\",\n\t\t\t\t\t\tsignature: \"v(ppippjj)\",\n\t\t\t\t\t\tcontextKey: (argv) => argv[0],\n\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\treturn (p, db, op, zDb, zTbl, iKey1, iKey2) => {\n\t\t\t\t\t\t\t\tcallback(p, db, op, wasm.cstrToJs(zDb), wasm.cstrToJs(zTbl), iKey1, iKey2);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\t\"*\"\n\t\t\t\t]\n\t\t\t], [\n\t\t\t\t\"sqlite3_preupdate_new\",\n\t\t\t\t\"int\",\n\t\t\t\t[\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"**\"\n\t\t\t\t]\n\t\t\t], [\n\t\t\t\t\"sqlite3_preupdate_old\",\n\t\t\t\t\"int\",\n\t\t\t\t[\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"**\"\n\t\t\t\t]\n\t\t\t]);\n\t\t\tif (wasm.bigIntEnabled && !!wasm.exports.sqlite3changegroup_add && !!wasm.exports.sqlite3session_create && !!wasm.exports.sqlite3_preupdate_hook) {\n\t\t\t\tconst __ipsProxy = {\n\t\t\t\t\tsignature: \"i(ps)\",\n\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\treturn (p, s) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn callback(p, wasm.cstrToJs(s)) | 0;\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn e.resultCode || capi.SQLITE_ERROR;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tbindingSignatures.int64.push([\n\t\t\t\t\t\"sqlite3changegroup_add\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changegroup*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changegroup_add_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changegroup*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changegroup_delete\",\n\t\t\t\t\tvoid 0,\n\t\t\t\t\t[\"sqlite3_changegroup*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changegroup_new\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"**\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changegroup_output\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changegroup*\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changegroup_output_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changegroup*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xOutput\",\n\t\t\t\t\t\t\tsignature: \"i(ppi)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_apply\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xFilter\",\n\t\t\t\t\t\t\tbindScope: \"transient\",\n\t\t\t\t\t\t\t...__ipsProxy\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xConflict\",\n\t\t\t\t\t\t\tsignature: \"i(pip)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_apply_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xFilter\",\n\t\t\t\t\t\t\tbindScope: \"transient\",\n\t\t\t\t\t\t\t...__ipsProxy\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xConflict\",\n\t\t\t\t\t\t\tsignature: \"i(pip)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_apply_v2\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xFilter\",\n\t\t\t\t\t\t\tbindScope: \"transient\",\n\t\t\t\t\t\t\t...__ipsProxy\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xConflict\",\n\t\t\t\t\t\t\tsignature: \"i(pip)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_apply_v2_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xFilter\",\n\t\t\t\t\t\t\tbindScope: \"transient\",\n\t\t\t\t\t\t\t...__ipsProxy\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xConflict\",\n\t\t\t\t\t\t\tsignature: \"i(pip)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_apply_v3\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xFilter\",\n\t\t\t\t\t\t\tsignature: \"i(pp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xConflict\",\n\t\t\t\t\t\t\tsignature: \"i(pip)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_apply_v3_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xFilter\",\n\t\t\t\t\t\t\tsignature: \"i(pp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xConflict\",\n\t\t\t\t\t\t\tsignature: \"i(pip)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_concat\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_concat_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInputA\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInputB\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xOutput\",\n\t\t\t\t\t\t\tsignature: \"i(ppi)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_conflict\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changeset_iter*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_finalize\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"sqlite3_changeset_iter*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_fk_conflicts\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"sqlite3_changeset_iter*\", \"int*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_invert\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_invert_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xOutput\",\n\t\t\t\t\t\t\tsignature: \"i(ppi)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_new\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changeset_iter*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_next\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"sqlite3_changeset_iter*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_old\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changeset_iter*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_op\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changeset_iter*\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"int*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_pk\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_changeset_iter*\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_start\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_start_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_start_v2\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3changeset_start_v2_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xInput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_attach\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"sqlite3_session*\", \"string\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_changeset\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_session*\",\n\t\t\t\t\t\t\"int*\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_changeset_size\",\n\t\t\t\t\t\"i64\",\n\t\t\t\t\t[\"sqlite3_session*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_changeset_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_session*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xOutput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_config\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"int\", \"void*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_create\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_diff\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_session*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_enable\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"sqlite3_session*\", \"int\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_indirect\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"sqlite3_session*\", \"int\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_isempty\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\"sqlite3_session*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_memory_used\",\n\t\t\t\t\t\"i64\",\n\t\t\t\t\t[\"sqlite3_session*\"]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_object_config\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_session*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_patchset\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_session*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_patchset_strm\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_session*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xOutput\",\n\t\t\t\t\t\t\tsignature: \"i(ppp)\",\n\t\t\t\t\t\t\tbindScope: \"transient\"\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"void*\"\n\t\t\t\t\t]\n\t\t\t\t], [\n\t\t\t\t\t\"sqlite3session_table_filter\",\n\t\t\t\t\tvoid 0,\n\t\t\t\t\t[\n\t\t\t\t\t\t\"sqlite3_session*\",\n\t\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\t\tname: \"xFilter\",\n\t\t\t\t\t\t\t...__ipsProxy,\n\t\t\t\t\t\t\tcontextKey: (argv, argIndex) => argv[0]\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t\"*\"\n\t\t\t\t\t]\n\t\t\t\t]);\n\t\t\t}\n\t\t\tsqlite3.StructBinder = globalThis.Jaccwabyt({\n\t\t\t\theap: wasm.heap8u,\n\t\t\t\talloc: wasm.alloc,\n\t\t\t\tdealloc: wasm.dealloc,\n\t\t\t\tbigIntEnabled: wasm.bigIntEnabled,\n\t\t\t\tpointerIR: wasm.ptr.ir,\n\t\t\t\tmemberPrefix: \"$\"\n\t\t\t});\n\t\t\tdelete globalThis.Jaccwabyt;\n\t\t\t{\n\t\t\t\tconst __xString = wasm.xWrap.argAdapter(\"string\");\n\t\t\t\twasm.xWrap.argAdapter(\"string:flexible\", (v) => __xString(util.flexibleString(v)));\n\t\t\t\twasm.xWrap.argAdapter(\"string:static\", function(v) {\n\t\t\t\t\tif (wasm.isPtr(v)) return v;\n\t\t\t\t\tv = \"\" + v;\n\t\t\t\t\treturn this[v] || (this[v] = wasm.allocCString(v));\n\t\t\t\t}.bind(Object.create(null)));\n\t\t\t\tconst __xArgPtr = wasm.xWrap.argAdapter(\"*\");\n\t\t\t\tconst nilType = function() {};\n\t\t\t\twasm.xWrap.argAdapter(\"sqlite3_filename\", __xArgPtr)(\"sqlite3_context*\", __xArgPtr)(\"sqlite3_value*\", __xArgPtr)(\"void*\", __xArgPtr)(\"sqlite3_changegroup*\", __xArgPtr)(\"sqlite3_changeset_iter*\", __xArgPtr)(\"sqlite3_session*\", __xArgPtr)(\"sqlite3_stmt*\", (v) => __xArgPtr(v instanceof (sqlite3?.oo1?.Stmt || nilType) ? v.pointer : v))(\"sqlite3*\", (v) => __xArgPtr(v instanceof (sqlite3?.oo1?.DB || nilType) ? v.pointer : v))(\"sqlite3_vfs*\", (v) => {\n\t\t\t\t\tif (\"string\" === typeof v) return capi.sqlite3_vfs_find(v) || sqlite3.SQLite3Error.toss(capi.SQLITE_NOTFOUND, \"Unknown sqlite3_vfs name:\", v);\n\t\t\t\t\treturn __xArgPtr(v instanceof (capi.sqlite3_vfs || nilType) ? v.pointer : v);\n\t\t\t\t});\n\t\t\t\tif (wasm.exports.sqlite3_declare_vtab) wasm.xWrap.argAdapter(\"sqlite3_index_info*\", (v) => __xArgPtr(v instanceof (capi.sqlite3_index_info || nilType) ? v.pointer : v))(\"sqlite3_module*\", (v) => __xArgPtr(v instanceof (capi.sqlite3_module || nilType) ? v.pointer : v));\n\t\t\t\tconst __xRcPtr = wasm.xWrap.resultAdapter(\"*\");\n\t\t\t\twasm.xWrap.resultAdapter(\"sqlite3*\", __xRcPtr)(\"sqlite3_context*\", __xRcPtr)(\"sqlite3_stmt*\", __xRcPtr)(\"sqlite3_value*\", __xRcPtr)(\"sqlite3_vfs*\", __xRcPtr)(\"void*\", __xRcPtr);\n\t\t\t\tfor (const e of bindingSignatures.core) capi[e[0]] = wasm.xWrap.apply(null, e);\n\t\t\t\tfor (const e of bindingSignatures.wasmInternal) util[e[0]] = wasm.xWrap.apply(null, e);\n\t\t\t\tfor (const e of bindingSignatures.int64) capi[e[0]] = wasm.bigIntEnabled ? wasm.xWrap.apply(null, e) : () => toss(e[0] + \"() is unavailable due to lack\", \"of BigInt support in this build.\");\n\t\t\t\tdelete bindingSignatures.core;\n\t\t\t\tdelete bindingSignatures.int64;\n\t\t\t\tdelete bindingSignatures.wasmInternal;\n\t\t\t\tutil.sqlite3__wasm_db_error = function(pDb, resultCode, message) {\n\t\t\t\t\tif (!pDb) return capi.SQLITE_MISUSE;\n\t\t\t\t\tif (resultCode instanceof sqlite3.WasmAllocError) {\n\t\t\t\t\t\tresultCode = capi.SQLITE_NOMEM;\n\t\t\t\t\t\tmessage = 0;\n\t\t\t\t\t} else if (resultCode instanceof Error) {\n\t\t\t\t\t\tmessage = message || \"\" + resultCode;\n\t\t\t\t\t\tresultCode = resultCode.resultCode || capi.SQLITE_ERROR;\n\t\t\t\t\t}\n\t\t\t\t\treturn capi.sqlite3_set_errmsg(pDb, resultCode, message) || resultCode;\n\t\t\t\t};\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst cJson = wasm.xCall(\"sqlite3__wasm_enum_json\");\n\t\t\t\tif (!cJson) toss(\"Maintenance required: increase sqlite3__wasm_enum_json()'s\", \"static buffer size!\");\n\t\t\t\twasm.ctype = JSON.parse(wasm.cstrToJs(cJson));\n\t\t\t\tconst defineGroups = [\n\t\t\t\t\t\"access\",\n\t\t\t\t\t\"authorizer\",\n\t\t\t\t\t\"blobFinalizers\",\n\t\t\t\t\t\"changeset\",\n\t\t\t\t\t\"config\",\n\t\t\t\t\t\"dataTypes\",\n\t\t\t\t\t\"dbConfig\",\n\t\t\t\t\t\"dbStatus\",\n\t\t\t\t\t\"encodings\",\n\t\t\t\t\t\"fcntl\",\n\t\t\t\t\t\"flock\",\n\t\t\t\t\t\"ioCap\",\n\t\t\t\t\t\"limits\",\n\t\t\t\t\t\"openFlags\",\n\t\t\t\t\t\"prepareFlags\",\n\t\t\t\t\t\"resultCodes\",\n\t\t\t\t\t\"sqlite3Status\",\n\t\t\t\t\t\"stmtStatus\",\n\t\t\t\t\t\"syncFlags\",\n\t\t\t\t\t\"trace\",\n\t\t\t\t\t\"txnState\",\n\t\t\t\t\t\"udfFlags\",\n\t\t\t\t\t\"version\"\n\t\t\t\t];\n\t\t\t\tif (wasm.bigIntEnabled) defineGroups.push(\"serialize\", \"session\", \"vtab\");\n\t\t\t\tfor (const t of defineGroups) for (const e of Object.entries(wasm.ctype[t])) capi[e[0]] = e[1];\n\t\t\t\tif (!wasm.functionEntry(capi.SQLITE_WASM_DEALLOC)) toss(\"Internal error: cannot resolve exported function\", \"entry SQLITE_WASM_DEALLOC (==\" + capi.SQLITE_WASM_DEALLOC + \").\");\n\t\t\t\tconst __rcMap = Object.create(null);\n\t\t\t\tfor (const e of Object.entries(wasm.ctype[\"resultCodes\"])) __rcMap[e[1]] = e[0];\n\t\t\t\tcapi.sqlite3_js_rc_str = (rc) => __rcMap[rc];\n\t\t\t\tconst notThese = Object.assign(Object.create(null), {\n\t\t\t\t\tWasmTestStruct: true,\n\t\t\t\t\tsqlite3_index_info: !wasm.bigIntEnabled,\n\t\t\t\t\tsqlite3_index_constraint: !wasm.bigIntEnabled,\n\t\t\t\t\tsqlite3_index_orderby: !wasm.bigIntEnabled,\n\t\t\t\t\tsqlite3_index_constraint_usage: !wasm.bigIntEnabled\n\t\t\t\t});\n\t\t\t\tfor (const s of wasm.ctype.structs) if (!notThese[s.name]) capi[s.name] = sqlite3.StructBinder(s);\n\t\t\t\tif (capi.sqlite3_index_info) {\n\t\t\t\t\tfor (const k of [\n\t\t\t\t\t\t\"sqlite3_index_constraint\",\n\t\t\t\t\t\t\"sqlite3_index_orderby\",\n\t\t\t\t\t\t\"sqlite3_index_constraint_usage\"\n\t\t\t\t\t]) {\n\t\t\t\t\t\tcapi.sqlite3_index_info[k] = capi[k];\n\t\t\t\t\t\tdelete capi[k];\n\t\t\t\t\t}\n\t\t\t\t\tcapi.sqlite3_vtab_config = wasm.xWrap(\"sqlite3__wasm_vtab_config\", \"int\", [\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"int\"\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst __dbArgcMismatch = (pDb, f, n) => {\n\t\t\t\treturn util.sqlite3__wasm_db_error(pDb, capi.SQLITE_MISUSE, f + \"() requires \" + n + \" argument\" + (1 === n ? \"\" : \"s\") + \".\");\n\t\t\t};\n\t\t\tconst __errEncoding = (pDb) => {\n\t\t\t\treturn util.sqlite3__wasm_db_error(pDb, capi.SQLITE_FORMAT, \"SQLITE_UTF8 is the only supported encoding.\");\n\t\t\t};\n\t\t\tconst __argPDb = (pDb) => wasm.xWrap.argAdapter(\"sqlite3*\")(pDb);\n\t\t\tconst __argStr = (str) => wasm.isPtr(str) ? wasm.cstrToJs(str) : str;\n\t\t\tconst __dbCleanupMap = function(pDb, mode) {\n\t\t\t\tpDb = __argPDb(pDb);\n\t\t\t\tlet m = this.dbMap.get(pDb);\n\t\t\t\tif (!mode) {\n\t\t\t\t\tthis.dbMap.delete(pDb);\n\t\t\t\t\treturn m;\n\t\t\t\t} else if (!m && mode > 0) this.dbMap.set(pDb, m = Object.create(null));\n\t\t\t\treturn m;\n\t\t\t}.bind(Object.assign(Object.create(null), { dbMap: /* @__PURE__ */ new Map() }));\n\t\t\t__dbCleanupMap.addCollation = function(pDb, name) {\n\t\t\t\tconst m = __dbCleanupMap(pDb, 1);\n\t\t\t\tif (!m.collation) m.collation = /* @__PURE__ */ new Set();\n\t\t\t\tm.collation.add(__argStr(name).toLowerCase());\n\t\t\t};\n\t\t\t__dbCleanupMap._addUDF = function(pDb, name, arity, map) {\n\t\t\t\tname = __argStr(name).toLowerCase();\n\t\t\t\tlet u = map.get(name);\n\t\t\t\tif (!u) map.set(name, u = /* @__PURE__ */ new Set());\n\t\t\t\tu.add(arity < 0 ? -1 : arity);\n\t\t\t};\n\t\t\t__dbCleanupMap.addFunction = function(pDb, name, arity) {\n\t\t\t\tconst m = __dbCleanupMap(pDb, 1);\n\t\t\t\tif (!m.udf) m.udf = /* @__PURE__ */ new Map();\n\t\t\t\tthis._addUDF(pDb, name, arity, m.udf);\n\t\t\t};\n\t\t\tif (wasm.exports.sqlite3_create_window_function) __dbCleanupMap.addWindowFunc = function(pDb, name, arity) {\n\t\t\t\tconst m = __dbCleanupMap(pDb, 1);\n\t\t\t\tif (!m.wudf) m.wudf = /* @__PURE__ */ new Map();\n\t\t\t\tthis._addUDF(pDb, name, arity, m.wudf);\n\t\t\t};\n\t\t\t__dbCleanupMap.cleanup = function(pDb) {\n\t\t\t\tpDb = __argPDb(pDb);\n\t\t\t\tfor (const obj of [\n\t\t\t\t\t[\"sqlite3_busy_handler\", 3],\n\t\t\t\t\t[\"sqlite3_commit_hook\", 3],\n\t\t\t\t\t[\"sqlite3_preupdate_hook\", 3],\n\t\t\t\t\t[\"sqlite3_progress_handler\", 4],\n\t\t\t\t\t[\"sqlite3_rollback_hook\", 3],\n\t\t\t\t\t[\"sqlite3_set_authorizer\", 3],\n\t\t\t\t\t[\"sqlite3_trace_v2\", 4],\n\t\t\t\t\t[\"sqlite3_update_hook\", 3]\n\t\t\t\t]) {\n\t\t\t\t\tconst [name, arity] = obj;\n\t\t\t\t\tif (!wasm.exports[name]) continue;\n\t\t\t\t\tconst closeArgs = [pDb];\n\t\t\t\t\tcloseArgs.length = arity;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcapi[name](...closeArgs);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tsqlite3.config.warn(\"close-time call of\", name + \"(\", closeArgs, \") threw:\", e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst m = __dbCleanupMap(pDb, 0);\n\t\t\t\tif (!m) return;\n\t\t\t\tif (m.collation) {\n\t\t\t\t\tfor (const name of m.collation) try {\n\t\t\t\t\t\tcapi.sqlite3_create_collation_v2(pDb, name, capi.SQLITE_UTF8, 0, 0, 0);\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t\tdelete m.collation;\n\t\t\t\t}\n\t\t\t\tlet i;\n\t\t\t\tfor (i = 0; i < 2; ++i) {\n\t\t\t\t\tconst fmap = i ? m.wudf : m.udf;\n\t\t\t\t\tif (!fmap) continue;\n\t\t\t\t\tconst func = i ? capi.sqlite3_create_window_function : capi.sqlite3_create_function_v2;\n\t\t\t\t\tfor (const e of fmap) {\n\t\t\t\t\t\tconst name = e[0], arities = e[1];\n\t\t\t\t\t\tconst fargs = [\n\t\t\t\t\t\t\tpDb,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\tcapi.SQLITE_UTF8,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t];\n\t\t\t\t\t\tif (i) fargs.push(0);\n\t\t\t\t\t\tfor (const arity of arities) try {\n\t\t\t\t\t\t\tfargs[2] = arity;\n\t\t\t\t\t\t\tfunc.apply(null, fargs);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\tarities.clear();\n\t\t\t\t\t}\n\t\t\t\t\tfmap.clear();\n\t\t\t\t}\n\t\t\t\tdelete m.udf;\n\t\t\t\tdelete m.wudf;\n\t\t\t};\n\t\t\t{\n\t\t\t\tconst __sqlite3CloseV2 = wasm.xWrap(\"sqlite3_close_v2\", \"int\", \"sqlite3*\");\n\t\t\t\tcapi.sqlite3_close_v2 = function(pDb) {\n\t\t\t\t\tif (1 !== arguments.length) return __dbArgcMismatch(pDb, \"sqlite3_close_v2\", 1);\n\t\t\t\t\tif (pDb) try {\n\t\t\t\t\t\t__dbCleanupMap.cleanup(pDb);\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t\treturn __sqlite3CloseV2(pDb);\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (capi.sqlite3session_create) {\n\t\t\t\tconst __sqlite3SessionDelete = wasm.xWrap(\"sqlite3session_delete\", void 0, [\"sqlite3_session*\"]);\n\t\t\t\tcapi.sqlite3session_delete = function(pSession) {\n\t\t\t\t\tif (1 !== arguments.length) return __dbArgcMismatch(pDb, \"sqlite3session_delete\", 1);\n\t\t\t\t\telse if (pSession) capi.sqlite3session_table_filter(pSession, 0, 0);\n\t\t\t\t\t__sqlite3SessionDelete(pSession);\n\t\t\t\t};\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst contextKey = (argv, argIndex) => {\n\t\t\t\t\treturn \"argv[\" + argIndex + \"]:\" + argv[0] + \":\" + wasm.cstrToJs(argv[1]).toLowerCase();\n\t\t\t\t};\n\t\t\t\tconst __sqlite3CreateCollationV2 = wasm.xWrap(\"sqlite3_create_collation_v2\", \"int\", [\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"*\",\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xCompare\",\n\t\t\t\t\t\tsignature: \"i(pipip)\",\n\t\t\t\t\t\tcontextKey\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xDestroy\",\n\t\t\t\t\t\tsignature: \"v(p)\",\n\t\t\t\t\t\tcontextKey\n\t\t\t\t\t})\n\t\t\t\t]);\n\t\t\t\tcapi.sqlite3_create_collation_v2 = function(pDb, zName, eTextRep, pArg, xCompare, xDestroy) {\n\t\t\t\t\tif (6 !== arguments.length) return __dbArgcMismatch(pDb, \"sqlite3_create_collation_v2\", 6);\n\t\t\t\t\telse if (0 === (eTextRep & 15)) eTextRep |= capi.SQLITE_UTF8;\n\t\t\t\t\telse if (capi.SQLITE_UTF8 !== (eTextRep & 15)) return __errEncoding(pDb);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst rc = __sqlite3CreateCollationV2(pDb, zName, eTextRep, pArg, xCompare, xDestroy);\n\t\t\t\t\t\tif (0 === rc && xCompare instanceof Function) __dbCleanupMap.addCollation(pDb, zName);\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn util.sqlite3__wasm_db_error(pDb, e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_create_collation = (pDb, zName, eTextRep, pArg, xCompare) => {\n\t\t\t\t\treturn 5 === arguments.length ? capi.sqlite3_create_collation_v2(pDb, zName, eTextRep, pArg, xCompare, 0) : __dbArgcMismatch(pDb, \"sqlite3_create_collation\", 5);\n\t\t\t\t};\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst contextKey = function(argv, argIndex) {\n\t\t\t\t\treturn argv[0] + \":\" + (argv[2] < 0 ? -1 : argv[2]) + \":\" + argIndex + \":\" + wasm.cstrToJs(argv[1]).toLowerCase();\n\t\t\t\t};\n\t\t\t\tconst __cfProxy = Object.assign(Object.create(null), {\n\t\t\t\t\txInverseAndStep: {\n\t\t\t\t\t\tsignature: \"v(pip)\",\n\t\t\t\t\t\tcontextKey,\n\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\treturn (pCtx, argc, pArgv) => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tcallback(pCtx, ...capi.sqlite3_values_to_js(argc, pArgv));\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_error_js(pCtx, e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txFinalAndValue: {\n\t\t\t\t\t\tsignature: \"v(p)\",\n\t\t\t\t\t\tcontextKey,\n\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\treturn (pCtx) => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_js(pCtx, callback(pCtx));\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_error_js(pCtx, e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txFunc: {\n\t\t\t\t\t\tsignature: \"v(pip)\",\n\t\t\t\t\t\tcontextKey,\n\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\treturn (pCtx, argc, pArgv) => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_js(pCtx, callback(pCtx, ...capi.sqlite3_values_to_js(argc, pArgv)));\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_error_js(pCtx, e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txDestroy: {\n\t\t\t\t\t\tsignature: \"v(p)\",\n\t\t\t\t\t\tcontextKey,\n\t\t\t\t\t\tcallProxy: (callback) => {\n\t\t\t\t\t\t\treturn (pVoid) => {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tcallback(pVoid);\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tconsole.error(\"UDF xDestroy method threw:\", e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst __sqlite3CreateFunction = wasm.xWrap(\"sqlite3_create_function_v2\", \"int\", [\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"*\",\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xFunc\",\n\t\t\t\t\t\t...__cfProxy.xFunc\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xStep\",\n\t\t\t\t\t\t...__cfProxy.xInverseAndStep\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xFinal\",\n\t\t\t\t\t\t...__cfProxy.xFinalAndValue\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xDestroy\",\n\t\t\t\t\t\t...__cfProxy.xDestroy\n\t\t\t\t\t})\n\t\t\t\t]);\n\t\t\t\tconst __sqlite3CreateWindowFunction = wasm.exports.sqlite3_create_window_function ? wasm.xWrap(\"sqlite3_create_window_function\", \"int\", [\n\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"*\",\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xStep\",\n\t\t\t\t\t\t...__cfProxy.xInverseAndStep\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xFinal\",\n\t\t\t\t\t\t...__cfProxy.xFinalAndValue\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xValue\",\n\t\t\t\t\t\t...__cfProxy.xFinalAndValue\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xInverse\",\n\t\t\t\t\t\t...__cfProxy.xInverseAndStep\n\t\t\t\t\t}),\n\t\t\t\t\tnew wasm.xWrap.FuncPtrAdapter({\n\t\t\t\t\t\tname: \"xDestroy\",\n\t\t\t\t\t\t...__cfProxy.xDestroy\n\t\t\t\t\t})\n\t\t\t\t]) : void 0;\n\t\t\t\tcapi.sqlite3_create_function_v2 = function f(pDb, funcName, nArg, eTextRep, pApp, xFunc, xStep, xFinal, xDestroy) {\n\t\t\t\t\tif (f.length !== arguments.length) return __dbArgcMismatch(pDb, \"sqlite3_create_function_v2\", f.length);\n\t\t\t\t\telse if (0 === (eTextRep & 15)) eTextRep |= capi.SQLITE_UTF8;\n\t\t\t\t\telse if (capi.SQLITE_UTF8 !== (eTextRep & 15)) return __errEncoding(pDb);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst rc = __sqlite3CreateFunction(pDb, funcName, nArg, eTextRep, pApp, xFunc, xStep, xFinal, xDestroy);\n\t\t\t\t\t\tif (0 === rc && (xFunc instanceof Function || xStep instanceof Function || xFinal instanceof Function || xDestroy instanceof Function)) __dbCleanupMap.addFunction(pDb, funcName, nArg);\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(\"sqlite3_create_function_v2() setup threw:\", e);\n\t\t\t\t\t\treturn util.sqlite3__wasm_db_error(pDb, e, \"Creation of UDF threw: \" + e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_create_function = function f(pDb, funcName, nArg, eTextRep, pApp, xFunc, xStep, xFinal) {\n\t\t\t\t\treturn f.length === arguments.length ? capi.sqlite3_create_function_v2(pDb, funcName, nArg, eTextRep, pApp, xFunc, xStep, xFinal, 0) : __dbArgcMismatch(pDb, \"sqlite3_create_function\", f.length);\n\t\t\t\t};\n\t\t\t\tif (__sqlite3CreateWindowFunction) capi.sqlite3_create_window_function = function f(pDb, funcName, nArg, eTextRep, pApp, xStep, xFinal, xValue, xInverse, xDestroy) {\n\t\t\t\t\tif (f.length !== arguments.length) return __dbArgcMismatch(pDb, \"sqlite3_create_window_function\", f.length);\n\t\t\t\t\telse if (0 === (eTextRep & 15)) eTextRep |= capi.SQLITE_UTF8;\n\t\t\t\t\telse if (capi.SQLITE_UTF8 !== (eTextRep & 15)) return __errEncoding(pDb);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst rc = __sqlite3CreateWindowFunction(pDb, funcName, nArg, eTextRep, pApp, xStep, xFinal, xValue, xInverse, xDestroy);\n\t\t\t\t\t\tif (0 === rc && (xStep instanceof Function || xFinal instanceof Function || xValue instanceof Function || xInverse instanceof Function || xDestroy instanceof Function)) __dbCleanupMap.addWindowFunc(pDb, funcName, nArg);\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(\"sqlite3_create_window_function() setup threw:\", e);\n\t\t\t\t\t\treturn util.sqlite3__wasm_db_error(pDb, e, \"Creation of UDF threw: \" + e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\telse delete capi.sqlite3_create_window_function;\n\t\t\t\tcapi.sqlite3_create_function_v2.udfSetResult = capi.sqlite3_create_function.udfSetResult = capi.sqlite3_result_js;\n\t\t\t\tif (capi.sqlite3_create_window_function) capi.sqlite3_create_window_function.udfSetResult = capi.sqlite3_result_js;\n\t\t\t\tcapi.sqlite3_create_function_v2.udfConvertArgs = capi.sqlite3_create_function.udfConvertArgs = capi.sqlite3_values_to_js;\n\t\t\t\tif (capi.sqlite3_create_window_function) capi.sqlite3_create_window_function.udfConvertArgs = capi.sqlite3_values_to_js;\n\t\t\t\tcapi.sqlite3_create_function_v2.udfSetError = capi.sqlite3_create_function.udfSetError = capi.sqlite3_result_error_js;\n\t\t\t\tif (capi.sqlite3_create_window_function) capi.sqlite3_create_window_function.udfSetError = capi.sqlite3_result_error_js;\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst __flexiString = (v, n) => {\n\t\t\t\t\tif (\"string\" === typeof v) n = -1;\n\t\t\t\t\telse if (util.isSQLableTypedArray(v)) {\n\t\t\t\t\t\tn = v.byteLength;\n\t\t\t\t\t\tv = wasm.typedArrayToString(v instanceof ArrayBuffer ? new Uint8Array(v) : v);\n\t\t\t\t\t} else if (Array.isArray(v)) {\n\t\t\t\t\t\tv = v.join(\"\");\n\t\t\t\t\t\tn = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn [v, n];\n\t\t\t\t};\n\t\t\t\tconst __prepare = {\n\t\t\t\t\tbasic: wasm.xWrap(\"sqlite3_prepare_v3\", \"int\", [\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t]),\n\t\t\t\t\tfull: wasm.xWrap(\"sqlite3_prepare_v3\", \"int\", [\n\t\t\t\t\t\t\"sqlite3*\",\n\t\t\t\t\t\t\"*\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"int\",\n\t\t\t\t\t\t\"**\",\n\t\t\t\t\t\t\"**\"\n\t\t\t\t\t])\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_prepare_v3 = function f(pDb, sql, sqlLen, prepFlags, ppStmt, pzTail) {\n\t\t\t\t\tif (f.length !== arguments.length) return __dbArgcMismatch(pDb, \"sqlite3_prepare_v3\", f.length);\n\t\t\t\t\tconst [xSql, xSqlLen] = __flexiString(sql, Number(sqlLen));\n\t\t\t\t\tswitch (typeof xSql) {\n\t\t\t\t\t\tcase \"string\": return __prepare.basic(pDb, xSql, xSqlLen, prepFlags, ppStmt, null);\n\t\t\t\t\t\tcase typeof wasm.ptr.null: return __prepare.full(pDb, wasm.ptr.coerce(xSql), xSqlLen, prepFlags, ppStmt, pzTail);\n\t\t\t\t\t\tdefault: return util.sqlite3__wasm_db_error(pDb, capi.SQLITE_MISUSE, \"Invalid SQL argument type for sqlite3_prepare_v2/v3(). typeof=\" + typeof xSql);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_prepare_v2 = function f(pDb, sql, sqlLen, ppStmt, pzTail) {\n\t\t\t\t\treturn f.length === arguments.length ? capi.sqlite3_prepare_v3(pDb, sql, sqlLen, 0, ppStmt, pzTail) : __dbArgcMismatch(pDb, \"sqlite3_prepare_v2\", f.length);\n\t\t\t\t};\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst __bindText = wasm.xWrap(\"sqlite3_bind_text\", \"int\", [\n\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"string\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"*\"\n\t\t\t\t]);\n\t\t\t\tconst __bindBlob = wasm.xWrap(\"sqlite3_bind_blob\", \"int\", [\n\t\t\t\t\t\"sqlite3_stmt*\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"*\",\n\t\t\t\t\t\"int\",\n\t\t\t\t\t\"*\"\n\t\t\t\t]);\n\t\t\t\tcapi.sqlite3_bind_text = function f(pStmt, iCol, text, nText, xDestroy) {\n\t\t\t\t\tif (f.length !== arguments.length) return __dbArgcMismatch(capi.sqlite3_db_handle(pStmt), \"sqlite3_bind_text\", f.length);\n\t\t\t\t\telse if (wasm.isPtr(text) || null === text) return __bindText(pStmt, iCol, text, nText, xDestroy);\n\t\t\t\t\telse if (text instanceof ArrayBuffer) text = new Uint8Array(text);\n\t\t\t\t\telse if (Array.isArray(pMem)) text = pMem.join(\"\");\n\t\t\t\t\tlet p, n;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (util.isSQLableTypedArray(text)) {\n\t\t\t\t\t\t\tp = wasm.allocFromTypedArray(text);\n\t\t\t\t\t\t\tn = text.byteLength;\n\t\t\t\t\t\t} else if (\"string\" === typeof text) [p, n] = wasm.allocCString(text);\n\t\t\t\t\t\telse return util.sqlite3__wasm_db_error(capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE, \"Invalid 3rd argument type for sqlite3_bind_text().\");\n\t\t\t\t\t\treturn __bindText(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\twasm.dealloc(p);\n\t\t\t\t\t\treturn util.sqlite3__wasm_db_error(capi.sqlite3_db_handle(pStmt), e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_bind_blob = function f(pStmt, iCol, pMem, nMem, xDestroy) {\n\t\t\t\t\tif (f.length !== arguments.length) return __dbArgcMismatch(capi.sqlite3_db_handle(pStmt), \"sqlite3_bind_blob\", f.length);\n\t\t\t\t\telse if (wasm.isPtr(pMem) || null === pMem) return __bindBlob(pStmt, iCol, pMem, nMem, xDestroy);\n\t\t\t\t\telse if (pMem instanceof ArrayBuffer) pMem = new Uint8Array(pMem);\n\t\t\t\t\telse if (Array.isArray(pMem)) pMem = pMem.join(\"\");\n\t\t\t\t\tlet p, n;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (util.isBindableTypedArray(pMem)) {\n\t\t\t\t\t\t\tp = wasm.allocFromTypedArray(pMem);\n\t\t\t\t\t\t\tn = nMem >= 0 ? nMem : pMem.byteLength;\n\t\t\t\t\t\t} else if (\"string\" === typeof pMem) [p, n] = wasm.allocCString(pMem);\n\t\t\t\t\t\telse return util.sqlite3__wasm_db_error(capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE, \"Invalid 3rd argument type for sqlite3_bind_blob().\");\n\t\t\t\t\t\treturn __bindBlob(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\twasm.dealloc(p);\n\t\t\t\t\t\treturn util.sqlite3__wasm_db_error(capi.sqlite3_db_handle(pStmt), e);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (!capi.sqlite3_column_text) {\n\t\t\t\tconst argStmt = wasm.xWrap.argAdapter(\"sqlite3_stmt*\"), argInt = wasm.xWrap.argAdapter(\"int\"), argValue = wasm.xWrap.argAdapter(\"sqlite3_value*\"), newStr = (cstr, n) => wasm.typedArrayToString(wasm.heap8u(), Number(cstr), Number(cstr) + n);\n\t\t\t\tcapi.sqlite3_column_text = function(stmt, colIndex) {\n\t\t\t\t\tconst a0 = argStmt(stmt), a1 = argInt(colIndex);\n\t\t\t\t\tconst cstr = wasm.exports.sqlite3_column_text(a0, a1);\n\t\t\t\t\treturn cstr ? newStr(cstr, wasm.exports.sqlite3_column_bytes(a0, a1)) : null;\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_value_text = function(val) {\n\t\t\t\t\tconst a0 = argValue(val);\n\t\t\t\t\tconst cstr = wasm.exports.sqlite3_value_text(a0);\n\t\t\t\t\treturn cstr ? newStr(cstr, wasm.exports.sqlite3_value_bytes(a0)) : null;\n\t\t\t\t};\n\t\t\t}\n\t\t\tcapi.sqlite3_config = function(op, ...args) {\n\t\t\t\tif (arguments.length < 2) return capi.SQLITE_MISUSE;\n\t\t\t\tswitch (op) {\n\t\t\t\t\tcase capi.SQLITE_CONFIG_COVERING_INDEX_SCAN:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_MEMSTATUS:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_SMALL_MALLOC:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_SORTERREF_SIZE:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_STMTJRNL_SPILL:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_URI: return wasm.exports.sqlite3__wasm_config_i(op, args[0]);\n\t\t\t\t\tcase capi.SQLITE_CONFIG_LOOKASIDE: return wasm.exports.sqlite3__wasm_config_ii(op, args[0], args[1]);\n\t\t\t\t\tcase capi.SQLITE_CONFIG_MEMDB_MAXSIZE: return wasm.exports.sqlite3__wasm_config_j(op, args[0]);\n\t\t\t\t\tcase capi.SQLITE_CONFIG_GETMALLOC:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_GETMUTEX:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_GETPCACHE2:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_GETPCACHE:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_HEAP:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_LOG:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_MALLOC:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_MMAP_SIZE:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_MULTITHREAD:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_MUTEX:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_PAGECACHE:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_PCACHE2:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_PCACHE:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_PCACHE_HDRSZ:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_PMASZ:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_SERIALIZED:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_SINGLETHREAD:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_SQLLOG:\n\t\t\t\t\tcase capi.SQLITE_CONFIG_WIN32_HEAPSIZE:\n\t\t\t\t\tdefault: return capi.SQLITE_NOTFOUND;\n\t\t\t\t}\n\t\t\t};\n\t\t\t{\n\t\t\t\tconst __autoExtFptr = /* @__PURE__ */ new Set();\n\t\t\t\tcapi.sqlite3_auto_extension = function(fPtr) {\n\t\t\t\t\tif (fPtr instanceof Function) fPtr = wasm.installFunction(\"i(ppp)\", fPtr);\n\t\t\t\t\telse if (1 !== arguments.length || !wasm.isPtr(fPtr)) return capi.SQLITE_MISUSE;\n\t\t\t\t\tconst rc = wasm.exports.sqlite3_auto_extension(fPtr);\n\t\t\t\t\tif (fPtr !== arguments[0]) if (0 === rc) __autoExtFptr.add(fPtr);\n\t\t\t\t\telse wasm.uninstallFunction(fPtr);\n\t\t\t\t\treturn rc;\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_cancel_auto_extension = function(fPtr) {\n\t\t\t\t\tif (!fPtr || 1 !== arguments.length || !wasm.isPtr(fPtr)) return 0;\n\t\t\t\t\treturn wasm.exports.sqlite3_cancel_auto_extension(fPtr);\n\t\t\t\t};\n\t\t\t\tcapi.sqlite3_reset_auto_extension = function() {\n\t\t\t\t\twasm.exports.sqlite3_reset_auto_extension();\n\t\t\t\t\tfor (const fp of __autoExtFptr) wasm.uninstallFunction(fp);\n\t\t\t\t\t__autoExtFptr.clear();\n\t\t\t\t};\n\t\t\t}\n\t\t\twasm.xWrap.FuncPtrAdapter.warnOnUse = true;\n\t\t\tconst StructBinder = sqlite3.StructBinder;\n\t\t\tconst installMethod = function callee(tgt, name, func, applyArgcCheck = callee.installMethodArgcCheck) {\n\t\t\t\tif (!(tgt instanceof StructBinder.StructType)) toss(\"Usage error: target object is-not-a StructType.\");\n\t\t\t\telse if (!(func instanceof Function) && !wasm.isPtr(func)) toss(\"Usage error: expecting a Function or WASM pointer to one.\");\n\t\t\t\tif (1 === arguments.length) return (n, f) => callee(tgt, n, f, applyArgcCheck);\n\t\t\t\tif (!callee.argcProxy) {\n\t\t\t\t\tcallee.argcProxy = function(tgt, funcName, func, sig) {\n\t\t\t\t\t\treturn function(...args) {\n\t\t\t\t\t\t\tif (func.length !== arguments.length) toss(\"Argument mismatch for\", tgt.structInfo.name + \"::\" + funcName + \": Native signature is:\", sig);\n\t\t\t\t\t\t\treturn func.apply(this, args);\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\tcallee.removeFuncList = function() {\n\t\t\t\t\t\tif (this.ondispose.__removeFuncList) {\n\t\t\t\t\t\t\tthis.ondispose.__removeFuncList.forEach((v, ndx) => {\n\t\t\t\t\t\t\t\tif (wasm.isPtr(v)) try {\n\t\t\t\t\t\t\t\t\twasm.uninstallFunction(v);\n\t\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tdelete this.ondispose.__removeFuncList;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst sigN = tgt.memberSignature(name);\n\t\t\t\tif (sigN.length < 2) toss(\"Member\", name, \"does not have a function pointer signature:\", sigN);\n\t\t\t\tconst memKey = tgt.memberKey(name);\n\t\t\t\tconst fProxy = applyArgcCheck && !wasm.isPtr(func) ? callee.argcProxy(tgt, memKey, func, sigN) : func;\n\t\t\t\tif (wasm.isPtr(fProxy)) {\n\t\t\t\t\tif (fProxy && !wasm.functionEntry(fProxy)) toss(\"Pointer\", fProxy, \"is not a WASM function table entry.\");\n\t\t\t\t\ttgt[memKey] = fProxy;\n\t\t\t\t} else {\n\t\t\t\t\tconst pFunc = wasm.installFunction(fProxy, sigN);\n\t\t\t\t\ttgt[memKey] = pFunc;\n\t\t\t\t\tif (!tgt.ondispose || !tgt.ondispose.__removeFuncList) {\n\t\t\t\t\t\ttgt.addOnDispose(\"ondispose.__removeFuncList handler\", callee.removeFuncList);\n\t\t\t\t\t\ttgt.ondispose.__removeFuncList = [];\n\t\t\t\t\t}\n\t\t\t\t\ttgt.ondispose.__removeFuncList.push(memKey, pFunc);\n\t\t\t\t}\n\t\t\t\treturn (n, f) => callee(tgt, n, f, applyArgcCheck);\n\t\t\t};\n\t\t\tinstallMethod.installMethodArgcCheck = false;\n\t\t\tconst installMethods = function(structInstance, methods, applyArgcCheck = installMethod.installMethodArgcCheck) {\n\t\t\t\tconst seen = /* @__PURE__ */ new Map();\n\t\t\t\tfor (const k of Object.keys(methods)) {\n\t\t\t\t\tconst m = methods[k];\n\t\t\t\t\tconst prior = seen.get(m);\n\t\t\t\t\tif (prior) {\n\t\t\t\t\t\tconst mkey = structInstance.memberKey(k);\n\t\t\t\t\t\tstructInstance[mkey] = structInstance[structInstance.memberKey(prior)];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinstallMethod(structInstance, k, m, applyArgcCheck);\n\t\t\t\t\t\tseen.set(m, k);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn structInstance;\n\t\t\t};\n\t\t\tStructBinder.StructType.prototype.installMethod = function callee(name, func, applyArgcCheck = installMethod.installMethodArgcCheck) {\n\t\t\t\treturn arguments.length < 3 && name && \"object\" === typeof name ? installMethods(this, ...arguments) : installMethod(this, ...arguments);\n\t\t\t};\n\t\t\tStructBinder.StructType.prototype.installMethods = function(methods, applyArgcCheck = installMethod.installMethodArgcCheck) {\n\t\t\t\treturn installMethods(this, methods, applyArgcCheck);\n\t\t\t};\n\t\t});\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\tconst toss3 = (...args) => {\n\t\t\t\tthrow new sqlite3.SQLite3Error(...args);\n\t\t\t};\n\t\t\tconst capi = sqlite3.capi, wasm = sqlite3.wasm, util = sqlite3.util;\n\t\t\tconst outWrapper = function(f) {\n\t\t\t\treturn (...args) => f(\"sqlite3.oo1:\", ...args);\n\t\t\t};\n\t\t\tsqlite3.__isUnderTest ? outWrapper(console.debug.bind(console)) : outWrapper(sqlite3.config.debug);\n\t\t\tsqlite3.__isUnderTest ? outWrapper(console.warn.bind(console)) : outWrapper(sqlite3.config.warn);\n\t\t\tsqlite3.__isUnderTest ? outWrapper(console.error.bind(console)) : outWrapper(sqlite3.config.error);\n\t\t\tconst __ptrMap = /* @__PURE__ */ new WeakMap();\n\t\t\tconst __doesNotOwnHandle = /* @__PURE__ */ new Set();\n\t\t\tconst __stmtMap = /* @__PURE__ */ new WeakMap();\n\t\t\tconst getOwnOption = (opts, p, dflt) => {\n\t\t\t\tconst d = Object.getOwnPropertyDescriptor(opts, p);\n\t\t\t\treturn d ? d.value : dflt;\n\t\t\t};\n\t\t\tconst checkSqlite3Rc = function(dbPtr, sqliteResultCode) {\n\t\t\t\tif (sqliteResultCode) {\n\t\t\t\t\tif (dbPtr instanceof DB) dbPtr = dbPtr.pointer;\n\t\t\t\t\ttoss3(sqliteResultCode, \"sqlite3 result code\", sqliteResultCode + \":\", dbPtr ? capi.sqlite3_errmsg(dbPtr) : capi.sqlite3_errstr(sqliteResultCode));\n\t\t\t\t}\n\t\t\t\treturn arguments[0];\n\t\t\t};\n\t\t\tconst __dbTraceToConsole = wasm.installFunction(\"i(ippp)\", function(t, c, p, x) {\n\t\t\t\tif (capi.SQLITE_TRACE_STMT === t) console.log(\"SQL TRACE #\" + ++this.counter, \"via sqlite3@\" + c + \"[\" + capi.sqlite3_db_filename(c, null) + \"]\", wasm.cstrToJs(x));\n\t\t\t}.bind({ counter: 0 }));\n\t\t\tconst __vfsPostOpenCallback = Object.create(null);\n\t\t\tconst dbCtorHelper = function ctor(...args) {\n\t\t\t\tconst opt = ctor.normalizeArgs(...args);\n\t\t\t\tlet pDb;\n\t\t\t\tif (pDb = opt[\"sqlite3*\"]) {\n\t\t\t\t\tif (!opt[\"sqlite3*:takeOwnership\"]) __doesNotOwnHandle.add(this);\n\t\t\t\t\tthis.filename = capi.sqlite3_db_filename(pDb, \"main\");\n\t\t\t\t} else {\n\t\t\t\t\tlet fn = opt.filename, vfsName = opt.vfs, flagsStr = opt.flags;\n\t\t\t\t\tif (\"string\" !== typeof fn && !wasm.isPtr(fn) || \"string\" !== typeof flagsStr || vfsName && \"string\" !== typeof vfsName && !wasm.isPtr(vfsName)) {\n\t\t\t\t\t\tsqlite3.config.error(\"Invalid DB ctor args\", opt, arguments);\n\t\t\t\t\t\ttoss3(\"Invalid arguments for DB constructor:\", arguments, \"opts:\", opt);\n\t\t\t\t\t}\n\t\t\t\t\tlet oflags = 0;\n\t\t\t\t\tif (flagsStr.indexOf(\"c\") >= 0) oflags |= capi.SQLITE_OPEN_CREATE | capi.SQLITE_OPEN_READWRITE;\n\t\t\t\t\tif (flagsStr.indexOf(\"w\") >= 0) oflags |= capi.SQLITE_OPEN_READWRITE;\n\t\t\t\t\tif (0 === oflags) oflags |= capi.SQLITE_OPEN_READONLY;\n\t\t\t\t\toflags |= capi.SQLITE_OPEN_EXRESCODE;\n\t\t\t\t\tconst stack = wasm.pstack.pointer;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst pPtr = wasm.pstack.allocPtr();\n\t\t\t\t\t\tlet rc = capi.sqlite3_open_v2(fn, pPtr, oflags, vfsName || wasm.ptr.null);\n\t\t\t\t\t\tpDb = wasm.peekPtr(pPtr);\n\t\t\t\t\t\tcheckSqlite3Rc(pDb, rc);\n\t\t\t\t\t\tcapi.sqlite3_extended_result_codes(pDb, 1);\n\t\t\t\t\t\tif (flagsStr.indexOf(\"t\") >= 0) capi.sqlite3_trace_v2(pDb, capi.SQLITE_TRACE_STMT, __dbTraceToConsole, pDb);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (pDb) capi.sqlite3_close_v2(pDb);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\twasm.pstack.restore(stack);\n\t\t\t\t\t}\n\t\t\t\t\tthis.filename = wasm.isPtr(fn) ? wasm.cstrToJs(fn) : fn;\n\t\t\t\t}\n\t\t\t\t__ptrMap.set(this, pDb);\n\t\t\t\t__stmtMap.set(this, Object.create(null));\n\t\t\t\tif (!opt[\"sqlite3*\"]) try {\n\t\t\t\t\tconst postInitSql = __vfsPostOpenCallback[capi.sqlite3_js_db_vfs(pDb) || toss3(\"Internal error: cannot get VFS for new db handle.\")];\n\t\t\t\t\tif (postInitSql) if (postInitSql instanceof Function) postInitSql(this, sqlite3);\n\t\t\t\t\telse checkSqlite3Rc(pDb, capi.sqlite3_exec(pDb, postInitSql, 0, 0, 0));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthis.close();\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t};\n\t\t\tdbCtorHelper.setVfsPostOpenCallback = function(pVfs, callback) {\n\t\t\t\tif (!(callback instanceof Function)) toss3(\"dbCtorHelper.setVfsPostOpenCallback() should not be used with a non-function argument.\", arguments);\n\t\t\t\t__vfsPostOpenCallback[pVfs] = callback;\n\t\t\t};\n\t\t\tdbCtorHelper.normalizeArgs = function(filename = \":memory:\", flags = \"c\", vfs = null) {\n\t\t\t\tconst arg = {};\n\t\t\t\tif (1 === arguments.length && arguments[0] && \"object\" === typeof arguments[0]) {\n\t\t\t\t\tObject.assign(arg, arguments[0]);\n\t\t\t\t\tif (void 0 === arg.flags) arg.flags = \"c\";\n\t\t\t\t\tif (void 0 === arg.vfs) arg.vfs = null;\n\t\t\t\t\tif (void 0 === arg.filename) arg.filename = \":memory:\";\n\t\t\t\t} else {\n\t\t\t\t\targ.filename = filename;\n\t\t\t\t\targ.flags = flags;\n\t\t\t\t\targ.vfs = vfs;\n\t\t\t\t}\n\t\t\t\treturn arg;\n\t\t\t};\n\t\t\tconst DB = function(...args) {\n\t\t\t\tdbCtorHelper.apply(this, args);\n\t\t\t};\n\t\t\tDB.dbCtorHelper = dbCtorHelper;\n\t\t\tconst BindTypes = {\n\t\t\t\tnull: 1,\n\t\t\t\tnumber: 2,\n\t\t\t\tstring: 3,\n\t\t\t\tboolean: 4,\n\t\t\t\tblob: 5\n\t\t\t};\n\t\t\tif (wasm.bigIntEnabled) BindTypes.bigint = BindTypes.number;\n\t\t\tconst Stmt = function() {\n\t\t\t\tif (BindTypes !== arguments[2]) toss3(capi.SQLITE_MISUSE, \"Do not call the Stmt constructor directly. Use DB.prepare().\");\n\t\t\t\tthis.db = arguments[0];\n\t\t\t\t__ptrMap.set(this, arguments[1]);\n\t\t\t\tif (arguments.length > 3 && !arguments[3]) __doesNotOwnHandle.add(this);\n\t\t\t};\n\t\t\tconst affirmDbOpen = function(db) {\n\t\t\t\tif (!db.pointer) toss3(\"DB has been closed.\");\n\t\t\t\treturn db;\n\t\t\t};\n\t\t\tconst affirmColIndex = function(stmt, ndx) {\n\t\t\t\tif (ndx !== (ndx | 0) || ndx < 0 || ndx >= stmt.columnCount) toss3(\"Column index\", ndx, \"is out of range.\");\n\t\t\t\treturn stmt;\n\t\t\t};\n\t\t\tconst parseExecArgs = function(db, args) {\n\t\t\t\tconst out = Object.create(null);\n\t\t\t\tout.opt = Object.create(null);\n\t\t\t\tswitch (args.length) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (\"string\" === typeof args[0] || util.isSQLableTypedArray(args[0])) out.sql = args[0];\n\t\t\t\t\t\telse if (Array.isArray(args[0])) out.sql = args[0];\n\t\t\t\t\t\telse if (args[0] && \"object\" === typeof args[0]) {\n\t\t\t\t\t\t\tout.opt = args[0];\n\t\t\t\t\t\t\tout.sql = out.opt.sql;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tout.sql = args[0];\n\t\t\t\t\t\tout.opt = args[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: toss3(\"Invalid argument count for exec().\");\n\t\t\t\t}\n\t\t\t\tout.sql = util.flexibleString(out.sql);\n\t\t\t\tif (\"string\" !== typeof out.sql) toss3(\"Missing SQL argument or unsupported SQL value type.\");\n\t\t\t\tconst opt = out.opt;\n\t\t\t\tswitch (opt.returnValue) {\n\t\t\t\t\tcase \"resultRows\":\n\t\t\t\t\t\tif (!opt.resultRows) opt.resultRows = [];\n\t\t\t\t\t\tout.returnVal = () => opt.resultRows;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"saveSql\":\n\t\t\t\t\t\tif (!opt.saveSql) opt.saveSql = [];\n\t\t\t\t\t\tout.returnVal = () => opt.saveSql;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase void 0:\n\t\t\t\t\tcase \"this\":\n\t\t\t\t\t\tout.returnVal = () => db;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: toss3(\"Invalid returnValue value:\", opt.returnValue);\n\t\t\t\t}\n\t\t\t\tif (!opt.callback && !opt.returnValue && void 0 !== opt.rowMode) {\n\t\t\t\t\tif (!opt.resultRows) opt.resultRows = [];\n\t\t\t\t\tout.returnVal = () => opt.resultRows;\n\t\t\t\t}\n\t\t\t\tif (opt.callback || opt.resultRows) switch (void 0 === opt.rowMode ? \"array\" : opt.rowMode) {\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tout.cbArg = (stmt, cache) => {\n\t\t\t\t\t\t\tif (!cache.columnNames) cache.columnNames = stmt.getColumnNames([]);\n\t\t\t\t\t\t\tconst row = stmt.get([]);\n\t\t\t\t\t\t\tconst rv = Object.create(null);\n\t\t\t\t\t\t\tfor (const i in cache.columnNames) rv[cache.columnNames[i]] = row[i];\n\t\t\t\t\t\t\treturn rv;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"array\":\n\t\t\t\t\t\tout.cbArg = (stmt) => stmt.get([]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"stmt\":\n\t\t\t\t\t\tif (Array.isArray(opt.resultRows)) toss3(\"exec(): invalid rowMode for a resultRows array: must\", \"be one of 'array', 'object',\", \"a result column number, or column name reference.\");\n\t\t\t\t\t\tout.cbArg = (stmt) => stmt;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (util.isInt32(opt.rowMode)) {\n\t\t\t\t\t\t\tout.cbArg = (stmt) => stmt.get(opt.rowMode);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (\"string\" === typeof opt.rowMode && opt.rowMode.length > 1 && \"$\" === opt.rowMode[0]) {\n\t\t\t\t\t\t\tconst $colName = opt.rowMode.substr(1);\n\t\t\t\t\t\t\tout.cbArg = (stmt) => {\n\t\t\t\t\t\t\t\tconst rc = stmt.get(Object.create(null))[$colName];\n\t\t\t\t\t\t\t\treturn void 0 === rc ? toss3(capi.SQLITE_NOTFOUND, \"exec(): unknown result column:\", $colName) : rc;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttoss3(\"Invalid rowMode:\", opt.rowMode);\n\t\t\t\t}\n\t\t\t\treturn out;\n\t\t\t};\n\t\t\tconst __selectFirstRow = (db, sql, bind, ...getArgs) => {\n\t\t\t\tconst stmt = db.prepare(sql);\n\t\t\t\ttry {\n\t\t\t\t\tconst rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : void 0;\n\t\t\t\t\tstmt.reset();\n\t\t\t\t\treturn rc;\n\t\t\t\t} finally {\n\t\t\t\t\tstmt.finalize();\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst __selectAll = (db, sql, bind, rowMode) => db.exec({\n\t\t\t\tsql,\n\t\t\t\tbind,\n\t\t\t\trowMode,\n\t\t\t\treturnValue: \"resultRows\"\n\t\t\t});\n\t\t\tDB.checkRc = (db, resultCode) => checkSqlite3Rc(db, resultCode);\n\t\t\tDB.prototype = {\n\t\t\t\tisOpen: function() {\n\t\t\t\t\treturn !!this.pointer;\n\t\t\t\t},\n\t\t\t\taffirmOpen: function() {\n\t\t\t\t\treturn affirmDbOpen(this);\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\tconst pDb = this.pointer;\n\t\t\t\t\tif (pDb) {\n\t\t\t\t\t\tif (this.onclose && this.onclose.before instanceof Function) try {\n\t\t\t\t\t\t\tthis.onclose.before(this);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\tObject.keys(__stmtMap.get(this)).forEach((k, s) => {\n\t\t\t\t\t\t\tif (s && s.pointer) try {\n\t\t\t\t\t\t\t\ts.finalize();\n\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t__ptrMap.delete(this);\n\t\t\t\t\t\t__stmtMap.delete(this);\n\t\t\t\t\t\tif (!__doesNotOwnHandle.delete(this)) capi.sqlite3_close_v2(pDb);\n\t\t\t\t\t\tif (this.onclose && this.onclose.after instanceof Function) try {\n\t\t\t\t\t\t\tthis.onclose.after(this);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\tdelete this.filename;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tchanges: function(total = false, sixtyFour = false) {\n\t\t\t\t\tconst p = affirmDbOpen(this).pointer;\n\t\t\t\t\tif (total) return sixtyFour ? capi.sqlite3_total_changes64(p) : capi.sqlite3_total_changes(p);\n\t\t\t\t\telse return sixtyFour ? capi.sqlite3_changes64(p) : capi.sqlite3_changes(p);\n\t\t\t\t},\n\t\t\t\tdbFilename: function(dbName = \"main\") {\n\t\t\t\t\treturn capi.sqlite3_db_filename(affirmDbOpen(this).pointer, dbName);\n\t\t\t\t},\n\t\t\t\tdbName: function(dbNumber = 0) {\n\t\t\t\t\treturn capi.sqlite3_db_name(affirmDbOpen(this).pointer, dbNumber);\n\t\t\t\t},\n\t\t\t\tdbVfsName: function(dbName = 0) {\n\t\t\t\t\tlet rc;\n\t\t\t\t\tconst pVfs = capi.sqlite3_js_db_vfs(affirmDbOpen(this).pointer, dbName);\n\t\t\t\t\tif (pVfs) {\n\t\t\t\t\t\tconst v = new capi.sqlite3_vfs(pVfs);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trc = wasm.cstrToJs(v.$zName);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tv.dispose();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn rc;\n\t\t\t\t},\n\t\t\t\tprepare: function(sql) {\n\t\t\t\t\taffirmDbOpen(this);\n\t\t\t\t\tconst stack = wasm.pstack.pointer;\n\t\t\t\t\tlet ppStmt, pStmt;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tppStmt = wasm.pstack.alloc(8);\n\t\t\t\t\t\tDB.checkRc(this, capi.sqlite3_prepare_v2(this.pointer, sql, -1, ppStmt, null));\n\t\t\t\t\t\tpStmt = wasm.peekPtr(ppStmt);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\twasm.pstack.restore(stack);\n\t\t\t\t\t}\n\t\t\t\t\tif (!pStmt) toss3(\"Cannot prepare empty SQL.\");\n\t\t\t\t\tconst stmt = new Stmt(this, pStmt, BindTypes);\n\t\t\t\t\t__stmtMap.get(this)[pStmt] = stmt;\n\t\t\t\t\treturn stmt;\n\t\t\t\t},\n\t\t\t\texec: function() {\n\t\t\t\t\taffirmDbOpen(this);\n\t\t\t\t\tconst arg = parseExecArgs(this, arguments);\n\t\t\t\t\tif (!arg.sql) return toss3(\"exec() requires an SQL string.\");\n\t\t\t\t\tconst opt = arg.opt;\n\t\t\t\t\tconst callback = opt.callback;\n\t\t\t\t\tconst resultRows = Array.isArray(opt.resultRows) ? opt.resultRows : void 0;\n\t\t\t\t\tlet stmt;\n\t\t\t\t\tlet bind = opt.bind;\n\t\t\t\t\tlet evalFirstResult = !!(arg.cbArg || opt.columnNames || resultRows);\n\t\t\t\t\tconst stack = wasm.scopedAllocPush();\n\t\t\t\t\tconst saveSql = Array.isArray(opt.saveSql) ? opt.saveSql : void 0;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst isTA = util.isSQLableTypedArray(arg.sql);\n\t\t\t\t\t\tlet sqlByteLen = isTA ? arg.sql.byteLength : wasm.jstrlen(arg.sql);\n\t\t\t\t\t\tconst ppStmt = wasm.scopedAlloc(2 * wasm.ptr.size + (sqlByteLen + 1));\n\t\t\t\t\t\tconst pzTail = wasm.ptr.add(ppStmt, wasm.ptr.size);\n\t\t\t\t\t\tlet pSql = wasm.ptr.add(pzTail, wasm.ptr.size);\n\t\t\t\t\t\tconst pSqlEnd = wasm.ptr.add(pSql, sqlByteLen);\n\t\t\t\t\t\tif (isTA) wasm.heap8().set(arg.sql, pSql);\n\t\t\t\t\t\telse wasm.jstrcpy(arg.sql, wasm.heap8(), pSql, sqlByteLen, false);\n\t\t\t\t\t\twasm.poke8(wasm.ptr.add(pSql, sqlByteLen), 0);\n\t\t\t\t\t\twhile (pSql && wasm.peek8(pSql)) {\n\t\t\t\t\t\t\twasm.pokePtr([ppStmt, pzTail], 0);\n\t\t\t\t\t\t\tDB.checkRc(this, capi.sqlite3_prepare_v3(this.pointer, pSql, sqlByteLen, 0, ppStmt, pzTail));\n\t\t\t\t\t\t\tconst pStmt = wasm.peekPtr(ppStmt);\n\t\t\t\t\t\t\tpSql = wasm.peekPtr(pzTail);\n\t\t\t\t\t\t\tsqlByteLen = Number(wasm.ptr.add(pSqlEnd, -pSql));\n\t\t\t\t\t\t\tif (!pStmt) continue;\n\t\t\t\t\t\t\tif (saveSql) saveSql.push(capi.sqlite3_sql(pStmt).trim());\n\t\t\t\t\t\t\tstmt = new Stmt(this, pStmt, BindTypes);\n\t\t\t\t\t\t\tif (bind && stmt.parameterCount) {\n\t\t\t\t\t\t\t\tstmt.bind(bind);\n\t\t\t\t\t\t\t\tbind = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (evalFirstResult && stmt.columnCount) {\n\t\t\t\t\t\t\t\tlet gotColNames = Array.isArray(opt.columnNames) ? 0 : 1;\n\t\t\t\t\t\t\t\tevalFirstResult = false;\n\t\t\t\t\t\t\t\tif (arg.cbArg || resultRows) {\n\t\t\t\t\t\t\t\t\tconst cbArgCache = Object.create(null);\n\t\t\t\t\t\t\t\t\tfor (; stmt.step(); __execLock.delete(stmt)) {\n\t\t\t\t\t\t\t\t\t\tif (0 === gotColNames++) stmt.getColumnNames(cbArgCache.columnNames = opt.columnNames || []);\n\t\t\t\t\t\t\t\t\t\t__execLock.add(stmt);\n\t\t\t\t\t\t\t\t\t\tconst row = arg.cbArg(stmt, cbArgCache);\n\t\t\t\t\t\t\t\t\t\tif (resultRows) resultRows.push(row);\n\t\t\t\t\t\t\t\t\t\tif (callback && false === callback.call(opt, row, stmt)) break;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t__execLock.delete(stmt);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (0 === gotColNames) stmt.getColumnNames(opt.columnNames);\n\t\t\t\t\t\t\t} else stmt.step();\n\t\t\t\t\t\t\tstmt.reset().finalize();\n\t\t\t\t\t\t\tstmt = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (stmt) {\n\t\t\t\t\t\t\t__execLock.delete(stmt);\n\t\t\t\t\t\t\tstmt.finalize();\n\t\t\t\t\t\t}\n\t\t\t\t\t\twasm.scopedAllocPop(stack);\n\t\t\t\t\t}\n\t\t\t\t\treturn arg.returnVal();\n\t\t\t\t},\n\t\t\t\tcreateFunction: function f(name, xFunc, opt) {\n\t\t\t\t\tconst isFunc = (f) => f instanceof Function;\n\t\t\t\t\tswitch (arguments.length) {\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\topt = name;\n\t\t\t\t\t\t\tname = opt.name;\n\t\t\t\t\t\t\txFunc = opt.xFunc || 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\tif (!isFunc(xFunc)) {\n\t\t\t\t\t\t\t\topt = xFunc;\n\t\t\t\t\t\t\t\txFunc = opt.xFunc || 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 3: break;\n\t\t\t\t\t\tdefault: break;\n\t\t\t\t\t}\n\t\t\t\t\tif (!opt) opt = {};\n\t\t\t\t\tif (\"string\" !== typeof name) toss3(\"Invalid arguments: missing function name.\");\n\t\t\t\t\tlet xStep = opt.xStep || 0;\n\t\t\t\t\tlet xFinal = opt.xFinal || 0;\n\t\t\t\t\tconst xValue = opt.xValue || 0;\n\t\t\t\t\tconst xInverse = opt.xInverse || 0;\n\t\t\t\t\tlet isWindow = void 0;\n\t\t\t\t\tif (isFunc(xFunc)) {\n\t\t\t\t\t\tisWindow = false;\n\t\t\t\t\t\tif (isFunc(xStep) || isFunc(xFinal)) toss3(\"Ambiguous arguments: scalar or aggregate?\");\n\t\t\t\t\t\txStep = xFinal = null;\n\t\t\t\t\t} else if (isFunc(xStep)) {\n\t\t\t\t\t\tif (!isFunc(xFinal)) toss3(\"Missing xFinal() callback for aggregate or window UDF.\");\n\t\t\t\t\t\txFunc = null;\n\t\t\t\t\t} else if (isFunc(xFinal)) toss3(\"Missing xStep() callback for aggregate or window UDF.\");\n\t\t\t\t\telse toss3(\"Missing function-type properties.\");\n\t\t\t\t\tif (false === isWindow) {\n\t\t\t\t\t\tif (isFunc(xValue) || isFunc(xInverse)) toss3(\"xValue and xInverse are not permitted for non-window UDFs.\");\n\t\t\t\t\t} else if (isFunc(xValue)) {\n\t\t\t\t\t\tif (!isFunc(xInverse)) toss3(\"xInverse must be provided if xValue is.\");\n\t\t\t\t\t\tisWindow = true;\n\t\t\t\t\t} else if (isFunc(xInverse)) toss3(\"xValue must be provided if xInverse is.\");\n\t\t\t\t\tconst pApp = opt.pApp;\n\t\t\t\t\tif (void 0 !== pApp && null !== pApp && !wasm.isPtr(pApp)) toss3(\"Invalid value for pApp property. Must be a legal WASM pointer value.\");\n\t\t\t\t\tconst xDestroy = opt.xDestroy || 0;\n\t\t\t\t\tif (xDestroy && !isFunc(xDestroy)) toss3(\"xDestroy property must be a function.\");\n\t\t\t\t\tlet fFlags = 0;\n\t\t\t\t\tif (getOwnOption(opt, \"deterministic\")) fFlags |= capi.SQLITE_DETERMINISTIC;\n\t\t\t\t\tif (getOwnOption(opt, \"directOnly\")) fFlags |= capi.SQLITE_DIRECTONLY;\n\t\t\t\t\tif (getOwnOption(opt, \"innocuous\")) fFlags |= capi.SQLITE_INNOCUOUS;\n\t\t\t\t\tname = name.toLowerCase();\n\t\t\t\t\tconst xArity = xFunc || xStep;\n\t\t\t\t\tconst arity = getOwnOption(opt, \"arity\");\n\t\t\t\t\tconst arityArg = \"number\" === typeof arity ? arity : xArity.length ? xArity.length - 1 : 0;\n\t\t\t\t\tlet rc;\n\t\t\t\t\tif (isWindow) rc = capi.sqlite3_create_window_function(this.pointer, name, arityArg, capi.SQLITE_UTF8 | fFlags, pApp || 0, xStep, xFinal, xValue, xInverse, xDestroy);\n\t\t\t\t\telse rc = capi.sqlite3_create_function_v2(this.pointer, name, arityArg, capi.SQLITE_UTF8 | fFlags, pApp || 0, xFunc, xStep, xFinal, xDestroy);\n\t\t\t\t\tDB.checkRc(this, rc);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tselectValue: function(sql, bind, asType) {\n\t\t\t\t\treturn __selectFirstRow(this, sql, bind, 0, asType);\n\t\t\t\t},\n\t\t\t\tselectValues: function(sql, bind, asType) {\n\t\t\t\t\tconst stmt = this.prepare(sql), rc = [];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tstmt.bind(bind);\n\t\t\t\t\t\twhile (stmt.step()) rc.push(stmt.get(0, asType));\n\t\t\t\t\t\tstmt.reset();\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tstmt.finalize();\n\t\t\t\t\t}\n\t\t\t\t\treturn rc;\n\t\t\t\t},\n\t\t\t\tselectArray: function(sql, bind) {\n\t\t\t\t\treturn __selectFirstRow(this, sql, bind, []);\n\t\t\t\t},\n\t\t\t\tselectObject: function(sql, bind) {\n\t\t\t\t\treturn __selectFirstRow(this, sql, bind, {});\n\t\t\t\t},\n\t\t\t\tselectArrays: function(sql, bind) {\n\t\t\t\t\treturn __selectAll(this, sql, bind, \"array\");\n\t\t\t\t},\n\t\t\t\tselectObjects: function(sql, bind) {\n\t\t\t\t\treturn __selectAll(this, sql, bind, \"object\");\n\t\t\t\t},\n\t\t\t\topenStatementCount: function() {\n\t\t\t\t\treturn this.pointer ? Object.keys(__stmtMap.get(this)).length : 0;\n\t\t\t\t},\n\t\t\t\ttransaction: function(callback) {\n\t\t\t\t\tlet opener = \"BEGIN\";\n\t\t\t\t\tif (arguments.length > 1) {\n\t\t\t\t\t\tif (/[^a-zA-Z]/.test(arguments[0])) toss3(capi.SQLITE_MISUSE, \"Invalid argument for BEGIN qualifier.\");\n\t\t\t\t\t\topener += \" \" + arguments[0];\n\t\t\t\t\t\tcallback = arguments[1];\n\t\t\t\t\t}\n\t\t\t\t\taffirmDbOpen(this).exec(opener);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst rc = callback(this);\n\t\t\t\t\t\tthis.exec(\"COMMIT\");\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthis.exec(\"ROLLBACK\");\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsavepoint: function(callback) {\n\t\t\t\t\taffirmDbOpen(this).exec(\"SAVEPOINT oo1\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst rc = callback(this);\n\t\t\t\t\t\tthis.exec(\"RELEASE oo1\");\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthis.exec(\"ROLLBACK to SAVEPOINT oo1; RELEASE SAVEPOINT oo1\");\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcheckRc: function(resultCode) {\n\t\t\t\t\treturn checkSqlite3Rc(this, resultCode);\n\t\t\t\t}\n\t\t\t};\n\t\t\tDB.wrapHandle = function(pDb, takeOwnership = false) {\n\t\t\t\tif (!pDb || !wasm.isPtr(pDb)) throw new sqlite3.SQLite3Error(capi.SQLITE_MISUSE, \"Argument must be a WASM sqlite3 pointer\");\n\t\t\t\treturn new DB({\n\t\t\t\t\t\"sqlite3*\": pDb,\n\t\t\t\t\t\"sqlite3*:takeOwnership\": !!takeOwnership\n\t\t\t\t});\n\t\t\t};\n\t\t\tconst affirmStmtOpen = function(stmt) {\n\t\t\t\tif (!stmt.pointer) toss3(\"Stmt has been closed.\");\n\t\t\t\treturn stmt;\n\t\t\t};\n\t\t\tconst isSupportedBindType = function(v) {\n\t\t\t\tlet t = BindTypes[null === v || void 0 === v ? \"null\" : typeof v];\n\t\t\t\tswitch (t) {\n\t\t\t\t\tcase BindTypes.boolean:\n\t\t\t\t\tcase BindTypes.null:\n\t\t\t\t\tcase BindTypes.number:\n\t\t\t\t\tcase BindTypes.string: return t;\n\t\t\t\t\tcase BindTypes.bigint: return wasm.bigIntEnabled ? t : void 0;\n\t\t\t\t\tdefault: return util.isBindableTypedArray(v) ? BindTypes.blob : void 0;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst affirmSupportedBindType = function(v) {\n\t\t\t\treturn isSupportedBindType(v) || toss3(\"Unsupported bind() argument type:\", typeof v);\n\t\t\t};\n\t\t\tconst affirmParamIndex = function(stmt, key) {\n\t\t\t\tconst n = \"number\" === typeof key ? key : capi.sqlite3_bind_parameter_index(stmt.pointer, key);\n\t\t\t\tif (0 === n || !util.isInt32(n)) toss3(\"Invalid bind() parameter name: \" + key);\n\t\t\t\telse if (n < 1 || n > stmt.parameterCount) toss3(\"Bind index\", key, \"is out of range.\");\n\t\t\t\treturn n;\n\t\t\t};\n\t\t\tconst __execLock = /* @__PURE__ */ new Set();\n\t\t\tconst __stmtMayGet = /* @__PURE__ */ new Set();\n\t\t\tconst affirmNotLockedByExec = function(stmt, currentOpName) {\n\t\t\t\tif (__execLock.has(stmt)) toss3(\"Operation is illegal when statement is locked:\", currentOpName);\n\t\t\t\treturn stmt;\n\t\t\t};\n\t\t\tconst bindOne = function f(stmt, ndx, bindType, val) {\n\t\t\t\taffirmNotLockedByExec(affirmStmtOpen(stmt), \"bind()\");\n\t\t\t\tif (!f._) {\n\t\t\t\t\tf._tooBigInt = (v) => toss3(\"BigInt value is too big to store without precision loss:\", v);\n\t\t\t\t\tf._ = { string: function(stmt, ndx, val, asBlob) {\n\t\t\t\t\t\tconst [pStr, n] = wasm.allocCString(val, true);\n\t\t\t\t\t\treturn (asBlob ? capi.sqlite3_bind_blob : capi.sqlite3_bind_text)(stmt.pointer, ndx, pStr, n, capi.SQLITE_WASM_DEALLOC);\n\t\t\t\t\t} };\n\t\t\t\t}\n\t\t\t\taffirmSupportedBindType(val);\n\t\t\t\tndx = affirmParamIndex(stmt, ndx);\n\t\t\t\tlet rc = 0;\n\t\t\t\tswitch (null === val || void 0 === val ? BindTypes.null : bindType) {\n\t\t\t\t\tcase BindTypes.null:\n\t\t\t\t\t\trc = capi.sqlite3_bind_null(stmt.pointer, ndx);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BindTypes.string:\n\t\t\t\t\t\trc = f._.string(stmt, ndx, val, false);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BindTypes.number: {\n\t\t\t\t\t\tlet m;\n\t\t\t\t\t\tif (util.isInt32(val)) m = capi.sqlite3_bind_int;\n\t\t\t\t\t\telse if (\"bigint\" === typeof val) if (!util.bigIntFits64(val)) f._tooBigInt(val);\n\t\t\t\t\t\telse if (wasm.bigIntEnabled) m = capi.sqlite3_bind_int64;\n\t\t\t\t\t\telse if (util.bigIntFitsDouble(val)) {\n\t\t\t\t\t\t\tval = Number(val);\n\t\t\t\t\t\t\tm = capi.sqlite3_bind_double;\n\t\t\t\t\t\t} else f._tooBigInt(val);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tval = Number(val);\n\t\t\t\t\t\t\tif (wasm.bigIntEnabled && Number.isInteger(val)) m = capi.sqlite3_bind_int64;\n\t\t\t\t\t\t\telse m = capi.sqlite3_bind_double;\n\t\t\t\t\t\t}\n\t\t\t\t\t\trc = m(stmt.pointer, ndx, val);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase BindTypes.boolean:\n\t\t\t\t\t\trc = capi.sqlite3_bind_int(stmt.pointer, ndx, val ? 1 : 0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BindTypes.blob: {\n\t\t\t\t\t\tif (\"string\" === typeof val) {\n\t\t\t\t\t\t\trc = f._.string(stmt, ndx, val, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (val instanceof ArrayBuffer) val = new Uint8Array(val);\n\t\t\t\t\t\telse if (!util.isBindableTypedArray(val)) toss3(\"Binding a value as a blob requires\", \"that it be a string, Uint8Array, Int8Array, or ArrayBuffer.\");\n\t\t\t\t\t\tconst pBlob = wasm.alloc(val.byteLength || 1);\n\t\t\t\t\t\twasm.heap8().set(val.byteLength ? val : [0], Number(pBlob));\n\t\t\t\t\t\trc = capi.sqlite3_bind_blob(stmt.pointer, ndx, pBlob, val.byteLength, capi.SQLITE_WASM_DEALLOC);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsqlite3.config.warn(\"Unsupported bind() argument type:\", val);\n\t\t\t\t\t\ttoss3(\"Unsupported bind() argument type: \" + typeof val);\n\t\t\t\t}\n\t\t\t\tif (rc) DB.checkRc(stmt.db.pointer, rc);\n\t\t\t\treturn stmt;\n\t\t\t};\n\t\t\tStmt.prototype = {\n\t\t\t\tfinalize: function() {\n\t\t\t\t\tconst ptr = this.pointer;\n\t\t\t\t\tif (ptr) {\n\t\t\t\t\t\taffirmNotLockedByExec(this, \"finalize()\");\n\t\t\t\t\t\tconst rc = __doesNotOwnHandle.delete(this) ? 0 : capi.sqlite3_finalize(ptr);\n\t\t\t\t\t\tdelete __stmtMap.get(this.db)[ptr];\n\t\t\t\t\t\t__ptrMap.delete(this);\n\t\t\t\t\t\t__execLock.delete(this);\n\t\t\t\t\t\t__stmtMayGet.delete(this);\n\t\t\t\t\t\tdelete this.parameterCount;\n\t\t\t\t\t\tdelete this.db;\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclearBindings: function() {\n\t\t\t\t\taffirmNotLockedByExec(affirmStmtOpen(this), \"clearBindings()\");\n\t\t\t\t\tcapi.sqlite3_clear_bindings(this.pointer);\n\t\t\t\t\t__stmtMayGet.delete(this);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\treset: function(alsoClearBinds) {\n\t\t\t\t\taffirmNotLockedByExec(this, \"reset()\");\n\t\t\t\t\tif (alsoClearBinds) this.clearBindings();\n\t\t\t\t\tconst rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer);\n\t\t\t\t\t__stmtMayGet.delete(this);\n\t\t\t\t\tcheckSqlite3Rc(this.db, rc);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tbind: function() {\n\t\t\t\t\taffirmStmtOpen(this);\n\t\t\t\t\tlet ndx, arg;\n\t\t\t\t\tswitch (arguments.length) {\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tndx = 1;\n\t\t\t\t\t\t\targ = arguments[0];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\tndx = arguments[0];\n\t\t\t\t\t\t\targ = arguments[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: toss3(\"Invalid bind() arguments.\");\n\t\t\t\t\t}\n\t\t\t\t\tif (void 0 === arg) return this;\n\t\t\t\t\telse if (!this.parameterCount) toss3(\"This statement has no bindable parameters.\");\n\t\t\t\t\t__stmtMayGet.delete(this);\n\t\t\t\t\tif (null === arg) return bindOne(this, ndx, BindTypes.null, arg);\n\t\t\t\t\telse if (Array.isArray(arg)) {\n\t\t\t\t\t\tif (1 !== arguments.length) toss3(\"When binding an array, an index argument is not permitted.\");\n\t\t\t\t\t\targ.forEach((v, i) => bindOne(this, i + 1, affirmSupportedBindType(v), v));\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t} else if (arg instanceof ArrayBuffer) arg = new Uint8Array(arg);\n\t\t\t\t\tif (\"object\" === typeof arg && !util.isBindableTypedArray(arg)) {\n\t\t\t\t\t\tif (1 !== arguments.length) toss3(\"When binding an object, an index argument is not permitted.\");\n\t\t\t\t\t\tObject.keys(arg).forEach((k) => bindOne(this, k, affirmSupportedBindType(arg[k]), arg[k]));\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t} else return bindOne(this, ndx, affirmSupportedBindType(arg), arg);\n\t\t\t\t\ttoss3(\"Should not reach this point.\");\n\t\t\t\t},\n\t\t\t\tbindAsBlob: function(ndx, arg) {\n\t\t\t\t\taffirmStmtOpen(this);\n\t\t\t\t\tif (1 === arguments.length) {\n\t\t\t\t\t\targ = ndx;\n\t\t\t\t\t\tndx = 1;\n\t\t\t\t\t}\n\t\t\t\t\tconst t = affirmSupportedBindType(arg);\n\t\t\t\t\tif (BindTypes.string !== t && BindTypes.blob !== t && BindTypes.null !== t) toss3(\"Invalid value type for bindAsBlob()\");\n\t\t\t\t\treturn bindOne(this, ndx, BindTypes.blob, arg);\n\t\t\t\t},\n\t\t\t\tstep: function() {\n\t\t\t\t\taffirmNotLockedByExec(this, \"step()\");\n\t\t\t\t\tconst rc = capi.sqlite3_step(affirmStmtOpen(this).pointer);\n\t\t\t\t\tswitch (rc) {\n\t\t\t\t\t\tcase capi.SQLITE_DONE:\n\t\t\t\t\t\t\t__stmtMayGet.delete(this);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\tcase capi.SQLITE_ROW:\n\t\t\t\t\t\t\t__stmtMayGet.add(this);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t__stmtMayGet.delete(this);\n\t\t\t\t\t\t\tsqlite3.config.warn(\"sqlite3_step() rc=\", rc, capi.sqlite3_js_rc_str(rc), \"SQL =\", capi.sqlite3_sql(this.pointer));\n\t\t\t\t\t\t\tDB.checkRc(this.db.pointer, rc);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstepReset: function() {\n\t\t\t\t\tthis.step();\n\t\t\t\t\treturn this.reset();\n\t\t\t\t},\n\t\t\t\tstepFinalize: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst rc = this.step();\n\t\t\t\t\t\tthis.reset();\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis.finalize();\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tget: function(ndx, asType) {\n\t\t\t\t\tif (!__stmtMayGet.has(affirmStmtOpen(this))) toss3(\"Stmt.step() has not (recently) returned true.\");\n\t\t\t\t\tif (Array.isArray(ndx)) {\n\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\tconst n = this.columnCount;\n\t\t\t\t\t\twhile (i < n) ndx[i] = this.get(i++);\n\t\t\t\t\t\treturn ndx;\n\t\t\t\t\t} else if (ndx && \"object\" === typeof ndx) {\n\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\tconst n = this.columnCount;\n\t\t\t\t\t\twhile (i < n) ndx[capi.sqlite3_column_name(this.pointer, i)] = this.get(i++);\n\t\t\t\t\t\treturn ndx;\n\t\t\t\t\t}\n\t\t\t\t\taffirmColIndex(this, ndx);\n\t\t\t\t\tswitch (void 0 === asType ? capi.sqlite3_column_type(this.pointer, ndx) : asType) {\n\t\t\t\t\t\tcase capi.SQLITE_NULL: return null;\n\t\t\t\t\t\tcase capi.SQLITE_INTEGER: if (wasm.bigIntEnabled) {\n\t\t\t\t\t\t\tconst rc = capi.sqlite3_column_int64(this.pointer, ndx);\n\t\t\t\t\t\t\tif (rc >= Number.MIN_SAFE_INTEGER && rc <= Number.MAX_SAFE_INTEGER) return Number(rc).valueOf();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst rc = capi.sqlite3_column_double(this.pointer, ndx);\n\t\t\t\t\t\t\tif (rc > Number.MAX_SAFE_INTEGER || rc < Number.MIN_SAFE_INTEGER) toss3(\"Integer is out of range for JS integer range: \" + rc);\n\t\t\t\t\t\t\treturn util.isInt32(rc) ? rc | 0 : rc;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase capi.SQLITE_FLOAT: return capi.sqlite3_column_double(this.pointer, ndx);\n\t\t\t\t\t\tcase capi.SQLITE_TEXT: return capi.sqlite3_column_text(this.pointer, ndx);\n\t\t\t\t\t\tcase capi.SQLITE_BLOB: {\n\t\t\t\t\t\t\tconst n = capi.sqlite3_column_bytes(this.pointer, ndx), ptr = capi.sqlite3_column_blob(this.pointer, ndx), rc = new Uint8Array(n);\n\t\t\t\t\t\t\tif (n) {\n\t\t\t\t\t\t\t\trc.set(wasm.heap8u().slice(Number(ptr), Number(ptr) + n), 0);\n\t\t\t\t\t\t\t\tif (this.db._blobXfer instanceof Array) this.db._blobXfer.push(rc.buffer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: toss3(\"Don't know how to translate\", \"type of result column #\" + ndx + \".\");\n\t\t\t\t\t}\n\t\t\t\t\ttoss3(\"Not reached.\");\n\t\t\t\t},\n\t\t\t\tgetInt: function(ndx) {\n\t\t\t\t\treturn this.get(ndx, capi.SQLITE_INTEGER);\n\t\t\t\t},\n\t\t\t\tgetFloat: function(ndx) {\n\t\t\t\t\treturn this.get(ndx, capi.SQLITE_FLOAT);\n\t\t\t\t},\n\t\t\t\tgetString: function(ndx) {\n\t\t\t\t\treturn this.get(ndx, capi.SQLITE_TEXT);\n\t\t\t\t},\n\t\t\t\tgetBlob: function(ndx) {\n\t\t\t\t\treturn this.get(ndx, capi.SQLITE_BLOB);\n\t\t\t\t},\n\t\t\t\tgetJSON: function(ndx) {\n\t\t\t\t\tconst s = this.get(ndx, capi.SQLITE_STRING);\n\t\t\t\t\treturn null === s ? s : JSON.parse(s);\n\t\t\t\t},\n\t\t\t\tgetColumnName: function(ndx) {\n\t\t\t\t\treturn capi.sqlite3_column_name(affirmColIndex(affirmStmtOpen(this), ndx).pointer, ndx);\n\t\t\t\t},\n\t\t\t\tgetColumnNames: function(tgt = []) {\n\t\t\t\t\taffirmColIndex(affirmStmtOpen(this), 0);\n\t\t\t\t\tconst n = this.columnCount;\n\t\t\t\t\tfor (let i = 0; i < n; ++i) tgt.push(capi.sqlite3_column_name(this.pointer, i));\n\t\t\t\t\treturn tgt;\n\t\t\t\t},\n\t\t\t\tgetParamIndex: function(name) {\n\t\t\t\t\treturn affirmStmtOpen(this).parameterCount ? capi.sqlite3_bind_parameter_index(this.pointer, name) : void 0;\n\t\t\t\t},\n\t\t\t\tgetParamName: function(ndx) {\n\t\t\t\t\treturn affirmStmtOpen(this).parameterCount ? capi.sqlite3_bind_parameter_name(this.pointer, ndx) : void 0;\n\t\t\t\t},\n\t\t\t\tisBusy: function() {\n\t\t\t\t\treturn 0 !== capi.sqlite3_stmt_busy(affirmStmtOpen(this));\n\t\t\t\t},\n\t\t\t\tisReadOnly: function() {\n\t\t\t\t\treturn 0 !== capi.sqlite3_stmt_readonly(affirmStmtOpen(this));\n\t\t\t\t}\n\t\t\t};\n\t\t\t{\n\t\t\t\tconst prop = {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn __ptrMap.get(this);\n\t\t\t\t\t},\n\t\t\t\t\tset: () => toss3(\"The pointer property is read-only.\")\n\t\t\t\t};\n\t\t\t\tObject.defineProperty(Stmt.prototype, \"pointer\", prop);\n\t\t\t\tObject.defineProperty(DB.prototype, \"pointer\", prop);\n\t\t\t}\n\t\t\tObject.defineProperty(Stmt.prototype, \"columnCount\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn capi.sqlite3_column_count(this.pointer);\n\t\t\t\t},\n\t\t\t\tset: () => toss3(\"The columnCount property is read-only.\")\n\t\t\t});\n\t\t\tObject.defineProperty(Stmt.prototype, \"parameterCount\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn capi.sqlite3_bind_parameter_count(this.pointer);\n\t\t\t\t},\n\t\t\t\tset: () => toss3(\"The parameterCount property is read-only.\")\n\t\t\t});\n\t\t\tStmt.wrapHandle = function(oo1db, pStmt, takeOwnership = false) {\n\t\t\t\tif (!(oo1db instanceof DB) || !oo1db.pointer) throw new sqlite3.SQLite3Error(sqlite3.SQLITE_MISUSE, \"First argument must be an opened sqlite3.oo1.DB instance\");\n\t\t\t\tif (!pStmt || !wasm.isPtr(pStmt)) throw new sqlite3.SQLite3Error(sqlite3.SQLITE_MISUSE, \"Second argument must be a WASM sqlite3_stmt pointer\");\n\t\t\t\treturn new Stmt(oo1db, pStmt, BindTypes, !!takeOwnership);\n\t\t\t};\n\t\t\tsqlite3.oo1 = {\n\t\t\t\tDB,\n\t\t\t\tStmt\n\t\t\t};\n\t\t});\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\tconst util = sqlite3.util;\n\t\t\tsqlite3.initWorker1API = function() {\n\t\t\t\t\"use strict\";\n\t\t\t\tconst toss = (...args) => {\n\t\t\t\t\tthrow new Error(args.join(\" \"));\n\t\t\t\t};\n\t\t\t\tif (!(globalThis.WorkerGlobalScope instanceof Function)) toss(\"initWorker1API() must be run from a Worker thread.\");\n\t\t\t\tconst sqlite3 = this.sqlite3 || toss(\"Missing this.sqlite3 object.\");\n\t\t\t\tconst DB = sqlite3.oo1.DB;\n\t\t\t\tconst getDbId = function(db) {\n\t\t\t\t\tlet id = wState.idMap.get(db);\n\t\t\t\t\tif (id) return id;\n\t\t\t\t\tid = \"db#\" + ++wState.idSeq + \":\" + Math.floor(Math.random() * 1e8) + \":\" + Math.floor(Math.random() * 1e8);\n\t\t\t\t\twState.idMap.set(db, id);\n\t\t\t\t\treturn id;\n\t\t\t\t};\n\t\t\t\tconst wState = {\n\t\t\t\t\tdbList: [],\n\t\t\t\t\tidSeq: 0,\n\t\t\t\t\tidMap: /* @__PURE__ */ new WeakMap(),\n\t\t\t\t\txfer: [],\n\t\t\t\t\topen: function(opt) {\n\t\t\t\t\t\tconst db = new DB(opt);\n\t\t\t\t\t\tthis.dbs[getDbId(db)] = db;\n\t\t\t\t\t\tif (this.dbList.indexOf(db) < 0) this.dbList.push(db);\n\t\t\t\t\t\treturn db;\n\t\t\t\t\t},\n\t\t\t\t\tclose: function(db, alsoUnlink) {\n\t\t\t\t\t\tif (db) {\n\t\t\t\t\t\t\tdelete this.dbs[getDbId(db)];\n\t\t\t\t\t\t\tconst filename = db.filename;\n\t\t\t\t\t\t\tconst pVfs = util.sqlite3__wasm_db_vfs(db.pointer, 0);\n\t\t\t\t\t\t\tdb.close();\n\t\t\t\t\t\t\tconst ddNdx = this.dbList.indexOf(db);\n\t\t\t\t\t\t\tif (ddNdx >= 0) this.dbList.splice(ddNdx, 1);\n\t\t\t\t\t\t\tif (alsoUnlink && filename && pVfs) util.sqlite3__wasm_vfs_unlink(pVfs, filename);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tpost: function(msg, xferList) {\n\t\t\t\t\t\tif (xferList && xferList.length) {\n\t\t\t\t\t\t\tglobalThis.postMessage(msg, Array.from(xferList));\n\t\t\t\t\t\t\txferList.length = 0;\n\t\t\t\t\t\t} else globalThis.postMessage(msg);\n\t\t\t\t\t},\n\t\t\t\t\tdbs: Object.create(null),\n\t\t\t\t\tgetDb: function(id, require = true) {\n\t\t\t\t\t\treturn this.dbs[id] || (require ? toss(\"Unknown (or closed) DB ID:\", id) : void 0);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst affirmDbOpen = function(db = wState.dbList[0]) {\n\t\t\t\t\treturn db && db.pointer ? db : toss(\"DB is not opened.\");\n\t\t\t\t};\n\t\t\t\tconst getMsgDb = function(msgData, affirmExists = true) {\n\t\t\t\t\tconst db = wState.getDb(msgData.dbId, false) || wState.dbList[0];\n\t\t\t\t\treturn affirmExists ? affirmDbOpen(db) : db;\n\t\t\t\t};\n\t\t\t\tconst getDefaultDbId = function() {\n\t\t\t\t\treturn wState.dbList[0] && getDbId(wState.dbList[0]);\n\t\t\t\t};\n\t\t\t\tconst wMsgHandler = {\n\t\t\t\t\topen: function(ev) {\n\t\t\t\t\t\tconst oargs = Object.create(null), args = ev.args || Object.create(null);\n\t\t\t\t\t\tif (args.simulateError) toss(\"Throwing because of simulateError flag.\");\n\t\t\t\t\t\tconst rc = Object.create(null);\n\t\t\t\t\t\toargs.vfs = args.vfs;\n\t\t\t\t\t\toargs.filename = args.filename || \"\";\n\t\t\t\t\t\tconst db = wState.open(oargs);\n\t\t\t\t\t\trc.filename = db.filename;\n\t\t\t\t\t\trc.persistent = !!sqlite3.capi.sqlite3_js_db_uses_vfs(db.pointer, \"opfs\");\n\t\t\t\t\t\trc.dbId = getDbId(db);\n\t\t\t\t\t\trc.vfs = db.dbVfsName();\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t},\n\t\t\t\t\tclose: function(ev) {\n\t\t\t\t\t\tconst db = getMsgDb(ev, false);\n\t\t\t\t\t\tconst response = { filename: db && db.filename };\n\t\t\t\t\t\tif (db) {\n\t\t\t\t\t\t\tconst doUnlink = ev.args && \"object\" === typeof ev.args ? !!ev.args.unlink : false;\n\t\t\t\t\t\t\twState.close(db, doUnlink);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t},\n\t\t\t\t\texec: function(ev) {\n\t\t\t\t\t\tconst rc = \"string\" === typeof ev.args ? { sql: ev.args } : ev.args || Object.create(null);\n\t\t\t\t\t\tif (\"stmt\" === rc.rowMode) toss(\"Invalid rowMode for 'exec': stmt mode\", \"does not work in the Worker API.\");\n\t\t\t\t\t\telse if (!rc.sql) toss(\"'exec' requires input SQL.\");\n\t\t\t\t\t\tconst db = getMsgDb(ev);\n\t\t\t\t\t\tif (rc.callback || Array.isArray(rc.resultRows)) db._blobXfer = wState.xfer;\n\t\t\t\t\t\tconst theCallback = rc.callback;\n\t\t\t\t\t\tlet rowNumber = 0;\n\t\t\t\t\t\tconst hadColNames = !!rc.columnNames;\n\t\t\t\t\t\tif (\"string\" === typeof theCallback) {\n\t\t\t\t\t\t\tif (!hadColNames) rc.columnNames = [];\n\t\t\t\t\t\t\trc.callback = function(row, stmt) {\n\t\t\t\t\t\t\t\twState.post({\n\t\t\t\t\t\t\t\t\ttype: theCallback,\n\t\t\t\t\t\t\t\t\tcolumnNames: rc.columnNames,\n\t\t\t\t\t\t\t\t\trowNumber: ++rowNumber,\n\t\t\t\t\t\t\t\t\trow\n\t\t\t\t\t\t\t\t}, wState.xfer);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst changeCount = !!rc.countChanges ? db.changes(true, 64 === rc.countChanges) : void 0;\n\t\t\t\t\t\t\tdb.exec(rc);\n\t\t\t\t\t\t\tif (void 0 !== changeCount) rc.changeCount = db.changes(true, 64 === rc.countChanges) - changeCount;\n\t\t\t\t\t\t\tconst lastInsertRowId = !!rc.lastInsertRowId ? sqlite3.capi.sqlite3_last_insert_rowid(db) : void 0;\n\t\t\t\t\t\t\tif (void 0 !== lastInsertRowId) rc.lastInsertRowId = lastInsertRowId;\n\t\t\t\t\t\t\tif (rc.callback instanceof Function) {\n\t\t\t\t\t\t\t\trc.callback = theCallback;\n\t\t\t\t\t\t\t\twState.post({\n\t\t\t\t\t\t\t\t\ttype: theCallback,\n\t\t\t\t\t\t\t\t\tcolumnNames: rc.columnNames,\n\t\t\t\t\t\t\t\t\trowNumber: null,\n\t\t\t\t\t\t\t\t\trow: void 0\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tdelete db._blobXfer;\n\t\t\t\t\t\t\tif (rc.callback) rc.callback = theCallback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t},\n\t\t\t\t\t\"config-get\": function() {\n\t\t\t\t\t\tconst rc = Object.create(null), src = sqlite3.config;\n\t\t\t\t\t\t[\"bigIntEnabled\"].forEach(function(k) {\n\t\t\t\t\t\t\tif (Object.getOwnPropertyDescriptor(src, k)) rc[k] = src[k];\n\t\t\t\t\t\t});\n\t\t\t\t\t\trc.version = sqlite3.version;\n\t\t\t\t\t\trc.vfsList = sqlite3.capi.sqlite3_js_vfs_list();\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t},\n\t\t\t\t\texport: function(ev) {\n\t\t\t\t\t\tconst db = getMsgDb(ev);\n\t\t\t\t\t\tconst response = {\n\t\t\t\t\t\t\tbyteArray: sqlite3.capi.sqlite3_js_db_export(db.pointer),\n\t\t\t\t\t\t\tfilename: db.filename,\n\t\t\t\t\t\t\tmimetype: \"application/x-sqlite3\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\twState.xfer.push(response.byteArray.buffer);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t},\n\t\t\t\t\ttoss: function(ev) {\n\t\t\t\t\t\ttoss(\"Testing worker exception\");\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tglobalThis.onmessage = async function(ev) {\n\t\t\t\t\tev = ev.data;\n\t\t\t\t\tlet result, dbId = ev.dbId, evType = ev.type;\n\t\t\t\t\tconst arrivalTime = performance.now();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (wMsgHandler.hasOwnProperty(evType) && wMsgHandler[evType] instanceof Function) result = await wMsgHandler[evType](ev);\n\t\t\t\t\t\telse toss(\"Unknown db worker message type:\", ev.type);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tevType = \"error\";\n\t\t\t\t\t\tresult = {\n\t\t\t\t\t\t\toperation: ev.type,\n\t\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\t\terrorClass: err.name,\n\t\t\t\t\t\t\tinput: ev\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (err.stack) result.stack = \"string\" === typeof err.stack ? err.stack.split(/\\n\\s*/) : err.stack;\n\t\t\t\t\t}\n\t\t\t\t\tif (!dbId) dbId = result.dbId || getDefaultDbId();\n\t\t\t\t\twState.post({\n\t\t\t\t\t\ttype: evType,\n\t\t\t\t\t\tdbId,\n\t\t\t\t\t\tmessageId: ev.messageId,\n\t\t\t\t\t\tworkerReceivedTime: arrivalTime,\n\t\t\t\t\t\tworkerRespondTime: performance.now(),\n\t\t\t\t\t\tdepartureTime: ev.departureTime,\n\t\t\t\t\t\tresult\n\t\t\t\t\t}, wState.xfer);\n\t\t\t\t};\n\t\t\t\tglobalThis.postMessage({\n\t\t\t\t\ttype: \"sqlite3-api\",\n\t\t\t\t\tresult: \"worker1-ready\"\n\t\t\t\t});\n\t\t\t}.bind({ sqlite3 });\n\t\t});\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\tconst wasm = sqlite3.wasm, capi = sqlite3.capi, toss = sqlite3.util.toss3;\n\t\t\tconst vfs = Object.create(null);\n\t\t\tsqlite3.vfs = vfs;\n\t\t\tcapi.sqlite3_vfs.prototype.registerVfs = function(asDefault = false) {\n\t\t\t\tif (!(this instanceof sqlite3.capi.sqlite3_vfs)) toss(\"Expecting a sqlite3_vfs-type argument.\");\n\t\t\t\tconst rc = capi.sqlite3_vfs_register(this, asDefault ? 1 : 0);\n\t\t\t\tif (rc) toss(\"sqlite3_vfs_register(\", this, \") failed with rc\", rc);\n\t\t\t\tif (this.pointer !== capi.sqlite3_vfs_find(this.$zName)) toss(\"BUG: sqlite3_vfs_find(vfs.$zName) failed for just-installed VFS\", this);\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tvfs.installVfs = function(opt) {\n\t\t\t\tlet count = 0;\n\t\t\t\tconst propList = [\"io\", \"vfs\"];\n\t\t\t\tfor (const key of propList) {\n\t\t\t\t\tconst o = opt[key];\n\t\t\t\t\tif (o) {\n\t\t\t\t\t\t++count;\n\t\t\t\t\t\to.struct.installMethods(o.methods, !!o.applyArgcCheck);\n\t\t\t\t\t\tif (\"vfs\" === key) {\n\t\t\t\t\t\t\tif (!o.struct.$zName && \"string\" === typeof o.name) o.struct.addOnDispose(o.struct.$zName = wasm.allocCString(o.name));\n\t\t\t\t\t\t\to.struct.registerVfs(!!o.asDefault);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!count) toss(\"Misuse: installVfs() options object requires at least\", \"one of:\", propList);\n\t\t\t\treturn this;\n\t\t\t};\n\t\t});\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\tif (!sqlite3.wasm.exports.sqlite3_declare_vtab) return;\n\t\t\tconst wasm = sqlite3.wasm, capi = sqlite3.capi, toss = sqlite3.util.toss3;\n\t\t\tconst vtab = Object.create(null);\n\t\t\tsqlite3.vtab = vtab;\n\t\t\tconst sii = capi.sqlite3_index_info;\n\t\t\tsii.prototype.nthConstraint = function(n, asPtr = false) {\n\t\t\t\tif (n < 0 || n >= this.$nConstraint) return false;\n\t\t\t\tconst ptr = wasm.ptr.add(this.$aConstraint, sii.sqlite3_index_constraint.structInfo.sizeof * n);\n\t\t\t\treturn asPtr ? ptr : new sii.sqlite3_index_constraint(ptr);\n\t\t\t};\n\t\t\tsii.prototype.nthConstraintUsage = function(n, asPtr = false) {\n\t\t\t\tif (n < 0 || n >= this.$nConstraint) return false;\n\t\t\t\tconst ptr = wasm.ptr.add(this.$aConstraintUsage, sii.sqlite3_index_constraint_usage.structInfo.sizeof * n);\n\t\t\t\treturn asPtr ? ptr : new sii.sqlite3_index_constraint_usage(ptr);\n\t\t\t};\n\t\t\tsii.prototype.nthOrderBy = function(n, asPtr = false) {\n\t\t\t\tif (n < 0 || n >= this.$nOrderBy) return false;\n\t\t\t\tconst ptr = wasm.ptr.add(this.$aOrderBy, sii.sqlite3_index_orderby.structInfo.sizeof * n);\n\t\t\t\treturn asPtr ? ptr : new sii.sqlite3_index_orderby(ptr);\n\t\t\t};\n\t\t\tconst __xWrapFactory = function(methodName, StructType) {\n\t\t\t\treturn function(ptr, removeMapping = false) {\n\t\t\t\t\tif (0 === arguments.length) ptr = new StructType();\n\t\t\t\t\tif (ptr instanceof StructType) {\n\t\t\t\t\t\tthis.set(ptr.pointer, ptr);\n\t\t\t\t\t\treturn ptr;\n\t\t\t\t\t} else if (!wasm.isPtr(ptr)) sqlite3.SQLite3Error.toss(\"Invalid argument to\", methodName + \"()\");\n\t\t\t\t\tlet rc = this.get(ptr);\n\t\t\t\t\tif (removeMapping) this.delete(ptr);\n\t\t\t\t\treturn rc;\n\t\t\t\t}.bind(/* @__PURE__ */ new Map());\n\t\t\t};\n\t\t\tconst StructPtrMapper = function(name, StructType) {\n\t\t\t\tconst __xWrap = __xWrapFactory(name, StructType);\n\t\t\t\treturn Object.assign(Object.create(null), {\n\t\t\t\t\tStructType,\n\t\t\t\t\tcreate: (ppOut) => {\n\t\t\t\t\t\tconst rc = __xWrap();\n\t\t\t\t\t\twasm.pokePtr(ppOut, rc.pointer);\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t},\n\t\t\t\t\tget: (pCObj) => __xWrap(pCObj),\n\t\t\t\t\tunget: (pCObj) => __xWrap(pCObj, true),\n\t\t\t\t\tdispose: (pCObj) => __xWrap(pCObj, true)?.dispose?.()\n\t\t\t\t});\n\t\t\t};\n\t\t\tvtab.xVtab = StructPtrMapper(\"xVtab\", capi.sqlite3_vtab);\n\t\t\tvtab.xCursor = StructPtrMapper(\"xCursor\", capi.sqlite3_vtab_cursor);\n\t\t\tvtab.xIndexInfo = (pIdxInfo) => new capi.sqlite3_index_info(pIdxInfo);\n\t\t\tvtab.xError = function f(methodName, err, defaultRc) {\n\t\t\t\tif (f.errorReporter instanceof Function) try {\n\t\t\t\t\tf.errorReporter(\"sqlite3_module::\" + methodName + \"(): \" + err.message);\n\t\t\t\t} catch (e) {}\n\t\t\t\tlet rc;\n\t\t\t\tif (err instanceof sqlite3.WasmAllocError) rc = capi.SQLITE_NOMEM;\n\t\t\t\telse if (arguments.length > 2) rc = defaultRc;\n\t\t\t\telse if (err instanceof sqlite3.SQLite3Error) rc = err.resultCode;\n\t\t\t\treturn rc || capi.SQLITE_ERROR;\n\t\t\t};\n\t\t\tvtab.xError.errorReporter = sqlite3.config.error.bind(sqlite3.config);\n\t\t\tvtab.xRowid = (ppRowid64, value) => wasm.poke(ppRowid64, value, \"i64\");\n\t\t\tvtab.setupModule = function(opt) {\n\t\t\t\tlet createdMod = false;\n\t\t\t\tconst mod = this instanceof capi.sqlite3_module ? this : opt.struct || (createdMod = new capi.sqlite3_module());\n\t\t\t\ttry {\n\t\t\t\t\tconst methods = opt.methods || toss(\"Missing 'methods' object.\");\n\t\t\t\t\tfor (const e of Object.entries({\n\t\t\t\t\t\txConnect: \"xCreate\",\n\t\t\t\t\t\txDisconnect: \"xDestroy\"\n\t\t\t\t\t})) {\n\t\t\t\t\t\tconst k = e[0], v = e[1];\n\t\t\t\t\t\tif (true === methods[k]) methods[k] = methods[v];\n\t\t\t\t\t\telse if (true === methods[v]) methods[v] = methods[k];\n\t\t\t\t\t}\n\t\t\t\t\tif (opt.catchExceptions) {\n\t\t\t\t\t\tconst fwrap = function(methodName, func) {\n\t\t\t\t\t\t\tif ([\"xConnect\", \"xCreate\"].indexOf(methodName) >= 0) return function(pDb, pAux, argc, argv, ppVtab, pzErr) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\treturn func(...arguments) || 0;\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tif (!(e instanceof sqlite3.WasmAllocError)) {\n\t\t\t\t\t\t\t\t\t\twasm.dealloc(wasm.peekPtr(pzErr));\n\t\t\t\t\t\t\t\t\t\twasm.pokePtr(pzErr, wasm.allocCString(e.message));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn vtab.xError(methodName, e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\telse return function(...args) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\treturn func(...args) || 0;\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\treturn vtab.xError(methodName, e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst mnames = [\n\t\t\t\t\t\t\t\"xCreate\",\n\t\t\t\t\t\t\t\"xConnect\",\n\t\t\t\t\t\t\t\"xBestIndex\",\n\t\t\t\t\t\t\t\"xDisconnect\",\n\t\t\t\t\t\t\t\"xDestroy\",\n\t\t\t\t\t\t\t\"xOpen\",\n\t\t\t\t\t\t\t\"xClose\",\n\t\t\t\t\t\t\t\"xFilter\",\n\t\t\t\t\t\t\t\"xNext\",\n\t\t\t\t\t\t\t\"xEof\",\n\t\t\t\t\t\t\t\"xColumn\",\n\t\t\t\t\t\t\t\"xRowid\",\n\t\t\t\t\t\t\t\"xUpdate\",\n\t\t\t\t\t\t\t\"xBegin\",\n\t\t\t\t\t\t\t\"xSync\",\n\t\t\t\t\t\t\t\"xCommit\",\n\t\t\t\t\t\t\t\"xRollback\",\n\t\t\t\t\t\t\t\"xFindFunction\",\n\t\t\t\t\t\t\t\"xRename\",\n\t\t\t\t\t\t\t\"xSavepoint\",\n\t\t\t\t\t\t\t\"xRelease\",\n\t\t\t\t\t\t\t\"xRollbackTo\",\n\t\t\t\t\t\t\t\"xShadowName\"\n\t\t\t\t\t\t];\n\t\t\t\t\t\tconst remethods = Object.create(null);\n\t\t\t\t\t\tfor (const k of mnames) {\n\t\t\t\t\t\t\tconst m = methods[k];\n\t\t\t\t\t\t\tif (!(m instanceof Function)) continue;\n\t\t\t\t\t\t\telse if (\"xConnect\" === k && methods.xCreate === m) remethods[k] = methods.xCreate;\n\t\t\t\t\t\t\telse if (\"xCreate\" === k && methods.xConnect === m) remethods[k] = methods.xConnect;\n\t\t\t\t\t\t\telse remethods[k] = fwrap(k, m);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmod.installMethods(remethods, false);\n\t\t\t\t\t} else mod.installMethods(methods, !!opt.applyArgcCheck);\n\t\t\t\t\tif (0 === mod.$iVersion) {\n\t\t\t\t\t\tlet v;\n\t\t\t\t\t\tif (\"number\" === typeof opt.iVersion) v = opt.iVersion;\n\t\t\t\t\t\telse if (mod.$xIntegrity) v = 4;\n\t\t\t\t\t\telse if (mod.$xShadowName) v = 3;\n\t\t\t\t\t\telse if (mod.$xSavePoint || mod.$xRelease || mod.$xRollbackTo) v = 2;\n\t\t\t\t\t\telse v = 1;\n\t\t\t\t\t\tmod.$iVersion = v;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (createdMod) createdMod.dispose();\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t\treturn mod;\n\t\t\t};\n\t\t\tcapi.sqlite3_module.prototype.setupModule = function(opt) {\n\t\t\t\treturn vtab.setupModule.call(this, opt);\n\t\t\t};\n\t\t});\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\t\"use strict\";\n\t\t\tconst capi = sqlite3.capi, sqlite3_kvvfs_methods = capi.sqlite3_kvvfs_methods, KVVfsFile = capi.KVVfsFile, pKvvfs = sqlite3.capi.sqlite3_vfs_find(\"kvvfs\");\n\t\t\tdelete capi.sqlite3_kvvfs_methods;\n\t\t\tdelete capi.KVVfsFile;\n\t\t\tif (!pKvvfs) return;\n\t\t\tconst util = sqlite3.util, wasm = sqlite3.wasm, toss3 = util.toss3, hop = (o, k) => Object.prototype.hasOwnProperty.call(o, k);\n\t\t\tconst kvvfsMethods = new sqlite3_kvvfs_methods(wasm.exports.sqlite3__wasm_kvvfs_methods());\n\t\t\tutil.assert(32 <= kvvfsMethods.$nKeySize, \"unexpected kvvfsMethods.$nKeySize: \" + kvvfsMethods.$nKeySize);\n\t\t\tconst cache = Object.assign(Object.create(null), {\n\t\t\t\trxJournalSuffix: /-journal$/,\n\t\t\t\tzKeyJrnl: wasm.allocCString(\"jrnl\"),\n\t\t\t\tzKeySz: wasm.allocCString(\"sz\"),\n\t\t\t\tkeySize: kvvfsMethods.$nKeySize,\n\t\t\t\tbuffer: Object.assign(Object.create(null), {\n\t\t\t\t\tn: kvvfsMethods.$nBufferSize,\n\t\t\t\t\tpool: Object.create(null)\n\t\t\t\t})\n\t\t\t});\n\t\t\tcache.memBuffer = (id = 0) => cache.buffer.pool[id] ??= wasm.alloc(cache.buffer.n);\n\t\t\tcache.memBufferFree = (id) => {\n\t\t\t\tconst b = cache.buffer.pool[id];\n\t\t\t\tif (b) {\n\t\t\t\t\twasm.dealloc(b);\n\t\t\t\t\tdelete cache.buffer.pool[id];\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst noop = () => {};\n\t\t\tconst debug = sqlite3.__isUnderTest ? (...args) => sqlite3.config.debug(\"kvvfs:\", ...args) : noop;\n\t\t\tconst warn = (...args) => sqlite3.config.warn(\"kvvfs:\", ...args);\n\t\t\tconst error = (...args) => sqlite3.config.error(\"kvvfs:\", ...args);\n\t\t\tclass KVVfsStorage {\n\t\t\t\t#map;\n\t\t\t\t#keys;\n\t\t\t\t#getKeys() {\n\t\t\t\t\treturn this.#keys ??= Object.keys(this.#map);\n\t\t\t\t}\n\t\t\t\tconstructor() {\n\t\t\t\t\tthis.clear();\n\t\t\t\t}\n\t\t\t\tkey(n) {\n\t\t\t\t\tconst k = this.#getKeys();\n\t\t\t\t\treturn n < k.length ? k[n] : null;\n\t\t\t\t}\n\t\t\t\tgetItem(k) {\n\t\t\t\t\treturn this.#map[k] ?? null;\n\t\t\t\t}\n\t\t\t\tsetItem(k, v) {\n\t\t\t\t\tif (!hop(this.#map, k)) this.#keys = null;\n\t\t\t\t\tthis.#map[k] = \"\" + v;\n\t\t\t\t}\n\t\t\t\tremoveItem(k) {\n\t\t\t\t\tif (delete this.#map[k]) this.#keys = null;\n\t\t\t\t}\n\t\t\t\tclear() {\n\t\t\t\t\tthis.#map = Object.create(null);\n\t\t\t\t\tthis.#keys = null;\n\t\t\t\t}\n\t\t\t\tget length() {\n\t\t\t\t\treturn this.#getKeys().length;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst kvvfsIsPersistentName = (v) => \"local\" === v || \"session\" === v;\n\t\t\tconst kvvfsKeyPrefix = (v) => kvvfsIsPersistentName(v) ? \"kvvfs-\" + v + \"-\" : \"\";\n\t\t\tconst validateStorageName = function(n, mayBeJournal = false) {\n\t\t\t\tif (kvvfsIsPersistentName(n)) return;\n\t\t\t\tconst len = new Blob([n]).size;\n\t\t\t\tif (!len) toss3(capi.SQLITE_MISUSE, \"Empty name is not permitted.\");\n\t\t\t\tlet maxLen = cache.keySize - 1;\n\t\t\t\tif (cache.rxJournalSuffix.test(n)) {\n\t\t\t\t\tif (!mayBeJournal) toss3(capi.SQLITE_MISUSE, \"Storage names may not have a '-journal' suffix.\");\n\t\t\t\t} else if ([\"-wal\", \"-shm\"].filter((v) => n.endsWith(v)).length) toss3(capi.SQLITE_MISUSE, \"Storage names may not have a -wal or -shm suffix.\");\n\t\t\t\telse maxLen -= 8;\n\t\t\t\tif (len > maxLen) toss3(capi.SQLITE_RANGE, \"Storage name is too long. Limit =\", maxLen);\n\t\t\t\tlet i;\n\t\t\t\tfor (i = 0; i < len; ++i) {\n\t\t\t\t\tconst ch = n.codePointAt(i);\n\t\t\t\t\tif (ch < 32) toss3(capi.SQLITE_RANGE, \"Illegal character (\" + ch + \"d) in storage name:\", n);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst newStorageObj = (name, storage = void 0) => Object.assign(Object.create(null), {\n\t\t\t\tjzClass: name,\n\t\t\t\trefc: 1,\n\t\t\t\tdeleteAtRefc0: false,\n\t\t\t\tstorage: storage || new KVVfsStorage(),\n\t\t\t\tkeyPrefix: kvvfsKeyPrefix(name),\n\t\t\t\tfiles: [],\n\t\t\t\tlisteners: void 0\n\t\t\t});\n\t\t\tconst kvvfs = sqlite3.kvvfs = Object.create(null);\n\t\t\tif (sqlite3.__isUnderTest) kvvfs.log = Object.assign(Object.create(null), {\n\t\t\t\txOpen: false,\n\t\t\t\txClose: false,\n\t\t\t\txWrite: false,\n\t\t\t\txRead: false,\n\t\t\t\txSync: false,\n\t\t\t\txAccess: false,\n\t\t\t\txFileControl: false,\n\t\t\t\txRcrdRead: false,\n\t\t\t\txRcrdWrite: false,\n\t\t\t\txRcrdDelete: false\n\t\t\t});\n\t\t\tconst deleteStorage = function(store) {\n\t\t\t\tconst other = cache.rxJournalSuffix.test(store.jzClass) ? store.jzClass.replace(cache.rxJournalSuffix, \"\") : store.jzClass + \"-journal\";\n\t\t\t\tkvvfs?.log?.xClose && debug(\"cleaning up storage handles [\", store.jzClass, other, \"]\", store);\n\t\t\t\tdelete cache.storagePool[store.jzClass];\n\t\t\t\tdelete cache.storagePool[other];\n\t\t\t\tif (!sqlite3.__isUnderTest) {\n\t\t\t\t\tdelete store.storage;\n\t\t\t\t\tdelete store.refc;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst installStorageAndJournal = (store) => cache.storagePool[store.jzClass] = cache.storagePool[store.jzClass + \"-journal\"] = store;\n\t\t\tconst nameOfThisThreadStorage = \".\";\n\t\t\tcache.storagePool = Object.assign(Object.create(null), { [nameOfThisThreadStorage]: newStorageObj(nameOfThisThreadStorage) });\n\t\t\tif (globalThis.Storage) {\n\t\t\t\tif (globalThis.localStorage instanceof globalThis.Storage) cache.storagePool.local = newStorageObj(\"local\", globalThis.localStorage);\n\t\t\t\tif (globalThis.sessionStorage instanceof globalThis.Storage) cache.storagePool.session = newStorageObj(\"session\", globalThis.sessionStorage);\n\t\t\t}\n\t\t\tcache.builtinStorageNames = Object.keys(cache.storagePool);\n\t\t\tconst isBuiltinName = (n) => cache.builtinStorageNames.indexOf(n) > -1;\n\t\t\tfor (const k of Object.keys(cache.storagePool)) {\n\t\t\t\tconst orig = cache.storagePool[k];\n\t\t\t\tcache.storagePool[k + \"-journal\"] = orig;\n\t\t\t}\n\t\t\tcache.setError = (e = void 0, dfltErrCode = capi.SQLITE_ERROR) => {\n\t\t\t\tif (e) {\n\t\t\t\t\tcache.lastError = e;\n\t\t\t\t\treturn e.resultCode | 0 || dfltErrCode;\n\t\t\t\t}\n\t\t\t\tdelete cache.lastError;\n\t\t\t\treturn 0;\n\t\t\t};\n\t\t\tcache.popError = () => {\n\t\t\t\tconst e = cache.lastError;\n\t\t\t\tdelete cache.lastError;\n\t\t\t\treturn e;\n\t\t\t};\n\t\t\tconst catchForNotify = (e) => {\n\t\t\t\twarn(\"kvvfs.listener handler threw:\", e);\n\t\t\t};\n\t\t\tconst kvvfsDecode = wasm.exports.sqlite3__wasm_kvvfs_decode;\n\t\t\tconst kvvfsEncode = wasm.exports.sqlite3__wasm_kvvfs_encode;\n\t\t\tconst notifyListeners = async function(eventName, store, ...args) {\n\t\t\t\ttry {\n\t\t\t\t\tif (store.keyPrefix && args[0]) args[0] = args[0].replace(store.keyPrefix, \"\");\n\t\t\t\t\tlet u8enc, z0, z1, wcache;\n\t\t\t\t\tfor (const ear of store.listeners) {\n\t\t\t\t\t\tconst ev = Object.create(null);\n\t\t\t\t\t\tev.storageName = store.jzClass;\n\t\t\t\t\t\tev.type = eventName;\n\t\t\t\t\t\tear.decodePages;\n\t\t\t\t\t\tconst f = ear.events[eventName];\n\t\t\t\t\t\tif (f) {\n\t\t\t\t\t\t\tif (!ear.includeJournal && args[0] === \"jrnl\") continue;\n\t\t\t\t\t\t\tif (\"write\" === eventName && ear.decodePages && +args[0] > 0) {\n\t\t\t\t\t\t\t\tev.data = [args[0]];\n\t\t\t\t\t\t\t\tif (wcache?.[args[0]]) {\n\t\t\t\t\t\t\t\t\tev.data[1] = wcache[args[0]];\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tu8enc ??= new TextEncoder(\"utf-8\");\n\t\t\t\t\t\t\t\tz0 ??= cache.memBuffer(10);\n\t\t\t\t\t\t\t\tz1 ??= cache.memBuffer(11);\n\t\t\t\t\t\t\t\tconst u = u8enc.encode(args[1]);\n\t\t\t\t\t\t\t\tconst heap = wasm.heap8u();\n\t\t\t\t\t\t\t\theap.set(u, Number(z0));\n\t\t\t\t\t\t\t\theap[wasm.ptr.addn(z0, u.length)] = 0;\n\t\t\t\t\t\t\t\tconst rc = kvvfsDecode(z0, z1, cache.buffer.n);\n\t\t\t\t\t\t\t\tif (rc > 0) {\n\t\t\t\t\t\t\t\t\twcache ??= Object.create(null);\n\t\t\t\t\t\t\t\t\twcache[args[0]] = ev.data[1] = heap.slice(Number(z1), wasm.ptr.addn(z1, rc));\n\t\t\t\t\t\t\t\t} else continue;\n\t\t\t\t\t\t\t} else ev.data = args.length ? args.length === 1 ? args[0] : args : void 0;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tf(ev)?.catch?.(catchForNotify);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\twarn(\"notifyListeners [\", store.jzClass, \"]\", eventName, e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcatchForNotify(e);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst storageForZClass = (zClass) => \"string\" === typeof zClass ? cache.storagePool[zClass] : cache.storagePool[wasm.cstrToJs(zClass)];\n\t\t\tconst kvvfsMakeKey = wasm.exports.sqlite3__wasm_kvvfsMakeKey;\n\t\t\tconst zKeyForStorage = (store, zClass, zKey) => {\n\t\t\t\treturn zClass && store.keyPrefix ? kvvfsMakeKey(zClass, zKey) : zKey;\n\t\t\t};\n\t\t\tconst jsKeyForStorage = (store, zClass, zKey) => wasm.cstrToJs(zKeyForStorage(store, zClass, zKey));\n\t\t\tconst storageGetDbSize = (store) => +store.storage.getItem(store.keyPrefix + \"sz\");\n\t\t\tconst pFileHandles = /* @__PURE__ */ new Map();\n\t\t\tconst originalMethods = {\n\t\t\t\tvfs: Object.create(null),\n\t\t\t\tioDb: Object.create(null),\n\t\t\t\tioJrnl: Object.create(null)\n\t\t\t};\n\t\t\tconst pVfs = new capi.sqlite3_vfs(kvvfsMethods.$pVfs);\n\t\t\tconst pIoDb = new capi.sqlite3_io_methods(kvvfsMethods.$pIoDb);\n\t\t\tconst pIoJrnl = new capi.sqlite3_io_methods(kvvfsMethods.$pIoJrnl);\n\t\t\tconst recordHandler = Object.create(null);\n\t\t\tconst kvvfsInternal = Object.assign(Object.create(null), {\n\t\t\t\tpFileHandles,\n\t\t\t\tcache,\n\t\t\t\tstorageForZClass,\n\t\t\t\tKVVfsStorage,\n\t\t\t\tdisablePageSizeChange: true\n\t\t\t});\n\t\t\tif (kvvfs.log) kvvfs.internal = kvvfsInternal;\n\t\t\tconst methodOverrides = {\n\t\t\t\trecordHandler: {\n\t\t\t\t\txRcrdRead: (zClass, zKey, zBuf, nBuf) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst jzClass = wasm.cstrToJs(zClass);\n\t\t\t\t\t\t\tconst store = storageForZClass(jzClass);\n\t\t\t\t\t\t\tif (!store) return -1;\n\t\t\t\t\t\t\tconst jXKey = jsKeyForStorage(store, zClass, zKey);\n\t\t\t\t\t\t\tkvvfs?.log?.xRcrdRead && warn(\"xRcrdRead\", jzClass, jXKey, nBuf, store);\n\t\t\t\t\t\t\tconst jV = store.storage.getItem(jXKey);\n\t\t\t\t\t\t\tif (null === jV) return -1;\n\t\t\t\t\t\t\tconst nV = jV.length;\n\t\t\t\t\t\t\tif (nBuf <= 0) return nV;\n\t\t\t\t\t\t\telse if (1 === nBuf) {\n\t\t\t\t\t\t\t\twasm.poke(zBuf, 0);\n\t\t\t\t\t\t\t\treturn nV;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (nBuf + 1 < nV) toss3(capi.SQLITE_RANGE, \"xRcrdRead()\", jzClass, jXKey, \"input buffer is too small: need\", nV, \"but have\", nBuf);\n\t\t\t\t\t\t\tconst zV = cache.memBuffer(0);\n\t\t\t\t\t\t\tconst heap = wasm.heap8();\n\t\t\t\t\t\t\tlet i;\n\t\t\t\t\t\t\tfor (i = 0; i < nV; ++i) heap[wasm.ptr.add(zV, i)] = jV.codePointAt(i) & 255;\n\t\t\t\t\t\t\theap.copyWithin(Number(zBuf), Number(zV), wasm.ptr.addn(zV, i));\n\t\t\t\t\t\t\theap[wasm.ptr.add(zBuf, nV)] = 0;\n\t\t\t\t\t\t\treturn nBuf;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"kvrecordRead()\", e);\n\t\t\t\t\t\t\tcache.setError(e);\n\t\t\t\t\t\t\treturn -2;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txRcrdWrite: (zClass, zKey, zData) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst store = storageForZClass(zClass);\n\t\t\t\t\t\t\tconst jxKey = jsKeyForStorage(store, zClass, zKey);\n\t\t\t\t\t\t\tconst jData = wasm.cstrToJs(zData);\n\t\t\t\t\t\t\tkvvfs?.log?.xRcrdWrite && warn(\"xRcrdWrite\", jxKey, store);\n\t\t\t\t\t\t\tstore.storage.setItem(jxKey, jData);\n\t\t\t\t\t\t\tstore.listeners && notifyListeners(\"write\", store, jxKey, jData);\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"kvrecordWrite()\", e);\n\t\t\t\t\t\t\treturn cache.setError(e, capi.SQLITE_IOERR);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txRcrdDelete: (zClass, zKey) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst store = storageForZClass(zClass);\n\t\t\t\t\t\t\tconst jxKey = jsKeyForStorage(store, zClass, zKey);\n\t\t\t\t\t\t\tkvvfs?.log?.xRcrdDelete && warn(\"xRcrdDelete\", jxKey, store);\n\t\t\t\t\t\t\tstore.storage.removeItem(jxKey);\n\t\t\t\t\t\t\tstore.listeners && notifyListeners(\"delete\", store, jxKey);\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"kvrecordDelete()\", e);\n\t\t\t\t\t\t\treturn cache.setError(e, capi.SQLITE_IOERR);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvfs: {\n\t\t\t\t\txOpen: function(pProtoVfs, zName, pProtoFile, flags, pOutFlags) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\tlet zToFree;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (!zName) {\n\t\t\t\t\t\t\t\tzToFree = wasm.allocCString(\"\" + pProtoFile + \".\" + (Math.random() * 1e5 | 0));\n\t\t\t\t\t\t\t\tzName = zToFree;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst jzClass = wasm.cstrToJs(zName);\n\t\t\t\t\t\t\tkvvfs?.log?.xOpen && debug(\"xOpen\", jzClass, \"flags =\", flags);\n\t\t\t\t\t\t\tvalidateStorageName(jzClass, true);\n\t\t\t\t\t\t\tif (flags & (capi.SQLITE_OPEN_MAIN_DB | capi.SQLITE_OPEN_TEMP_DB | capi.SQLITE_OPEN_TRANSIENT_DB) && cache.rxJournalSuffix.test(jzClass)) toss3(capi.SQLITE_ERROR, \"DB files may not have a '-journal' suffix.\");\n\t\t\t\t\t\t\tlet s = storageForZClass(jzClass);\n\t\t\t\t\t\t\tif (!s && !(flags & capi.SQLITE_OPEN_CREATE)) toss3(capi.SQLITE_ERROR, \"Storage not found:\", jzClass);\n\t\t\t\t\t\t\tconst rc = originalMethods.vfs.xOpen(pProtoVfs, zName, pProtoFile, flags, pOutFlags);\n\t\t\t\t\t\t\tif (rc) return rc;\n\t\t\t\t\t\t\tlet deleteAt0 = !!(capi.SQLITE_OPEN_DELETEONCLOSE & flags);\n\t\t\t\t\t\t\tif (wasm.isPtr(arguments[1])) {\n\t\t\t\t\t\t\t\tif (capi.sqlite3_uri_boolean(zName, \"delete-on-close\", 0)) deleteAt0 = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst f = new KVVfsFile(pProtoFile);\n\t\t\t\t\t\t\tutil.assert(f.$zClass, \"Missing f.$zClass\");\n\t\t\t\t\t\t\tf.addOnDispose(zToFree);\n\t\t\t\t\t\t\tzToFree = void 0;\n\t\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\t\t++s.refc;\n\t\t\t\t\t\t\t\ts.files.push(f);\n\t\t\t\t\t\t\t\twasm.poke32(pOutFlags, flags);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twasm.poke32(pOutFlags, flags | capi.SQLITE_OPEN_CREATE);\n\t\t\t\t\t\t\t\tutil.assert(!f.$isJournal, \"Opening a journal before its db? \" + jzClass);\n\t\t\t\t\t\t\t\tconst nm = jzClass.replace(cache.rxJournalSuffix, \"\");\n\t\t\t\t\t\t\t\ts = newStorageObj(nm);\n\t\t\t\t\t\t\t\tinstallStorageAndJournal(s);\n\t\t\t\t\t\t\t\ts.files.push(f);\n\t\t\t\t\t\t\t\ts.deleteAtRefc0 = deleteAt0;\n\t\t\t\t\t\t\t\tkvvfs?.log?.xOpen && debug(\"xOpen installed storage handle [\", nm, nm + \"-journal\", \"]\", s);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpFileHandles.set(pProtoFile, {\n\t\t\t\t\t\t\t\tstore: s,\n\t\t\t\t\t\t\t\tfile: f,\n\t\t\t\t\t\t\t\tjzClass\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ts.listeners && notifyListeners(\"open\", s, s.files.length);\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\twarn(\"xOpen:\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tzToFree && wasm.dealloc(zToFree);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txDelete: function(pVfs, zName, iSyncFlag) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst jzName = wasm.cstrToJs(zName);\n\t\t\t\t\t\t\tif (cache.rxJournalSuffix.test(jzName)) recordHandler.xRcrdDelete(zName, cache.zKeyJrnl);\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\twarn(\"xDelete\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txAccess: function(pProtoVfs, zPath, flags, pResOut) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst s = storageForZClass(zPath);\n\t\t\t\t\t\t\tconst jzPath = s?.jzClass || wasm.cstrToJs(zPath);\n\t\t\t\t\t\t\tif (kvvfs?.log?.xAccess) debug(\"xAccess\", jzPath, \"flags =\", flags, \"*pResOut =\", wasm.peek32(pResOut), \"store =\", s);\n\t\t\t\t\t\t\tif (!s) try {\n\t\t\t\t\t\t\t\tvalidateStorageName(jzPath);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\twasm.poke32(pResOut, 0);\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\t\tconst key = s.keyPrefix + (cache.rxJournalSuffix.test(jzPath) ? \"jrnl\" : \"1\");\n\t\t\t\t\t\t\t\tconst res = s.storage.getItem(key) ? 0 : 1;\n\t\t\t\t\t\t\t\twasm.poke32(pResOut, res);\n\t\t\t\t\t\t\t} else wasm.poke32(pResOut, 0);\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"xAccess\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txRandomness: function(pVfs, nOut, pOut) {\n\t\t\t\t\t\tconst heap = wasm.heap8u();\n\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\tconst npOut = Number(pOut);\n\t\t\t\t\t\tfor (; i < nOut; ++i) heap[npOut + i] = Math.random() * 255e3 & 255;\n\t\t\t\t\t\treturn nOut;\n\t\t\t\t\t},\n\t\t\t\t\txGetLastError: function(pVfs, nOut, pOut) {\n\t\t\t\t\t\tconst e = cache.popError();\n\t\t\t\t\t\tdebug(\"xGetLastError\", e);\n\t\t\t\t\t\tif (e) {\n\t\t\t\t\t\t\tconst scope = wasm.scopedAllocPush();\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst [cMsg, n] = wasm.scopedAllocCString(e.message, true);\n\t\t\t\t\t\t\t\twasm.cstrncpy(pOut, cMsg, nOut);\n\t\t\t\t\t\t\t\tif (n > nOut) wasm.poke8(wasm.ptr.add(pOut, nOut, -1), 0);\n\t\t\t\t\t\t\t\tdebug(\"set xGetLastError\", e.message);\n\t\t\t\t\t\t\t\treturn e.resultCode | 0 || capi.SQLITE_IOERR;\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn capi.SQLITE_NOMEM;\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\twasm.scopedAllocPop(scope);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tioDb: {\n\t\t\t\t\txClose: function(pFile) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst h = pFileHandles.get(pFile);\n\t\t\t\t\t\t\tkvvfs?.log?.xClose && debug(\"xClose\", pFile, h);\n\t\t\t\t\t\t\tif (h) {\n\t\t\t\t\t\t\t\tpFileHandles.delete(pFile);\n\t\t\t\t\t\t\t\tconst s = h.store;\n\t\t\t\t\t\t\t\ts.files = s.files.filter((v) => v !== h.file);\n\t\t\t\t\t\t\t\tif (--s.refc <= 0 && s.deleteAtRefc0) deleteStorage(s);\n\t\t\t\t\t\t\t\toriginalMethods.ioDb.xClose(pFile);\n\t\t\t\t\t\t\t\th.file.dispose();\n\t\t\t\t\t\t\t\ts.listeners && notifyListeners(\"close\", s, s.files.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"xClose\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txFileControl: function(pFile, opId, pArg) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst h = pFileHandles.get(pFile);\n\t\t\t\t\t\t\tutil.assert(h, \"Missing KVVfsFile handle\");\n\t\t\t\t\t\t\tkvvfs?.log?.xFileControl && debug(\"xFileControl\", h, \"op =\", opId);\n\t\t\t\t\t\t\tif (opId === capi.SQLITE_FCNTL_PRAGMA && kvvfsInternal.disablePageSizeChange) {\n\t\t\t\t\t\t\t\tconst zName = wasm.peekPtr(wasm.ptr.add(pArg, wasm.ptr.size));\n\t\t\t\t\t\t\t\tif (\"page_size\" === wasm.cstrToJs(zName)) {\n\t\t\t\t\t\t\t\t\tkvvfs?.log?.xFileControl && debug(\"xFileControl pragma\", wasm.cstrToJs(zName));\n\t\t\t\t\t\t\t\t\tconst zVal = wasm.peekPtr(wasm.ptr.add(pArg, 2 * wasm.ptr.size));\n\t\t\t\t\t\t\t\t\tif (zVal) {\n\t\t\t\t\t\t\t\t\t\tkvvfs?.log?.xFileControl && warn(\"xFileControl pragma\", h, \"NOT setting page size to\", wasm.cstrToJs(zVal));\n\t\t\t\t\t\t\t\t\t\th.file.$szPage = -1;\n\t\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t\t} else if (h.file.$szPage > 0) {\n\t\t\t\t\t\t\t\t\t\tkvvfs?.log?.xFileControl && warn(\"xFileControl\", h, \"getting page size\", h.file.$szPage);\n\t\t\t\t\t\t\t\t\t\twasm.pokePtr(pArg, wasm.allocCString(\"\" + h.file.$szPage));\n\t\t\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst rc = originalMethods.ioDb.xFileControl(pFile, opId, pArg);\n\t\t\t\t\t\t\tif (0 == rc && capi.SQLITE_FCNTL_SYNC === opId) h.store.listeners && notifyListeners(\"sync\", h.store, false);\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"xFileControl\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txSync: function(pFile, flags) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst h = pFileHandles.get(pFile);\n\t\t\t\t\t\t\tkvvfs?.log?.xSync && debug(\"xSync\", h);\n\t\t\t\t\t\t\tutil.assert(h, \"Missing KVVfsFile handle\");\n\t\t\t\t\t\t\tconst rc = originalMethods.ioDb.xSync(pFile, flags);\n\t\t\t\t\t\t\tif (0 == rc && h.store.listeners) notifyListeners(\"sync\", h.store, true);\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"xSync\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txRead: function(pFile, pTgt, n, iOff64) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (kvvfs?.log?.xRead) {\n\t\t\t\t\t\t\t\tconst h = pFileHandles.get(pFile);\n\t\t\t\t\t\t\t\tutil.assert(h, \"Missing KVVfsFile handle\");\n\t\t\t\t\t\t\t\tdebug(\"xRead\", n, iOff64, h);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn originalMethods.ioDb.xRead(pFile, pTgt, n, iOff64);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"xRead\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\txWrite: function(pFile, pSrc, n, iOff64) {\n\t\t\t\t\t\tcache.popError();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (kvvfs?.log?.xWrite) {\n\t\t\t\t\t\t\t\tconst h = pFileHandles.get(pFile);\n\t\t\t\t\t\t\t\tutil.assert(h, \"Missing KVVfsFile handle\");\n\t\t\t\t\t\t\t\tdebug(\"xWrite\", n, iOff64, h);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn originalMethods.ioDb.xWrite(pFile, pSrc, n, iOff64);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\terror(\"xWrite\", e);\n\t\t\t\t\t\t\treturn cache.setError(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tioJrnl: { xClose: true }\n\t\t\t};\n\t\t\tdebug(\"pVfs and friends\", pVfs, pIoDb, pIoJrnl, kvvfsMethods, capi.sqlite3_file.structInfo, KVVfsFile.structInfo);\n\t\t\ttry {\n\t\t\t\tutil.assert(cache.buffer.n > 1024 * 129, \"Heap buffer is not large enough\");\n\t\t\t\tfor (const e of Object.entries(methodOverrides.recordHandler)) {\n\t\t\t\t\tconst k = e[0], f = e[1];\n\t\t\t\t\trecordHandler[k] = f;\n\t\t\t\t\tkvvfsMethods[kvvfsMethods.memberKey(k)] = wasm.installFunction(kvvfsMethods.memberSignature(k), f);\n\t\t\t\t}\n\t\t\t\tfor (const e of Object.entries(methodOverrides.vfs)) {\n\t\t\t\t\tconst k = e[0], f = e[1], km = pVfs.memberKey(k), member = pVfs.structInfo.members[k] || util.toss(\"Missing pVfs.structInfo[\", k, \"]\");\n\t\t\t\t\toriginalMethods.vfs[k] = wasm.functionEntry(pVfs[km]);\n\t\t\t\t\tpVfs[km] = wasm.installFunction(member.signature, f);\n\t\t\t\t}\n\t\t\t\tfor (const e of Object.entries(methodOverrides.ioDb)) {\n\t\t\t\t\tconst k = e[0], f = e[1], km = pIoDb.memberKey(k);\n\t\t\t\t\toriginalMethods.ioDb[k] = wasm.functionEntry(pIoDb[km]) || util.toss(\"Missing native pIoDb[\", km, \"]\");\n\t\t\t\t\tpIoDb[km] = wasm.installFunction(pIoDb.memberSignature(k), f);\n\t\t\t\t}\n\t\t\t\tfor (const e of Object.entries(methodOverrides.ioJrnl)) {\n\t\t\t\t\tconst k = e[0], f = e[1], km = pIoJrnl.memberKey(k);\n\t\t\t\t\toriginalMethods.ioJrnl[k] = wasm.functionEntry(pIoJrnl[km]) || util.toss(\"Missing native pIoJrnl[\", km, \"]\");\n\t\t\t\t\tif (true === f) pIoJrnl[km] = pIoDb[km] || util.toss(\"Missing copied pIoDb[\", km, \"]\");\n\t\t\t\t\telse pIoJrnl[km] = wasm.installFunction(pIoJrnl.memberSignature(k), f);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tkvvfsMethods.dispose();\n\t\t\t\tpVfs.dispose();\n\t\t\t\tpIoDb.dispose();\n\t\t\t\tpIoJrnl.dispose();\n\t\t\t}\n\t\t\tconst sqlite3_js_kvvfs_clear = function callee(which) {\n\t\t\t\tif (\"\" === which) return callee(\"local\") + callee(\"session\");\n\t\t\t\tconst store = storageForZClass(which);\n\t\t\t\tif (!store) return 0;\n\t\t\t\tif (store.files.length) if (globalThis.localStorage === store.storage || globalThis.sessionStorage === store.storage) {} else toss3(capi.SQLITE_ACCESS, \"Cannot clear in-use database storage.\");\n\t\t\t\tconst s = store.storage;\n\t\t\t\tconst toRm = [];\n\t\t\t\tlet i, n = s.length;\n\t\t\t\tfor (i = 0; i < n; ++i) {\n\t\t\t\t\tconst k = s.key(i);\n\t\t\t\t\tif (!store.keyPrefix || k.startsWith(store.keyPrefix)) toRm.push(k);\n\t\t\t\t}\n\t\t\t\ttoRm.forEach((kk) => s.removeItem(kk));\n\t\t\t\treturn toRm.length;\n\t\t\t};\n\t\t\tconst sqlite3_js_kvvfs_size = function callee(which) {\n\t\t\t\tif (\"\" === which) return callee(\"local\") + callee(\"session\");\n\t\t\t\tconst store = storageForZClass(which);\n\t\t\t\tif (!store) return 0;\n\t\t\t\tconst s = store.storage;\n\t\t\t\tlet i, sz = 0;\n\t\t\t\tfor (i = 0; i < s.length; ++i) {\n\t\t\t\t\tconst k = s.key(i);\n\t\t\t\t\tif (!store.keyPrefix || k.startsWith(store.keyPrefix)) {\n\t\t\t\t\t\tsz += k.length;\n\t\t\t\t\t\tsz += s.getItem(k).length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn sz * 2;\n\t\t\t};\n\t\t\tconst sqlite3_js_kvvfs_export = function callee(...args) {\n\t\t\t\tlet opt;\n\t\t\t\tif (1 === args.length && \"object\" === typeof args[0]) opt = args[0];\n\t\t\t\telse if (args.length) opt = Object.assign(Object.create(null), { name: args[0] });\n\t\t\t\tconst store = opt ? storageForZClass(opt.name) : null;\n\t\t\t\tif (!store) toss3(capi.SQLITE_NOTFOUND, \"There is no kvvfs storage named\", opt?.name);\n\t\t\t\tconst s = store.storage;\n\t\t\t\tconst rc = Object.assign(Object.create(null), {\n\t\t\t\t\tname: store.jzClass,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\tpages: []\n\t\t\t\t});\n\t\t\t\tconst pages = Object.create(null);\n\t\t\t\tconst keyPrefix = store.keyPrefix;\n\t\t\t\tconst rxTail = keyPrefix ? /^kvvfs-[^-]+-(\\w+)/ : void 0;\n\t\t\t\tlet i = 0, n = s.length;\n\t\t\t\tfor (; i < n; ++i) {\n\t\t\t\t\tconst k = s.key(i);\n\t\t\t\t\tif (!keyPrefix || k.startsWith(keyPrefix)) {\n\t\t\t\t\t\tlet kk = (keyPrefix ? rxTail.exec(k) : void 0)?.[1] ?? k;\n\t\t\t\t\t\tswitch (kk) {\n\t\t\t\t\t\t\tcase \"jrnl\":\n\t\t\t\t\t\t\t\tif (opt.includeJournal) rc.journal = s.getItem(k);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"sz\":\n\t\t\t\t\t\t\t\trc.size = +s.getItem(k);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tkk = +kk;\n\t\t\t\t\t\t\t\tif (!util.isInt32(kk) || kk <= 0) toss3(capi.SQLITE_RANGE, \"Malformed kvvfs key: \" + k);\n\t\t\t\t\t\t\t\tif (opt.decodePages) {\n\t\t\t\t\t\t\t\t\tconst spg = s.getItem(k), n = spg.length, z = cache.memBuffer(0), zDec = cache.memBuffer(1), heap = wasm.heap8u();\n\t\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\t\tfor (; i < n; ++i) heap[wasm.ptr.add(z, i)] = spg.codePointAt(i) & 255;\n\t\t\t\t\t\t\t\t\theap[wasm.ptr.add(z, i)] = 0;\n\t\t\t\t\t\t\t\t\tconst nDec = kvvfsDecode(z, zDec, cache.buffer.n);\n\t\t\t\t\t\t\t\t\tpages[kk] = heap.slice(Number(zDec), wasm.ptr.addn(zDec, nDec));\n\t\t\t\t\t\t\t\t} else pages[kk] = s.getItem(k);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opt.decodePages) cache.memBufferFree(1);\n\t\t\t\tObject.keys(pages).map((v) => +v).sort().forEach((v) => rc.pages.push(pages[v]));\n\t\t\t\treturn rc;\n\t\t\t};\n\t\t\tconst sqlite3_js_kvvfs_import = function(exp, overwrite = false) {\n\t\t\t\tif (!exp?.timestamp || !exp.name || void 0 === exp.size || !Array.isArray(exp.pages)) toss3(capi.SQLITE_MISUSE, \"Malformed export object.\");\n\t\t\t\telse if (!exp.size || exp.size !== (exp.size | 0) || exp.size >= 2147483647) toss3(capi.SQLITE_RANGE, \"Invalid db size: \" + exp.size);\n\t\t\t\tvalidateStorageName(exp.name);\n\t\t\t\tlet store = storageForZClass(exp.name);\n\t\t\t\tconst isNew = !store;\n\t\t\t\tif (store) {\n\t\t\t\t\tif (!overwrite) toss3(capi.SQLITE_ACCESS, \"Storage '\" + exp.name + \"' already exists and\", \"overwrite was not specified.\");\n\t\t\t\t\telse if (!store.files || !store.jzClass) toss3(capi.SQLITE_ERROR, \"Internal storage object\", exp.name, \"seems to be malformed.\");\n\t\t\t\t\telse if (store.files.length) toss3(capi.SQLITE_IOERR_ACCESS, \"Cannot import db storage while it is in use.\");\n\t\t\t\t\tsqlite3_js_kvvfs_clear(exp.name);\n\t\t\t\t} else store = newStorageObj(exp.name);\n\t\t\t\tconst keyPrefix = kvvfsKeyPrefix(exp.name);\n\t\t\t\tlet zEnc;\n\t\t\t\ttry {\n\t\t\t\t\tconst s = store.storage;\n\t\t\t\t\ts.setItem(keyPrefix + \"sz\", exp.size);\n\t\t\t\t\tif (exp.journal) s.setItem(keyPrefix + \"jrnl\", exp.journal);\n\t\t\t\t\tif (exp.pages[0] instanceof Uint8Array) exp.pages.forEach((u, ndx) => {\n\t\t\t\t\t\tconst n = u.length;\n\t\t\t\t\t\tzEnc ??= cache.memBuffer(1);\n\t\t\t\t\t\tconst zBin = cache.memBuffer(0), heap = wasm.heap8u();\n\t\t\t\t\t\theap.set(u, Number(zBin));\n\t\t\t\t\t\theap[wasm.ptr.addn(zBin, n)] = 0;\n\t\t\t\t\t\tconst rc = kvvfsEncode(zBin, n, zEnc);\n\t\t\t\t\t\tutil.assert(rc < cache.buffer.n, \"Impossibly long output - possibly smashed the heap\");\n\t\t\t\t\t\tutil.assert(0 === wasm.peek8(wasm.ptr.add(zEnc, rc)), \"Expecting NUL-terminated encoded output\");\n\t\t\t\t\t\tconst jenc = wasm.cstrToJs(zEnc);\n\t\t\t\t\t\ts.setItem(keyPrefix + (ndx + 1), jenc);\n\t\t\t\t\t});\n\t\t\t\t\telse if (exp.pages[0]) exp.pages.forEach((v, ndx) => s.setItem(keyPrefix + (ndx + 1), v));\n\t\t\t\t\tif (isNew) installStorageAndJournal(store);\n\t\t\t\t} catch {\n\t\t\t\t\tif (!isNew) try {\n\t\t\t\t\t\tsqlite3_js_kvvfs_clear(exp.name);\n\t\t\t\t\t} catch (ee) {}\n\t\t\t\t} finally {\n\t\t\t\t\tif (zEnc) cache.memBufferFree(1);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tconst sqlite3_js_kvvfs_reserve = function(name) {\n\t\t\t\tlet store = storageForZClass(name);\n\t\t\t\tif (store) {\n\t\t\t\t\t++store.refc;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvalidateStorageName(name);\n\t\t\t\tinstallStorageAndJournal(newStorageObj(name));\n\t\t\t};\n\t\t\tconst sqlite3_js_kvvfs_unlink = function(name) {\n\t\t\t\tconst store = storageForZClass(name);\n\t\t\t\tif (!store || kvvfsIsPersistentName(store.jzClass) || isBuiltinName(store.jzClass) || cache.rxJournalSuffix.test(name)) return false;\n\t\t\t\tif (store.refc > store.files.length || 0 === store.files.length) {\n\t\t\t\t\tif (--store.refc <= 0) deleteStorage(store);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t\tconst sqlite3_js_kvvfs_listen = function(opt) {\n\t\t\t\tif (!opt || \"object\" !== typeof opt) toss3(capi.SQLITE_MISUSE, \"Expecting a listener object.\");\n\t\t\t\tlet store = storageForZClass(opt.storage);\n\t\t\t\tif (!store) if (opt.storage && opt.reserve) {\n\t\t\t\t\tsqlite3_js_kvvfs_reserve(opt.storage);\n\t\t\t\t\tstore = storageForZClass(opt.storage);\n\t\t\t\t\tutil.assert(store, \"Unexpectedly cannot fetch reserved storage \" + opt.storage);\n\t\t\t\t} else toss3(capi.SQLITE_NOTFOUND, \"No such storage:\", opt.storage);\n\t\t\t\tif (opt.events) (store.listeners ??= []).push(opt);\n\t\t\t};\n\t\t\tconst sqlite3_js_kvvfs_unlisten = function(opt) {\n\t\t\t\tconst store = storageForZClass(opt?.storage);\n\t\t\t\tif (store?.listeners && opt.events) {\n\t\t\t\t\tconst n = store.listeners.length;\n\t\t\t\t\tstore.listeners = store.listeners.filter((v) => v !== opt);\n\t\t\t\t\tconst rc = n > store.listeners.length;\n\t\t\t\t\tif (!store.listeners.length) store.listeners = void 0;\n\t\t\t\t\treturn rc;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t\tsqlite3.kvvfs.reserve = sqlite3_js_kvvfs_reserve;\n\t\t\tsqlite3.kvvfs.import = sqlite3_js_kvvfs_import;\n\t\t\tsqlite3.kvvfs.export = sqlite3_js_kvvfs_export;\n\t\t\tsqlite3.kvvfs.unlink = sqlite3_js_kvvfs_unlink;\n\t\t\tsqlite3.kvvfs.listen = sqlite3_js_kvvfs_listen;\n\t\t\tsqlite3.kvvfs.unlisten = sqlite3_js_kvvfs_unlisten;\n\t\t\tsqlite3.kvvfs.exists = (name) => !!storageForZClass(name);\n\t\t\tsqlite3.kvvfs.estimateSize = sqlite3_js_kvvfs_size;\n\t\t\tsqlite3.kvvfs.clear = sqlite3_js_kvvfs_clear;\n\t\t\tif (globalThis.Storage) {\n\t\t\t\tcapi.sqlite3_js_kvvfs_size = (which = \"\") => sqlite3_js_kvvfs_size(which);\n\t\t\t\tcapi.sqlite3_js_kvvfs_clear = (which = \"\") => sqlite3_js_kvvfs_clear(which);\n\t\t\t}\n\t\t\tif (sqlite3.oo1?.DB) {\n\t\t\t\tconst DB = sqlite3.oo1.DB;\n\t\t\t\tsqlite3.oo1.JsStorageDb = function(storageName = sqlite3.oo1.JsStorageDb.defaultStorageName) {\n\t\t\t\t\tconst opt = DB.dbCtorHelper.normalizeArgs(...arguments);\n\t\t\t\t\topt.vfs = \"kvvfs\";\n\t\t\t\t\tswitch (opt.filename) {\n\t\t\t\t\t\tcase \":sessionStorage:\":\n\t\t\t\t\t\t\topt.filename = \"session\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \":localStorage:\":\n\t\t\t\t\t\t\topt.filename = \"local\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst m = /(file:(\\/\\/)?)([^?]+)/.exec(opt.filename);\n\t\t\t\t\tvalidateStorageName(m ? m[3] : opt.filename);\n\t\t\t\t\tDB.dbCtorHelper.call(this, opt);\n\t\t\t\t};\n\t\t\t\tsqlite3.oo1.JsStorageDb.defaultStorageName = cache.storagePool.session ? \"session\" : nameOfThisThreadStorage;\n\t\t\t\tconst jdb = sqlite3.oo1.JsStorageDb;\n\t\t\t\tjdb.prototype = Object.create(DB.prototype);\n\t\t\t\tjdb.clearStorage = sqlite3_js_kvvfs_clear;\n\t\t\t\tjdb.prototype.clearStorage = function() {\n\t\t\t\t\treturn jdb.clearStorage(this.affirmOpen().dbFilename(), true);\n\t\t\t\t};\n\t\t\t\tjdb.storageSize = sqlite3_js_kvvfs_size;\n\t\t\t\tjdb.prototype.storageSize = function() {\n\t\t\t\t\treturn jdb.storageSize(this.affirmOpen().dbFilename(), true);\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (sqlite3.__isUnderTest && sqlite3.vtab) {\n\t\t\t\tconst cols = Object.assign(Object.create(null), {\n\t\t\t\t\trowid: { type: \"INTEGER\" },\n\t\t\t\t\tname: { type: \"TEXT\" },\n\t\t\t\t\tnRef: { type: \"INTEGER\" },\n\t\t\t\t\tnOpen: { type: \"INTEGER\" },\n\t\t\t\t\tisTransient: { type: \"INTEGER\" },\n\t\t\t\t\tdbSize: { type: \"INTEGER\" }\n\t\t\t\t});\n\t\t\t\tObject.keys(cols).forEach((v, i) => cols[v].colId = i);\n\t\t\t\tconst VT = sqlite3.vtab;\n\t\t\t\tconst ProtoCursor = Object.assign(Object.create(null), { row: function() {\n\t\t\t\t\treturn cache.storagePool[this.names[this.rowid]];\n\t\t\t\t} });\n\t\t\t\tObject.assign(Object.create(ProtoCursor), {\n\t\t\t\t\trowid: 0,\n\t\t\t\t\tnames: Object.keys(cache.storagePool).filter((v) => !cache.rxJournalSuffix.test(v))\n\t\t\t\t});\n\t\t\t\tconst cursorState = function(cursor, reset) {\n\t\t\t\t\tconst o = cursor instanceof capi.sqlite3_vtab_cursor ? cursor : VT.xCursor.get(cursor);\n\t\t\t\t\tif (reset || !o.vTabState) o.vTabState = Object.assign(Object.create(ProtoCursor), {\n\t\t\t\t\t\trowid: 0,\n\t\t\t\t\t\tnames: Object.keys(cache.storagePool).filter((v) => !cache.rxJournalSuffix.test(v))\n\t\t\t\t\t});\n\t\t\t\t\treturn o.vTabState;\n\t\t\t\t};\n\t\t\t\tconst dbg = () => {};\n\t\t\t\tconst theModule = function f() {\n\t\t\t\t\treturn f.mod ??= new sqlite3.capi.sqlite3_module().setupModule({\n\t\t\t\t\t\tcatchExceptions: true,\n\t\t\t\t\t\tmethods: {\n\t\t\t\t\t\t\txConnect: function(pDb, pAux, argc, argv, ppVtab, pzErr) {\n\t\t\t\t\t\t\t\tdbg(\"xConnect\");\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst xcol = [];\n\t\t\t\t\t\t\t\t\tObject.keys(cols).forEach((k) => {\n\t\t\t\t\t\t\t\t\t\txcol.push(k + \" \" + cols[k].type);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst rc = capi.sqlite3_declare_vtab(pDb, \"CREATE TABLE ignored(\" + xcol.join(\",\") + \")\");\n\t\t\t\t\t\t\t\t\tif (0 === rc) {\n\t\t\t\t\t\t\t\t\t\tconst t = VT.xVtab.create(ppVtab);\n\t\t\t\t\t\t\t\t\t\tutil.assert(t === VT.xVtab.get(wasm.peekPtr(ppVtab)), \"output pointer check failed\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\treturn VT.xErrror(\"xConnect\", e, capi.SQLITE_ERROR);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txCreate: wasm.ptr.null,\n\t\t\t\t\t\t\txDisconnect: function(pVtab) {\n\t\t\t\t\t\t\t\tdbg(\"xDisconnect\", ...arguments);\n\t\t\t\t\t\t\t\tVT.xVtab.dispose(pVtab);\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txOpen: function(pVtab, ppCursor) {\n\t\t\t\t\t\t\t\tdbg(\"xOpen\", ...arguments);\n\t\t\t\t\t\t\t\tVT.xCursor.create(ppCursor);\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txClose: function(pCursor) {\n\t\t\t\t\t\t\t\tdbg(\"xClose\", ...arguments);\n\t\t\t\t\t\t\t\tconst c = VT.xCursor.unget(pCursor);\n\t\t\t\t\t\t\t\tdelete c.vTabState;\n\t\t\t\t\t\t\t\tc.dispose();\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txNext: function(pCursor) {\n\t\t\t\t\t\t\t\tdbg(\"xNext\", ...arguments);\n\t\t\t\t\t\t\t\tconst c = VT.xCursor.get(pCursor);\n\t\t\t\t\t\t\t\t++cursorState(c).rowid;\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txColumn: function(pCursor, pCtx, iCol) {\n\t\t\t\t\t\t\t\tdbg(\"xColumn\", ...arguments);\n\t\t\t\t\t\t\t\tconst st = cursorState(pCursor);\n\t\t\t\t\t\t\t\tconst store = st.row();\n\t\t\t\t\t\t\t\tutil.assert(store, \"Unexpected xColumn call\");\n\t\t\t\t\t\t\t\tswitch (iCol) {\n\t\t\t\t\t\t\t\t\tcase cols.rowid.colId:\n\t\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_int(pCtx, st.rowid);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase cols.name.colId:\n\t\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_text(pCtx, store.jzClass, -1, capi.SQLITE_TRANSIENT);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase cols.nRef.colId:\n\t\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_int(pCtx, store.refc);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase cols.nOpen.colId:\n\t\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_int(pCtx, store.files.length);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase cols.isTransient.colId:\n\t\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_int(pCtx, !!store.deleteAtRefc0);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase cols.dbSize.colId:\n\t\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_int(pCtx, storageGetDbSize(store));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tcapi.sqlite3_result_error(pCtx, \"Invalid column id: \" + iCol);\n\t\t\t\t\t\t\t\t\t\treturn capi.SQLITE_RANGE;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txRowid: function(pCursor, ppRowid64) {\n\t\t\t\t\t\t\t\tdbg(\"xRowid\", ...arguments);\n\t\t\t\t\t\t\t\tconst st = cursorState(pCursor);\n\t\t\t\t\t\t\t\tVT.xRowid(ppRowid64, st.rowid);\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txEof: function(pCursor) {\n\t\t\t\t\t\t\t\tconst st = cursorState(pCursor);\n\t\t\t\t\t\t\t\tdbg(\"xEof?=\" + !st.row(), ...arguments);\n\t\t\t\t\t\t\t\treturn !st.row();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txFilter: function(pCursor, idxNum, idxCStr, argc, argv) {\n\t\t\t\t\t\t\t\tdbg(\"xFilter\", ...arguments);\n\t\t\t\t\t\t\t\tcursorState(pCursor, true);\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txBestIndex: function(pVtab, pIdxInfo) {\n\t\t\t\t\t\t\t\tdbg(\"xBestIndex\", ...arguments);\n\t\t\t\t\t\t\t\tconst pii = new capi.sqlite3_index_info(pIdxInfo);\n\t\t\t\t\t\t\t\tpii.$estimatedRows = cache.storagePool.size;\n\t\t\t\t\t\t\t\tpii.$estimatedCost = 1;\n\t\t\t\t\t\t\t\tpii.dispose();\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tsqlite3.kvvfs.create_module = function(pDb, name = \"sqlite_kvvfs\") {\n\t\t\t\t\treturn capi.sqlite3_create_module(pDb, name, theModule(), wasm.ptr.null);\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\tconst installOpfsVfs = function callee(options) {\n\t\t\t\tif (!globalThis.SharedArrayBuffer || !globalThis.Atomics) return Promise.reject(/* @__PURE__ */ new Error(\"Cannot install OPFS: Missing SharedArrayBuffer and/or Atomics. The server must emit the COOP/COEP response headers to enable those. See https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep\"));\n\t\t\t\telse if (\"undefined\" === typeof WorkerGlobalScope) return Promise.reject(/* @__PURE__ */ new Error(\"The OPFS sqlite3_vfs cannot run in the main thread because it requires Atomics.wait().\"));\n\t\t\t\telse if (!globalThis.FileSystemHandle || !globalThis.FileSystemDirectoryHandle || !globalThis.FileSystemFileHandle || !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle || !navigator?.storage?.getDirectory) return Promise.reject(/* @__PURE__ */ new Error(\"Missing required OPFS APIs.\"));\n\t\t\t\tif (!options || \"object\" !== typeof options) options = Object.create(null);\n\t\t\t\tconst urlParams = new URL(globalThis.location.href).searchParams;\n\t\t\t\tif (urlParams.has(\"opfs-disable\")) return Promise.resolve(sqlite3);\n\t\t\t\tif (void 0 === options.verbose) options.verbose = urlParams.has(\"opfs-verbose\") ? +urlParams.get(\"opfs-verbose\") || 2 : 1;\n\t\t\t\tif (void 0 === options.sanityChecks) options.sanityChecks = urlParams.has(\"opfs-sanity-check\");\n\t\t\t\tif (void 0 === options.proxyUri) options.proxyUri = callee.defaultProxyUri;\n\t\t\t\tif (\"function\" === typeof options.proxyUri) options.proxyUri = options.proxyUri();\n\t\t\t\treturn new Promise(function(promiseResolve_, promiseReject_) {\n\t\t\t\t\tconst loggers = [\n\t\t\t\t\t\tsqlite3.config.error,\n\t\t\t\t\t\tsqlite3.config.warn,\n\t\t\t\t\t\tsqlite3.config.log\n\t\t\t\t\t];\n\t\t\t\t\tconst logImpl = (level, ...args) => {\n\t\t\t\t\t\tif (options.verbose > level) loggers[level](\"OPFS syncer:\", ...args);\n\t\t\t\t\t};\n\t\t\t\t\tconst log = (...args) => logImpl(2, ...args);\n\t\t\t\t\tconst warn = (...args) => logImpl(1, ...args);\n\t\t\t\t\tconst error = (...args) => logImpl(0, ...args);\n\t\t\t\t\tconst toss = sqlite3.util.toss;\n\t\t\t\t\tconst capi = sqlite3.capi;\n\t\t\t\t\tconst util = sqlite3.util;\n\t\t\t\t\tconst wasm = sqlite3.wasm;\n\t\t\t\t\tconst sqlite3_vfs = capi.sqlite3_vfs;\n\t\t\t\t\tconst sqlite3_file = capi.sqlite3_file;\n\t\t\t\t\tconst sqlite3_io_methods = capi.sqlite3_io_methods;\n\t\t\t\t\tconst opfsUtil = Object.create(null);\n\t\t\t\t\tconst thisThreadHasOPFS = () => {\n\t\t\t\t\t\treturn globalThis.FileSystemHandle && globalThis.FileSystemDirectoryHandle && globalThis.FileSystemFileHandle && globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle && navigator?.storage?.getDirectory;\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.metrics = {\n\t\t\t\t\t\tdump: function() {\n\t\t\t\t\t\t\tlet k, n = 0, t = 0, w = 0;\n\t\t\t\t\t\t\tfor (k in state.opIds) {\n\t\t\t\t\t\t\t\tconst m = metrics[k];\n\t\t\t\t\t\t\t\tn += m.count;\n\t\t\t\t\t\t\t\tt += m.time;\n\t\t\t\t\t\t\t\tw += m.wait;\n\t\t\t\t\t\t\t\tm.avgTime = m.count && m.time ? m.time / m.count : 0;\n\t\t\t\t\t\t\t\tm.avgWait = m.count && m.wait ? m.wait / m.count : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsqlite3.config.log(globalThis.location.href, \"metrics for\", globalThis.location.href, \":\", metrics, \"\\nTotal of\", n, \"op(s) for\", t, \"ms (incl. \" + w + \" ms of waiting on the async side)\");\n\t\t\t\t\t\t\tsqlite3.config.log(\"Serialization metrics:\", metrics.s11n);\n\t\t\t\t\t\t\tW.postMessage({ type: \"opfs-async-metrics\" });\n\t\t\t\t\t\t},\n\t\t\t\t\t\treset: function() {\n\t\t\t\t\t\t\tlet k;\n\t\t\t\t\t\t\tconst r = (m) => m.count = m.time = m.wait = 0;\n\t\t\t\t\t\t\tfor (k in state.opIds) r(metrics[k] = Object.create(null));\n\t\t\t\t\t\t\tlet s = metrics.s11n = Object.create(null);\n\t\t\t\t\t\t\ts = s.serialize = Object.create(null);\n\t\t\t\t\t\t\ts.count = s.time = 0;\n\t\t\t\t\t\t\ts = metrics.s11n.deserialize = Object.create(null);\n\t\t\t\t\t\t\ts.count = s.time = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tconst opfsIoMethods = new sqlite3_io_methods();\n\t\t\t\t\tconst opfsVfs = new sqlite3_vfs().addOnDispose(() => opfsIoMethods.dispose());\n\t\t\t\t\tlet promiseWasRejected = void 0;\n\t\t\t\t\tconst promiseReject = (err) => {\n\t\t\t\t\t\tpromiseWasRejected = true;\n\t\t\t\t\t\topfsVfs.dispose();\n\t\t\t\t\t\treturn promiseReject_(err);\n\t\t\t\t\t};\n\t\t\t\t\tconst promiseResolve = () => {\n\t\t\t\t\t\tpromiseWasRejected = false;\n\t\t\t\t\t\treturn promiseResolve_(sqlite3);\n\t\t\t\t\t};\n\t\t\t\t\tconst W = new Worker(new URL(\"sqlite3-opfs-async-proxy.js\", import.meta.url));\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (void 0 === promiseWasRejected) promiseReject(/* @__PURE__ */ new Error(\"Timeout while waiting for OPFS async proxy worker.\"));\n\t\t\t\t\t}, 4e3);\n\t\t\t\t\tW._originalOnError = W.onerror;\n\t\t\t\t\tW.onerror = function(err) {\n\t\t\t\t\t\terror(\"Error initializing OPFS asyncer:\", err);\n\t\t\t\t\t\tpromiseReject(/* @__PURE__ */ new Error(\"Loading OPFS async Worker failed for unknown reasons.\"));\n\t\t\t\t\t};\n\t\t\t\t\tconst pDVfs = capi.sqlite3_vfs_find(null);\n\t\t\t\t\tconst dVfs = pDVfs ? new sqlite3_vfs(pDVfs) : null;\n\t\t\t\t\topfsIoMethods.$iVersion = 1;\n\t\t\t\t\topfsVfs.$iVersion = 2;\n\t\t\t\t\topfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof;\n\t\t\t\t\topfsVfs.$mxPathname = 1024;\n\t\t\t\t\topfsVfs.$zName = wasm.allocCString(\"opfs\");\n\t\t\t\t\topfsVfs.$xDlOpen = opfsVfs.$xDlError = opfsVfs.$xDlSym = opfsVfs.$xDlClose = null;\n\t\t\t\t\topfsVfs.addOnDispose(\"$zName\", opfsVfs.$zName, \"cleanup default VFS wrapper\", () => dVfs ? dVfs.dispose() : null);\n\t\t\t\t\tconst state = Object.create(null);\n\t\t\t\t\tstate.verbose = options.verbose;\n\t\t\t\t\tstate.littleEndian = (() => {\n\t\t\t\t\t\tconst buffer = /* @__PURE__ */ new ArrayBuffer(2);\n\t\t\t\t\t\tnew DataView(buffer).setInt16(0, 256, true);\n\t\t\t\t\t\treturn new Int16Array(buffer)[0] === 256;\n\t\t\t\t\t})();\n\t\t\t\t\tstate.asyncIdleWaitTime = 150;\n\t\t\t\t\tstate.asyncS11nExceptions = 1;\n\t\t\t\t\tstate.fileBufferSize = 1024 * 64;\n\t\t\t\t\tstate.sabS11nOffset = state.fileBufferSize;\n\t\t\t\t\tstate.sabS11nSize = opfsVfs.$mxPathname * 2;\n\t\t\t\t\tstate.sabIO = new SharedArrayBuffer(state.fileBufferSize + state.sabS11nSize);\n\t\t\t\t\tstate.opIds = Object.create(null);\n\t\t\t\t\tconst metrics = Object.create(null);\n\t\t\t\t\t{\n\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\tstate.opIds.whichOp = i++;\n\t\t\t\t\t\tstate.opIds.rc = i++;\n\t\t\t\t\t\tstate.opIds.xAccess = i++;\n\t\t\t\t\t\tstate.opIds.xClose = i++;\n\t\t\t\t\t\tstate.opIds.xDelete = i++;\n\t\t\t\t\t\tstate.opIds.xDeleteNoWait = i++;\n\t\t\t\t\t\tstate.opIds.xFileSize = i++;\n\t\t\t\t\t\tstate.opIds.xLock = i++;\n\t\t\t\t\t\tstate.opIds.xOpen = i++;\n\t\t\t\t\t\tstate.opIds.xRead = i++;\n\t\t\t\t\t\tstate.opIds.xSleep = i++;\n\t\t\t\t\t\tstate.opIds.xSync = i++;\n\t\t\t\t\t\tstate.opIds.xTruncate = i++;\n\t\t\t\t\t\tstate.opIds.xUnlock = i++;\n\t\t\t\t\t\tstate.opIds.xWrite = i++;\n\t\t\t\t\t\tstate.opIds.mkdir = i++;\n\t\t\t\t\t\tstate.opIds[\"opfs-async-metrics\"] = i++;\n\t\t\t\t\t\tstate.opIds[\"opfs-async-shutdown\"] = i++;\n\t\t\t\t\t\tstate.opIds.retry = i++;\n\t\t\t\t\t\tstate.sabOP = new SharedArrayBuffer(i * 4);\n\t\t\t\t\t\topfsUtil.metrics.reset();\n\t\t\t\t\t}\n\t\t\t\t\tstate.sq3Codes = Object.create(null);\n\t\t\t\t\t[\n\t\t\t\t\t\t\"SQLITE_ACCESS_EXISTS\",\n\t\t\t\t\t\t\"SQLITE_ACCESS_READWRITE\",\n\t\t\t\t\t\t\"SQLITE_BUSY\",\n\t\t\t\t\t\t\"SQLITE_CANTOPEN\",\n\t\t\t\t\t\t\"SQLITE_ERROR\",\n\t\t\t\t\t\t\"SQLITE_IOERR\",\n\t\t\t\t\t\t\"SQLITE_IOERR_ACCESS\",\n\t\t\t\t\t\t\"SQLITE_IOERR_CLOSE\",\n\t\t\t\t\t\t\"SQLITE_IOERR_DELETE\",\n\t\t\t\t\t\t\"SQLITE_IOERR_FSYNC\",\n\t\t\t\t\t\t\"SQLITE_IOERR_LOCK\",\n\t\t\t\t\t\t\"SQLITE_IOERR_READ\",\n\t\t\t\t\t\t\"SQLITE_IOERR_SHORT_READ\",\n\t\t\t\t\t\t\"SQLITE_IOERR_TRUNCATE\",\n\t\t\t\t\t\t\"SQLITE_IOERR_UNLOCK\",\n\t\t\t\t\t\t\"SQLITE_IOERR_WRITE\",\n\t\t\t\t\t\t\"SQLITE_LOCK_EXCLUSIVE\",\n\t\t\t\t\t\t\"SQLITE_LOCK_NONE\",\n\t\t\t\t\t\t\"SQLITE_LOCK_PENDING\",\n\t\t\t\t\t\t\"SQLITE_LOCK_RESERVED\",\n\t\t\t\t\t\t\"SQLITE_LOCK_SHARED\",\n\t\t\t\t\t\t\"SQLITE_LOCKED\",\n\t\t\t\t\t\t\"SQLITE_MISUSE\",\n\t\t\t\t\t\t\"SQLITE_NOTFOUND\",\n\t\t\t\t\t\t\"SQLITE_OPEN_CREATE\",\n\t\t\t\t\t\t\"SQLITE_OPEN_DELETEONCLOSE\",\n\t\t\t\t\t\t\"SQLITE_OPEN_MAIN_DB\",\n\t\t\t\t\t\t\"SQLITE_OPEN_READONLY\"\n\t\t\t\t\t].forEach((k) => {\n\t\t\t\t\t\tif (void 0 === (state.sq3Codes[k] = capi[k])) toss(\"Maintenance required: not found:\", k);\n\t\t\t\t\t});\n\t\t\t\t\tstate.opfsFlags = Object.assign(Object.create(null), {\n\t\t\t\t\t\tOPFS_UNLOCK_ASAP: 1,\n\t\t\t\t\t\tOPFS_UNLINK_BEFORE_OPEN: 2,\n\t\t\t\t\t\tdefaultUnlockAsap: false\n\t\t\t\t\t});\n\t\t\t\t\tconst opRun = (op, ...args) => {\n\t\t\t\t\t\tconst opNdx = state.opIds[op] || toss(\"Invalid op ID:\", op);\n\t\t\t\t\t\tstate.s11n.serialize(...args);\n\t\t\t\t\t\tAtomics.store(state.sabOPView, state.opIds.rc, -1);\n\t\t\t\t\t\tAtomics.store(state.sabOPView, state.opIds.whichOp, opNdx);\n\t\t\t\t\t\tAtomics.notify(state.sabOPView, state.opIds.whichOp);\n\t\t\t\t\t\tconst t = performance.now();\n\t\t\t\t\t\twhile (\"not-equal\" !== Atomics.wait(state.sabOPView, state.opIds.rc, -1));\n\t\t\t\t\t\tconst rc = Atomics.load(state.sabOPView, state.opIds.rc);\n\t\t\t\t\t\tmetrics[op].wait += performance.now() - t;\n\t\t\t\t\t\tif (rc && state.asyncS11nExceptions) {\n\t\t\t\t\t\t\tconst err = state.s11n.deserialize();\n\t\t\t\t\t\t\tif (err) error(op + \"() async error:\", ...err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn rc;\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.debug = {\n\t\t\t\t\t\tasyncShutdown: () => {\n\t\t\t\t\t\t\twarn(\"Shutting down OPFS async listener. The OPFS VFS will no longer work.\");\n\t\t\t\t\t\t\topRun(\"opfs-async-shutdown\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tasyncRestart: () => {\n\t\t\t\t\t\t\twarn(\"Attempting to restart OPFS VFS async listener. Might work, might not.\");\n\t\t\t\t\t\t\tW.postMessage({ type: \"opfs-async-restart\" });\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tconst initS11n = () => {\n\t\t\t\t\t\tif (state.s11n) return state.s11n;\n\t\t\t\t\t\tconst textDecoder = new TextDecoder(), textEncoder = new TextEncoder(\"utf-8\"), viewU8 = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize), viewDV = new DataView(state.sabIO, state.sabS11nOffset, state.sabS11nSize);\n\t\t\t\t\t\tstate.s11n = Object.create(null);\n\t\t\t\t\t\tconst TypeIds = Object.create(null);\n\t\t\t\t\t\tTypeIds.number = {\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tsize: 8,\n\t\t\t\t\t\t\tgetter: \"getFloat64\",\n\t\t\t\t\t\t\tsetter: \"setFloat64\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\tTypeIds.bigint = {\n\t\t\t\t\t\t\tid: 2,\n\t\t\t\t\t\t\tsize: 8,\n\t\t\t\t\t\t\tgetter: \"getBigInt64\",\n\t\t\t\t\t\t\tsetter: \"setBigInt64\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\tTypeIds.boolean = {\n\t\t\t\t\t\t\tid: 3,\n\t\t\t\t\t\t\tsize: 4,\n\t\t\t\t\t\t\tgetter: \"getInt32\",\n\t\t\t\t\t\t\tsetter: \"setInt32\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\tTypeIds.string = { id: 4 };\n\t\t\t\t\t\tconst getTypeId = (v) => TypeIds[typeof v] || toss(\"Maintenance required: this value type cannot be serialized.\", v);\n\t\t\t\t\t\tconst getTypeIdById = (tid) => {\n\t\t\t\t\t\t\tswitch (tid) {\n\t\t\t\t\t\t\t\tcase TypeIds.number.id: return TypeIds.number;\n\t\t\t\t\t\t\t\tcase TypeIds.bigint.id: return TypeIds.bigint;\n\t\t\t\t\t\t\t\tcase TypeIds.boolean.id: return TypeIds.boolean;\n\t\t\t\t\t\t\t\tcase TypeIds.string.id: return TypeIds.string;\n\t\t\t\t\t\t\t\tdefault: toss(\"Invalid type ID:\", tid);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tstate.s11n.deserialize = function(clear = false) {\n\t\t\t\t\t\t\t++metrics.s11n.deserialize.count;\n\t\t\t\t\t\t\tconst t = performance.now();\n\t\t\t\t\t\t\tconst argc = viewU8[0];\n\t\t\t\t\t\t\tconst rc = argc ? [] : null;\n\t\t\t\t\t\t\tif (argc) {\n\t\t\t\t\t\t\t\tconst typeIds = [];\n\t\t\t\t\t\t\t\tlet offset = 1, i, n, v;\n\t\t\t\t\t\t\t\tfor (i = 0; i < argc; ++i, ++offset) typeIds.push(getTypeIdById(viewU8[offset]));\n\t\t\t\t\t\t\t\tfor (i = 0; i < argc; ++i) {\n\t\t\t\t\t\t\t\t\tconst t = typeIds[i];\n\t\t\t\t\t\t\t\t\tif (t.getter) {\n\t\t\t\t\t\t\t\t\t\tv = viewDV[t.getter](offset, state.littleEndian);\n\t\t\t\t\t\t\t\t\t\toffset += t.size;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tn = viewDV.getInt32(offset, state.littleEndian);\n\t\t\t\t\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\t\t\t\t\tv = textDecoder.decode(viewU8.slice(offset, offset + n));\n\t\t\t\t\t\t\t\t\t\toffset += n;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\trc.push(v);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (clear) viewU8[0] = 0;\n\t\t\t\t\t\t\tmetrics.s11n.deserialize.time += performance.now() - t;\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tstate.s11n.serialize = function(...args) {\n\t\t\t\t\t\t\tconst t = performance.now();\n\t\t\t\t\t\t\t++metrics.s11n.serialize.count;\n\t\t\t\t\t\t\tif (args.length) {\n\t\t\t\t\t\t\t\tconst typeIds = [];\n\t\t\t\t\t\t\t\tlet i = 0, offset = 1;\n\t\t\t\t\t\t\t\tviewU8[0] = args.length & 255;\n\t\t\t\t\t\t\t\tfor (; i < args.length; ++i, ++offset) {\n\t\t\t\t\t\t\t\t\ttypeIds.push(getTypeId(args[i]));\n\t\t\t\t\t\t\t\t\tviewU8[offset] = typeIds[i].id;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor (i = 0; i < args.length; ++i) {\n\t\t\t\t\t\t\t\t\tconst t = typeIds[i];\n\t\t\t\t\t\t\t\t\tif (t.setter) {\n\t\t\t\t\t\t\t\t\t\tviewDV[t.setter](offset, args[i], state.littleEndian);\n\t\t\t\t\t\t\t\t\t\toffset += t.size;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tconst s = textEncoder.encode(args[i]);\n\t\t\t\t\t\t\t\t\t\tviewDV.setInt32(offset, s.byteLength, state.littleEndian);\n\t\t\t\t\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t\t\t\t\t\tviewU8.set(s, offset);\n\t\t\t\t\t\t\t\t\t\toffset += s.byteLength;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else viewU8[0] = 0;\n\t\t\t\t\t\t\tmetrics.s11n.serialize.time += performance.now() - t;\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn state.s11n;\n\t\t\t\t\t};\n\t\t\t\t\tconst randomFilename = function f(len = 16) {\n\t\t\t\t\t\tif (!f._chars) {\n\t\t\t\t\t\t\tf._chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012346789\";\n\t\t\t\t\t\t\tf._n = f._chars.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst a = [];\n\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\tfor (; i < len; ++i) {\n\t\t\t\t\t\t\tconst ndx = Math.random() * (f._n * 64) % f._n | 0;\n\t\t\t\t\t\t\ta[i] = f._chars[ndx];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn a.join(\"\");\n\t\t\t\t\t};\n\t\t\t\t\tconst __openFiles = Object.create(null);\n\t\t\t\t\tconst opTimer = Object.create(null);\n\t\t\t\t\topTimer.op = void 0;\n\t\t\t\t\topTimer.start = void 0;\n\t\t\t\t\tconst mTimeStart = (op) => {\n\t\t\t\t\t\topTimer.start = performance.now();\n\t\t\t\t\t\topTimer.op = op;\n\t\t\t\t\t\t++metrics[op].count;\n\t\t\t\t\t};\n\t\t\t\t\tconst mTimeEnd = () => metrics[opTimer.op].time += performance.now() - opTimer.start;\n\t\t\t\t\tconst ioSyncWrappers = {\n\t\t\t\t\t\txCheckReservedLock: function(pFile, pOut) {\n\t\t\t\t\t\t\twasm.poke(pOut, 0, \"i32\");\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txClose: function(pFile) {\n\t\t\t\t\t\t\tmTimeStart(\"xClose\");\n\t\t\t\t\t\t\tlet rc = 0;\n\t\t\t\t\t\t\tconst f = __openFiles[pFile];\n\t\t\t\t\t\t\tif (f) {\n\t\t\t\t\t\t\t\tdelete __openFiles[pFile];\n\t\t\t\t\t\t\t\trc = opRun(\"xClose\", pFile);\n\t\t\t\t\t\t\t\tif (f.sq3File) f.sq3File.dispose();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txDeviceCharacteristics: function(pFile) {\n\t\t\t\t\t\t\treturn capi.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txFileControl: function(pFile, opId, pArg) {\n\t\t\t\t\t\t\treturn capi.SQLITE_NOTFOUND;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txFileSize: function(pFile, pSz64) {\n\t\t\t\t\t\t\tmTimeStart(\"xFileSize\");\n\t\t\t\t\t\t\tlet rc = opRun(\"xFileSize\", pFile);\n\t\t\t\t\t\t\tif (0 == rc) try {\n\t\t\t\t\t\t\t\tconst sz = state.s11n.deserialize()[0];\n\t\t\t\t\t\t\t\twasm.poke(pSz64, sz, \"i64\");\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\terror(\"Unexpected error reading xFileSize() result:\", e);\n\t\t\t\t\t\t\t\trc = state.sq3Codes.SQLITE_IOERR;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txLock: function(pFile, lockType) {\n\t\t\t\t\t\t\tmTimeStart(\"xLock\");\n\t\t\t\t\t\t\tconst f = __openFiles[pFile];\n\t\t\t\t\t\t\tlet rc = 0;\n\t\t\t\t\t\t\tif (!f.lockType) {\n\t\t\t\t\t\t\t\trc = opRun(\"xLock\", pFile, lockType);\n\t\t\t\t\t\t\t\tif (0 === rc) f.lockType = lockType;\n\t\t\t\t\t\t\t} else f.lockType = lockType;\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txRead: function(pFile, pDest, n, offset64) {\n\t\t\t\t\t\t\tmTimeStart(\"xRead\");\n\t\t\t\t\t\t\tconst f = __openFiles[pFile];\n\t\t\t\t\t\t\tlet rc;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trc = opRun(\"xRead\", pFile, n, Number(offset64));\n\t\t\t\t\t\t\t\tif (0 === rc || capi.SQLITE_IOERR_SHORT_READ === rc) wasm.heap8u().set(f.sabView.subarray(0, n), Number(pDest));\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\terror(\"xRead(\", arguments, \") failed:\", e, f);\n\t\t\t\t\t\t\t\trc = capi.SQLITE_IOERR_READ;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txSync: function(pFile, flags) {\n\t\t\t\t\t\t\tmTimeStart(\"xSync\");\n\t\t\t\t\t\t\t++metrics.xSync.count;\n\t\t\t\t\t\t\tconst rc = opRun(\"xSync\", pFile, flags);\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txTruncate: function(pFile, sz64) {\n\t\t\t\t\t\t\tmTimeStart(\"xTruncate\");\n\t\t\t\t\t\t\tconst rc = opRun(\"xTruncate\", pFile, Number(sz64));\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txUnlock: function(pFile, lockType) {\n\t\t\t\t\t\t\tmTimeStart(\"xUnlock\");\n\t\t\t\t\t\t\tconst f = __openFiles[pFile];\n\t\t\t\t\t\t\tlet rc = 0;\n\t\t\t\t\t\t\tif (capi.SQLITE_LOCK_NONE === lockType && f.lockType) rc = opRun(\"xUnlock\", pFile, lockType);\n\t\t\t\t\t\t\tif (0 === rc) f.lockType = lockType;\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txWrite: function(pFile, pSrc, n, offset64) {\n\t\t\t\t\t\t\tmTimeStart(\"xWrite\");\n\t\t\t\t\t\t\tconst f = __openFiles[pFile];\n\t\t\t\t\t\t\tlet rc;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tf.sabView.set(wasm.heap8u().subarray(Number(pSrc), Number(pSrc) + n));\n\t\t\t\t\t\t\t\trc = opRun(\"xWrite\", pFile, n, Number(offset64));\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\terror(\"xWrite(\", arguments, \") failed:\", e, f);\n\t\t\t\t\t\t\t\trc = capi.SQLITE_IOERR_WRITE;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tconst vfsSyncWrappers = {\n\t\t\t\t\t\txAccess: function(pVfs, zName, flags, pOut) {\n\t\t\t\t\t\t\tmTimeStart(\"xAccess\");\n\t\t\t\t\t\t\tconst rc = opRun(\"xAccess\", wasm.cstrToJs(zName));\n\t\t\t\t\t\t\twasm.poke(pOut, rc ? 0 : 1, \"i32\");\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txCurrentTime: function(pVfs, pOut) {\n\t\t\t\t\t\t\twasm.poke(pOut, 2440587.5 + (/* @__PURE__ */ new Date()).getTime() / 864e5, \"double\");\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txCurrentTimeInt64: function(pVfs, pOut) {\n\t\t\t\t\t\t\twasm.poke(pOut, 2440587.5 * 864e5 + (/* @__PURE__ */ new Date()).getTime(), \"i64\");\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txDelete: function(pVfs, zName, doSyncDir) {\n\t\t\t\t\t\t\tmTimeStart(\"xDelete\");\n\t\t\t\t\t\t\tconst rc = opRun(\"xDelete\", wasm.cstrToJs(zName), doSyncDir, false);\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txFullPathname: function(pVfs, zName, nOut, pOut) {\n\t\t\t\t\t\t\treturn wasm.cstrncpy(pOut, zName, nOut) < nOut ? 0 : capi.SQLITE_CANTOPEN;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txGetLastError: function(pVfs, nOut, pOut) {\n\t\t\t\t\t\t\twarn(\"OPFS xGetLastError() has nothing sensible to return.\");\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t},\n\t\t\t\t\t\txOpen: function f(pVfs, zName, pFile, flags, pOutFlags) {\n\t\t\t\t\t\t\tmTimeStart(\"xOpen\");\n\t\t\t\t\t\t\tlet opfsFlags = 0;\n\t\t\t\t\t\t\tif (0 === zName) zName = randomFilename();\n\t\t\t\t\t\t\telse if (wasm.isPtr(zName)) {\n\t\t\t\t\t\t\t\tif (capi.sqlite3_uri_boolean(zName, \"opfs-unlock-asap\", 0)) opfsFlags |= state.opfsFlags.OPFS_UNLOCK_ASAP;\n\t\t\t\t\t\t\t\tif (capi.sqlite3_uri_boolean(zName, \"delete-before-open\", 0)) opfsFlags |= state.opfsFlags.OPFS_UNLINK_BEFORE_OPEN;\n\t\t\t\t\t\t\t\tzName = wasm.cstrToJs(zName);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst fh = Object.create(null);\n\t\t\t\t\t\t\tfh.fid = pFile;\n\t\t\t\t\t\t\tfh.filename = zName;\n\t\t\t\t\t\t\tfh.sab = new SharedArrayBuffer(state.fileBufferSize);\n\t\t\t\t\t\t\tfh.flags = flags;\n\t\t\t\t\t\t\tfh.readOnly = !(capi.SQLITE_OPEN_CREATE & flags) && !!(flags & capi.SQLITE_OPEN_READONLY);\n\t\t\t\t\t\t\tconst rc = opRun(\"xOpen\", pFile, zName, flags, opfsFlags);\n\t\t\t\t\t\t\tif (!rc) {\n\t\t\t\t\t\t\t\tif (fh.readOnly) wasm.poke(pOutFlags, capi.SQLITE_OPEN_READONLY, \"i32\");\n\t\t\t\t\t\t\t\t__openFiles[pFile] = fh;\n\t\t\t\t\t\t\t\tfh.sabView = state.sabFileBufView;\n\t\t\t\t\t\t\t\tfh.sq3File = new sqlite3_file(pFile);\n\t\t\t\t\t\t\t\tfh.sq3File.$pMethods = opfsIoMethods.pointer;\n\t\t\t\t\t\t\t\tfh.lockType = capi.SQLITE_LOCK_NONE;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmTimeEnd();\n\t\t\t\t\t\t\treturn rc;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tif (dVfs) {\n\t\t\t\t\t\topfsVfs.$xRandomness = dVfs.$xRandomness;\n\t\t\t\t\t\topfsVfs.$xSleep = dVfs.$xSleep;\n\t\t\t\t\t}\n\t\t\t\t\tif (!opfsVfs.$xRandomness) vfsSyncWrappers.xRandomness = function(pVfs, nOut, pOut) {\n\t\t\t\t\t\tconst heap = wasm.heap8u();\n\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\tconst npOut = Number(pOut);\n\t\t\t\t\t\tfor (; i < nOut; ++i) heap[npOut + i] = Math.random() * 255e3 & 255;\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t};\n\t\t\t\t\tif (!opfsVfs.$xSleep) vfsSyncWrappers.xSleep = function(pVfs, ms) {\n\t\t\t\t\t\tAtomics.wait(state.sabOPView, state.opIds.xSleep, 0, ms);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.getResolvedPath = function(filename, splitIt) {\n\t\t\t\t\t\tconst p = new URL(filename, \"file://irrelevant\").pathname;\n\t\t\t\t\t\treturn splitIt ? p.split(\"/\").filter((v) => !!v) : p;\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.getDirForFilename = async function f(absFilename, createDirs = false) {\n\t\t\t\t\t\tconst path = opfsUtil.getResolvedPath(absFilename, true);\n\t\t\t\t\t\tconst filename = path.pop();\n\t\t\t\t\t\tlet dh = opfsUtil.rootDirectory;\n\t\t\t\t\t\tfor (const dirName of path) if (dirName) dh = await dh.getDirectoryHandle(dirName, { create: !!createDirs });\n\t\t\t\t\t\treturn [dh, filename];\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.mkdir = async function(absDirName) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait opfsUtil.getDirForFilename(absDirName + \"/filepart\", true);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.entryExists = async function(fsEntryName) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst [dh, fn] = await opfsUtil.getDirForFilename(fsEntryName);\n\t\t\t\t\t\t\tawait dh.getFileHandle(fn);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.randomFilename = randomFilename;\n\t\t\t\t\topfsUtil.treeList = async function() {\n\t\t\t\t\t\tconst doDir = async function callee(dirHandle, tgt) {\n\t\t\t\t\t\t\ttgt.name = dirHandle.name;\n\t\t\t\t\t\t\ttgt.dirs = [];\n\t\t\t\t\t\t\ttgt.files = [];\n\t\t\t\t\t\t\tfor await (const handle of dirHandle.values()) if (\"directory\" === handle.kind) {\n\t\t\t\t\t\t\t\tconst subDir = Object.create(null);\n\t\t\t\t\t\t\t\ttgt.dirs.push(subDir);\n\t\t\t\t\t\t\t\tawait callee(handle, subDir);\n\t\t\t\t\t\t\t} else tgt.files.push(handle.name);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst root = Object.create(null);\n\t\t\t\t\t\tawait doDir(opfsUtil.rootDirectory, root);\n\t\t\t\t\t\treturn root;\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.rmfr = async function() {\n\t\t\t\t\t\tconst dir = opfsUtil.rootDirectory, opt = { recurse: true };\n\t\t\t\t\t\tfor await (const handle of dir.values()) dir.removeEntry(handle.name, opt);\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.unlink = async function(fsEntryName, recursive = false, throwOnError = false) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst [hDir, filenamePart] = await opfsUtil.getDirForFilename(fsEntryName, false);\n\t\t\t\t\t\t\tawait hDir.removeEntry(filenamePart, { recursive });\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tif (throwOnError) throw new Error(\"unlink(\", arguments[0], \") failed: \" + e.message, { cause: e });\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.traverse = async function(opt) {\n\t\t\t\t\t\tconst defaultOpt = {\n\t\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t\t\tdirectory: opfsUtil.rootDirectory\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (\"function\" === typeof opt) opt = { callback: opt };\n\t\t\t\t\t\topt = Object.assign(defaultOpt, opt || {});\n\t\t\t\t\t\t(async function callee(dirHandle, depth) {\n\t\t\t\t\t\t\tfor await (const handle of dirHandle.values()) if (false === opt.callback(handle, dirHandle, depth)) return false;\n\t\t\t\t\t\t\telse if (opt.recursive && \"directory\" === handle.kind) {\n\t\t\t\t\t\t\t\tif (false === await callee(handle, depth + 1)) break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})(opt.directory, 0);\n\t\t\t\t\t};\n\t\t\t\t\tconst importDbChunked = async function(filename, callback) {\n\t\t\t\t\t\tconst [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true);\n\t\t\t\t\t\tlet sah = await (await hDir.getFileHandle(fnamePart, { create: true })).createSyncAccessHandle(), nWrote = 0, chunk, checkedHeader = false;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tsah.truncate(0);\n\t\t\t\t\t\t\twhile (void 0 !== (chunk = await callback())) {\n\t\t\t\t\t\t\t\tif (chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk);\n\t\t\t\t\t\t\t\tif (!checkedHeader && 0 === nWrote && chunk.byteLength >= 15) {\n\t\t\t\t\t\t\t\t\tutil.affirmDbHeader(chunk);\n\t\t\t\t\t\t\t\t\tcheckedHeader = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsah.write(chunk, { at: nWrote });\n\t\t\t\t\t\t\t\tnWrote += chunk.byteLength;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (nWrote < 512 || 0 !== nWrote % 512) toss(\"Input size\", nWrote, \"is not correct for an SQLite database.\");\n\t\t\t\t\t\t\tif (!checkedHeader) {\n\t\t\t\t\t\t\t\tconst header = new Uint8Array(20);\n\t\t\t\t\t\t\t\tsah.read(header, { at: 0 });\n\t\t\t\t\t\t\t\tutil.affirmDbHeader(header);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsah.write(new Uint8Array([1, 1]), { at: 18 });\n\t\t\t\t\t\t\treturn nWrote;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tawait sah.close();\n\t\t\t\t\t\t\tsah = void 0;\n\t\t\t\t\t\t\tawait hDir.removeEntry(fnamePart).catch(() => {});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (sah) await sah.close();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\topfsUtil.importDb = async function(filename, bytes) {\n\t\t\t\t\t\tif (bytes instanceof Function) return importDbChunked(filename, bytes);\n\t\t\t\t\t\tif (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n\t\t\t\t\t\tutil.affirmIsDb(bytes);\n\t\t\t\t\t\tconst n = bytes.byteLength;\n\t\t\t\t\t\tconst [hDir, fnamePart] = await opfsUtil.getDirForFilename(filename, true);\n\t\t\t\t\t\tlet sah, nWrote = 0;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tsah = await (await hDir.getFileHandle(fnamePart, { create: true })).createSyncAccessHandle();\n\t\t\t\t\t\t\tsah.truncate(0);\n\t\t\t\t\t\t\tnWrote = sah.write(bytes, { at: 0 });\n\t\t\t\t\t\t\tif (nWrote != n) toss(\"Expected to write \" + n + \" bytes but wrote \" + nWrote + \".\");\n\t\t\t\t\t\t\tsah.write(new Uint8Array([1, 1]), { at: 18 });\n\t\t\t\t\t\t\treturn nWrote;\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tif (sah) {\n\t\t\t\t\t\t\t\tawait sah.close();\n\t\t\t\t\t\t\t\tsah = void 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tawait hDir.removeEntry(fnamePart).catch(() => {});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (sah) await sah.close();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tif (sqlite3.oo1) {\n\t\t\t\t\t\tconst OpfsDb = function(...args) {\n\t\t\t\t\t\t\tconst opt = sqlite3.oo1.DB.dbCtorHelper.normalizeArgs(...args);\n\t\t\t\t\t\t\topt.vfs = opfsVfs.$zName;\n\t\t\t\t\t\t\tsqlite3.oo1.DB.dbCtorHelper.call(this, opt);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tOpfsDb.prototype = Object.create(sqlite3.oo1.DB.prototype);\n\t\t\t\t\t\tsqlite3.oo1.OpfsDb = OpfsDb;\n\t\t\t\t\t\tOpfsDb.importDb = opfsUtil.importDb;\n\t\t\t\t\t\tsqlite3.oo1.DB.dbCtorHelper.setVfsPostOpenCallback(opfsVfs.pointer, function(oo1Db, sqlite3) {\n\t\t\t\t\t\t\tsqlite3.capi.sqlite3_busy_timeout(oo1Db, 1e4);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst sanityCheck = function() {\n\t\t\t\t\t\tconst scope = wasm.scopedAllocPush();\n\t\t\t\t\t\tconst sq3File = new sqlite3_file();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst fid = sq3File.pointer;\n\t\t\t\t\t\t\tconst openFlags = capi.SQLITE_OPEN_CREATE | capi.SQLITE_OPEN_READWRITE | capi.SQLITE_OPEN_MAIN_DB;\n\t\t\t\t\t\t\tconst pOut = wasm.scopedAlloc(8);\n\t\t\t\t\t\t\tconst dbFile = \"/sanity/check/file\" + randomFilename(8);\n\t\t\t\t\t\t\tconst zDbFile = wasm.scopedAllocCString(dbFile);\n\t\t\t\t\t\t\tlet rc;\n\t\t\t\t\t\t\tstate.s11n.serialize(\"This is ä string.\");\n\t\t\t\t\t\t\trc = state.s11n.deserialize();\n\t\t\t\t\t\t\tlog(\"deserialize() says:\", rc);\n\t\t\t\t\t\t\tif (\"This is ä string.\" !== rc[0]) toss(\"String d13n error.\");\n\t\t\t\t\t\t\tvfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut);\n\t\t\t\t\t\t\trc = wasm.peek(pOut, \"i32\");\n\t\t\t\t\t\t\tlog(\"xAccess(\", dbFile, \") exists ?=\", rc);\n\t\t\t\t\t\t\trc = vfsSyncWrappers.xOpen(opfsVfs.pointer, zDbFile, fid, openFlags, pOut);\n\t\t\t\t\t\t\tlog(\"open rc =\", rc, \"state.sabOPView[xOpen] =\", state.sabOPView[state.opIds.xOpen]);\n\t\t\t\t\t\t\tif (0 !== rc) {\n\t\t\t\t\t\t\t\terror(\"open failed with code\", rc);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut);\n\t\t\t\t\t\t\trc = wasm.peek(pOut, \"i32\");\n\t\t\t\t\t\t\tif (!rc) toss(\"xAccess() failed to detect file.\");\n\t\t\t\t\t\t\trc = ioSyncWrappers.xSync(sq3File.pointer, 0);\n\t\t\t\t\t\t\tif (rc) toss(\"sync failed w/ rc\", rc);\n\t\t\t\t\t\t\trc = ioSyncWrappers.xTruncate(sq3File.pointer, 1024);\n\t\t\t\t\t\t\tif (rc) toss(\"truncate failed w/ rc\", rc);\n\t\t\t\t\t\t\twasm.poke(pOut, 0, \"i64\");\n\t\t\t\t\t\t\trc = ioSyncWrappers.xFileSize(sq3File.pointer, pOut);\n\t\t\t\t\t\t\tif (rc) toss(\"xFileSize failed w/ rc\", rc);\n\t\t\t\t\t\t\tlog(\"xFileSize says:\", wasm.peek(pOut, \"i64\"));\n\t\t\t\t\t\t\trc = ioSyncWrappers.xWrite(sq3File.pointer, zDbFile, 10, 1);\n\t\t\t\t\t\t\tif (rc) toss(\"xWrite() failed!\");\n\t\t\t\t\t\t\tconst readBuf = wasm.scopedAlloc(16);\n\t\t\t\t\t\t\trc = ioSyncWrappers.xRead(sq3File.pointer, readBuf, 6, 2);\n\t\t\t\t\t\t\twasm.poke(readBuf + 6, 0);\n\t\t\t\t\t\t\tlet jRead = wasm.cstrToJs(readBuf);\n\t\t\t\t\t\t\tlog(\"xRead() got:\", jRead);\n\t\t\t\t\t\t\tif (\"sanity\" !== jRead) toss(\"Unexpected xRead() value.\");\n\t\t\t\t\t\t\tif (vfsSyncWrappers.xSleep) {\n\t\t\t\t\t\t\t\tlog(\"xSleep()ing before close()ing...\");\n\t\t\t\t\t\t\t\tvfsSyncWrappers.xSleep(opfsVfs.pointer, 2e3);\n\t\t\t\t\t\t\t\tlog(\"waking up from xSleep()\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trc = ioSyncWrappers.xClose(fid);\n\t\t\t\t\t\t\tlog(\"xClose rc =\", rc, \"sabOPView =\", state.sabOPView);\n\t\t\t\t\t\t\tlog(\"Deleting file:\", dbFile);\n\t\t\t\t\t\t\tvfsSyncWrappers.xDelete(opfsVfs.pointer, zDbFile, 4660);\n\t\t\t\t\t\t\tvfsSyncWrappers.xAccess(opfsVfs.pointer, zDbFile, 0, pOut);\n\t\t\t\t\t\t\trc = wasm.peek(pOut, \"i32\");\n\t\t\t\t\t\t\tif (rc) toss(\"Expecting 0 from xAccess(\", dbFile, \") after xDelete().\");\n\t\t\t\t\t\t\twarn(\"End of OPFS sanity checks.\");\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tsq3File.dispose();\n\t\t\t\t\t\t\twasm.scopedAllocPop(scope);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tW.onmessage = function({ data }) {\n\t\t\t\t\t\tswitch (data.type) {\n\t\t\t\t\t\t\tcase \"opfs-unavailable\":\n\t\t\t\t\t\t\t\tpromiseReject(new Error(data.payload.join(\" \")));\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"opfs-async-loaded\":\n\t\t\t\t\t\t\t\tW.postMessage({\n\t\t\t\t\t\t\t\t\ttype: \"opfs-async-init\",\n\t\t\t\t\t\t\t\t\targs: state\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"opfs-async-inited\":\n\t\t\t\t\t\t\t\tif (true === promiseWasRejected) break;\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tsqlite3.vfs.installVfs({\n\t\t\t\t\t\t\t\t\t\tio: {\n\t\t\t\t\t\t\t\t\t\t\tstruct: opfsIoMethods,\n\t\t\t\t\t\t\t\t\t\t\tmethods: ioSyncWrappers\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvfs: {\n\t\t\t\t\t\t\t\t\t\t\tstruct: opfsVfs,\n\t\t\t\t\t\t\t\t\t\t\tmethods: vfsSyncWrappers\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tstate.sabOPView = new Int32Array(state.sabOP);\n\t\t\t\t\t\t\t\t\tstate.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize);\n\t\t\t\t\t\t\t\t\tstate.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize);\n\t\t\t\t\t\t\t\t\tinitS11n();\n\t\t\t\t\t\t\t\t\tif (options.sanityChecks) {\n\t\t\t\t\t\t\t\t\t\twarn(\"Running sanity checks because of opfs-sanity-check URL arg...\");\n\t\t\t\t\t\t\t\t\t\tsanityCheck();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (thisThreadHasOPFS()) navigator.storage.getDirectory().then((d) => {\n\t\t\t\t\t\t\t\t\t\tW.onerror = W._originalOnError;\n\t\t\t\t\t\t\t\t\t\tdelete W._originalOnError;\n\t\t\t\t\t\t\t\t\t\tsqlite3.opfs = opfsUtil;\n\t\t\t\t\t\t\t\t\t\topfsUtil.rootDirectory = d;\n\t\t\t\t\t\t\t\t\t\tlog(\"End of OPFS sqlite3_vfs setup.\", opfsVfs);\n\t\t\t\t\t\t\t\t\t\tpromiseResolve();\n\t\t\t\t\t\t\t\t\t}).catch(promiseReject);\n\t\t\t\t\t\t\t\t\telse promiseResolve();\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\terror(e);\n\t\t\t\t\t\t\t\t\tpromiseReject(e);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tconst errMsg = \"Unexpected message from the OPFS async worker: \" + JSON.stringify(data);\n\t\t\t\t\t\t\t\terror(errMsg);\n\t\t\t\t\t\t\t\tpromiseReject(new Error(errMsg));\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t};\n\t\t\tinstallOpfsVfs.defaultProxyUri = \"sqlite3-opfs-async-proxy.js\";\n\t\t\tglobalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3) => {\n\t\t\t\ttry {\n\t\t\t\t\tlet proxyJs = installOpfsVfs.defaultProxyUri;\n\t\t\t\t\tif (sqlite3?.scriptInfo?.sqlite3Dir) installOpfsVfs.defaultProxyUri = sqlite3.scriptInfo.sqlite3Dir + proxyJs;\n\t\t\t\t\treturn installOpfsVfs().catch((e) => {\n\t\t\t\t\t\tsqlite3.config.warn(\"Ignoring inability to install OPFS sqlite3_vfs:\", e.message);\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tsqlite3.config.error(\"installOpfsVfs() exception:\", e);\n\t\t\t\t\treturn Promise.reject(e);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tglobalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3) {\n\t\t\t\"use strict\";\n\t\t\tconst toss = sqlite3.util.toss;\n\t\t\tconst toss3 = sqlite3.util.toss3;\n\t\t\tconst initPromises = Object.create(null);\n\t\t\tconst capi = sqlite3.capi;\n\t\t\tconst util = sqlite3.util;\n\t\t\tconst wasm = sqlite3.wasm;\n\t\t\tconst SECTOR_SIZE = 4096;\n\t\t\tconst HEADER_MAX_PATH_SIZE = 512;\n\t\t\tconst HEADER_FLAGS_SIZE = 4;\n\t\t\tconst HEADER_DIGEST_SIZE = 8;\n\t\t\tconst HEADER_CORPUS_SIZE = HEADER_MAX_PATH_SIZE + HEADER_FLAGS_SIZE;\n\t\t\tconst HEADER_OFFSET_FLAGS = HEADER_MAX_PATH_SIZE;\n\t\t\tconst HEADER_OFFSET_DIGEST = HEADER_CORPUS_SIZE;\n\t\t\tconst HEADER_OFFSET_DATA = SECTOR_SIZE;\n\t\t\tconst PERSISTENT_FILE_TYPES = capi.SQLITE_OPEN_MAIN_DB | capi.SQLITE_OPEN_MAIN_JOURNAL | capi.SQLITE_OPEN_SUPER_JOURNAL | capi.SQLITE_OPEN_WAL;\n\t\t\tconst FLAG_COMPUTE_DIGEST_V2 = capi.SQLITE_OPEN_MEMORY;\n\t\t\tconst OPAQUE_DIR_NAME = \".opaque\";\n\t\t\tconst getRandomName = () => Math.random().toString(36).slice(2);\n\t\t\tconst textDecoder = new TextDecoder();\n\t\t\tconst textEncoder = new TextEncoder();\n\t\t\tconst optionDefaults = Object.assign(Object.create(null), {\n\t\t\t\tname: \"opfs-sahpool\",\n\t\t\t\tdirectory: void 0,\n\t\t\t\tinitialCapacity: 6,\n\t\t\t\tclearOnInit: false,\n\t\t\t\tverbosity: 2,\n\t\t\t\tforceReinitIfPreviouslyFailed: false\n\t\t\t});\n\t\t\tconst loggers = [\n\t\t\t\tsqlite3.config.error,\n\t\t\t\tsqlite3.config.warn,\n\t\t\t\tsqlite3.config.log\n\t\t\t];\n\t\t\tsqlite3.config.log;\n\t\t\tconst warn = sqlite3.config.warn;\n\t\t\tsqlite3.config.error;\n\t\t\tconst __mapVfsToPool = /* @__PURE__ */ new Map();\n\t\t\tconst getPoolForVfs = (pVfs) => __mapVfsToPool.get(pVfs);\n\t\t\tconst setPoolForVfs = (pVfs, pool) => {\n\t\t\t\tif (pool) __mapVfsToPool.set(pVfs, pool);\n\t\t\t\telse __mapVfsToPool.delete(pVfs);\n\t\t\t};\n\t\t\tconst __mapSqlite3File = /* @__PURE__ */ new Map();\n\t\t\tconst getPoolForPFile = (pFile) => __mapSqlite3File.get(pFile);\n\t\t\tconst setPoolForPFile = (pFile, pool) => {\n\t\t\t\tif (pool) __mapSqlite3File.set(pFile, pool);\n\t\t\t\telse __mapSqlite3File.delete(pFile);\n\t\t\t};\n\t\t\tconst ioMethods = {\n\t\t\t\txCheckReservedLock: function(pFile, pOut) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.log(\"xCheckReservedLock\");\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\twasm.poke32(pOut, 1);\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txClose: function(pFile) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\tconst file = pool.getOFileForS3File(pFile);\n\t\t\t\t\tif (file) try {\n\t\t\t\t\t\tpool.log(`xClose ${file.path}`);\n\t\t\t\t\t\tpool.mapS3FileToOFile(pFile, false);\n\t\t\t\t\t\tfile.sah.flush();\n\t\t\t\t\t\tif (file.flags & capi.SQLITE_OPEN_DELETEONCLOSE) pool.deletePath(file.path);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn pool.storeErr(e, capi.SQLITE_IOERR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txDeviceCharacteristics: function(pFile) {\n\t\t\t\t\treturn capi.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;\n\t\t\t\t},\n\t\t\t\txFileControl: function(pFile, opId, pArg) {\n\t\t\t\t\treturn capi.SQLITE_NOTFOUND;\n\t\t\t\t},\n\t\t\t\txFileSize: function(pFile, pSz64) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.log(`xFileSize`);\n\t\t\t\t\tconst size = pool.getOFileForS3File(pFile).sah.getSize() - HEADER_OFFSET_DATA;\n\t\t\t\t\twasm.poke64(pSz64, BigInt(size));\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txLock: function(pFile, lockType) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.log(`xLock ${lockType}`);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\tconst file = pool.getOFileForS3File(pFile);\n\t\t\t\t\tfile.lockType = lockType;\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txRead: function(pFile, pDest, n, offset64) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\tconst file = pool.getOFileForS3File(pFile);\n\t\t\t\t\tpool.log(`xRead ${file.path} ${n} @ ${offset64}`);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst nRead = file.sah.read(wasm.heap8u().subarray(Number(pDest), Number(pDest) + n), { at: HEADER_OFFSET_DATA + Number(offset64) });\n\t\t\t\t\t\tif (nRead < n) {\n\t\t\t\t\t\t\twasm.heap8u().fill(0, Number(pDest) + nRead, Number(pDest) + n);\n\t\t\t\t\t\t\treturn capi.SQLITE_IOERR_SHORT_READ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn pool.storeErr(e, capi.SQLITE_IOERR);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\txSectorSize: function(pFile) {\n\t\t\t\t\treturn SECTOR_SIZE;\n\t\t\t\t},\n\t\t\t\txSync: function(pFile, flags) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.log(`xSync ${flags}`);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\tconst file = pool.getOFileForS3File(pFile);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfile.sah.flush();\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn pool.storeErr(e, capi.SQLITE_IOERR);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\txTruncate: function(pFile, sz64) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.log(`xTruncate ${sz64}`);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\tconst file = pool.getOFileForS3File(pFile);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfile.sah.truncate(HEADER_OFFSET_DATA + Number(sz64));\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn pool.storeErr(e, capi.SQLITE_IOERR);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\txUnlock: function(pFile, lockType) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.log(\"xUnlock\");\n\t\t\t\t\tconst file = pool.getOFileForS3File(pFile);\n\t\t\t\t\tfile.lockType = lockType;\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txWrite: function(pFile, pSrc, n, offset64) {\n\t\t\t\t\tconst pool = getPoolForPFile(pFile);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\tconst file = pool.getOFileForS3File(pFile);\n\t\t\t\t\tpool.log(`xWrite ${file.path} ${n} ${offset64}`);\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn n === file.sah.write(wasm.heap8u().subarray(Number(pSrc), Number(pSrc) + n), { at: HEADER_OFFSET_DATA + Number(offset64) }) ? 0 : toss(\"Unknown write() failure.\");\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn pool.storeErr(e, capi.SQLITE_IOERR);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst opfsIoMethods = new capi.sqlite3_io_methods();\n\t\t\topfsIoMethods.$iVersion = 1;\n\t\t\tsqlite3.vfs.installVfs({ io: {\n\t\t\t\tstruct: opfsIoMethods,\n\t\t\t\tmethods: ioMethods\n\t\t\t} });\n\t\t\tconst vfsMethods = {\n\t\t\t\txAccess: function(pVfs, zName, flags, pOut) {\n\t\t\t\t\tconst pool = getPoolForVfs(pVfs);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst name = pool.getPath(zName);\n\t\t\t\t\t\twasm.poke32(pOut, pool.hasFilename(name) ? 1 : 0);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\twasm.poke32(pOut, 0);\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txCurrentTime: function(pVfs, pOut) {\n\t\t\t\t\twasm.poke(pOut, 2440587.5 + (/* @__PURE__ */ new Date()).getTime() / 864e5, \"double\");\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txCurrentTimeInt64: function(pVfs, pOut) {\n\t\t\t\t\twasm.poke(pOut, 2440587.5 * 864e5 + (/* @__PURE__ */ new Date()).getTime(), \"i64\");\n\t\t\t\t\treturn 0;\n\t\t\t\t},\n\t\t\t\txDelete: function(pVfs, zName, doSyncDir) {\n\t\t\t\t\tconst pool = getPoolForVfs(pVfs);\n\t\t\t\t\tpool.log(`xDelete ${wasm.cstrToJs(zName)}`);\n\t\t\t\t\tpool.storeErr();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpool.deletePath(pool.getPath(zName));\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tpool.storeErr(e);\n\t\t\t\t\t\treturn capi.SQLITE_IOERR_DELETE;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\txFullPathname: function(pVfs, zName, nOut, pOut) {\n\t\t\t\t\treturn wasm.cstrncpy(pOut, zName, nOut) < nOut ? 0 : capi.SQLITE_CANTOPEN;\n\t\t\t\t},\n\t\t\t\txGetLastError: function(pVfs, nOut, pOut) {\n\t\t\t\t\tconst pool = getPoolForVfs(pVfs);\n\t\t\t\t\tconst e = pool.popErr();\n\t\t\t\t\tpool.log(`xGetLastError ${nOut} e =`, e);\n\t\t\t\t\tif (e) {\n\t\t\t\t\t\tconst scope = wasm.scopedAllocPush();\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst [cMsg, n] = wasm.scopedAllocCString(e.message, true);\n\t\t\t\t\t\t\twasm.cstrncpy(pOut, cMsg, nOut);\n\t\t\t\t\t\t\tif (n > nOut) wasm.poke8(wasm.ptr.add(pOut, nOut, -1), 0);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treturn capi.SQLITE_NOMEM;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\twasm.scopedAllocPop(scope);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn e ? e.sqlite3Rc || capi.SQLITE_IOERR : 0;\n\t\t\t\t},\n\t\t\t\txOpen: function f(pVfs, zName, pFile, flags, pOutFlags) {\n\t\t\t\t\tconst pool = getPoolForVfs(pVfs);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tflags &= ~FLAG_COMPUTE_DIGEST_V2;\n\t\t\t\t\t\tpool.log(`xOpen ${wasm.cstrToJs(zName)} ${flags}`);\n\t\t\t\t\t\tconst path = zName && wasm.peek8(zName) ? pool.getPath(zName) : getRandomName();\n\t\t\t\t\t\tlet sah = pool.getSAHForPath(path);\n\t\t\t\t\t\tif (!sah && flags & capi.SQLITE_OPEN_CREATE) if (pool.getFileCount() < pool.getCapacity()) {\n\t\t\t\t\t\t\tsah = pool.nextAvailableSAH();\n\t\t\t\t\t\t\tpool.setAssociatedPath(sah, path, flags);\n\t\t\t\t\t\t} else toss(\"SAH pool is full. Cannot create file\", path);\n\t\t\t\t\t\tif (!sah) toss(\"file not found:\", path);\n\t\t\t\t\t\tconst file = {\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tflags,\n\t\t\t\t\t\t\tsah\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpool.mapS3FileToOFile(pFile, file);\n\t\t\t\t\t\tfile.lockType = capi.SQLITE_LOCK_NONE;\n\t\t\t\t\t\tconst sq3File = new capi.sqlite3_file(pFile);\n\t\t\t\t\t\tsq3File.$pMethods = opfsIoMethods.pointer;\n\t\t\t\t\t\tsq3File.dispose();\n\t\t\t\t\t\twasm.poke32(pOutFlags, flags);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tpool.storeErr(e);\n\t\t\t\t\t\treturn capi.SQLITE_CANTOPEN;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst createOpfsVfs = function(vfsName) {\n\t\t\t\tif (sqlite3.capi.sqlite3_vfs_find(vfsName)) toss3(\"VFS name is already registered:\", vfsName);\n\t\t\t\tconst opfsVfs = new capi.sqlite3_vfs();\n\t\t\t\tconst pDVfs = capi.sqlite3_vfs_find(null);\n\t\t\t\tconst dVfs = pDVfs ? new capi.sqlite3_vfs(pDVfs) : null;\n\t\t\t\topfsVfs.$iVersion = 2;\n\t\t\t\topfsVfs.$szOsFile = capi.sqlite3_file.structInfo.sizeof;\n\t\t\t\topfsVfs.$mxPathname = HEADER_MAX_PATH_SIZE;\n\t\t\t\topfsVfs.addOnDispose(opfsVfs.$zName = wasm.allocCString(vfsName), () => setPoolForVfs(opfsVfs.pointer, 0));\n\t\t\t\tif (dVfs) {\n\t\t\t\t\topfsVfs.$xRandomness = dVfs.$xRandomness;\n\t\t\t\t\topfsVfs.$xSleep = dVfs.$xSleep;\n\t\t\t\t\tdVfs.dispose();\n\t\t\t\t}\n\t\t\t\tif (!opfsVfs.$xRandomness && !vfsMethods.xRandomness) vfsMethods.xRandomness = function(pVfs, nOut, pOut) {\n\t\t\t\t\tconst heap = wasm.heap8u();\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\tconst npOut = Number(pOut);\n\t\t\t\t\tfor (; i < nOut; ++i) heap[npOut + i] = Math.random() * 255e3 & 255;\n\t\t\t\t\treturn i;\n\t\t\t\t};\n\t\t\t\tif (!opfsVfs.$xSleep && !vfsMethods.xSleep) vfsMethods.xSleep = (pVfs, ms) => 0;\n\t\t\t\tsqlite3.vfs.installVfs({ vfs: {\n\t\t\t\t\tstruct: opfsVfs,\n\t\t\t\t\tmethods: vfsMethods\n\t\t\t\t} });\n\t\t\t\treturn opfsVfs;\n\t\t\t};\n\t\t\tclass OpfsSAHPool {\n\t\t\t\tvfsDir;\n\t\t\t\t#dhVfsRoot;\n\t\t\t\t#dhOpaque;\n\t\t\t\t#dhVfsParent;\n\t\t\t\t#mapSAHToName = /* @__PURE__ */ new Map();\n\t\t\t\t#mapFilenameToSAH = /* @__PURE__ */ new Map();\n\t\t\t\t#availableSAH = /* @__PURE__ */ new Set();\n\t\t\t\t#mapS3FileToOFile_ = /* @__PURE__ */ new Map();\n\t\t\t\t#apBody = new Uint8Array(HEADER_CORPUS_SIZE);\n\t\t\t\t#dvBody;\n\t\t\t\t#cVfs;\n\t\t\t\t#verbosity;\n\t\t\t\tconstructor(options = Object.create(null)) {\n\t\t\t\t\tthis.#verbosity = options.verbosity ?? optionDefaults.verbosity;\n\t\t\t\t\tthis.vfsName = options.name || optionDefaults.name;\n\t\t\t\t\tthis.#cVfs = createOpfsVfs(this.vfsName);\n\t\t\t\t\tsetPoolForVfs(this.#cVfs.pointer, this);\n\t\t\t\t\tthis.vfsDir = options.directory || \".\" + this.vfsName;\n\t\t\t\t\tthis.#dvBody = new DataView(this.#apBody.buffer, this.#apBody.byteOffset);\n\t\t\t\t\tthis.isReady = this.reset(!!(options.clearOnInit ?? optionDefaults.clearOnInit)).then(() => {\n\t\t\t\t\t\tif (this.$error) throw this.$error;\n\t\t\t\t\t\treturn this.getCapacity() ? Promise.resolve(void 0) : this.addCapacity(options.initialCapacity || optionDefaults.initialCapacity);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t#logImpl(level, ...args) {\n\t\t\t\t\tif (this.#verbosity > level) loggers[level](this.vfsName + \":\", ...args);\n\t\t\t\t}\n\t\t\t\tlog(...args) {\n\t\t\t\t\tthis.#logImpl(2, ...args);\n\t\t\t\t}\n\t\t\t\twarn(...args) {\n\t\t\t\t\tthis.#logImpl(1, ...args);\n\t\t\t\t}\n\t\t\t\terror(...args) {\n\t\t\t\t\tthis.#logImpl(0, ...args);\n\t\t\t\t}\n\t\t\t\tgetVfs() {\n\t\t\t\t\treturn this.#cVfs;\n\t\t\t\t}\n\t\t\t\tgetCapacity() {\n\t\t\t\t\treturn this.#mapSAHToName.size;\n\t\t\t\t}\n\t\t\t\tgetFileCount() {\n\t\t\t\t\treturn this.#mapFilenameToSAH.size;\n\t\t\t\t}\n\t\t\t\tgetFileNames() {\n\t\t\t\t\tconst rc = [];\n\t\t\t\t\tfor (const n of this.#mapFilenameToSAH.keys()) rc.push(n);\n\t\t\t\t\treturn rc;\n\t\t\t\t}\n\t\t\t\tasync addCapacity(n) {\n\t\t\t\t\tfor (let i = 0; i < n; ++i) {\n\t\t\t\t\t\tconst name = getRandomName();\n\t\t\t\t\t\tconst ah = await (await this.#dhOpaque.getFileHandle(name, { create: true })).createSyncAccessHandle();\n\t\t\t\t\t\tthis.#mapSAHToName.set(ah, name);\n\t\t\t\t\t\tthis.setAssociatedPath(ah, \"\", 0);\n\t\t\t\t\t}\n\t\t\t\t\treturn this.getCapacity();\n\t\t\t\t}\n\t\t\t\tasync reduceCapacity(n) {\n\t\t\t\t\tlet nRm = 0;\n\t\t\t\t\tfor (const ah of Array.from(this.#availableSAH)) {\n\t\t\t\t\t\tif (nRm === n || this.getFileCount() === this.getCapacity()) break;\n\t\t\t\t\t\tconst name = this.#mapSAHToName.get(ah);\n\t\t\t\t\t\tah.close();\n\t\t\t\t\t\tawait this.#dhOpaque.removeEntry(name);\n\t\t\t\t\t\tthis.#mapSAHToName.delete(ah);\n\t\t\t\t\t\tthis.#availableSAH.delete(ah);\n\t\t\t\t\t\t++nRm;\n\t\t\t\t\t}\n\t\t\t\t\treturn nRm;\n\t\t\t\t}\n\t\t\t\treleaseAccessHandles() {\n\t\t\t\t\tfor (const ah of this.#mapSAHToName.keys()) ah.close();\n\t\t\t\t\tthis.#mapSAHToName.clear();\n\t\t\t\t\tthis.#mapFilenameToSAH.clear();\n\t\t\t\t\tthis.#availableSAH.clear();\n\t\t\t\t}\n\t\t\t\tasync acquireAccessHandles(clearFiles = false) {\n\t\t\t\t\tconst files = [];\n\t\t\t\t\tfor await (const [name, h] of this.#dhOpaque) if (\"file\" === h.kind) files.push([name, h]);\n\t\t\t\t\treturn Promise.all(files.map(async ([name, h]) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst ah = await h.createSyncAccessHandle();\n\t\t\t\t\t\t\tthis.#mapSAHToName.set(ah, name);\n\t\t\t\t\t\t\tif (clearFiles) {\n\t\t\t\t\t\t\t\tah.truncate(HEADER_OFFSET_DATA);\n\t\t\t\t\t\t\t\tthis.setAssociatedPath(ah, \"\", 0);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst path = this.getAssociatedPath(ah);\n\t\t\t\t\t\t\t\tif (path) this.#mapFilenameToSAH.set(path, ah);\n\t\t\t\t\t\t\t\telse this.#availableSAH.add(ah);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tthis.storeErr(e);\n\t\t\t\t\t\t\tthis.releaseAccessHandles();\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\tgetAssociatedPath(sah) {\n\t\t\t\t\tsah.read(this.#apBody, { at: 0 });\n\t\t\t\t\tconst flags = this.#dvBody.getUint32(HEADER_OFFSET_FLAGS);\n\t\t\t\t\tif (this.#apBody[0] && (flags & capi.SQLITE_OPEN_DELETEONCLOSE || (flags & PERSISTENT_FILE_TYPES) === 0)) {\n\t\t\t\t\t\twarn(`Removing file with unexpected flags ${flags.toString(16)}`, this.#apBody);\n\t\t\t\t\t\tthis.setAssociatedPath(sah, \"\", 0);\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t}\n\t\t\t\t\tconst fileDigest = new Uint32Array(HEADER_DIGEST_SIZE / 4);\n\t\t\t\t\tsah.read(fileDigest, { at: HEADER_OFFSET_DIGEST });\n\t\t\t\t\tconst compDigest = this.computeDigest(this.#apBody, flags);\n\t\t\t\t\tif (fileDigest.every((v, i) => v === compDigest[i])) {\n\t\t\t\t\t\tconst pathBytes = this.#apBody.findIndex((v) => 0 === v);\n\t\t\t\t\t\tif (0 === pathBytes) sah.truncate(HEADER_OFFSET_DATA);\n\t\t\t\t\t\treturn pathBytes ? textDecoder.decode(this.#apBody.subarray(0, pathBytes)) : \"\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\twarn(\"Disassociating file with bad digest.\");\n\t\t\t\t\t\tthis.setAssociatedPath(sah, \"\", 0);\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetAssociatedPath(sah, path, flags) {\n\t\t\t\t\tconst enc = textEncoder.encodeInto(path, this.#apBody);\n\t\t\t\t\tif (HEADER_MAX_PATH_SIZE <= enc.written + 1) toss(\"Path too long:\", path);\n\t\t\t\t\tif (path && flags) flags |= FLAG_COMPUTE_DIGEST_V2;\n\t\t\t\t\tthis.#apBody.fill(0, enc.written, HEADER_MAX_PATH_SIZE);\n\t\t\t\t\tthis.#dvBody.setUint32(HEADER_OFFSET_FLAGS, flags);\n\t\t\t\t\tconst digest = this.computeDigest(this.#apBody, flags);\n\t\t\t\t\tsah.write(this.#apBody, { at: 0 });\n\t\t\t\t\tsah.write(digest, { at: HEADER_OFFSET_DIGEST });\n\t\t\t\t\tsah.flush();\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tthis.#mapFilenameToSAH.set(path, sah);\n\t\t\t\t\t\tthis.#availableSAH.delete(sah);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsah.truncate(HEADER_OFFSET_DATA);\n\t\t\t\t\t\tthis.#availableSAH.add(sah);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcomputeDigest(byteArray, fileFlags) {\n\t\t\t\t\tif (fileFlags & FLAG_COMPUTE_DIGEST_V2) {\n\t\t\t\t\t\tlet h1 = 3735928559;\n\t\t\t\t\t\tlet h2 = 1103547991;\n\t\t\t\t\t\tfor (const v of byteArray) {\n\t\t\t\t\t\t\th1 = Math.imul(h1 ^ v, 2654435761);\n\t\t\t\t\t\t\th2 = Math.imul(h2 ^ v, 104729);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn new Uint32Array([h1 >>> 0, h2 >>> 0]);\n\t\t\t\t\t} else return new Uint32Array([0, 0]);\n\t\t\t\t}\n\t\t\t\tasync reset(clearFiles) {\n\t\t\t\t\tawait this.isReady;\n\t\t\t\t\tlet h = await navigator.storage.getDirectory(), prev;\n\t\t\t\t\tfor (const d of this.vfsDir.split(\"/\")) if (d) {\n\t\t\t\t\t\tprev = h;\n\t\t\t\t\t\th = await h.getDirectoryHandle(d, { create: true });\n\t\t\t\t\t}\n\t\t\t\t\tthis.#dhVfsRoot = h;\n\t\t\t\t\tthis.#dhVfsParent = prev;\n\t\t\t\t\tthis.#dhOpaque = await this.#dhVfsRoot.getDirectoryHandle(OPAQUE_DIR_NAME, { create: true });\n\t\t\t\t\tthis.releaseAccessHandles();\n\t\t\t\t\treturn this.acquireAccessHandles(clearFiles);\n\t\t\t\t}\n\t\t\t\tgetPath(arg) {\n\t\t\t\t\tif (wasm.isPtr(arg)) arg = wasm.cstrToJs(arg);\n\t\t\t\t\treturn (arg instanceof URL ? arg : new URL(arg, \"file://localhost/\")).pathname;\n\t\t\t\t}\n\t\t\t\tdeletePath(path) {\n\t\t\t\t\tconst sah = this.#mapFilenameToSAH.get(path);\n\t\t\t\t\tif (sah) {\n\t\t\t\t\t\tthis.#mapFilenameToSAH.delete(path);\n\t\t\t\t\t\tthis.setAssociatedPath(sah, \"\", 0);\n\t\t\t\t\t}\n\t\t\t\t\treturn !!sah;\n\t\t\t\t}\n\t\t\t\tstoreErr(e, code) {\n\t\t\t\t\tif (e) {\n\t\t\t\t\t\te.sqlite3Rc = code || capi.SQLITE_IOERR;\n\t\t\t\t\t\tthis.error(e);\n\t\t\t\t\t}\n\t\t\t\t\tthis.$error = e;\n\t\t\t\t\treturn code;\n\t\t\t\t}\n\t\t\t\tpopErr() {\n\t\t\t\t\tconst rc = this.$error;\n\t\t\t\t\tthis.$error = void 0;\n\t\t\t\t\treturn rc;\n\t\t\t\t}\n\t\t\t\tnextAvailableSAH() {\n\t\t\t\t\tconst [rc] = this.#availableSAH.keys();\n\t\t\t\t\treturn rc;\n\t\t\t\t}\n\t\t\t\tgetOFileForS3File(pFile) {\n\t\t\t\t\treturn this.#mapS3FileToOFile_.get(pFile);\n\t\t\t\t}\n\t\t\t\tmapS3FileToOFile(pFile, file) {\n\t\t\t\t\tif (file) {\n\t\t\t\t\t\tthis.#mapS3FileToOFile_.set(pFile, file);\n\t\t\t\t\t\tsetPoolForPFile(pFile, this);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.#mapS3FileToOFile_.delete(pFile);\n\t\t\t\t\t\tsetPoolForPFile(pFile, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\thasFilename(name) {\n\t\t\t\t\treturn this.#mapFilenameToSAH.has(name);\n\t\t\t\t}\n\t\t\t\tgetSAHForPath(path) {\n\t\t\t\t\treturn this.#mapFilenameToSAH.get(path);\n\t\t\t\t}\n\t\t\t\tasync removeVfs() {\n\t\t\t\t\tif (!this.#cVfs.pointer || !this.#dhOpaque) return false;\n\t\t\t\t\tcapi.sqlite3_vfs_unregister(this.#cVfs.pointer);\n\t\t\t\t\tthis.#cVfs.dispose();\n\t\t\t\t\tdelete initPromises[this.vfsName];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.releaseAccessHandles();\n\t\t\t\t\t\tawait this.#dhVfsRoot.removeEntry(OPAQUE_DIR_NAME, { recursive: true });\n\t\t\t\t\t\tthis.#dhOpaque = void 0;\n\t\t\t\t\t\tawait this.#dhVfsParent.removeEntry(this.#dhVfsRoot.name, { recursive: true });\n\t\t\t\t\t\tthis.#dhVfsRoot = this.#dhVfsParent = void 0;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tsqlite3.config.error(this.vfsName, \"removeVfs() failed with no recovery strategy:\", e);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tpauseVfs() {\n\t\t\t\t\tif (this.#mapS3FileToOFile_.size > 0) sqlite3.SQLite3Error.toss(capi.SQLITE_MISUSE, \"Cannot pause VFS\", this.vfsName, \"because it has opened files.\");\n\t\t\t\t\tif (this.#mapSAHToName.size > 0) {\n\t\t\t\t\t\tcapi.sqlite3_vfs_unregister(this.vfsName);\n\t\t\t\t\t\tthis.releaseAccessHandles();\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tisPaused() {\n\t\t\t\t\treturn 0 === this.#mapSAHToName.size;\n\t\t\t\t}\n\t\t\t\tasync unpauseVfs() {\n\t\t\t\t\tif (0 === this.#mapSAHToName.size) return this.acquireAccessHandles(false).then(() => capi.sqlite3_vfs_register(this.#cVfs, 0), this);\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\t//! Documented elsewhere in this file.\n\t\t\t\texportFile(name) {\n\t\t\t\t\tconst sah = this.#mapFilenameToSAH.get(name) || toss(\"File not found:\", name);\n\t\t\t\t\tconst n = sah.getSize() - HEADER_OFFSET_DATA;\n\t\t\t\t\tconst b = new Uint8Array(n > 0 ? n : 0);\n\t\t\t\t\tif (n > 0) {\n\t\t\t\t\t\tconst nRead = sah.read(b, { at: HEADER_OFFSET_DATA });\n\t\t\t\t\t\tif (nRead != n) toss(\"Expected to read \" + n + \" bytes but read \" + nRead + \".\");\n\t\t\t\t\t}\n\t\t\t\t\treturn b;\n\t\t\t\t}\n\t\t\t\t//! Impl for importDb() when its 2nd arg is a function.\n\t\t\t\tasync importDbChunked(name, callback) {\n\t\t\t\t\tconst sah = this.#mapFilenameToSAH.get(name) || this.nextAvailableSAH() || toss(\"No available handles to import to.\");\n\t\t\t\t\tsah.truncate(0);\n\t\t\t\t\tlet nWrote = 0, chunk, checkedHeader = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\twhile (void 0 !== (chunk = await callback())) {\n\t\t\t\t\t\t\tif (chunk instanceof ArrayBuffer) chunk = new Uint8Array(chunk);\n\t\t\t\t\t\t\tif (!checkedHeader && 0 === nWrote && chunk.byteLength >= 15) {\n\t\t\t\t\t\t\t\tutil.affirmDbHeader(chunk);\n\t\t\t\t\t\t\t\tcheckedHeader = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsah.write(chunk, { at: HEADER_OFFSET_DATA + nWrote });\n\t\t\t\t\t\t\tnWrote += chunk.byteLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nWrote < 512 || 0 !== nWrote % 512) toss(\"Input size\", nWrote, \"is not correct for an SQLite database.\");\n\t\t\t\t\t\tif (!checkedHeader) {\n\t\t\t\t\t\t\tconst header = new Uint8Array(20);\n\t\t\t\t\t\t\tsah.read(header, { at: 0 });\n\t\t\t\t\t\t\tutil.affirmDbHeader(header);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsah.write(new Uint8Array([1, 1]), { at: HEADER_OFFSET_DATA + 18 });\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tthis.setAssociatedPath(sah, \"\", 0);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB);\n\t\t\t\t\treturn nWrote;\n\t\t\t\t}\n\t\t\t\t//! Documented elsewhere in this file.\n\t\t\t\timportDb(name, bytes) {\n\t\t\t\t\tif (bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes);\n\t\t\t\t\telse if (bytes instanceof Function) return this.importDbChunked(name, bytes);\n\t\t\t\t\tconst sah = this.#mapFilenameToSAH.get(name) || this.nextAvailableSAH() || toss(\"No available handles to import to.\");\n\t\t\t\t\tconst n = bytes.byteLength;\n\t\t\t\t\tif (n < 512 || n % 512 != 0) toss(\"Byte array size is invalid for an SQLite db.\");\n\t\t\t\t\tconst header = \"SQLite format 3\";\n\t\t\t\t\tfor (let i = 0; i < 15; ++i) if (header.charCodeAt(i) !== bytes[i]) toss(\"Input does not contain an SQLite database header.\");\n\t\t\t\t\tconst nWrote = sah.write(bytes, { at: HEADER_OFFSET_DATA });\n\t\t\t\t\tif (nWrote != n) {\n\t\t\t\t\t\tthis.setAssociatedPath(sah, \"\", 0);\n\t\t\t\t\t\ttoss(\"Expected to write \" + n + \" bytes but wrote \" + nWrote + \".\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsah.write(new Uint8Array([1, 1]), { at: HEADER_OFFSET_DATA + 18 });\n\t\t\t\t\t\tthis.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB);\n\t\t\t\t\t}\n\t\t\t\t\treturn nWrote;\n\t\t\t\t}\n\t\t\t}\n\t\t\tclass OpfsSAHPoolUtil {\n\t\t\t\t#p;\n\t\t\t\tconstructor(sahPool) {\n\t\t\t\t\tthis.#p = sahPool;\n\t\t\t\t\tthis.vfsName = sahPool.vfsName;\n\t\t\t\t}\n\t\t\t\tasync addCapacity(n) {\n\t\t\t\t\treturn this.#p.addCapacity(n);\n\t\t\t\t}\n\t\t\t\tasync reduceCapacity(n) {\n\t\t\t\t\treturn this.#p.reduceCapacity(n);\n\t\t\t\t}\n\t\t\t\tgetCapacity() {\n\t\t\t\t\treturn this.#p.getCapacity(this.#p);\n\t\t\t\t}\n\t\t\t\tgetFileCount() {\n\t\t\t\t\treturn this.#p.getFileCount();\n\t\t\t\t}\n\t\t\t\tgetFileNames() {\n\t\t\t\t\treturn this.#p.getFileNames();\n\t\t\t\t}\n\t\t\t\tasync reserveMinimumCapacity(min) {\n\t\t\t\t\tconst c = this.#p.getCapacity();\n\t\t\t\t\treturn c < min ? this.#p.addCapacity(min - c) : c;\n\t\t\t\t}\n\t\t\t\texportFile(name) {\n\t\t\t\t\treturn this.#p.exportFile(name);\n\t\t\t\t}\n\t\t\t\timportDb(name, bytes) {\n\t\t\t\t\treturn this.#p.importDb(name, bytes);\n\t\t\t\t}\n\t\t\t\tasync wipeFiles() {\n\t\t\t\t\treturn this.#p.reset(true);\n\t\t\t\t}\n\t\t\t\tunlink(filename) {\n\t\t\t\t\treturn this.#p.deletePath(filename);\n\t\t\t\t}\n\t\t\t\tasync removeVfs() {\n\t\t\t\t\treturn this.#p.removeVfs();\n\t\t\t\t}\n\t\t\t\tpauseVfs() {\n\t\t\t\t\tthis.#p.pauseVfs();\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tasync unpauseVfs() {\n\t\t\t\t\treturn this.#p.unpauseVfs().then(() => this);\n\t\t\t\t}\n\t\t\t\tisPaused() {\n\t\t\t\t\treturn this.#p.isPaused();\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst apiVersionCheck = async () => {\n\t\t\t\tconst dh = await navigator.storage.getDirectory();\n\t\t\t\tconst fn = \".opfs-sahpool-sync-check-\" + getRandomName();\n\t\t\t\tconst close = (await (await dh.getFileHandle(fn, { create: true })).createSyncAccessHandle()).close();\n\t\t\t\tawait close;\n\t\t\t\tawait dh.removeEntry(fn);\n\t\t\t\tif (close?.then) toss(\"The local OPFS API is too old for opfs-sahpool:\", \"it has an async FileSystemSyncAccessHandle.close() method.\");\n\t\t\t\treturn true;\n\t\t\t};\n\t\t\tsqlite3.installOpfsSAHPoolVfs = async function(options = Object.create(null)) {\n\t\t\t\toptions = Object.assign(Object.create(null), optionDefaults, options || {});\n\t\t\t\tconst vfsName = options.name;\n\t\t\t\tif (options.$testThrowPhase1) throw options.$testThrowPhase1;\n\t\t\t\tif (initPromises[vfsName]) try {\n\t\t\t\t\treturn await initPromises[vfsName];\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (options.forceReinitIfPreviouslyFailed) delete initPromises[vfsName];\n\t\t\t\t\telse throw e;\n\t\t\t\t}\n\t\t\t\tif (!globalThis.FileSystemHandle || !globalThis.FileSystemDirectoryHandle || !globalThis.FileSystemFileHandle || !globalThis.FileSystemFileHandle.prototype.createSyncAccessHandle || !navigator?.storage?.getDirectory) return initPromises[vfsName] = Promise.reject(/* @__PURE__ */ new Error(\"Missing required OPFS APIs.\"));\n\t\t\t\treturn initPromises[vfsName] = apiVersionCheck().then(async function() {\n\t\t\t\t\tif (options.$testThrowPhase2) throw options.$testThrowPhase2;\n\t\t\t\t\tconst thePool = new OpfsSAHPool(options);\n\t\t\t\t\treturn thePool.isReady.then(async () => {\n\t\t\t\t\t\tconst poolUtil = new OpfsSAHPoolUtil(thePool);\n\t\t\t\t\t\tif (sqlite3.oo1) {\n\t\t\t\t\t\t\tconst oo1 = sqlite3.oo1;\n\t\t\t\t\t\t\tconst theVfs = thePool.getVfs();\n\t\t\t\t\t\t\tconst OpfsSAHPoolDb = function(...args) {\n\t\t\t\t\t\t\t\tconst opt = oo1.DB.dbCtorHelper.normalizeArgs(...args);\n\t\t\t\t\t\t\t\topt.vfs = theVfs.$zName;\n\t\t\t\t\t\t\t\too1.DB.dbCtorHelper.call(this, opt);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tOpfsSAHPoolDb.prototype = Object.create(oo1.DB.prototype);\n\t\t\t\t\t\t\tpoolUtil.OpfsSAHPoolDb = OpfsSAHPoolDb;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthePool.log(\"VFS initialized.\");\n\t\t\t\t\t\treturn poolUtil;\n\t\t\t\t\t}).catch(async (e) => {\n\t\t\t\t\t\tawait thePool.removeVfs().catch(() => {});\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t});\n\t\t\t\t}).catch((err) => {\n\t\t\t\t\treturn initPromises[vfsName] = Promise.reject(err);\n\t\t\t\t});\n\t\t\t};\n\t\t});\n\t\ttry {\n\t\t\tconst bootstrapConfig = Object.assign(Object.create(null), {\n\t\t\t\tmemory: \"undefined\" !== typeof wasmMemory ? wasmMemory : EmscriptenModule[\"wasmMemory\"],\n\t\t\t\texports: \"undefined\" !== typeof wasmExports ? wasmExports : Object.prototype.hasOwnProperty.call(EmscriptenModule, \"wasmExports\") ? EmscriptenModule[\"wasmExports\"] : EmscriptenModule[\"asm\"]\n\t\t\t}, globalThis.sqlite3ApiBootstrap.defaultConfig, globalThis.sqlite3ApiConfig || {});\n\t\t\tsqlite3InitScriptInfo.debugModule(\"Bootstrapping lib config\", bootstrapConfig);\n\t\t\tconst p = globalThis.sqlite3ApiBootstrap(bootstrapConfig);\n\t\t\tdelete globalThis.sqlite3ApiBootstrap;\n\t\t\treturn p;\n\t\t} catch (e) {\n\t\t\tconsole.error(\"sqlite3ApiBootstrap() error:\", e);\n\t\t\tthrow e;\n\t\t}\n\t};\n\tif (runtimeInitialized) moduleRtn = Module;\n\telse moduleRtn = new Promise((resolve, reject) => {\n\t\treadyPromiseResolve = resolve;\n\t\treadyPromiseReject = reject;\n\t});\n\treturn moduleRtn;\n}\nsqlite3InitModule = (function() {\n\tconst originalInit = sqlite3InitModule;\n\tif (!originalInit) throw new Error(\"Expecting sqlite3InitModule to be defined by the Emscripten build.\");\n\tconst sIMS = globalThis.sqlite3InitModuleState = Object.assign(Object.create(null), {\n\t\tmoduleScript: globalThis?.document?.currentScript,\n\t\tisWorker: \"undefined\" !== typeof WorkerGlobalScope,\n\t\tlocation: globalThis.location,\n\t\turlParams: globalThis?.location?.href ? new URL(globalThis.location.href).searchParams : new URLSearchParams(),\n\t\twasmFilename: \"sqlite3.wasm\"\n\t});\n\tsIMS.debugModule = sIMS.urlParams.has(\"sqlite3.debugModule\") ? (...args) => console.warn(\"sqlite3.debugModule:\", ...args) : () => {};\n\tif (sIMS.urlParams.has(\"sqlite3.dir\")) sIMS.sqlite3Dir = sIMS.urlParams.get(\"sqlite3.dir\") + \"/\";\n\telse if (sIMS.moduleScript) {\n\t\tconst li = sIMS.moduleScript.src.split(\"/\");\n\t\tli.pop();\n\t\tsIMS.sqlite3Dir = li.join(\"/\") + \"/\";\n\t}\n\tconst sIM = globalThis.sqlite3InitModule = function ff(...args) {\n\t\tsIMS.emscriptenLocateFile = args[0]?.locateFile;\n\t\tsIMS.emscriptenInstantiateWasm = args[0]?.instantiateWasm;\n\t\treturn originalInit(...args).then((EmscriptenModule) => {\n\t\t\tsIMS.debugModule(\"sqlite3InitModule() sIMS =\", sIMS);\n\t\t\tsIMS.debugModule(\"sqlite3InitModule() EmscriptenModule =\", EmscriptenModule);\n\t\t\tconst s = EmscriptenModule.runSQLite3PostLoadInit(sIMS, EmscriptenModule, !!ff.__isUnderTest);\n\t\t\tsIMS.debugModule(\"sqlite3InitModule() sqlite3 =\", s);\n\t\t\treturn s;\n\t\t}).catch((e) => {\n\t\t\tconsole.error(\"Exception loading sqlite3 module:\", e);\n\t\t\tthrow e;\n\t\t});\n\t};\n\tsIM.ready = originalInit.ready;\n\tif (sIMS.moduleScript) {\n\t\tlet src = sIMS.moduleScript.src.split(\"/\");\n\t\tsrc.pop();\n\t\tsIMS.scriptDir = src.join(\"/\") + \"/\";\n\t}\n\tsIMS.debugModule(\"extern-post-js.c-pp.js sqlite3InitModuleState =\", sIMS);\n\treturn sIM;\n})();\nvar sqlite3_bundler_friendly_default = sqlite3InitModule;\nglobalThis.sqlite3Worker1Promiser = function callee(config = callee.defaultConfig) {\n\tif (1 === arguments.length && \"function\" === typeof arguments[0]) {\n\t\tconst f = config;\n\t\tconfig = Object.assign(Object.create(null), callee.defaultConfig);\n\t\tconfig.onready = f;\n\t} else config = Object.assign(Object.create(null), callee.defaultConfig, config);\n\tconst handlerMap = Object.create(null);\n\tconst noop = function() {};\n\tconst err = config.onerror || noop;\n\tconst debug = config.debug || noop;\n\tconst idTypeMap = config.generateMessageId ? void 0 : Object.create(null);\n\tconst genMsgId = config.generateMessageId || function(msg) {\n\t\treturn msg.type + \"#\" + (idTypeMap[msg.type] = (idTypeMap[msg.type] || 0) + 1);\n\t};\n\tconst toss = (...args) => {\n\t\tthrow new Error(args.join(\" \"));\n\t};\n\tif (!config.worker) config.worker = callee.defaultConfig.worker;\n\tif (\"function\" === typeof config.worker) config.worker = config.worker();\n\tlet dbId;\n\tlet promiserFunc;\n\tconfig.worker.onmessage = function(ev) {\n\t\tev = ev.data;\n\t\tdebug(\"worker1.onmessage\", ev);\n\t\tlet msgHandler = handlerMap[ev.messageId];\n\t\tif (!msgHandler) {\n\t\t\tif (ev && \"sqlite3-api\" === ev.type && \"worker1-ready\" === ev.result) {\n\t\t\t\tif (config.onready) config.onready(promiserFunc);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmsgHandler = handlerMap[ev.type];\n\t\t\tif (msgHandler && msgHandler.onrow) {\n\t\t\t\tmsgHandler.onrow(ev);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (config.onunhandled) config.onunhandled(arguments[0]);\n\t\t\telse err(\"sqlite3Worker1Promiser() unhandled worker message:\", ev);\n\t\t\treturn;\n\t\t}\n\t\tdelete handlerMap[ev.messageId];\n\t\tswitch (ev.type) {\n\t\t\tcase \"error\":\n\t\t\t\tmsgHandler.reject(ev);\n\t\t\t\treturn;\n\t\t\tcase \"open\":\n\t\t\t\tif (!dbId) dbId = ev.dbId;\n\t\t\t\tbreak;\n\t\t\tcase \"close\":\n\t\t\t\tif (ev.dbId === dbId) dbId = void 0;\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t\ttry {\n\t\t\tmsgHandler.resolve(ev);\n\t\t} catch (e) {\n\t\t\tmsgHandler.reject(e);\n\t\t}\n\t};\n\treturn promiserFunc = function() {\n\t\tlet msg;\n\t\tif (1 === arguments.length) msg = arguments[0];\n\t\telse if (2 === arguments.length) {\n\t\t\tmsg = Object.create(null);\n\t\t\tmsg.type = arguments[0];\n\t\t\tmsg.args = arguments[1];\n\t\t\tmsg.dbId = msg.args.dbId;\n\t\t} else toss(\"Invalid arguments for sqlite3Worker1Promiser()-created factory.\");\n\t\tif (!msg.dbId && msg.type !== \"open\") msg.dbId = dbId;\n\t\tmsg.messageId = genMsgId(msg);\n\t\tmsg.departureTime = performance.now();\n\t\tconst proxy = Object.create(null);\n\t\tproxy.message = msg;\n\t\tlet rowCallbackId;\n\t\tif (\"exec\" === msg.type && msg.args) {\n\t\t\tif (\"function\" === typeof msg.args.callback) {\n\t\t\t\trowCallbackId = msg.messageId + \":row\";\n\t\t\t\tproxy.onrow = msg.args.callback;\n\t\t\t\tmsg.args.callback = rowCallbackId;\n\t\t\t\thandlerMap[rowCallbackId] = proxy;\n\t\t\t} else if (\"string\" === typeof msg.args.callback) toss(\"exec callback may not be a string when using the Promise interface.\");\n\t\t}\n\t\tlet p = new Promise(function(resolve, reject) {\n\t\t\tproxy.resolve = resolve;\n\t\t\tproxy.reject = reject;\n\t\t\thandlerMap[msg.messageId] = proxy;\n\t\t\tdebug(\"Posting\", msg.type, \"message to Worker dbId=\" + (dbId || \"default\") + \":\", msg);\n\t\t\tconfig.worker.postMessage(msg);\n\t\t});\n\t\tif (rowCallbackId) p = p.finally(() => delete handlerMap[rowCallbackId]);\n\t\treturn p;\n\t};\n};\nglobalThis.sqlite3Worker1Promiser.defaultConfig = {\n\tworker: function() {\n\t\treturn new Worker(new URL(\"sqlite3-worker1.mjs\", import.meta.url), { type: \"module\" });\n\t},\n\tonerror: (...args) => console.error(\"sqlite3Worker1Promiser():\", ...args)\n};\nglobalThis.sqlite3Worker1Promiser.v2 = function callee(config = callee.defaultConfig) {\n\tlet oldFunc;\n\tif (\"function\" == typeof config) {\n\t\toldFunc = config;\n\t\tconfig = {};\n\t} else if (\"function\" === typeof config?.onready) {\n\t\toldFunc = config.onready;\n\t\tdelete config.onready;\n\t}\n\tconst promiseProxy = Object.create(null);\n\tconfig = Object.assign(config || Object.create(null), { onready: async function(func) {\n\t\ttry {\n\t\t\tif (oldFunc) await oldFunc(func);\n\t\t\tpromiseProxy.resolve(func);\n\t\t} catch (e) {\n\t\t\tpromiseProxy.reject(e);\n\t\t}\n\t} });\n\tconst p = new Promise(function(resolve, reject) {\n\t\tpromiseProxy.resolve = resolve;\n\t\tpromiseProxy.reject = reject;\n\t});\n\ttry {\n\t\tthis.original(config);\n\t} catch (e) {\n\t\tpromiseProxy.reject(e);\n\t}\n\treturn p;\n}.bind({ original: sqlite3Worker1Promiser });\nglobalThis.sqlite3Worker1Promiser.v2.defaultConfig = globalThis.sqlite3Worker1Promiser.defaultConfig;\nvar sqlite3_worker1_promiser_default = sqlite3Worker1Promiser.v2;\ndelete globalThis.sqlite3Worker1Promiser;\nvar src_default = sqlite3_bundler_friendly_default;\nexport { src_default as default, sqlite3_worker1_promiser_default as sqlite3Worker1Promiser };\n","import sqlite3InitModule from '@sqlite.org/sqlite-wasm';\nimport { sqlite3WasmGzBase64 } from \"./sqlite3WasmGzBase64.js\";\n/**\n * Decode a base64-encoded gzip-compressed buffer using the native\n * DecompressionStream API (available in Node.js 18+ and modern browsers).\n * @param base64 - Base64-encoded gzip data\n * @returns The decompressed ArrayBuffer\n */\nasync function decompressBase64Gzip(base64) {\n    const compressed = Uint8Array.from(atob(base64), (character) => character.codePointAt(0));\n    const stream = new Blob([compressed])\n        .stream()\n        .pipeThrough(new DecompressionStream('gzip'));\n    return new Response(stream).arrayBuffer();\n}\n/** Lazily decompress the embedded wasm (once). */\nlet wasmBinaryPromise;\nfunction getWasmBinary() {\n    wasmBinaryPromise ??= decompressBase64Gzip(sqlite3WasmGzBase64);\n    return wasmBinaryPromise;\n}\n/**\n * Initialize the SQLite WASM runtime and deserialize an ArrayBuffer\n * into an in-memory SQLite database.\n * @param data - Raw bytes of a .zmes file (SQLite3 database)\n * @returns The opened database handle and sqlite3 runtime\n */\nexport async function openDatabase(data) {\n    const wasmBinary = await getWasmBinary();\n    // @ts-expect-error wasmBinary is a valid Emscripten option not exposed in the type declarations\n    const sqlite3 = await sqlite3InitModule({ wasmBinary });\n    const uint8 = new Uint8Array(data);\n    const database = new sqlite3.oo1.DB();\n    if (database.pointer === undefined) {\n        throw new Error('Failed to create SQLite database handle');\n    }\n    const dataPointer = sqlite3.wasm.allocFromTypedArray(uint8);\n    const resultCode = sqlite3.capi.sqlite3_deserialize(database.pointer, 'main', dataPointer, uint8.byteLength, uint8.byteLength, sqlite3.capi.SQLITE_DESERIALIZE_FREEONCLOSE |\n        sqlite3.capi.SQLITE_DESERIALIZE_RESIZEABLE);\n    database.checkRc(resultCode);\n    return { database, sqlite3 };\n}\n//# sourceMappingURL=openDatabase.js.map","// Auto-generated — do not edit. Regenerate with: npm run generate-wasm\nexport const sqlite3WasmGzBase64 = \"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\";\n//# sourceMappingURL=sqlite3WasmGzBase64.js.map","/**\n * 6-byte marker that precedes each IEEE 754 double in\n * .NET BinaryFormatter serialized System.Double[] arrays.\n */\nconst ENTRY_MARKER = new Uint8Array([0x06, 0x01, 0x01, 0x01, 0x02, 0x01]);\n/** Total bytes per entry: 6 marker bytes + 8 bytes for the double. */\nconst ENTRY_SIZE = 14;\n/**\n * Decode a .NET BinaryFormatter serialized `System.Double[]` blob\n * into a `Float64Array`.\n *\n * The binary format consists of a ~205-byte type metadata header\n * followed by repeating 14-byte entries (6-byte marker + 8-byte\n * little-endian IEEE 754 double).\n * @param blob - Raw blob bytes from the database\n * @returns Decoded array of double-precision values\n */\nexport function decodeBlob(blob) {\n    const markerOffset = findMarker(blob);\n    if (markerOffset === -1) {\n        return new Float64Array(0);\n    }\n    const remainingBytes = blob.byteLength - markerOffset;\n    const count = Math.floor(remainingBytes / ENTRY_SIZE);\n    const result = new Float64Array(count);\n    const dataView = new DataView(blob.buffer, blob.byteOffset, blob.byteLength);\n    for (let i = 0; i < count; i++) {\n        result[i] = dataView.getFloat64(markerOffset + i * ENTRY_SIZE + 6, true);\n    }\n    return result;\n}\n/**\n * Find the byte offset of the first occurrence of ENTRY_MARKER in the blob.\n * @param blob - Raw blob bytes\n * @returns Byte offset of the marker, or -1 if not found\n */\nfunction findMarker(blob) {\n    const end = blob.byteLength - ENTRY_MARKER.length;\n    for (let i = 0; i <= end; i++) {\n        let match = true;\n        for (let j = 0; j < ENTRY_MARKER.length; j++) {\n            if (blob[i + j] !== ENTRY_MARKER[j]) {\n                match = false;\n                break;\n            }\n        }\n        if (match) {\n            return i;\n        }\n    }\n    return -1;\n}\n//# sourceMappingURL=decodeBlob.js.map","import { decodeBlob } from \"./decodeBlob.js\";\n/**\n * Data type values from RecordParameterTypes.ParameterDataType.\n * Determines which column in RecordParameterData holds the actual value.\n */\nconst DATA_TYPE_NONE = 0;\nconst DATA_TYPE_INT32_SINGLE = 1;\nconst DATA_TYPE_INT32 = 2;\nconst DATA_TYPE_DOUBLE = 4;\nconst DATA_TYPE_SINGLE = 5;\nconst DATA_TYPE_BOOLEAN = 6;\nconst DATA_TYPE_INT64_SINGLE = 7;\nconst DATA_TYPE_INT64 = 9;\nconst DATA_TYPE_GUID = 16;\nconst DATA_TYPE_TEXT = 17;\nconst DATA_TYPE_DICTIONARY_KEYS = 32;\nconst DATA_TYPE_DICTIONARY = 36;\nconst DATA_TYPE_GUID_LIST = 42;\nconst DATA_TYPE_DATE_TIME = 48;\nconst DATA_TYPE_DURATION = 50;\nconst DATA_TYPE_BLOB_ARRAY = 70;\n/**\n * Read all parameter data for a record and convert the tree into\n * the output ZmesParameter format.\n * @param database - Opened SQLite database handle\n * @param sqlite3 - SQLite3 runtime (needed for SQLITE_BLOB constant)\n * @param recordId - The record id to read data for\n * @param rootNode - The root of the parameter tree\n * @returns The root ZmesParameter with values attached\n */\nexport function readParameterData(database, sqlite3, recordId, rootNode) {\n    // Load all data for this record, indexed by tree node id\n    const dataByNodeId = loadDataMap(database, sqlite3, recordId);\n    // Recursively convert tree nodes to output format\n    return convertNode(rootNode, dataByNodeId);\n}\n/**\n * Load all RecordParameterData rows for a record into a Map\n * keyed by ParameterTreeNodeId.\n * @param database - Opened SQLite database handle\n * @param sqlite3 - SQLite3 runtime\n * @param recordId - The record id\n * @returns Map of tree node id to raw data row\n */\nfunction loadDataMap(database, sqlite3, recordId) {\n    const rows = database.selectObjects(`\n    SELECT\n      ParameterTreeNodeId AS parameterTreeNodeId,\n      ParameterTypeId     AS parameterTypeId,\n      Data_Boolean        AS dataBoolean,\n      Data_Double         AS dataDouble,\n      Data_Int32          AS dataInt32,\n      Data_Int64          AS dataInt64,\n      Data_Single         AS dataSingle,\n      Data_Text           AS dataText\n    FROM RecordParameterData\n    WHERE RecordId = ?\n    ORDER BY Id\n  `, [recordId]);\n    // Also load blobs separately since they need special retrieval\n    const blobRows = database.selectObjects(`\n    SELECT\n      ParameterTreeNodeId AS parameterTreeNodeId,\n      Data_Blob           AS dataBlob\n    FROM RecordParameterData\n    WHERE RecordId = ? AND Data_Blob IS NOT NULL\n  `, [recordId]);\n    const blobMap = new Map();\n    for (const blobRow of blobRows) {\n        const nodeId = blobRow.parameterTreeNodeId;\n        blobMap.set(nodeId, blobRow.dataBlob);\n    }\n    const dataMap = new Map();\n    for (const row of rows) {\n        const raw = row;\n        dataMap.set(raw.parameterTreeNodeId, {\n            ...raw,\n            dataBlob: blobMap.get(raw.parameterTreeNodeId) ?? null,\n        });\n    }\n    return dataMap;\n}\n/**\n * Recursively convert a TreeNode into a ZmesParameter,\n * extracting the appropriate value from the data map.\n * @param node - The tree node to convert\n * @param dataMap - Map of tree node id to raw data\n * @returns The converted ZmesParameter\n */\nfunction convertNode(node, dataMap) {\n    const parameter = {\n        name: node.parameterType.friendlyName ?? '',\n        urn: node.parameterType.urn ?? '',\n    };\n    // Extract value from the data row based on the parameter's data type\n    const dataRow = dataMap.get(node.id);\n    if (dataRow) {\n        const value = extractValue(node.parameterType.dataType, dataRow);\n        if (value !== undefined) {\n            parameter.value = value;\n        }\n    }\n    // Recursively convert children\n    if (node.children.length > 0) {\n        parameter.children = [];\n        for (const child of node.children) {\n            parameter.children.push(convertNode(child, dataMap));\n        }\n    }\n    return parameter;\n}\n/**\n * Extract the typed value from a raw data row based on the parameter data type.\n *\n * Note: SQLite stores both Data_Single and Data_Double as its native REAL type,\n * so the WASM layer may return the value in either column. We use a fallback\n * approach for numeric types to handle this.\n * @param dataType - The ParameterDataType enum value\n * @param row - The raw data row\n * @returns The extracted value, or undefined if no value is present\n */\nfunction extractValue(dataType, row) {\n    switch (dataType) {\n        case DATA_TYPE_NONE:\n        case DATA_TYPE_DICTIONARY:\n            return undefined;\n        case DATA_TYPE_INT32_SINGLE:\n        case DATA_TYPE_INT32:\n            return row.dataInt32 ?? undefined;\n        case DATA_TYPE_DOUBLE:\n        case DATA_TYPE_SINGLE:\n        case DATA_TYPE_DURATION:\n            return row.dataDouble ?? row.dataSingle ?? undefined;\n        case DATA_TYPE_BOOLEAN:\n            return row.dataBoolean !== null ? row.dataBoolean !== 0 : undefined;\n        case DATA_TYPE_INT64_SINGLE:\n            return row.dataInt64 ?? row.dataInt32 ?? undefined;\n        case DATA_TYPE_INT64:\n            return row.dataInt64 ?? undefined;\n        case DATA_TYPE_GUID:\n        case DATA_TYPE_TEXT:\n        case DATA_TYPE_DICTIONARY_KEYS:\n        case DATA_TYPE_GUID_LIST:\n        case DATA_TYPE_DATE_TIME:\n            return row.dataText ?? undefined;\n        case DATA_TYPE_BLOB_ARRAY:\n            if (row.dataBlob) {\n                return decodeBlob(row.dataBlob);\n            }\n            return undefined;\n        default:\n            return undefined;\n    }\n}\n//# sourceMappingURL=readParameterData.js.map","/**\n * Load all parameter types from RecordParameterTypes into a Map.\n * @param database - Opened SQLite database handle\n * @returns Map of type id to ParameterType\n */\nfunction loadParameterTypes(database) {\n    const rows = database.selectObjects(`\n    SELECT\n      Id                AS id,\n      Guid              AS guid,\n      UniformResourceName AS urn,\n      FriendlyName      AS friendlyName,\n      ParameterDataType AS dataType,\n      Description       AS description,\n      DataUnitsUrn      AS dataUnitsUrn\n    FROM RecordParameterTypes\n  `);\n    const types = new Map();\n    for (const row of rows) {\n        const parameterType = row;\n        types.set(parameterType.id, parameterType);\n    }\n    return types;\n}\n/**\n * Build the hierarchical parameter tree for a given root parameter type.\n *\n * Queries all tree nodes that share the given root type, resolves their\n * parameter types, and assembles them into a tree structure.\n * @param database - Opened SQLite database handle\n * @param rootParameterTypeId - The root parameter type id for the record\n * @returns The root TreeNode with all children populated\n */\nexport function buildParameterTree(database, rootParameterTypeId) {\n    const parameterTypes = loadParameterTypes(database);\n    const rows = database.selectObjects(`\n    SELECT\n      Id              AS id,\n      ParameterTypeId AS parameterTypeId,\n      ParentNodeId    AS parentNodeId,\n      SiblingIndex    AS siblingIndex\n    FROM RecordParameterTreeNodes\n    WHERE RootParameterTypeId = ?\n    ORDER BY SiblingIndex\n  `, [rootParameterTypeId]);\n    // Index all nodes by id\n    const nodeMap = new Map();\n    for (const row of rows) {\n        const rawNode = row;\n        const parameterType = parameterTypes.get(rawNode.parameterTypeId);\n        if (!parameterType) {\n            throw new Error(`Unknown parameter type id ${rawNode.parameterTypeId} for tree node ${rawNode.id}`);\n        }\n        nodeMap.set(rawNode.id, {\n            ...rawNode,\n            parameterType,\n            children: [],\n        });\n    }\n    // Assemble tree by linking children to parents\n    let root;\n    for (const node of nodeMap.values()) {\n        if (node.parentNodeId === null) {\n            root = node;\n        }\n        else {\n            const parent = nodeMap.get(node.parentNodeId);\n            if (parent) {\n                parent.children.push(node);\n            }\n        }\n    }\n    if (!root) {\n        throw new Error(`No root tree node found for RootParameterTypeId ${rootParameterTypeId}`);\n    }\n    // Sort children by sibling index at each level\n    sortChildren(root);\n    return root;\n}\n/**\n * Recursively sort children of each tree node by sibling index.\n * @param node - The tree node whose children to sort\n */\nfunction sortChildren(node) {\n    node.children = node.children.toSorted((a, b) => a.siblingIndex - b.siblingIndex);\n    for (const child of node.children) {\n        sortChildren(child);\n    }\n}\n//# sourceMappingURL=readParameterTree.js.map","import { openDatabase } from \"./openDatabase.js\";\nimport { readParameterData } from \"./readParameterData.js\";\nimport { buildParameterTree } from \"./readParameterTree.js\";\nimport { readRecords } from \"./readRecords.js\";\n/**\n * Parse a .zmes file (Malvern Panalytical Zetasizer measurement database)\n * and return a structured representation of all records and their parameters.\n *\n * The .zmes format is a SQLite3 database used by ZS XPLORER software for\n * exporting Dynamic Light Scattering (DLS) measurement data.\n * @param data - Raw bytes of the .zmes file as an ArrayBuffer\n * @returns Parsed file with schema version, metadata, and measurement records\n * @example\n * ```ts\n * import { readFileSync } from 'node:fs';\n * import { parse } from 'zmes-parser';\n *\n * const buffer = readFileSync('measurement.zmes');\n * const result = await parse(buffer.buffer);\n * console.log(result.records[0].parameters.name);\n * ```\n */\nexport async function parse(data) {\n    const { database, sqlite3 } = await openDatabase(data);\n    try {\n        const schemaVersion = readSchemaVersion(database);\n        const metadata = readStoreMetadata(database);\n        const records = buildRecords(database, sqlite3);\n        return { schemaVersion, metadata, records };\n    }\n    finally {\n        database.close();\n    }\n}\n/**\n * Read the schema version from the SchemaMeta table.\n * @param database - Opened SQLite database handle\n * @returns The current schema version number\n */\nfunction readSchemaVersion(database) {\n    const version = database.selectValue('SELECT CurrentVersion FROM SchemaMeta LIMIT 1');\n    return version ?? 0;\n}\n/**\n * Read all key-value pairs from the StoreMetadata table.\n * @param database - Opened SQLite database handle\n * @returns Record of metadata key-value pairs\n */\nfunction readStoreMetadata(database) {\n    const rows = database.selectObjects('SELECT Key, Value FROM StoreMetadata');\n    const metadata = {};\n    for (const row of rows) {\n        const key = row.Key;\n        const value = row.Value;\n        metadata[key] = value;\n    }\n    return metadata;\n}\n/**\n * Build all ZmesRecord objects from the database.\n * @param database - Opened SQLite database handle\n * @param sqlite3 - SQLite3 runtime\n * @returns Array of fully populated measurement records\n */\nfunction buildRecords(database, sqlite3) {\n    const rawRecords = readRecords(database);\n    const records = [];\n    for (const raw of rawRecords) {\n        const tree = buildParameterTree(database, raw.rootParameterTypeId);\n        const parameters = readParameterData(database, sqlite3, raw.id, tree);\n        records.push({\n            id: raw.id,\n            guid: raw.guid,\n            group: {\n                id: raw.groupId,\n                guid: raw.groupGuid,\n                ...(raw.groupName !== null ? { name: raw.groupName } : {}),\n            },\n            createdDateTime: raw.createdDateTime,\n            modifiedDateTime: raw.modifiedDateTime,\n            parameters,\n        });\n    }\n    return records;\n}\n//# sourceMappingURL=parse.js.map","/**\n * Query all measurement records with their group information.\n * @param database - Opened SQLite database handle\n * @returns Array of raw record rows\n */\nexport function readRecords(database) {\n    const rows = database.selectObjects(`\n    SELECT\n      r.Id           AS id,\n      r.Guid         AS guid,\n      r.CreatedDateTime   AS createdDateTime,\n      r.ModifiedDateTime  AS modifiedDateTime,\n      r.RootParameterTypeId AS rootParameterTypeId,\n      g.Id           AS groupId,\n      g.Guid         AS groupGuid,\n      g.GivenName    AS groupName\n    FROM StandardRecords r\n    JOIN StandardRecordGroups g ON r.GroupId = g.Id\n    ORDER BY r.Id\n  `);\n    return rows;\n}\n//# sourceMappingURL=readRecords.js.map","import { Analysis } from 'common-spectrum';\nimport { parse } from 'zmes-parser';\n/**\n * Find a parameter by name in a flat list of children (direct children only).\n * @param children - List of parameters to search\n * @param name - Name to search for\n * @returns The matching parameter, or undefined if not found\n */\nfunction findParameter(children, name) {\n    return children.find((child) => child.name === name);\n}\n/**\n * Recursively search for a parameter by name in the parameter tree.\n * @param parameter - Root parameter node to search from\n * @param name - Name to search for\n * @returns The matching parameter, or undefined if not found\n */\nfunction findParameterDeep(parameter, name) {\n    if (parameter.name === name) {\n        return parameter;\n    }\n    if (parameter.children) {\n        for (const child of parameter.children) {\n            const found = findParameterDeep(child, name);\n            if (found) {\n                return found;\n            }\n        }\n    }\n    return undefined;\n}\nconst VARIABLE_DESCRIPTORS = [\n    {\n        parameterName: 'Sizes',\n        symbol: 'x',\n        label: 'Particle diameter',\n        units: 'nm',\n        isDependent: false,\n    },\n    {\n        parameterName: 'Particle Size Intensity Distribution',\n        symbol: 'y',\n        label: 'Intensity',\n        units: '%',\n        isDependent: true,\n    },\n    {\n        parameterName: 'Particle Size Volume Distribution (%)',\n        symbol: 'v',\n        label: 'Volume',\n        units: '%',\n        isDependent: true,\n    },\n    {\n        parameterName: 'Particle Size Number Distribution',\n        symbol: 'n',\n        label: 'Number',\n        units: '%',\n        isDependent: true,\n    },\n    {\n        parameterName: 'Molecular Weights',\n        symbol: 'w',\n        label: 'Molecular weight',\n        units: 'Da',\n        isDependent: true,\n    },\n    {\n        parameterName: 'Diffusion Coefficients',\n        symbol: 'd',\n        label: 'Diffusion coefficient',\n        units: 'µm²/s',\n        isDependent: true,\n    },\n    {\n        parameterName: 'Relaxation Times',\n        symbol: 'r',\n        label: 'Relaxation time',\n        units: 'µs',\n        isDependent: true,\n    },\n    {\n        parameterName: 'Form Factor',\n        symbol: 'f',\n        label: 'Form factor',\n        units: '',\n        isDependent: true,\n    },\n];\n/**\n * Parse a raw .zmes file and create an Analysis.\n *\n * Each record in the file is pushed as a spectrum with multiple variables:\n * - x: Sizes (particle diameter in nm)\n * - y: Particle Size Intensity Distribution (%)\n * - v: Particle Size Volume Distribution (%)\n * - n: Particle Size Number Distribution (%)\n * - w: Molecular Weights (Da)\n * - d: Diffusion Coefficients (µm²/s)\n * - r: Relaxation Times (µs)\n * - f: Form Factor\n *\n * Only variables present in the data are included. A record is skipped\n * if the required x (Sizes) or y (Intensity) variable is missing.\n * @param data - The raw ArrayBuffer contents of a .zmes file\n * @param options - Options for the analysis\n * @returns An Analysis containing one spectrum per record\n */\nexport async function fromZmes(data, options = {}) {\n    const analysis = new Analysis(options);\n    const zmesFile = await parse(data);\n    for (const record of zmesFile.records) {\n        const { parameters } = record;\n        const variables = buildVariables(parameters);\n        if (!variables) {\n            continue;\n        }\n        analysis.pushSpectrum(variables, {\n            id: record.guid,\n            title: extractTitle(parameters),\n            dataType: 'Size measurement',\n            meta: extractMeta(parameters),\n        });\n        const spectrum = analysis.spectra.at(-1);\n        if (spectrum) {\n            spectrum.settings = extractSettings(parameters);\n        }\n    }\n    return analysis;\n}\n/**\n * Build the MeasurementXYVariables object from the parameter tree.\n *\n * Returns undefined if the required x (Sizes) or y (Intensity) variable is missing.\n * @param parameters - Root parameter node\n * @returns Variables object with x, y, and optional additional variables\n */\nfunction buildVariables(parameters) {\n    const found = new Map();\n    for (const descriptor of VARIABLE_DESCRIPTORS) {\n        const parameter = findParameterDeep(parameters, descriptor.parameterName);\n        if (!(parameter?.value instanceof Float64Array)) {\n            continue;\n        }\n        found.set(descriptor.symbol, {\n            symbol: descriptor.symbol,\n            label: descriptor.label,\n            units: descriptor.units,\n            data: parameter.value,\n            isDependent: descriptor.isDependent,\n        });\n    }\n    const x = found.get('x');\n    const y = found.get('y');\n    if (!x || !y) {\n        return undefined;\n    }\n    const variables = { x, y };\n    for (const [key, variable] of found) {\n        if (key !== 'x' && key !== 'y') {\n            const letter = key;\n            variables[letter] = variable;\n        }\n    }\n    return variables;\n}\n/**\n * Extract the sample name from the parameter tree to use as title.\n * @param parameters - Root parameter node\n * @returns The sample name, or an empty string if not found\n */\nfunction extractTitle(parameters) {\n    const sampleSettings = findParameter(parameters.children ?? [], 'Sample Settings');\n    if (!sampleSettings)\n        return '';\n    const sampleName = findParameterDeep(sampleSettings, 'Sample Name');\n    return typeof sampleName?.value === 'string' ? sampleName.value : '';\n}\n/**\n * Extract scalar metadata values from the parameter tree.\n * @param parameters - Root parameter node\n * @returns Record of metadata key-value pairs\n */\nfunction extractMeta(parameters) {\n    const children = parameters.children ?? [];\n    const meta = {};\n    const topLevelFields = [\n        { parameterName: 'Operator Name', metaKey: 'operatorName' },\n        {\n            parameterName: 'Measurement Start Date And Time',\n            metaKey: 'measurementStartDateTime',\n        },\n        {\n            parameterName: 'Measurement Completed Date And Time',\n            metaKey: 'measurementCompletedDateTime',\n        },\n        { parameterName: 'Repeat', metaKey: 'repeat' },\n        { parameterName: 'Number Of Repeats', metaKey: 'numberOfRepeats' },\n        {\n            parameterName: 'Pause Between Repeats (s)',\n            metaKey: 'pauseBetweenRepeats',\n        },\n        { parameterName: 'Quality Indicator', metaKey: 'qualityIndicator' },\n        { parameterName: 'Result State', metaKey: 'resultState' },\n        { parameterName: 'Measurement Type', metaKey: 'measurementType' },\n    ];\n    for (const field of topLevelFields) {\n        const parameter = findParameter(children, field.parameterName);\n        if (parameter?.value !== undefined) {\n            meta[field.metaKey] = parameter.value;\n        }\n    }\n    // Cumulants results (Z-Average, PDI)\n    const deepFields = [\n        { parameterName: 'Z-Average (nm)', metaKey: 'zAverage' },\n        {\n            parameterName: 'Polydispersity Index (PI)',\n            metaKey: 'polydispersityIndex',\n        },\n        {\n            parameterName: 'Derived Mean Count Rate (kcps)',\n            metaKey: 'derivedMeanCountRate',\n        },\n    ];\n    for (const field of deepFields) {\n        const parameter = findParameterDeep(parameters, field.parameterName);\n        if (parameter?.value !== undefined) {\n            meta[field.metaKey] = parameter.value;\n        }\n    }\n    // Material info (search within Material Settings to avoid Core Characteristics)\n    const materialSettings = findParameterDeep(parameters, 'Material Settings');\n    if (materialSettings) {\n        const materialRI = findParameterDeep(materialSettings, 'Material RI');\n        const materialAbsorption = findParameterDeep(materialSettings, 'Material Absorption');\n        if (materialRI?.value !== undefined) {\n            meta.materialRI = materialRI.value;\n        }\n        if (materialAbsorption?.value !== undefined) {\n            meta.materialAbsorption = materialAbsorption.value;\n        }\n    }\n    // Dispersant info (from Actual Instrument Settings)\n    const dispersantViscosity = findParameterDeep(parameters, 'Dispersant Viscosity (cP)');\n    const dispersantRI = findParameterDeep(parameters, 'Dispersant RI');\n    if (dispersantViscosity?.value !== undefined) {\n        meta.dispersantViscosity = dispersantViscosity.value;\n    }\n    if (dispersantRI?.value !== undefined) {\n        meta.dispersantRI = dispersantRI.value;\n    }\n    return meta;\n}\n/**\n * Extract instrument settings from the parameter tree.\n * @param parameters - Root parameter node\n * @returns Settings object with instrument info and measurement parameters\n */\nfunction extractSettings(parameters) {\n    const children = parameters.children ?? [];\n    const softwareVersion = findParameter(children, 'Software Version');\n    const instrumentSerialNumber = findParameterDeep(parameters, 'Instrument Serial Number');\n    const settings = {\n        instrument: {\n            manufacturer: 'Malvern Panalytical',\n            model: 'Zetasizer',\n            ...(typeof instrumentSerialNumber?.value === 'string'\n                ? { serialNumber: instrumentSerialNumber.value }\n                : {}),\n            software: {\n                name: 'ZS XPLORER',\n                ...(typeof softwareVersion?.value === 'string'\n                    ? { version: softwareVersion.value }\n                    : {}),\n            },\n        },\n    };\n    // Actual instrument settings\n    const instrumentSettingsFields = [\n        { parameterName: 'Detector Angle (°)', settingsKey: 'detectorAngle' },\n        { parameterName: 'Run Duration (s)', settingsKey: 'runDuration' },\n        { parameterName: 'Number Of Runs', settingsKey: 'numberOfRuns' },\n        { parameterName: 'Temperature (°C)', settingsKey: 'temperature' },\n        { parameterName: 'Attenuator', settingsKey: 'attenuator' },\n        { parameterName: 'Attenuation Factor', settingsKey: 'attenuationFactor' },\n        {\n            parameterName: 'Cuvette Position (mm)',\n            settingsKey: 'cuvettePosition',\n        },\n        {\n            parameterName: 'Laser Wavelength (nm)',\n            settingsKey: 'laserWavelength',\n        },\n    ];\n    for (const field of instrumentSettingsFields) {\n        const parameter = findParameterDeep(parameters, field.parameterName);\n        if (typeof parameter?.value === 'number') {\n            settings[field.settingsKey] = parameter.value;\n        }\n    }\n    return settings;\n}\n//# sourceMappingURL=fromZmes.js.map","import { convert } from 'jcampconverter';\nimport { Analysis } from '../Analysis.js';\n/**\n * Creates a new Analysis from a JCAMP string\n * @param jcamp - String containing the JCAMP data\n * @param [options={}]\n * @param [options.id=Math.random()]\n * @param [options.label=options.id] - human redeable label\n * @param [options.spectrumCallback] - a callback to apply on variables when creating spectrum\n * @returns - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    const analysis = new Analysis(options);\n    addJcamp(analysis, jcamp);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    const converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (const entry of converted.flatten) {\n        if (!entry.spectra?.[0])\n            continue;\n        const currentSpectrum = entry.spectra[0];\n        // we ensure variables\n        if (!currentSpectrum.variables) {\n            const variables = {};\n            currentSpectrum.variables = variables;\n            variables.x = {\n                label: currentSpectrum.xUnits,\n                symbol: 'X',\n                data: currentSpectrum.data.x || currentSpectrum.data.X,\n            };\n            variables.y = {\n                label: currentSpectrum.yUnits,\n                symbol: 'Y',\n                data: currentSpectrum.data.y || currentSpectrum.data.Y,\n            };\n        }\n        else {\n            for (const key in currentSpectrum.variables) {\n                const variable = currentSpectrum.variables[key];\n                if (variable.label)\n                    continue;\n                variable.label = variable.name || variable.symbol || key;\n                if (variable.units && !variable.label.includes(variable.units)) {\n                    // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n                    variable.label += ` [${variable.units}]`;\n                }\n            }\n        }\n        analysis.pushSpectrum(currentSpectrum.variables, {\n            dataType: entry.dataType,\n            title: entry.title,\n            meta: entry.meta,\n        });\n    }\n}\n//# sourceMappingURL=fromJcamp.js.map","import { toJcamps } from './toJcamps.js';\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=toJcamp.js.map","import { xyArrayAlign } from 'ml-spectra-processing';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param analyses\n * @param options\n */\nexport function toMatrix(analyses, options = {}) {\n    const { selector = {}, normalization, xLabel = 'x', delta = 0, endOfLine = '\\n', } = options;\n    const data = [];\n    const labels = [xLabel];\n    const titles = ['x'];\n    for (const analysis of analyses) {\n        const spectra = analysis.getNormalizedSpectra({\n            selector,\n            normalization,\n        });\n        for (const spectrum of spectra) {\n            titles.push(spectrum.title || '');\n            labels.push(analysis.label || '');\n            data.push({ x: spectrum.variables.x.data, y: spectrum.variables.y.data });\n        }\n    }\n    const aligned = xyArrayAlign(data, { delta });\n    const lines = [labels.join('\\t'), titles.join('\\t')];\n    for (let row = 0; row < aligned.x.length; row++) {\n        const line = [aligned.x[row]];\n        for (const column of aligned.ys) {\n            line.push(column[row]);\n        }\n        lines.push(line.join('\\t'));\n    }\n    const text = lines.join(endOfLine);\n    return text;\n}\n// need to find all the unique Xs\n//# sourceMappingURL=toMatrix.js.map"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","getOutputArray","output","length","undefined","TypeError","Float64Array","xMedian","input","options","exact","array","slice","middleIndex","calcMiddle","median","quickSelect","low","high","middle","currentLow","currentHigh","swap","i","j","temp","Math","floor","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","xAdd","array1","array2","isConstant","constant","array3","xApplyFunctionStr","variableLabel","fctString","fct","Function","replaceAll","toReturn","isNaN","xMultiply","arguments","Array","currentMin","_options$fromIndex","_options$toIndex","isInteger","minValue","min","currentMax","maxValue","max","RangeError","_options$min","autoMinMax","_options$max","factor","defineProperty","matrix","require$$0","rescale","require$$1","indent","repeat","indentData","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","rows","columns","maxI","maxJ","result","loop","get","line","push","formatNumber","join","inspectData","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","checkNonEmpty","isEmpty","AbstractMatrix","from1DArray","newRows","newColumns","newData","newMatrix","Matrix","row","column","set","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","round","eye","this","diag","data","l","matrix1","matrix2","checkMatrix","isMatrix","klass","size","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","setRow","row1","row2","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","v","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","sqrt","dot","cumulativeSum","sum","vector2","vector1","mmul","other","Bcolj","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","embed","mat","cols","r","c","resultat","console","warn","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","scaleColumns","flipRows","ceil","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","entries","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","mean","variance","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","Symbol","iterator","col","values","isArrayOfNumbers","every","element","for","randomInt","diagonal","identity","negate","tensorProduct","initData","nRows","nColumns","super","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","fround","log","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","installMathOperations","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","BaseView","MatrixSelectionView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","LuDecomposition","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","leftHandSide","rightHandSide","useSVD","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","EigenvalueDecomposition","assumeSymmetric","d","hh","tred2","dl1","c3","el1","s2","tst1","tql2","H","ort","orthes","nn","w","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","counter","xResidual","residual","yResidual","betas","CHO","EVD","Matrix_1","MatrixColumnSelectionView","MatrixColumnView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowSelectionView","MatrixRowView","MatrixSubView","MatrixTransposeView_1","MatrixTransposeView","NIPALS","Nipals","SVD","correlation","xMatrix","yMatrix","yIsSame","sdx","sdy","corr","covariance","cov","_default","default","subMatrix0","subMatrix1","subMatrix2","linearDependencies","results","Abis","pseudoInverse","svdSolution","solve_1","wrap","xMean","sumValue","xStandardDeviation","sqrError","xVariance","xEnsureFloat64","FFT","_csize","table","angle","PI","power","_width","_bitrev","revShift","_out","_data","_inv","createFromToArray","includeFrom","includeTo","distribution","delta","base","firstExponent","xMaxValue","xMinValue","xIsMonotonic","at","xMinMaxValues","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","_transform4","realTransform","_realTransform4","inverseTransform","outOff","step","bitrev","off","_singleTransform2","_singleTransform4","inv","quarterLen","limit","A","C","D","Ar","Ai","Br","Bi","Cr","Ci","Dr","Di","MAr","MAi","tableBr","tableBi","MBr","MBi","tableCr","tableCi","MCr","MCi","tableDr","tableDi","MDr","MDi","T0r","T0i","T1r","T1i","T2r","T2i","T3r","T3i","FAr","FAi","FCr","FCi","FBr","FBi","FDr","FDi","evenR","evenI","oddR","oddI","leftR","leftI","rightR","rightI","step2","step3","_singleRealTransform2","_singleRealTransform4","halfLen","hquarterLen","SFAr","SFAi","SFBr","SFBi","SA","SB","P1","Q1","P2","Q2","P3","Q3","P4","Q4","P5","Q5","polyval","coef","calc","P","Q","erfcinv","val","simpleNormInvNumber","magnitudeMode","SQRT2","simpleNormInv","xNoiseSanPlot","cutOff","refine","scaleFactor","factorStd","fixOffset","filter","_e","prepareData","medianIndex","firstNegativeValueIndex","findIndex","lastPositiveValueIndex","signPositive","signNegative","cutOffDist","considerList","indexMax","minKi","MAX_SAFE_INTEGER","whereToCutStat","top","elementsOfCutOff","averageValue","kiSqrt","determineCutOff","initialNoiseLevelPositive","skyPoint","initialNoiseLevelNegative","noiseLevelPositive","noiseLevelNegative","cloneSignPositive","cloneSignNegative","cutOffSignalsIndexPlus","cutOffSignalsIndexNeg","cutOffSignals","correctionFactor","effectiveCutOffDist","refinedCorrectionFactor","positive","negative","snr","sanplot","generateSanPlot","fromTo","logBaseY","key","logOfBase","xNoiseStandardDeviation","mad","averageDeviations","xMedianAbsoluteDeviation","sd","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","xSum","String","xParetoNormalization","sqrtSD","xRolling","window","padding","padded","fromEnd","toEnd","xPadding","subarray","matrixMinMaxZ","firstLength","matrixCheck","nbRows","nbColumns","xyCheck","xyEnsureGrowingX","prevX","currentIndex","zonesNormalize","zones","exclusions","map","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","zoneIndex","integral","x0","x1","slope","intercept","getSlope","y0","y1","xyEquallySpaced","xLength","variant","numberOfPoints","zonesWithPointsRes","normalizedZones","zonesWithNumberOfPoints","unitsPerPoint","reduce","previous","current","currentTotal","tempZone","tempZoneNumberOfPoints","zonesWithPoints","xResult","yResult","zoneResult","processZone","concat","halfStep","lastStep","start","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","equallySpacedSlot","initialOriginalStep","lastOriginalStep","MIN_SAFE_INTEGER","sumAtMin","sumAtMax","equallySpacedSmooth","xyFilterX","currentZoneIndex","newX","newY","position","xyFilterXPositive","xyGrowingX","toReversed","xyArrayAlign","requiredY","deltaIsFunction","xyJoinX","slots","possibleXs","flatMap","currentSlot","average","number","currentDelta","getSlots","slot","ys","positions","Uint32Array","newYs","filterRequiredY","addStyle","serie","color","opacity","lineWidth","match","toUpperCase","replace","style","width","dash","label","id","COLORS","defaultBoundary","prepare","M","Pinv","Mt","ar","ac","Ap","Ax","LNZ","coloffset","adr","Lp","Parent","Lnz","Flag","Pattern","bp1","kk","p2","ldlSymbolic","Lx","Li","lKi","ldlNumeric","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","cuthillMckee_1","list","adj","visited","toVisit","eol","ptr","nbhd","compareNum","getCloseIndex","goal","closest","getClosestNumber","prev","curr","indexOf","updateSystem","weights","nbPoints","newVector","next","airPLS","controlPoints","Int8Array","forEach","indexFrom","indexTo","getControlPoints","baseline","iteration","lambda","tolerance","sumNegDifferences","corrected","stopCriterion","xAbsoluteSum","getStopCriterion","lowerTriangularNonZeros","permutationEncodedArray","getDeltaMatrix","cuthillMckee","prevNegSum","cholesky","cho","applyCorrection","absChange","_typeof","obj","sequentialFill","_options","_options$from","_options$to","_options$size","isArray","_i","checkArrayLength","BaseRegression","predict","_predict","xVal","train","precision","toLaTeX","score","y2","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","figures","toPrecision","PolynomialRegression","degree","powers","coefficients","interceptAtZero","nCoefficients","F","FT","regress","_toFormula","isLaTeX","sup","closeSup","times","fn","load","json","iterativePolynomialBaseline","numberPoints","regressionOptions","Regression","regression","fitting","oldFitting","baselineCorrectionRegression","correctedSpectrum","rollingAverageBaseline","xRollingAverage","rollingBallBaseline","maxima","minima","windowM","windowS","windowLeft","windowRight","rollingBall","rollingMedianBaseline","xRollingMedian","sgg","xs","windowSize","derivative","polynomial","np","ans","weight","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","gramPoly","Grampoly","genFact","gf","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","yData","minDistance","possible","newLastIndex","centerIndex","deltaX","currentDistance","lastIndex","getPeakFromIntervals","peaks","ddY","crypto","randomUUID","inflectionPoints","isLessAndGreaterThanZero","back","firstDerivative","crossDy","xGetCrossZeroPoints","gsd","noiseLevel","sgOptions","smoothY","maxCriteria","minMaxRatio","realTopDetection","peakDetectionAlgorithm","isEquallySpaced","maxDx","minDx","absoluteDifference","xIsEquallySpaced","noiseInfo","xValue","minY","maxY","peakData","minddY","secondDerivative","lastJ","yIndex","autoAlgorithm","peak","beta","gamma","xCurrent","xPrevious","optimizeTop","airpls","baselineFct","targetX","nbPeaks","gsdOptions","xRescale","existingMax","existingMin","function","getNormalizedSpectrum","variables","newSpectrum","units","title","dataType","meta","applyRangeSelectionFirst","filters","structuredClone","unshift","logs","Date","now","filterFct","Filters","time","filterXY","isMonotonic","module","exports","isString","isFiniteImpl","isNumber","uniq","strings","seen","item","hasOwnProperty","compareArray","assign","properties","keys","mulSafe","decimals","arg","getFractional","divSafe","den","QtyError","err","create","message","stack","throwIncompatibleUnits","left","right","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","numerator","denominator","unit","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","kind","unitKeys","substr","getKinds","toLowerCase","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","FRACTION","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","parse","trim","exec","scalarMatch","parseFloat","nx","bottom","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","UNIT_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","globalParse","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","KINDS","knownSignature","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","dstDegrees","getDegreeUnits","subtractTempDegrees","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","dstScalar","srcDegK","toDegK","dstUnits","qty","toTemp","toTempK","swiftConverter","srcUnits","convert","srcQty","dstQty","eq","isDegrees","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","NestedMap","defaultFormatter","op1","op2","numdenscale","compareTo","lt","lte","gt","gte","same","_isBase","childMap","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","format","targetQty","stringifiedUnitsCache","stringified","simplify","getOutputNames","token","tokenNext","unitNames","acc","unitCounter","unitCount","version","factory","convertUnit","fromUnit","toUnit","normalize","testRegExp","ensureRegexp","string","parts","stringToRegexp","flags","getConvertedVariable","variable","newUnits","getXYSpectra","spectra","selector","selectedSpectra","labels","xUnits","yUnits","xVariable","yVariable","xLabel","yLabel","split","getPossibleVariable","variableName","convertibleUnits","regexpLabel","upper","hasOwn","lower","possibleFiltered","Analysis","spectrumCallback","cache","ids","analysis","object","internalReplacer","ArrayBuffer","isView","space","fromJSON","pushSpectrum","analysisOptions","standardizeData","getXYSpectrum","getXY","normalization","getNormalizedSpectra","normalizedSpectra","getSpectrum","getXLabel","getYLabel","appendDistinctParameter","appendDistinctValue","AnalysesManager","analyses","analysesManager","addAnalysis","getAnalysisIndex","getAnalyses","processedAnalysisIds","Set","has","getSpectra","getAnalysisBySpectrumId","getSpectrumById","getDistinctTitles","getDistinctUnits","getDistinctLabelUnits","normalizeLabelUnits","getDistinctLabels","getDistinctDataTypes","getDistinctMeta","removeAllAnalyses","removeAnalysis","originalLabel","originalUnits","search","guessEncoding","blob","uint8","Uint8Array","buffer","byteOffset","byteLength","buf","isutf8","parseString","lowercase","getGyromagneticRatio","nucleus","realNucleus","gyromagneticRatio","nucleusNumber","filteredNuclei","getGyromagneticNucleus","fromEntries","_ref","quickSelectMedian","$","E","o","te","ne","series","ms","pageValue","chromatogram","re","O","logger","xFactor","info","yFactor","isXYdata","firstX","firstY","codePointAt","I","S","N","oe","isPeaktable","ue","ce","isXYAdata","se","Z","lastY","ntuples","symbol","find","some","ie","pe","ae","minX","maxX","minZ","maxZ","noise","G","noContour","contourLines","nbContourLevels","fe","noiseMultiplier","zValue","lines","_","ee","T","segments","minMax","J","intensity","observeFrequency","shiftOffsetVal","lastX","$NUC2","$NUC1","yType","xType","W","pageSymbol","dynamicTyping","le","de","twoD","wantXY","profiling","keepSpectra","K","charAt","vardim","varname","R","he","removeComments","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","withoutXY","noTrimRegExp","pt","encoding","TextDecoder","decode","ge","debug","flatten","children","datatable","dataClass","jcampDX","jcampCS","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","be","addInfoData","header","checkNumberOrArray","getExtremeValues","firstLast","getBestFactor","onlyInteger","getFactorNumber","getNumber","rounded","rescaleAndEnsureInteger","xDivide","newLine","pseudoDigits","vectorEncoder","intervalX","xyEncoding","fixEncoding","outputData","dataLength","squeezedDigit","squeezedEncoding","differenceEncoding","mult","charCount","encodedData","encodedNumber","diffData","numDiff","differenceDigit","duplicateDigit","differenceDuplicateEncoding","commaSeparatedValuesEncoding","packedEncoding","separator","sqzDigits","charCodeAt","substring","diffDigits","dupDigits","owner","origin","resInfo","xyDataCreator","peakTableCreator","fromVariables","forceNtuples","jcampOptions","varName","varType","varDim","isDependent","point","creatorNtuples","xData","toJcamps","jcamps","getJcamp","exportText","spectrums","endOfLine","fieldSeparator","maxNumberData","lineIndex","JSGraph","getJSGraph","colors","opacities","linesWidth","xAxis","yAxis","firstSpectrum","logScale","axes","unitWrapperBefore","unitWrapperAfter","flipped","display","getNormalizationAnnotations","boundary","annotations","exclusion","ignore","strokeWidth","fillColor","async","sqlite3InitModule","moduleArg","Module","ENVIRONMENT_IS_WEB","globalThis","ENVIRONMENT_IS_WORKER","WorkerGlobalScope","process","versions","node","readAsync","readBinary","thisProgram","_scriptName","import","scriptDirectory","URL","href","url","xhr","XMLHttpRequest","open","responseType","send","response","fetch","credentials","ok","arrayBuffer","status","wasmBinary","readyPromiseResolve","readyPromiseReject","HEAP8","HEAPU8","HEAP16","HEAP32","HEAPU32","HEAP64","wasmBinaryFile","bind","ABORT","runtimeInitialized","updateMemoryViews","wasmMemory","Int16Array","Int32Array","BigInt64Array","BigUint64Array","abort","what","WebAssembly","RuntimeError","findWasmBinary","path","getWasmBinary","binaryFile","file","getBinarySync","instantiateAsync","binary","imports","instantiateStreaming","reason","instantiate","instantiateArrayBuffer","callRuntimeCallbacks","callbacks","onPostRuns","addOnPostRun","cb","onPreRuns","addOnPreRun","PATH","isAbs","splitPath","filename","normalizeArray","allowAboveRoot","up","isAbsolute","trailingSlash","dirname","root","dir","basename","paths","join2","randomFill","view","getRandomValues","PATH_FS","resolve","args","resolvedPath","resolvedAbsolute","FS","cwd","relative","arr","end","fromParts","toParts","samePartsLength","outputParts","UTF8Decoder","findStringEnd","heapOrArray","maxBytesToRead","ignoreNul","maxIdx","UTF8ArrayToString","endPtr","FS_stdin_getChar_buffer","lengthBytesUTF8","stringToUTF8Array","heap","outIdx","maxBytesToWrite","startIdx","endIdx","intArrayFromString","stringy","dontAddNull","u8array","numBytesWritten","TTY","ttys","init","shutdown","register","dev","ops","registerDevice","stream_ops","stream","tty","rdev","ErrnoError","seekable","close","fsync","read","offset","pos","get_char","bytesRead","atime","write","put_char","mtime","ctime","default_tty_ops","FS_stdin_getChar","prompt","ioctl_tcgets","c_iflag","c_oflag","c_cflag","c_lflag","c_cc","ioctl_tcsets","optional_actions","ioctl_tiocgwinsz","default_tty1_ops","alignMemory","alignment","mmapAlloc","_emscripten_builtin_memalign","zeroMemory","MEMFS","ops_table","mount","createNode","parent","mode","isBlkdev","isFIFO","getattr","node_ops","setattr","lookup","mknod","rename","unlink","rmdir","readdir","symlink","llseek","mmap","msync","link","readlink","chrdev","chrdev_stream_ops","isDir","contents","isFile","usedBytes","isLink","isChrdev","getFileDataAsTypedArray","expandFileStorage","newCapacity","prevCapacity","oldContents","resizeFileStorage","newSize","attr","ino","nlink","uid","gid","blksize","blocks","doesNotExistError","old_node","new_dir","new_name","new_node","lookupNode","hashRemoveNode","newname","oldpath","canOwn","whence","prot","allocated","mmapFlags","FS_getMode","canRead","canWrite","runDependencies","dependenciesFulfilled","preloadPlugins","FS_preloadFile","dontCreateFile","preFinish","fullname","byteArray","asyncLoad","plugin","Browser","FS_handledByPreloadPlugin","FS_createDataFile","createDataFile","removeRunDependency","mounts","devices","streams","nextInode","nameTable","currentPath","initialized","ignorePermissions","filesystems","syncFSRequests","readFiles","errno","FSStream","shared","isRead","isWrite","isAppend","FSNode","readMode","writeMode","mounted","isFolder","isDevice","lookupPath","opts","follow_mount","linkloop","nlinks","current_path","islast","noent_okay","isMountpoint","follow","isRoot","getPath","mountpoint","hashName","parentid","hash","hashAddNode","name_next","errCode","mayLookup","nodeName","destroyNode","isSocket","flagsToPermissionString","flag","perms","nodePermissions","mayCreate","mayDelete","isdir","mayOpen","checkOpExists","op","MAX_OPEN_FDS","nextfd","fd","getStreamChecked","getStream","createStream","closeStream","dupStream","origStream","dup","doSetAttr","getDevice","major","minor","makedev","ma","mi","getMounts","check","syncfs","populate","completed","doCallback","done","errored","pseudo","mountRoot","unmount","statfs","statfsNode","statfsStream","rtn","bsize","frsize","bfree","bavail","files","ffree","fsid","namelen","mkdir","mkdirTree","dirs","mkdev","newpath","old_path","new_path","old_dirname","new_dirname","old_name","old_dir","stat","dontFollow","fstat","lstat","doChmod","chmod","lchmod","fchmod","doChown","timestamp","chown","lchown","fchown","doTruncate","truncate","ftruncate","utime","isDirPath","FS_modeStringToFlags","created","ungotten","isClosed","getdents","seeking","bytesWritten","ioctl","cmd","readFile","writeFile","chdir","createDefaultDirectories","createDefaultDevices","randomBuffer","randomLeft","randomByte","createDevice","createSpecialDirectories","proc_self","ret","createStandardStreams","staticInit","quit","findObject","dontResolveLastLink","analyzePath","exists","parentExists","parentPath","parentObject","createPath","part","createFile","forceLoadFile","createLazyFile","LazyUint8Array","lengthKnown","chunks","chunkOffset","chunkSize","chunkNum","getter","setDataGetter","cacheLength","datalength","getResponseHeader","hasByteServing","usesGzip","lazyArray","doXHR","setRequestHeader","overrideMimeType","responseText","_length","_chunkSize","defineProperties","writeChunks","SYSCALLS","calculateAt","dirfd","allowEmpty","getStreamFromFD","writeStat","BigInt","getTime","writeStatFs","stats","doMsync","addr","varargs","getStr","UTF8ToString","syscallGetVarargI","syscallGetVarargP","bigintToI53Checked","stringToUTF8","outPtr","readI53FromI64","MONTH_DAYS_LEAP_CUMULATIVE","MONTH_DAYS_REGULAR_CUMULATIVE","_emscripten_get_now","performance","_emscripten_date_now","growMemory","pages","grow","ENV","getEnvStrings","env","USER","LOGNAME","PWD","HOME","LANG","navigator","language","createPreloadedFile","FS_createPreloadedFile","onload","onerror","then","catch","preloadFile","INITIAL_MEMORY","Memory","initial","maximum","initMemory","wasmImports","__syscall_chmod","__syscall_faccessat","amode","__syscall_fchmod","__syscall_fchown32","group","__syscall_fcntl64","__syscall_fstat64","__syscall_ftruncate64","__syscall_getcwd","cwdLengthInBytes","__syscall_ioctl","termios","argp","winsize","__syscall_lstat64","__syscall_mkdirat","__syscall_newfstatat","nofollow","__syscall_openat","__syscall_readlinkat","bufsize","endChar","__syscall_rmdir","__syscall_stat64","__syscall_unlinkat","__syscall_utimensat","seconds","nanoseconds","_localtime_js","tmPtr","date","getSeconds","getMinutes","getHours","getDate","getMonth","getFullYear","getDay","yday","year","ydayFromDate","getTimezoneOffset","summerOffset","winterOffset","_mmap_js","_munmap_js","_tzset_js","__tzset_js","timezone","daylight","std_name","dst_name","currentYear","winter","summer","stdTimezoneOffset","extractZone","timezoneOffset","absOffset","padStart","winterName","summerName","clock_time_get","clk_id","ignored_precision","ptime","clock_id","nsec","emscripten_date_now","emscripten_get_heap_max","_emscripten_get_heap_max","emscripten_get_now","emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","environ_get","_environ_get","__environ","environ_buf","bufSize","envp","Infinity","environ_sizes_get","_environ_sizes_get","penviron_count","penviron_buf_size","fd_close","fd_fdstat_get","pbuf","fd_read","iov","iovcnt","pnum","doReadv","fd_seek","newOffset","fd_sync","fd_write","doWritev","memory","wasmExports","receiveInstance","instance","assignWasmExports","wasi_snapshot_preview1","Promise","reject","inst","createWasm","run","doRun","postRun","preRun","setTimeout","runSQLite3PostLoadInit","sqlite3InitScriptInfo","EmscriptenModule","sqlite3IsUnderTest","sqlite3ApiBootstrap","apiConfig","sqlite3ApiConfig","defaultConfig","sqlite3","config","bigIntEnabled","wasmfsOpfsDir","useStdAlloc","allocExportName","deallocExportName","reallocExportName","capi","wasm","__rcStr","rc","sqlite3_js_rc_str","isInt32","SQLite3Error","rcStr","resultCode","SQLITE_ERROR","toss","toss3","isBindableTypedArray","isSQLableTypedArray","affirmBindableTypedArray","flexibleString","typedArrayToString","isPtr","cstrToJs","WasmAllocError","SQLITE_NOMEM","sqlite3_bind_blob","sqlite3_bind_text","sqlite3_create_function_v2","pDb","funcName","nArg","eTextRep","pApp","xFunc","xStep","xFinal","xDestroy","sqlite3_create_function","sqlite3_create_window_function","xInverse","sqlite3_prepare_v3","dbPtr","sql","sqlByteLen","prepFlags","stmtPtrPtr","strPtrPtr","sqlite3_prepare_v2","sqlite3_exec","pVoid","pErrMsg","sqlite3_randomness","util","bigIntFits32","bigIntFits64","_max","_min","bigIntFitsDouble","isTypedArray","BYTES_PER_ELEMENT","isUIThread","document","typedArrayPart","assert","msg","affirmDbHeader","bytes","affirmIsDb","pointerSize","sqlite3_libversion","functionTable","alloc","realloc","dealloc","allocFromTypedArray","srcTypedArray","pRet","heapForSize","keyAlloc","keyDealloc","keyRealloc","impl","coerce","null","compileOptionUsed","optName","_result","_opt","_rx","_rxInt","opt","rv","ov","sqlite3_compileoption_get","sqlite3_compileoption_used","pstack","restore","sqlite3__wasm_pstack_restore","sizeofIR","sqlite3__wasm_pstack_alloc","allocChunks","sz","mem","allocPtr","safePtrSize","stackPos","pointer","configurable","iterable","writeable","sqlite3__wasm_pstack_ptr","quota","sqlite3__wasm_pstack_quota","remaining","sqlite3__wasm_pstack_remaining","ta","heap8u","nAlloc","sqlite3_wasmfs_opfs_dir","pdir","FileSystemHandle","FileSystemDirectoryHandle","FileSystemFileHandle","sqlite3__wasm_init_wasmfs","xCallWrapped","sqlite3_wasmfs_filename_is_persistent","sqlite3_js_db_uses_vfs","vfsName","dbName","pK","sqlite3_vfs_find","sqlite3_js_db_vfs","sqlite3_js_vfs_list","pVfs","oVfs","sqlite3_vfs","$zName","$pNext","dispose","sqlite3_js_db_export","schema","xWrap","testConvertArg","scope","scopedAllocPush","pOut","pSize","scopedAlloc","ppOut","zSchema","scopedAllocCString","sqlite3__wasm_db_serialize","peekPtr","nOut","peek","sqlite3_free","scopedAllocPop","dbPointer","sqlite3__wasm_db_vfs","sqlite3_js_aggregate_context","pCtx","sqlite3_aggregate_context","sqlite3_js_posix_create_file","dataLen","pData","sqlite3__wasm_posix_create_file","sqlite3_js_vfs_create_file","vfs","sqlite3__wasm_vfs_create_file","sqlite3_js_sql_to_string","sqlite3_db_config","SQLITE_DBCONFIG_ENABLE_FKEY","SQLITE_DBCONFIG_ENABLE_TRIGGER","SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER","SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION","SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE","SQLITE_DBCONFIG_ENABLE_QPSG","SQLITE_DBCONFIG_TRIGGER_EQP","SQLITE_DBCONFIG_RESET_DATABASE","SQLITE_DBCONFIG_DEFENSIVE","SQLITE_DBCONFIG_WRITABLE_SCHEMA","SQLITE_DBCONFIG_LEGACY_ALTER_TABLE","SQLITE_DBCONFIG_DQS_DML","SQLITE_DBCONFIG_DQS_DDL","SQLITE_DBCONFIG_ENABLE_VIEW","SQLITE_DBCONFIG_LEGACY_FILE_FORMAT","SQLITE_DBCONFIG_TRUSTED_SCHEMA","SQLITE_DBCONFIG_STMT_SCANSTATUS","SQLITE_DBCONFIG_REVERSE_SCANORDER","SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE","SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE","SQLITE_DBCONFIG_ENABLE_COMMENTS","ip","SQLITE_DBCONFIG_LOOKASIDE","pii","SQLITE_DBCONFIG_MAINDBNAME","SQLITE_MISUSE","sqlite3_value_to_js","pVal","throwIfCannotConvert","valType","sqlite3_value_type","SQLITE_INTEGER","sqlite3_value_int64","sqlite3_value_double","SQLITE_FLOAT","SQLITE_TEXT","sqlite3_value_text","SQLITE_BLOB","sqlite3_value_bytes","pBlob","sqlite3_value_blob","SQLITE_NULL","SQLITE_MISMATCH","sqlite3_values_to_js","argc","pArgv","tgt","sqlite3_result_error_js","sqlite3_result_error_nomem","sqlite3_result_error","sqlite3_result_js","sqlite3_result_int","sqlite3_result_double","sqlite3_result_int64","allocCString","sqlite3_result_text","SQLITE_WASM_DEALLOC","sqlite3_result_null","sqlite3_result_blob","sqlite3_column_js","pStmt","iCol","sqlite3_column_value","__newOldValue","pObj","pokePtr","pv","sqlite3_preupdate_new_js","sqlite3_preupdate_old_js","sqlite3changeset_new_js","pChangesetIter","sqlite3changeset_old_js","client","asyncPostInit","ff","isReady","lia","initializersAsync","postInit","__isUnderTest","StructBinder","catcher","scriptInfo","initializers","debugModule","emscripten","iw","instantiateWasm","libVersion","libVersionNumber","sourceId","downloadVersion","scm","branch","tags","datetime","WhWasmUtilInstaller","pointerIR","__ptrIR","__ptrSize","__BigInt","__asPtrType","__NullPtr","__ptrAdd","__ptr","enumerable","heapSize","freeFuncIndexes","pushPtr","utf8Decoder","utf8Encoder","TextEncoder","heapWrappers","HEAP8U","HEAP16U","Uint16Array","HEAP32U","HEAP32F","Float32Array","HEAP64F","HEAP64U","heap8","heap16","heap16u","heap32","heap32u","unsigned","__funcTable","__indirect_function_table","functionEntry","fptr","ft","jsFuncToWasm","func","sig","sigTypes","typeCodes","f64","f32","i64","i32","uleb128Encode","method","rxJSig","sigParams","letterType","pushSigType","dest","letter","wasmCode","Instance","__installFunction","scoped","oldLen","installFunction","scopedInstallFunction","uninstallFunction","poke","peek8","poke8","peek16","poke16","peek32","poke32","peek64","poke64","peek32f","poke32f","peek64f","poke64f","getMemValue","getPtrValue","setMemValue","setPtrValue","isPtr32","isPtr64","cstrlen","__SAB","SharedArrayBuffer","isSharedTypedArray","aTypedArray","begin","typedArray","jstrlen","jstrcpy","jstr","maxBytes","addNul","cstrncpy","tgtPtr","srcPtr","strPtr","ch","tgtNumber","srcNumber","jstrToUintArray","encode","__affirmAlloc","__allocCStr","returnWithLength","allocator","toFree","state","__allocMainArgv","isScoped","pList","scopedAllocMainArgv","allocMainArgv","cArgvToJs","scopedAllocCall","__allocPtr","howMany","pIr","scopedAllocPtr","xGet","__argcMismatch","xCall","fname","Map","xArg","__xArgPtr","valueOf","__xArgString","AbstractArgAdapter","convertArg","argv","argIndex","FuncPtrAdapter","warnOnUse","contextKey","bindScope","bindScopes","bindMod","isTransient","isContext","isPermanent","singleton","callProxy","contextMap","cm","__cmap","pair","fp","debugFuncInstall","debugOut","__xArgAdapterCheck","__xResultAdapterCheck","convertArgNoCheck","convertResult","convertResultNoCheck","callee","fArg","resultType","argTypes","fIsFunc","xf","cxw","__xAdapter","typeName","adapter","modeName","xcvPart","delete","resultAdapter","argAdapter","testConvertResult","yawl","wfetch","uri","wui","finalThen","wasmUtilTarget","malloc","free","Jaccwabyt","StructBinderFactory","SBF","memberPrefix","memberSuffix","ptrSize","ptrIR","__ptrAddSelf","debugFlags","__makeDebugFlags","deriveFrom","__flags","setter","_flags","writable","isLittleEndian","sigLetter","isFuncSig","sigIR","sigSize","affirmBigIntArray","sPropName","__propThrowOnSet","structName","propName","getInstanceHandle","WeakMap","forObj","ownsPointer","zod","xb","__isPtr32","__isPtr","__freeStruct","ctor","rmInstanceHandle","ondispose","StructType","structInfo","sizeof","zeroOnDispose","rop","__allocStruct","xm","checkPtr","__isNonNullPtr","takeOwnership","nX","extraBytes","addOnDispose","looksLikeASig","rxSig1","rxSig2","__adaptorsFor","who","__adaptor","which","proxy","__adaptGet","__affirmNotASig","ctx","__adaptSet","__adaptStruct","__adaptStruct2","__memberKeyProp","__lookupMember","memberName","tossIfNotFound","members","__memberSignature","emscriptenFormat","__structMemberKeys","memberKey","__utf8Decoder","__utf8Encoder","__affirmCStringSignature","member","__memberToJsString","__addOnDispose","__allocCString","lookupMember","memberToJsString","memberIsString","__memberIsString","memberKeys","memberSignature","memoryDump","setMemberCString","__setMemberCString","isA","hasExternalPointer","memberGetterProxy","adaptGet","memberSetterProxy","adaptSet","makeMemberStructWrapper","__innerStructs","innerStructs","getterProxy","dbg","makeMemberWrapper","getters","setters","sw","sigDVGetter","sigDVSetter","sigDVSetWrapper","sigCheck","sigGlyph","xPropName","DataView","readOnly","setterProxy","isAutoPtrSig","StructBinderImpl","StructCtor","self","ads","adapt","struct","ptrAdd","lastMember","autoCalc","autoCalcSizeOffset","oldAutoCalc","adaptStruct","bindingSignatures","core","aNames","nCols","pColVals","pColNames","aVals","int64","z0","z1","rowid","wasmInternal","sqlite3_progress_handler","sqlite3_stmt_explain","sqlite3_set_authorizer","pV","iCode","s0","s1","s3","sqlite3_column_origin_name","sqlite3_declare_vtab","sqlite3_preupdate_hook","db","zDb","zTbl","iKey1","iKey2","sqlite3changegroup_add","sqlite3session_create","__ipsProxy","ir","__xString","nilType","oo1","Stmt","DB","SQLITE_NOTFOUND","sqlite3_index_info","sqlite3_module","__xRcPtr","sqlite3__wasm_db_error","sqlite3_set_errmsg","cJson","ctype","defineGroups","__rcMap","notThese","WasmTestStruct","sqlite3_index_constraint","sqlite3_index_orderby","sqlite3_index_constraint_usage","structs","sqlite3_vtab_config","__dbArgcMismatch","__errEncoding","SQLITE_FORMAT","__argPDb","__argStr","__dbCleanupMap","dbMap","addCollation","collation","_addUDF","arity","addFunction","udf","addWindowFunc","wudf","cleanup","closeArgs","sqlite3_create_collation_v2","SQLITE_UTF8","fmap","arities","fargs","clear","__sqlite3CloseV2","sqlite3_close_v2","__sqlite3SessionDelete","sqlite3session_delete","pSession","sqlite3session_table_filter","__sqlite3CreateCollationV2","zName","pArg","xCompare","sqlite3_create_collation","__cfProxy","xInverseAndStep","xFinalAndValue","__sqlite3CreateFunction","__sqlite3CreateWindowFunction","udfSetResult","udfConvertArgs","udfSetError","__flexiString","__prepare","basic","full","sqlLen","ppStmt","pzTail","xSql","xSqlLen","__bindText","__bindBlob","text","nText","sqlite3_db_handle","pMem","nMem","sqlite3_column_text","argStmt","argInt","argValue","newStr","cstr","stmt","colIndex","a0","a1","sqlite3_column_bytes","sqlite3_config","SQLITE_CONFIG_COVERING_INDEX_SCAN","SQLITE_CONFIG_MEMSTATUS","SQLITE_CONFIG_SMALL_MALLOC","SQLITE_CONFIG_SORTERREF_SIZE","SQLITE_CONFIG_STMTJRNL_SPILL","SQLITE_CONFIG_URI","sqlite3__wasm_config_i","SQLITE_CONFIG_LOOKASIDE","sqlite3__wasm_config_ii","SQLITE_CONFIG_MEMDB_MAXSIZE","sqlite3__wasm_config_j","SQLITE_CONFIG_GETMALLOC","SQLITE_CONFIG_GETMUTEX","SQLITE_CONFIG_GETPCACHE2","SQLITE_CONFIG_GETPCACHE","SQLITE_CONFIG_HEAP","SQLITE_CONFIG_LOG","SQLITE_CONFIG_MALLOC","SQLITE_CONFIG_MMAP_SIZE","SQLITE_CONFIG_MULTITHREAD","SQLITE_CONFIG_MUTEX","SQLITE_CONFIG_PAGECACHE","SQLITE_CONFIG_PCACHE2","SQLITE_CONFIG_PCACHE","SQLITE_CONFIG_PCACHE_HDRSZ","SQLITE_CONFIG_PMASZ","SQLITE_CONFIG_SERIALIZED","SQLITE_CONFIG_SINGLETHREAD","SQLITE_CONFIG_SQLLOG","SQLITE_CONFIG_WIN32_HEAPSIZE","__autoExtFptr","sqlite3_auto_extension","fPtr","sqlite3_cancel_auto_extension","sqlite3_reset_auto_extension","installMethod","applyArgcCheck","installMethodArgcCheck","argcProxy","removeFuncList","__removeFuncList","ndx","sigN","memKey","fProxy","pFunc","installMethods","structInstance","methods","prior","mkey","outWrapper","__ptrMap","__doesNotOwnHandle","__stmtMap","getOwnOption","dflt","getOwnPropertyDescriptor","checkSqlite3Rc","sqliteResultCode","sqlite3_errmsg","sqlite3_errstr","__dbTraceToConsole","SQLITE_TRACE_STMT","sqlite3_db_filename","__vfsPostOpenCallback","dbCtorHelper","normalizeArgs","flagsStr","oflags","SQLITE_OPEN_CREATE","SQLITE_OPEN_READWRITE","SQLITE_OPEN_READONLY","SQLITE_OPEN_EXRESCODE","pPtr","sqlite3_open_v2","sqlite3_extended_result_codes","sqlite3_trace_v2","postInitSql","setVfsPostOpenCallback","BindTypes","boolean","bigint","affirmDbOpen","affirmColIndex","columnCount","__selectFirstRow","getArgs","reset","finalize","__selectAll","rowMode","returnValue","checkRc","isOpen","affirmOpen","onclose","before","after","changes","total","sixtyFour","sqlite3_total_changes64","sqlite3_total_changes","sqlite3_changes64","sqlite3_changes","dbFilename","dbNumber","sqlite3_db_name","dbVfsName","resultRows","returnVal","saveSql","cbArg","columnNames","getColumnNames","$colName","parseExecArgs","evalFirstResult","isTA","pSql","pSqlEnd","sqlite3_sql","parameterCount","gotColNames","cbArgCache","__execLock","createFunction","isFunc","isWindow","fFlags","SQLITE_DETERMINISTIC","SQLITE_DIRECTONLY","SQLITE_INNOCUOUS","xArity","arityArg","selectValue","asType","selectValues","selectArray","selectObject","selectArrays","selectObjects","openStatementCount","transaction","opener","savepoint","wrapHandle","affirmStmtOpen","affirmSupportedBindType","isSupportedBindType","__stmtMayGet","affirmNotLockedByExec","currentOpName","bindOne","bindType","_tooBigInt","asBlob","pStr","sqlite3_bind_parameter_index","affirmParamIndex","sqlite3_bind_null","sqlite3_bind_int","sqlite3_bind_int64","sqlite3_bind_double","sqlite3_finalize","clearBindings","sqlite3_clear_bindings","alsoClearBinds","sqlite3_reset","bindAsBlob","sqlite3_step","SQLITE_DONE","SQLITE_ROW","stepReset","stepFinalize","sqlite3_column_name","sqlite3_column_type","sqlite3_column_int64","sqlite3_column_double","sqlite3_column_blob","_blobXfer","getInt","getFloat","getString","getBlob","getJSON","SQLITE_STRING","getColumnName","getParamIndex","getParamName","sqlite3_bind_parameter_name","isBusy","sqlite3_stmt_busy","isReadOnly","sqlite3_stmt_readonly","sqlite3_column_count","sqlite3_bind_parameter_count","oo1db","initWorker1API","getDbId","wState","idMap","idSeq","dbList","xfer","dbs","alsoUnlink","ddNdx","sqlite3__wasm_vfs_unlink","post","xferList","postMessage","getDb","require","getMsgDb","msgData","affirmExists","dbId","wMsgHandler","ev","oargs","simulateError","persistent","doUnlink","theCallback","rowNumber","hadColNames","changeCount","countChanges","lastInsertRowId","sqlite3_last_insert_rowid","vfsList","export","mimetype","onmessage","evType","arrivalTime","operation","errorClass","messageId","workerReceivedTime","workerRespondTime","departureTime","registerVfs","asDefault","sqlite3_vfs_register","installVfs","propList","vtab","sii","nthConstraint","asPtr","$nConstraint","$aConstraint","nthConstraintUsage","$aConstraintUsage","nthOrderBy","$nOrderBy","$aOrderBy","StructPtrMapper","__xWrap","methodName","removeMapping","__xWrapFactory","pCObj","unget","xVtab","sqlite3_vtab","xCursor","sqlite3_vtab_cursor","xIndexInfo","pIdxInfo","xError","defaultRc","errorReporter","xRowid","ppRowid64","setupModule","createdMod","xConnect","xDisconnect","catchExceptions","fwrap","pAux","ppVtab","pzErr","mnames","remethods","xCreate","$iVersion","iVersion","$xIntegrity","$xShadowName","$xSavePoint","$xRelease","$xRollbackTo","sqlite3_kvvfs_methods","KVVfsFile","pKvvfs","kvvfsMethods","sqlite3__wasm_kvvfs_methods","$nKeySize","rxJournalSuffix","zKeyJrnl","zKeySz","keySize","$nBufferSize","pool","memBuffer","memBufferFree","noop","KVVfsStorage","getKeys","getItem","setItem","hop","removeItem","kvvfsIsPersistentName","kvvfsKeyPrefix","validateStorageName","mayBeJournal","Blob","maxLen","SQLITE_RANGE","newStorageObj","jzClass","refc","deleteAtRefc0","keyPrefix","listeners","kvvfs","xOpen","xClose","xWrite","xRead","xSync","xAccess","xFileControl","xRcrdRead","xRcrdWrite","xRcrdDelete","deleteStorage","store","storagePool","installStorageAndJournal","nameOfThisThreadStorage","Storage","localStorage","local","sessionStorage","session","builtinStorageNames","orig","setError","dfltErrCode","lastError","popError","catchForNotify","kvvfsDecode","sqlite3__wasm_kvvfs_decode","kvvfsEncode","sqlite3__wasm_kvvfs_encode","notifyListeners","eventName","u8enc","wcache","ear","storageName","decodePages","events","includeJournal","addn","storageForZClass","zClass","kvvfsMakeKey","sqlite3__wasm_kvvfsMakeKey","jsKeyForStorage","zKey","zKeyForStorage","pFileHandles","originalMethods","ioDb","ioJrnl","$pVfs","pIoDb","sqlite3_io_methods","$pIoDb","pIoJrnl","$pIoJrnl","recordHandler","kvvfsInternal","disablePageSizeChange","internal","methodOverrides","zBuf","nBuf","jXKey","jV","nV","zV","copyWithin","zData","jxKey","jData","SQLITE_IOERR","pProtoVfs","pProtoFile","pOutFlags","zToFree","SQLITE_OPEN_MAIN_DB","SQLITE_OPEN_TEMP_DB","SQLITE_OPEN_TRANSIENT_DB","deleteAt0","SQLITE_OPEN_DELETEONCLOSE","sqlite3_uri_boolean","$zClass","$isJournal","nm","xDelete","iSyncFlag","jzName","zPath","pResOut","jzPath","xRandomness","npOut","xGetLastError","cMsg","pFile","opId","SQLITE_FCNTL_PRAGMA","zVal","$szPage","SQLITE_FCNTL_SYNC","pTgt","iOff64","pSrc","sqlite3_file","km","sqlite3_js_kvvfs_clear","SQLITE_ACCESS","toRm","sqlite3_js_kvvfs_size","sqlite3_js_kvvfs_reserve","reserve","overwrite","isNew","SQLITE_IOERR_ACCESS","zEnc","journal","zBin","jenc","rxTail","spg","zDec","nDec","listen","unlisten","estimateSize","JsStorageDb","defaultStorageName","jdb","clearStorage","storageSize","nRef","nOpen","dbSize","colId","VT","ProtoCursor","names","cursorState","cursor","vTabState","theModule","xcol","xErrror","pVtab","ppCursor","pCursor","xNext","xColumn","st","SQLITE_TRANSIENT","storageGetDbSize","xEof","xFilter","idxNum","idxCStr","xBestIndex","$estimatedRows","$estimatedCost","create_module","sqlite3_create_module","installOpfsVfs","Atomics","createSyncAccessHandle","getDirectory","urlParams","location","searchParams","verbose","sanityChecks","proxyUri","defaultProxyUri","promiseResolve_","promiseReject_","loggers","logImpl","level","opfsUtil","metrics","dump","opIds","wait","avgTime","avgWait","s11n","serialize","deserialize","opfsIoMethods","opfsVfs","promiseWasRejected","promiseReject","promiseResolve","Worker","_originalOnError","pDVfs","dVfs","$szOsFile","$mxPathname","$xDlOpen","$xDlError","$xDlSym","$xDlClose","littleEndian","setInt16","asyncIdleWaitTime","asyncS11nExceptions","fileBufferSize","sabS11nOffset","sabS11nSize","sabIO","whichOp","xDeleteNoWait","xFileSize","xLock","xSleep","xTruncate","xUnlock","retry","sabOP","sq3Codes","opfsFlags","OPFS_UNLOCK_ASAP","OPFS_UNLINK_BEFORE_OPEN","defaultUnlockAsap","opRun","opNdx","sabOPView","notify","asyncShutdown","asyncRestart","randomFilename","_chars","_n","__openFiles","opTimer","mTimeStart","mTimeEnd","ioSyncWrappers","xCheckReservedLock","sq3File","xDeviceCharacteristics","SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN","pSz64","lockType","pDest","offset64","SQLITE_IOERR_SHORT_READ","sabView","SQLITE_IOERR_READ","sz64","SQLITE_LOCK_NONE","SQLITE_IOERR_WRITE","vfsSyncWrappers","xCurrentTime","xCurrentTimeInt64","doSyncDir","xFullPathname","SQLITE_CANTOPEN","fh","fid","sab","sabFileBufView","$pMethods","$xRandomness","$xSleep","getResolvedPath","splitIt","pathname","getDirForFilename","absFilename","createDirs","dh","rootDirectory","dirName","getDirectoryHandle","absDirName","entryExists","fsEntryName","getFileHandle","treeList","dirHandle","handle","subDir","doDir","rmfr","recurse","removeEntry","recursive","throwOnError","hDir","filenamePart","cause","traverse","defaultOpt","directory","depth","importDb","fnamePart","chunk","sah","nWrote","checkedHeader","importDbChunked","OpfsDb","oo1Db","sqlite3_busy_timeout","payload","io","sabS11nView","initS11n","textDecoder","textEncoder","viewU8","viewDV","TypeIds","getTypeId","getTypeIdById","tid","typeIds","getInt32","setInt32","openFlags","dbFile","zDbFile","readBuf","jRead","sanityCheck","opfs","errMsg","proxyJs","sqlite3Dir","initPromises","HEADER_MAX_PATH_SIZE","HEADER_OFFSET_DATA","PERSISTENT_FILE_TYPES","SQLITE_OPEN_MAIN_JOURNAL","SQLITE_OPEN_SUPER_JOURNAL","SQLITE_OPEN_WAL","FLAG_COMPUTE_DIGEST_V2","SQLITE_OPEN_MEMORY","OPAQUE_DIR_NAME","getRandomName","optionDefaults","initialCapacity","clearOnInit","verbosity","forceReinitIfPreviouslyFailed","__mapVfsToPool","getPoolForVfs","setPoolForVfs","__mapSqlite3File","getPoolForPFile","setPoolForPFile","ioMethods","storeErr","getOFileForS3File","mapS3FileToOFile","flush","deletePath","getSize","nRead","xSectorSize","vfsMethods","hasFilename","SQLITE_IOERR_DELETE","popErr","sqlite3Rc","getSAHForPath","getFileCount","getCapacity","nextAvailableSAH","setAssociatedPath","OpfsSAHPool","vfsDir","dhVfsRoot","dhOpaque","dhVfsParent","mapSAHToName","mapFilenameToSAH","availableSAH","mapS3FileToOFile_","apBody","dvBody","cVfs","createOpfsVfs","$error","addCapacity","getVfs","getFileNames","ah","reduceCapacity","nRm","releaseAccessHandles","acquireAccessHandles","clearFiles","all","getAssociatedPath","getUint32","fileDigest","HEADER_DIGEST_SIZE","compDigest","computeDigest","pathBytes","enc","encodeInto","written","setUint32","digest","fileFlags","h1","h2","imul","code","removeVfs","sqlite3_vfs_unregister","pauseVfs","isPaused","unpauseVfs","exportFile","OpfsSAHPoolUtil","sahPool","reserveMinimumCapacity","wipeFiles","installOpfsSAHPoolVfs","$testThrowPhase1","apiVersionCheck","$testThrowPhase2","thePool","poolUtil","theVfs","OpfsSAHPoolDb","bootstrapConfig","sqlite3_bundler_friendly_default","originalInit","sIMS","sqlite3InitModuleState","moduleScript","currentScript","isWorker","URLSearchParams","wasmFilename","li","sIM","emscriptenLocateFile","locateFile","emscriptenInstantiateWasm","ready","scriptDir","sqlite3Worker1Promiser","onready","handlerMap","idTypeMap","generateMessageId","genMsgId","promiserFunc","worker","msgHandler","onrow","onunhandled","rowCallbackId","finally","v2","oldFunc","promiseProxy","original","src_default","wasmBinaryPromise","base64","compressed","atob","character","pipeThrough","DecompressionStream","Response","decompressBase64Gzip","ENTRY_MARKER","decodeBlob","markerOffset","findMarker","remainingBytes","dataView","getFloat64","readParameterData","database","recordId","rootNode","dataByNodeId","blobRows","blobMap","blobRow","nodeId","parameterTreeNodeId","dataBlob","dataMap","raw","loadDataMap","convertNode","parameter","parameterType","friendlyName","urn","dataRow","dataInt32","dataDouble","dataSingle","dataBoolean","dataInt64","dataText","extractValue","child","buildParameterTree","rootParameterTypeId","parameterTypes","types","loadParameterTypes","nodeMap","rawNode","parameterTypeId","parentNodeId","sortChildren","toSorted","siblingIndex","dataPointer","sqlite3_deserialize","SQLITE_DESERIALIZE_FREEONCLOSE","SQLITE_DESERIALIZE_RESIZEABLE","openDatabase","schemaVersion","readSchemaVersion","metadata","Key","Value","readStoreMetadata","records","rawRecords","readRecords","tree","parameters","guid","groupId","groupGuid","groupName","createdDateTime","modifiedDateTime","buildRecords","findParameter","findParameterDeep","found","VARIABLE_DESCRIPTORS","parameterName","buildVariables","descriptor","extractTitle","sampleSettings","sampleName","extractMeta","topLevelFields","metaKey","field","deepFields","materialSettings","materialRI","materialAbsorption","dispersantViscosity","dispersantRI","extractSettings","softwareVersion","instrumentSerialNumber","settings","instrument","manufacturer","model","serialNumber","software","instrumentSettingsFields","settingsKey","jcamp","converted","entry","currentSpectrum","addJcamp","zmesFile","record","titles","aligned"],"mappings":"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K,KAEtC,MAGF,CACC,uBACA,MACA,WACA,OAED,CACC,kBACA,MACA,YAED,CACC,yBACA,MACA,iBAED,CACC,2BACA,MACA,WACA,IACA,KAED,CACC,sBACA,IACA,gBACA,OAED,CACC,uBACA,MACA,gBACA,OAED,CACC,uBACA,MACA,iBAED,CACC,0BACA,SACA,gBACA,OAED,CACC,wBACA,MACA,gBACA,OAED,CACC,qBACA,MACA,gBACA,OAED,CACC,sBACA,SACA,gBACA,OAED,CACC,sBACA,MACA,gBACA,OAED,CACC,uBACA,iBACA,gBACA,OAED,CACC,sBACA,QACA,CACC,WACA,IAAIvY,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,sBACNorC,UAAW,OACX25C,WAAaJ,GAASA,EAAK,KAE5B,MAGF,CACC,4BACA,SACA,OAED,CACC,6BACA,MACA,UAED,CACC,mBACA,MACA,mBAED,CACC,4BACA,WACA,oBAED,CACC,qBACA,MACA,iBAED,CACC,sBACA,SACA,WACA,UAED,CACC,oBACA,WACA,iBAED,CACC,kBACA,SACA,WACA,OAED,CACC,sBACA,MACA,WACA,UAED,CACC,oBACA,MACA,WACA,MACA,IACA,IACA,OAED,CACC,kBACA,MACA,YAED,CACC,iBACA,SACA,YAED,CACC,uBACA,MACA,YAED,CACC,iBACA,SACA,OAED,CACC,eACA,MACA,CACC,WACA,kBACA,IAAIvY,EAAKwI,MAAMiQ,eAAe,CAC7Bz5C,UAAW,UACX45C,UAAW,YACXO,UAAY5gF,IACX,IAAIirF,EACJ,MAAO,CAAC5gB,EAAO6gB,EAAOC,EAAUC,KAC/B,IACC,MAAMC,EAAQ5jB,EAAKsX,UAAUmM,EAAOC,GAEpC,OADKF,IAAQA,EAASxjB,EAAKsX,UAAUmM,EAAOE,IACX,EAA1BprF,EAASqrF,EAAOJ,EACxB,CAAE,MAAOjmF,GACR,OAAOA,EAAEgjE,YAAcR,EAAKS,YAC7B,MAIH,IACA,OAGF,CACC,uBACA,SACA,iBAED,CACC,2BACA,MACA,YAED,CACC,gCACA,MACA,WACA,OAED,CACC,uBACA,MACA,WACA,SACA,MACA,KAED,CACC,mBACA,MACA,iBAED,CACC,oBACA,EACA,KAED,CACC,yBACA,MACA,YAED,CACC,sBACA,IACA,mBACA,OAED,CAAC,0BAAsB,GACvB,CACC,yBACA,EACA,YAED,CACC,yBACA,MACA,YAED,CAAC,wBAAyB,OAC1B,CACC,uBACA,MACA,CACC,MACA,KACA,MAGF,CACC,wBACA,MACA,CAAC,SAAU,QAEZ,CAAC,qBAAsB,UACvB,CAAC,4BAA6B,OAC9B,CACC,gBACA,MACA,CACC,WACA,MACA,QAGF,CACC,iBACA,IACA,OAED,CACC,oBACA,gBACA,CAAC,WAAY,kBAEd,CACC,eACA,MACA,SACA,KAED,CACC,kBACA,MACA,SACA,IACA,MACA,UAED,CACC,kBACA,IACA,IACA,OAED,CACC,gBACA,MACA,iBAED,CACC,2BACA,EACA,mBACA,IACA,MACA,KAED,CACC,6BACA,EACA,mBACA,OAED,CACC,4BACA,EACA,mBACA,SACA,OAED,CACC,mCAEA,mBACA,OAED,CACC,kCACA,EACA,oBAED,CACC,mCACA,EACA,oBAED,CACC,4BAEA,mBACA,OAED,CACC,2BACA,EACA,oBAED,CACC,8BACA,EACA,mBACA,IACA,gBACA,KAED,CACC,8BACA,EACA,iBACA,OAED,CACC,2BACA,EACA,mBACA,SACA,MACA,KAED,CACC,+BACA,EACA,mBACA,OAED,CACC,wBACA,QACA,CACC,WACA,IAAIR,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,wBACNorC,UAAW,OACX25C,WAAaJ,GAASA,EAAK,KAE5B,MAGF,CACC,2BACA,EACA,CACC,mBACA,MACA,IACA,MAGF,CACC,qBACA,MACA,WACA,MACA,UAED,CAAC,wBAAoB,GACrB,CAAC,mBAAoB,UACrB,CACC,cACA,SACA,iBAED,CACC,iBACA,MACA,MACA,IACA,IACA,OAED,CACC,eACA,MACA,iBAED,CACC,oBACA,MACA,iBAED,CACC,wBACA,MACA,iBAED,CACC,sBACA,MACA,gBACA,MACA,OAED,CACC,kBACA,MACA,SACA,UAED,CACC,kBACA,MACA,SACA,UAED,CACC,kBACA,MACA,SACA,SACA,OAED,CACC,mBACA,MACA,SACA,SACA,OAED,CACC,gCACA,MACA,WACA,SACA,SACA,SACA,KACA,KACA,IACA,IACA,KAED,CACC,wBACA,MACA,YAED,CACC,mBACA,MACA,CACC,WACA,MACA,IAAIvY,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,6BACNorC,UAAW,UACX25C,WAAYA,CAACJ,EAAMC,IAAaD,EAAK,KAEtC,MAGF,CACC,oBACA,MACA,CAAC,WAAY,WAEd,CACC,sBACA,MACA,mBACA,SACA,OAED,CACC,kBACA,SACA,mBACA,OAED,CACC,wBACA,SACA,mBACA,UAED,CACC,oBACA,QACA,oBAED,CACC,qBACA,IACA,kBAED,CACC,sBACA,MACA,kBAED,CACC,uBACA,MACA,kBAED,CACC,oBACA,iBACA,kBAED,CACC,0BACA,EACA,kBAED,CACC,yBACA,MACA,kBAED,CACC,oBACA,MACA,kBAED,CACC,yBACA,MACA,kBAED,CACC,6BACA,MACA,kBAED,CACC,wBACA,IACA,iBACA,iBAED,CACC,wBACA,MACA,kBAED,CACC,qBACA,MACA,kBAED,CACC,mBACA,IACA,UAED,CACC,uBACA,MACA,eACA,OAED,CACC,yBACA,MACA,iBAGFsL,MAAO,CACN,CACC,qBACA,MACA,CACC,gBACA,MACA,QAGF,CACC,oBACA,MACA,CAAC,aAEF,CACC,uBACA,MACA,CAAC,gBAAiB,QAEnB,CACC,sBACA,MACA,WACA,SACA,IACA,MACA,MACA,OAED,CACC,4BACA,MACA,CAAC,aAEF,CACC,mBACA,IACA,OAED,CACC,gBACA,MACA,KAED,CACC,4BACA,MACA,CACC,WACA,SACA,QAGF,CACC,oBACA,IACA,IACA,OAED,CACC,4BACA,EACA,IACA,OAED,CACC,4BACA,MACA,IACA,OAED,CACC,oBACA,IACA,WACA,SACA,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,CAAC,0BAA2B,SAC1B,CACF,0BACA,MACA,CACC,MACA,QACA,OACA,OAEC,CACF,+BACA,MACA,CACC,IAAI5Y,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,SACNorC,UAAW,SACX45C,UAAW,cAEZ,QACA,IAAI5Y,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,UACNorC,UAAW,SACX45C,UAAW,cAEZ,UAEC,CACF,uBACA,MACA,CACC,0BACA,MACA,OAEC,CACF,wBACA,MACA,CAAC,4BACC,CACF,uBACA,MACA,CACC,0BACA,MACA,OAEC,CACF,sBACA,MACA,CACC,0BACA,KACA,OACA,OACA,SAEC,CACF,sBACA,MACA,CACC,0BACA,KACA,SAEC,CACF,yBACA,MACA,CACC,KACA,MACA,MAEC,CACF,8BACA,MACA,CACC,KACA,IAAI5Y,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,SACNorC,UAAW,SACX45C,UAAW,cAEZ,UAEC,CACF,4BACA,MACA,CACC,KACA,MACA,IACA,QAEC,CACF,iCACA,MACA,CACC,KACA,IAAI5Y,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,SACNorC,UAAW,SACX45C,UAAW,cAEZ,QACA,QAEC,CACF,wBACA,MACA,CAAC,mBAAoB,WACnB,CACF,2BACA,MACA,CACC,mBACA,OACA,OAEC,CACF,gCACA,MACA,CAAC,qBACC,CACF,gCACA,MACA,CACC,mBACA,IAAI5Y,EAAKwI,MAAMiQ,eAAe,CAC7B7kF,KAAM,UACNorC,UAAW,SACX45C,UAAW,cAEZ,UAEC,CACF,wBACA,MACA,CAAC,MAAO,UACN,CACF,wBACA,MACA,CACC,WACA,SACA,OAEC,CACF,sBACA,MACA,CACC,mBACA,SACA,SACA,OAEC,CACF,wBACA,MACA,CAAC,mBAAoB,QACnB,CACF,0BACA,MACA,CAAC,mBAAoB,QACnB,CACF,yBACA,MACA,CAAC,qBACC,CACF,6BACA,MACA,CAAC,qBACC,CACF,+BACA,MACA,CACC,mBACA,MACA,UAEC,CACF,0BACA,MACA,CACC,mBACA,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164]}