{"version":3,"file":"spectrum-generator.js","sources":["../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/gaussian2D/Gaussian2D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/getShape2D.js","../lib-esm/util/addBaseline.js","../node_modules/d3-random/src/defaultSource.js","../node_modules/d3-random/src/uniform.js","../node_modules/d3-random/src/normal.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../lib-esm/util/addNoise.js","../lib-esm/SpectrumGenerator.js","../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../lib-esm/util/getMinMax.js","../lib-esm/Spectrum2DGenerator.js"],"sourcesContent":["export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return Math.pow(fwhm, 2) / (4 * Math.pow(x, 2) + Math.pow(fwhm, 2));\n};\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const getLorentzianFactor = (area = 0.9999) => {\n    return 2 * Math.tan(Math.PI * (area - 0.5));\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { GAUSSIAN_EXP_FACTOR } from '../../../util/constants';\nimport { getGaussianFactor, gaussianFwhmToWidth, gaussianWidthToFWHM, } from '../../1d/gaussian/Gaussian';\nexport class Gaussian2D {\n    constructor(options = {}) {\n        let { fwhm = 50, sd } = options;\n        fwhm = ensureFWHM2D(fwhm, sd);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n    fct(x, y) {\n        return gaussian2DFct(x, y, this.fwhmX, this.fwhmY);\n    }\n    getData(options = {}) {\n        return getGaussian2DData({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        }, options);\n    }\n    getFactor(volume = 1) {\n        return getGaussianFactor(volume);\n    }\n    getVolume(height = calculateGaussian2DHeight({\n        fwhm: { x: this.fwhmX, y: this.fwhmY },\n        volume: 1,\n    })) {\n        return getGaussian2DVolume({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n            height,\n        });\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fwhmToWidth(fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    calculateHeight(volume = 1) {\n        return calculateGaussian2DHeight({\n            volume,\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        });\n    }\n    set fwhm(fwhm) {\n        fwhm = ensureXYNumber(fwhm);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n}\nexport const gaussian2DFct = (x, y, xFWHM, yFWHM) => {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * (Math.pow(x / xFWHM, 2) + Math.pow(y / yFWHM, 2)));\n};\nexport const getGaussian2DData = (shape, options = {}) => {\n    let { fwhm = 50, sd } = shape;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    let { factor = getGaussianFactor(), length = { x: 0, y: 0 }, height = calculateGaussian2DHeight({ fwhm, volume: 1 }), } = options;\n    factor = ensureXYNumber(factor);\n    length = ensureXYNumber(length);\n    for (const axis of ['x', 'y']) {\n        if (!length[axis]) {\n            length[axis] = Math.min(Math.ceil(fwhm[axis] * factor[axis]), Math.pow(2, 25) - 1);\n            if (length[axis] % 2 === 0)\n                length[axis]++;\n        }\n    }\n    const xCenter = (length.x - 1) / 2;\n    const yCenter = (length.y - 1) / 2;\n    const data = new Array(length.x);\n    for (let i = 0; i < length.x; i++) {\n        data[i] = new Float64Array(length.y);\n    }\n    for (let i = 0; i < length.x; i++) {\n        for (let j = 0; j < length.y; j++) {\n            data[i][j] =\n                gaussian2DFct(i - xCenter, j - yCenter, fwhm.x, fwhm.y) * height;\n        }\n    }\n    return data;\n};\nexport const calculateGaussian2DHeight = (options = {}) => {\n    let { volume = 1, fwhm = 50, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (volume * Math.LN2 * 4) / (Math.PI * fwhm.y * fwhm.x);\n};\nexport const getGaussian2DVolume = (options = {}) => {\n    let { fwhm = 50, height = 1, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (height * Math.PI * fwhm.y * fwhm.x) / Math.LN2 / 4;\n};\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\nfunction ensureFWHM2D(fwhm, sd) {\n    if (sd !== undefined) {\n        let sdObject = ensureXYNumber(sd);\n        return {\n            x: gaussianWidthToFWHM(2 * sdObject.x),\n            y: gaussianWidthToFWHM(2 * sdObject.y),\n        };\n    }\n    else if (fwhm !== undefined) {\n        return ensureXYNumber(fwhm);\n    }\n    else {\n        throw new Error('ensureFWHM2D must have either fwhm or sd defined');\n    }\n}\n//# sourceMappingURL=Gaussian2D.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","import { Gaussian2D } from './gaussian2D/Gaussian2D';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape2D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian2D(shape);\n        default: {\n            const unHandled = kind;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape2D.js.map","export default function addBaseline(data, baselineFct) {\n    if (!baselineFct)\n        return data;\n    let xs = data.x;\n    let ys = data.y;\n    for (let i = 0; i < xs.length; i++) {\n        ys[i] += baselineFct(xs[i]);\n    }\n    return data;\n}\n//# sourceMappingURL=addBaseline.js.map","export default Math.random;\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource);\n","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError('seed must be an integer');\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n","import { randomUniform, randomNormal } from 'd3-random';\nimport XSAdd from 'ml-xsadd';\nexport default function addNoise(data, percent = 0, options = {}) {\n    const { seed } = options;\n    const distribution = options.distribution || 'uniform';\n    let generateRandomNumber;\n    switch (distribution) {\n        case 'uniform': {\n            generateRandomNumber = getRandom(randomUniform, seed, -0.5, 0.5);\n            break;\n        }\n        case 'normal': {\n            generateRandomNumber = getRandom(randomNormal, seed);\n            break;\n        }\n        default: {\n            const unHandled = distribution;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n    if (!percent)\n        return data;\n    let ys = data.y;\n    let factor = (percent * findMax(ys)) / 100;\n    for (let i = 0; i < ys.length; i++) {\n        ys[i] += generateRandomNumber() * factor;\n    }\n    return data;\n}\nfunction getRandom(func, seed, ...args) {\n    return typeof seed === 'number'\n        ? func.source(new XSAdd(seed).random)(...args)\n        : func(...args);\n}\nfunction findMax(array) {\n    let max = Number.MIN_VALUE;\n    for (let item of array) {\n        if (item > max)\n            max = item;\n    }\n    return max;\n}\n//# sourceMappingURL=addNoise.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport addBaseline from './util/addBaseline';\nimport addNoise from './util/addNoise';\nexport class SpectrumGenerator {\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct = () => 5, shape = { kind: 'gaussian' }, } = options;\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = (this.to - this.from) / (this.nbPoints - 1);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        this.data = {\n            x: new Float64Array(this.nbPoints),\n            y: new Float64Array(this.nbPoints),\n        };\n        let shapeGenerator = getShape1D(shape);\n        this.shape = shapeGenerator;\n        assertNumber(this.from, 'from');\n        assertNumber(this.to, 'to');\n        assertInteger(this.nbPoints, 'nbPoints');\n        if (this.to <= this.from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    /**\n     * Add a series of peaks to the spectrum.\n     * @param peaks - Peaks to add.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i]], options);\n            }\n        }\n    }\n    /**\n     * Add a single peak to the spectrum.\n     * @param peak\n     * @param options\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 2) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            (peak.x === undefined || peak.y === undefined)) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        let xPosition;\n        let intensity;\n        let peakFWHM;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            intensity = peak.y;\n            peakFWHM = peak.fwhm || peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        let { fwhm = peakFWHM === undefined ? this.peakWidthFct(xPosition) : peakFWHM, widthLeft, widthRight, shape: shapeOptions, } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        if (shapeOptions) {\n            this.shape = getShape1D(shapeOptions);\n        }\n        if (!widthLeft)\n            widthLeft = fwhm;\n        if (!widthRight)\n            widthRight = fwhm;\n        if (!widthLeft || !widthRight) {\n            throw new Error('Width left or right is undefined or zero');\n        }\n        let factor = options.factor === undefined ? this.shape.getFactor() : options.factor;\n        const firstValue = xPosition - (widthLeft / 2) * factor;\n        const lastValue = xPosition + (widthRight / 2) * factor;\n        const firstPoint = Math.max(0, Math.floor((firstValue - this.from) / this.interval));\n        const lastPoint = Math.min(this.nbPoints - 1, Math.ceil((lastValue - this.from) / this.interval));\n        const middlePoint = Math.round((xPosition - this.from) / this.interval);\n        // PEAK SHAPE MAY BE ASYMMETRC (widthLeft and widthRight) !\n        // we calculate the left part of the shape\n        this.shape.fwhm = widthLeft;\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] +=\n                intensity * this.shape.fct(this.data.x[index] - xPosition);\n        }\n        // we calculate the right part of the gaussian\n        this.shape.fwhm = widthRight;\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] +=\n                intensity * this.shape.fct(this.data.x[index] - xPosition);\n        }\n    }\n    /**\n     * Add a baseline to the spectrum.\n     * @param baselineFct - Mathematical function producing the baseline you want.\n     */\n    addBaseline(baselineFct) {\n        addBaseline(this.data, baselineFct);\n        return this;\n    }\n    /**\n     * Add noise to the spectrum.\n     * @param percent - Noise's amplitude in percents of the spectrum max value. Default: 0.\n     */\n    addNoise(percent, options) {\n        addNoise(this.data, percent, options);\n        return this;\n    }\n    /**\n     * Get the generated spectrum.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true, threshold = 0 } = options;\n        if (threshold) {\n            let minPeakHeight = this.maxPeakHeight * threshold;\n            let x = [];\n            let y = [];\n            for (let i = 0; i < this.data.x.length; i++) {\n                if (this.data.y[i] >= minPeakHeight) {\n                    x.push(this.data.x[i]);\n                    y.push(this.data.y[i]);\n                }\n            }\n            return { x, y };\n        }\n        if (copy) {\n            return {\n                x: this.data.x.slice(),\n                y: this.data.y.slice(),\n            };\n        }\n        else {\n            return this.data;\n        }\n    }\n    /**\n     * Resets the generator with an empty spectrum.\n     */\n    reset() {\n        const spectrum = this.data;\n        for (let i = 0; i < this.nbPoints; i++) {\n            spectrum.x[i] = this.from + i * this.interval;\n        }\n        return this;\n    }\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n/**\n * Generates a spectrum and returns it.\n * @param peaks - List of peaks to put in the spectrum.\n * @param options\n */\nexport function generateSpectrum(peaks, options = {}) {\n    const { generator: generatorOptions, noise, baseline, threshold, peaks: addPeaksOptions, } = options;\n    const generator = new SpectrumGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    if (baseline)\n        generator.addBaseline(baseline);\n    if (noise) {\n        const { percent, options: addNoiseOptions } = noise;\n        generator.addNoise(percent, addNoiseOptions);\n    }\n    return generator.getSpectrum({\n        threshold,\n    });\n}\n//# sourceMappingURL=SpectrumGenerator.js.map","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default max;\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default min;\n","import maxArray from 'ml-array-max';\nimport minArray from 'ml-array-min';\nexport function getMinMax(data) {\n    let min = Number.MAX_SAFE_INTEGER;\n    let max = Number.MIN_SAFE_INTEGER;\n    for (let row of data) {\n        let rowMin = minArray(row);\n        let rowMax = maxArray(row);\n        if (min > rowMin)\n            min = rowMin;\n        if (max < rowMax)\n            max = rowMax;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=getMinMax.js.map","import { getShape2D } from 'ml-peak-shape-generator';\nimport { getMinMax } from './util/getMinMax';\nconst axis2D = ['x', 'y'];\nconst peakCoordinates = ['x', 'y', 'z'];\nexport class Spectrum2DGenerator {\n    constructor(options = {}) {\n        let { from = 0, to = 100, nbPoints = 1001, peakWidthFct = () => 5, shape = {\n            kind: 'gaussian',\n        }, } = options;\n        from = ensureXYNumber(from);\n        to = ensureXYNumber(to);\n        nbPoints = ensureXYNumber(nbPoints);\n        for (const axis of axis2D) {\n            assertNumber(from[axis], `from-${axis}`);\n            assertNumber(to[axis], `to-${axis}`);\n            assertInteger(nbPoints[axis], `nbPoints-${axis}`);\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = calculeIntervals(from, to, nbPoints);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        let shapeGenerator = getShape2D(shape);\n        this.shape = shapeGenerator;\n        this.data = {\n            x: new Float64Array(nbPoints.x),\n            y: new Float64Array(nbPoints.y),\n            z: createMatrix(this.nbPoints),\n        };\n        for (const axis of axis2D) {\n            if (this.to[axis] <= this.from[axis]) {\n                throw new RangeError('to option must be larger than from');\n            }\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            let nbPeaks = peaks.x.length;\n            for (const c of peakCoordinates) {\n                if (peaks[c] && Array.isArray(peaks[c])) {\n                    if (nbPeaks !== peaks[c].length) {\n                        throw new Error('x, y, z should have the same length');\n                    }\n                }\n            }\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i], peaks.z[i]], options);\n            }\n        }\n        return this;\n    }\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 3) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            peakCoordinates.some((e) => peak[e] === undefined)) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        let xPosition;\n        let yPosition;\n        let intensity;\n        let peakFWHM;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, yPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            yPosition = peak.y;\n            intensity = peak.z;\n            peakFWHM = peak.fwhm || peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        const position = { x: xPosition, y: yPosition };\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        let { fwhm = peakFWHM === undefined\n            ? this.peakWidthFct(xPosition, yPosition)\n            : peakFWHM, shape: shapeOptions, } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        if (shapeOptions) {\n            this.shape = getShape2D(shapeOptions);\n        }\n        fwhm = ensureXYNumber(fwhm);\n        let factor = options.factor === undefined ? this.shape.getFactor() : options.factor;\n        factor = ensureXYNumber(factor);\n        const firstPoint = { x: 0, y: 0 };\n        const lastPoint = { x: 0, y: 0 };\n        for (const axis of axis2D) {\n            const first = position[axis] - (fwhm[axis] / 2) * factor[axis];\n            const last = position[axis] + (fwhm[axis] / 2) * factor[axis];\n            firstPoint[axis] = Math.max(0, Math.floor((first - this.from[axis]) / this.interval[axis]));\n            lastPoint[axis] = Math.min(this.nbPoints[axis], Math.ceil((last - this.from[axis]) / this.interval[axis]));\n        }\n        this.shape.fwhm = fwhm;\n        for (let xIndex = firstPoint.x; xIndex < lastPoint.x; xIndex++) {\n            for (let yIndex = firstPoint.y; yIndex < lastPoint.y; yIndex++) {\n                this.data.z[yIndex][xIndex] +=\n                    intensity *\n                        this.shape.fct(this.data.x[xIndex] - position.x, this.data.y[yIndex] - position.y);\n            }\n        }\n        return this;\n    }\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true } = options;\n        let minMaxZ = getMinMax(this.data.z);\n        return {\n            minX: this.from.x,\n            maxX: this.to.x,\n            maxY: this.to.y,\n            minY: this.from.y,\n            minZ: minMaxZ.min,\n            maxZ: minMaxZ.max,\n            z: copy ? this.data.z.slice() : this.data.z,\n        };\n    }\n    reset() {\n        const spectrum = this.data;\n        for (const axis of axis2D) {\n            for (let i = 0; i < this.nbPoints[axis]; i++) {\n                spectrum[axis][i] = this.from[axis] + i * this.interval[axis];\n            }\n        }\n        for (let row of spectrum.z) {\n            for (let j = 0; j < row.length; j++) {\n                row[j] = 0;\n            }\n        }\n        return this;\n    }\n}\nexport function generateSpectrum2D(peaks, options = {}) {\n    const { generator: generatorOptions, peaks: addPeaksOptions } = options;\n    const generator = new Spectrum2DGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    return generator.getSpectrum();\n}\nfunction ensureXYNumber(input) {\n    let result = typeof input !== 'object' ? { x: input, y: input } : input;\n    return result;\n}\nfunction calculeIntervals(from, to, nbPoints) {\n    return {\n        x: (to.x - from.x) / (nbPoints.x - 1),\n        y: (to.y - from.y) / (nbPoints.y - 1),\n    };\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\nfunction createMatrix(nbPoints) {\n    const zMatrix = new Array(nbPoints.y);\n    for (let i = 0; i < nbPoints.y; i++) {\n        zMatrix[i] = new Float64Array(nbPoints.x);\n    }\n    return zMatrix;\n}\n//# sourceMappingURL=Spectrum2DGenerator.js.map"],"names":["ensureXYNumber","Math","random","sourceRandomUniform","source","randomUniform","min","max","arguments","length","defaultSource","sourceRandomNormal","randomNormal","mu","sigma","x","r","y","sqrt","log","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiply_uint32","n","m","nlo","nhi","XSadd","constructor","seed","Date","now","state","Uint32Array","init","getFloat","bind","getUint32","nextState","Number","isInteger","TypeError","i","periodCertification","t","XSAdd","assertNumber","assertInteger","toString","Object","prototype","isAnyArray","object","call","endsWith","input","options","undefined","isArray","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Error","maxValue","minValue","minArray","maxArray"],"mappings":";;;;;;;;;;;;IAAO,MAAM,mBAAmB,GAAG,CAAC,CAAD,GAAK,IAAI,CAAC,GAAtC;IACA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAL,CAAU,IAAI,CAAC,EAAL,GAAU,IAAI,CAAC,GAAzB,CAAzB;IACA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAL,CAAU,CAAV,CAAnB;IACA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAL,CAAU,IAAI,IAAI,CAAC,GAAnB,CAAlB;IACA,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAL,CAAU,IAAI,IAAI,CAAC,GAAnB,IAA0B,CAAtD;;ICJP;IACA;IAEA;IAEc,SAAU,MAAV,CAAiB,CAAjB,EAA0B;IACtC,MAAI,CAAC,GAAG,KAAR;IACA,MAAI,CAAC,KAAK,CAAV,EAAa,OAAO,CAAP;IACb,MAAI,aAAa,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,GAAG,CAAjB,CAApB;IACA,MAAI,aAAa,GAAG,aAAa,GAAG,CAAhB,GAAoB,KAAK,IAAI,CAAC,EAAL,GAAU,CAAf,CAAxC;IACA,MAAI,SAAS,GAAG,IAAI,CAAC,IAAL,CAAU,aAAa,IAAI,CAAjB,GAAqB,aAAa,GAAG,CAA/C,CAAhB;IACA,MAAI,UAAU,GAAG,IAAI,CAAC,IAAL,CAAU,SAAS,GAAG,aAAtB,CAAjB;IACA,SAAO,UAAU,IAAI,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAY,CAAC,CAAjB,CAAjB;IACD;;ICuCK,MAAO,QAAP,CAAe;IAOnB,EAAA,WAAA,GAAqD;IAAA,QAAlC,OAAkC,uEAAF,EAAE;IACnD,UAAM;IAAE,MAAA,IAAI,GAAG,GAAT;IAAc,MAAA;IAAd,QAAqB,OAA3B;IAEA,SAAK,IAAL,GAAY,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAL,CAAtB,GAAiC,IAA/C;IACD;;IAEM,EAAA,WAAW,GAAiB;IAAA,QAAhB,IAAgB,uEAAT,KAAK,IAAI;IACjC,WAAO,mBAAmB,CAAC,IAAD,CAA1B;IACD;;IAEM,EAAA,WAAW,CAAC,KAAD,EAAc;IAC9B,WAAO,mBAAmB,CAAC,KAAD,CAA1B;IACD;;IAEM,EAAA,GAAG,CAAC,CAAD,EAAU;IAClB,WAAO,WAAW,CAAC,CAAD,EAAI,KAAK,IAAT,CAAlB;IACD;;IAEM,EAAA,OAAO,GAAsD;IAAA,QAArD,MAAqD,uEAA5C,uBAAuB,CAAC;IAAE,MAAA,IAAI,EAAE,KAAK;IAAb,KAAD,CAAqB;IAClE,WAAO,eAAe,CAAC;IAAE,MAAA,IAAI,EAAE,KAAK,IAAb;IAAmB,MAAA;IAAnB,KAAD,CAAtB;IACD;;IAEM,EAAA,SAAS,CAAC,IAAD,EAAc;IAC5B,WAAO,iBAAiB,CAAC,IAAD,CAAxB;IACD;;IAEM,EAAA,OAAO,GAA+B;IAAA,QAA9B,OAA8B,uEAAF,EAAE;IAC3C,WAAO,eAAe,CAAC,IAAD,EAAO,OAAP,CAAtB;IACD;;IAEM,EAAA,eAAe,GAAS;IAAA,QAAR,IAAQ,uEAAD,CAAC;IAC7B,WAAO,uBAAuB,CAAC;IAAE,MAAA,IAAI,EAAE,KAAK,IAAb;IAAmB,MAAA;IAAnB,KAAD,CAA9B;IACD;;IAvCkB;IA0Cf,SAAU,uBAAV,CACJ,OADI,EACmC;IAEvC,MAAI;IAAE,IAAA,IAAI,GAAG,GAAT;IAAc,IAAA,IAAI,GAAG,CAArB;IAAwB,IAAA;IAAxB,MAA+B,OAAnC;IAEA,MAAI,EAAJ,EAAQ,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAL,CAA1B;IAER,SAAQ,IAAI,IAAL,GAAa,gBAAb,GAAgC,IAAvC;IACD;IAEK,SAAU,WAAV,CAAsB,CAAtB,EAAiC,IAAjC,EAA6C;IACjD,SAAO,IAAI,CAAC,GAAL,CAAS,mBAAmB,GAAG,IAAI,CAAC,GAAL,CAAS,CAAC,GAAG,IAAb,EAAmB,CAAnB,CAA/B,CAAP;IACD;IAEK,SAAU,mBAAV,CAA8B,KAA9B,EAA2C;IAC/C,SAAO,KAAK,GAAG,SAAf;IACD;IAEK,SAAU,mBAAV,CAA8B,IAA9B,EAA0C;IAC9C,SAAO,IAAI,GAAG,SAAd;IACD;IAEK,SAAU,eAAV,CAA0B,OAA1B,EAAyD;IAC7D,MAAI;IAAE,IAAA,IAAI,GAAG,GAAT;IAAc,IAAA,EAAd;IAAkB,IAAA,MAAM,GAAG;IAA3B,MAAiC,OAArC;IAEA,MAAI,EAAJ,EAAQ,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAL,CAA1B;IAER,SAAQ,MAAM,GAAG,gBAAT,GAA4B,IAA7B,GAAqC,CAA5C;IACD;IAEK,SAAU,iBAAV,GAAyC;IAAA,MAAb,IAAa,uEAAN,MAAM;IAC7C,SAAO,IAAI,CAAC,IAAL,CAAU,CAAV,IAAe,MAAM,CAAC,IAAD,CAA5B;IACD;IAEK,SAAU,eAAV,GAE0B;IAAA,MAD9B,KAC8B,uEADA,EACA;IAAA,MAA9B,OAA8B,uEAAF,EAAE;IAE9B,MAAI;IAAE,IAAA,IAAI,GAAG,GAAT;IAAc,IAAA;IAAd,MAAqB,KAAzB;IACA,MAAI,EAAJ,EAAQ,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAL,CAA1B;IAER,MAAI;IACF,IAAA,MADE;IAEF,IAAA,MAAM,GAAG,iBAAiB,EAFxB;IAGF,IAAA,MAAM,GAAG,uBAAuB,CAAC;IAAE,MAAA;IAAF,KAAD;IAH9B,MAIA,OAJJ;;IAMA,MAAI,CAAC,MAAL,EAAa;IACX,IAAA,MAAM,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,IAAL,CAAU,IAAI,GAAG,MAAjB,CAAT,EAAmC,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,EAAZ,IAAkB,CAArD,CAAT;IACA,QAAI,MAAM,GAAG,CAAT,KAAe,CAAnB,EAAsB,MAAM;IAC7B;;IAED,QAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAV,IAAe,CAA9B;IACA,QAAM,IAAI,GAAG,IAAI,YAAJ,CAAiB,MAAjB,CAAb;;IACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,IAAI,MAArB,EAA6B,CAAC,EAA9B,EAAkC;IAChC,IAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,WAAW,CAAC,CAAC,GAAG,MAAL,EAAa,IAAb,CAAX,GAAgC,MAA1C;IACA,IAAA,IAAI,CAAC,MAAM,GAAG,CAAT,GAAa,CAAd,CAAJ,GAAuB,IAAI,CAAC,CAAD,CAA3B;IACD;;IAED,SAAO,IAAP;IACD;;ICjIK,MAAO,UAAP,CAAiB;IAOrB,EAAA,WAAA,GAAuD;IAAA,QAApC,OAAoC,uEAAF,EAAE;IACrD,UAAM;IAAE,MAAA,IAAI,GAAG;IAAT,QAAiB,OAAvB;IAEA,SAAK,IAAL,GAAY,IAAZ;IACD;;IAEM,EAAA,WAAW,GAAiB;IAAA,QAAhB,IAAgB,uEAAT,KAAK,IAAI;IACjC,WAAO,qBAAqB,CAAC,IAAD,CAA5B;IACD;;IAEM,EAAA,WAAW,CAAC,KAAD,EAAc;IAC9B,WAAO,qBAAqB,CAAC,KAAD,CAA5B;IACD;;IAEM,EAAA,GAAG,CAAC,CAAD,EAAU;IAClB,WAAO,aAAa,CAAC,CAAD,EAAI,KAAK,IAAT,CAApB;IACD;;IAEM,EAAA,OAAO,GAAW;IAAA,QAAV,MAAU,uEAAD,CAAC;IACvB,WAAO,iBAAiB,CAAC;IAAE,MAAA,IAAI,EAAE,KAAK,IAAb;IAAmB,MAAA;IAAnB,KAAD,CAAxB;IACD;;IAEM,EAAA,SAAS,CAAC,IAAD,EAAc;IAC5B,WAAO,mBAAmB,CAAC,IAAD,CAA1B;IACD;;IAEM,EAAA,OAAO,GAA+B;IAAA,QAA9B,OAA8B,uEAAF,EAAE;IAC3C,WAAO,iBAAiB,CAAC,IAAD,EAAO,OAAP,CAAxB;IACD;;IAEM,EAAA,eAAe,GAAS;IAAA,QAAR,IAAQ,uEAAD,CAAC;IAC7B,WAAO,yBAAyB,CAAC;IAAE,MAAA,IAAI,EAAE,KAAK,IAAb;IAAmB,MAAA;IAAnB,KAAD,CAAhC;IACD;;IAvCoB;IA0ChB,MAAM,yBAAyB,GAAG,QAA2B;IAAA,MAA1B;IAAE,IAAA,IAAI,GAAG,CAAT;IAAY,IAAA,IAAI,GAAG;IAAnB,GAA0B;IAClE,SAAQ,IAAI,IAAL,GAAa,IAAI,CAAC,EAAlB,GAAuB,IAA9B;IACD,CAFM;IAIA,MAAM,aAAa,GAAG,CAAC,CAAD,EAAY,IAAZ,KAA4B;IACvD,SAAO,IAAI,CAAC,GAAL,CAAS,IAAT,EAAe,CAAf,KAAqB,IAAI,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAJ,GAAqB,IAAI,CAAC,GAAL,CAAS,IAAT,EAAe,CAAf,CAA1C,CAAP;IACD,CAFM;IAIA,MAAM,qBAAqB,GAAI,KAAD,IAAkB;IACrD,SAAO,KAAK,GAAG,UAAf;IACD,CAFM;IAIA,MAAM,qBAAqB,GAAI,IAAD,IAAiB;IACpD,SAAO,IAAI,GAAG,UAAd;IACD,CAFM;IAIA,MAAM,iBAAiB,GAAI,OAAD,IAAsC;IACrE,QAAM;IAAE,IAAA,IAAI,GAAG,GAAT;IAAc,IAAA,MAAM,GAAG;IAAvB,MAA6B,OAAnC;IACA,SAAQ,MAAM,GAAG,IAAI,CAAC,EAAd,GAAmB,IAApB,GAA4B,CAAnC;IACD,CAHM;IAKA,MAAM,mBAAmB,GAAG,YAAkB;IAAA,MAAjB,IAAiB,uEAAV,MAAU;IACnD,SAAO,IAAI,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,EAAL,IAAW,IAAI,GAAG,GAAlB,CAAT,CAAX;IACD,CAFM;IAIA,MAAM,iBAAiB,GAAG,YAG7B;IAAA,MAFF,KAEE,uEAF8B,EAE9B;IAAA,MADF,OACE,uEAD0B,EAC1B;IACF,MAAI;IAAE,IAAA,IAAI,GAAG;IAAT,MAAiB,KAArB;IACA,MAAI;IACF,IAAA,MADE;IAEF,IAAA,MAAM,GAAG,mBAAmB,EAF1B;IAGF,IAAA,MAAM,GAAG,yBAAyB,CAAC;IAAE,MAAA,IAAF;IAAQ,MAAA,IAAI,EAAE;IAAd,KAAD;IAHhC,MAIA,OAJJ;;IAMA,MAAI,CAAC,MAAL,EAAa;IACX,IAAA,MAAM,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,IAAL,CAAU,IAAI,GAAG,MAAjB,CAAT,EAAmC,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,EAAZ,IAAkB,CAArD,CAAT;IACA,QAAI,MAAM,GAAG,CAAT,KAAe,CAAnB,EAAsB,MAAM;IAC7B;;IAED,QAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAV,IAAe,CAA9B;IACA,QAAM,IAAI,GAAG,IAAI,YAAJ,CAAiB,MAAjB,CAAb;;IACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,IAAI,MAArB,EAA6B,CAAC,EAA9B,EAAkC;IAChC,IAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,aAAa,CAAC,CAAC,GAAG,MAAL,EAAa,IAAb,CAAb,GAAkC,MAA5C;IACA,IAAA,IAAI,CAAC,MAAM,GAAG,CAAT,GAAa,CAAd,CAAJ,GAAuB,IAAI,CAAC,CAAD,CAA3B;IACD;;IAED,SAAO,IAAP;IACD,CAxBM;;ICpCD,MAAO,WAAP,CAAkB;IAQtB,EAAA,WAAA,GAAwD;IAAA,QAArC,OAAqC,uEAAF,EAAE;IACtD,UAAM;IAAE,MAAA,IAAI,GAAG,GAAT;IAAc,MAAA,EAAE,GAAG;IAAnB,QAA2B,OAAjC;IAEA,SAAK,EAAL,GAAU,EAAV;IACA,SAAK,IAAL,GAAY,IAAZ;IACD;;IAEM,EAAA,WAAW,GAA+B;IAAA,QAA9B,IAA8B,uEAAvB,KAAK,IAAkB;IAAA,QAAZ,EAAY,uEAAP,KAAK,EAAE;IAC/C,WAAO,sBAAsB,CAAC,IAAD,EAAO,EAAP,CAA7B;IACD;;IAEM,EAAA,WAAW,CAAC,KAAD,EAAoC;IAAA,QAApB,EAAoB,uEAAP,KAAK,EAAE;IACpD,WAAO,sBAAsB,CAAC,KAAD,EAAQ,EAAR,CAA7B;IACD;;IAEM,EAAA,GAAG,CAAC,CAAD,EAAU;IAClB,WAAO,cAAc,CAAC,CAAD,EAAI,KAAK,IAAT,EAAe,KAAK,EAApB,CAArB;IACD;;IAEM,EAAA,OAAO,GAAW;IAAA,QAAV,MAAU,uEAAD,CAAC;IACvB,WAAO,kBAAkB,CAAC;IAAE,MAAA,IAAI,EAAE,KAAK,IAAb;IAAmB,MAAA,MAAnB;IAA2B,MAAA,EAAE,EAAE,KAAK;IAApC,KAAD,CAAzB;IACD;;IAEM,EAAA,SAAS,CAAC,IAAD,EAAc;IAC5B,WAAO,oBAAoB,CAAC,IAAD,CAA3B;IACD;;IAEM,EAAA,OAAO,GAA+B;IAAA,QAA9B,OAA8B,uEAAF,EAAE;IAC3C,UAAM;IACJ,MAAA,MADI;IAEJ,MAAA,MAFI;IAGJ,MAAA,MAAM,GAAG,0BAA0B,CAAC;IAClC,QAAA,IAAI,EAAE,KAAK,IADuB;IAElC,QAAA,EAAE,EAAE,KAAK,EAFyB;IAGlC,QAAA,IAAI,EAAE;IAH4B,OAAD;IAH/B,QAQF,OARJ;IASA,WAAO,kBAAkB,CAAC,IAAD,EAAO;IAAE,MAAA,MAAF;IAAU,MAAA,MAAV;IAAkB,MAAA;IAAlB,KAAP,CAAzB;IACD;;IAEM,EAAA,eAAe,GAAS;IAAA,QAAR,IAAQ,uEAAD,CAAC;IAC7B,WAAO,0BAA0B,CAAC;IAAE,MAAA,IAAI,EAAE,KAAK,IAAb;IAAmB,MAAA,EAAE,EAAE,KAAK,EAA5B;IAAgC,MAAA;IAAhC,KAAD,CAAjC;IACD;;IAlDqB;IAqDjB,MAAM,0BAA0B,GAAG,YAEtC;IAAA,MADF,OACE,uEAD4C,EAC5C;IACF,MAAI;IAAE,IAAA,IAAI,GAAG,CAAT;IAAY,IAAA,EAAE,GAAG,GAAjB;IAAsB,IAAA,IAAI,GAAG;IAA7B,MAAmC,OAAvC;IACA,SAAQ,IAAI,IAAL,IAAc,IAAI,IAAI,EAAE,GAAG,gBAAL,GAAwB,CAAC,IAAI,EAAL,IAAW,IAAI,CAAC,EAA5C,CAAlB,CAAP;IACD,CALM;IAOA,MAAM,cAAc,GAAG,CAAC,CAAD,EAAY,IAAZ,EAA0B,EAA1B,KAAwC;IACpE,SAAO,CAAC,IAAI,EAAL,IAAW,aAAa,CAAC,CAAD,EAAI,IAAJ,CAAxB,GAAoC,EAAE,GAAG,WAAW,CAAC,CAAD,EAAI,IAAJ,CAA3D;IACD,CAFM;IAIA,MAAM,sBAAsB,GAAG,UAAC,KAAD,EAA4B;IAAA,MAAZ,EAAY,uEAAP,GAAO;IAChE,SAAO,KAAK,IAAI,EAAE,GAAG,mBAAL,GAA2B,CAA/B,CAAZ;IACD,CAFM;IAIA,MAAM,sBAAsB,GAAG,UAAC,IAAD,EAA2B;IAAA,MAAZ,EAAY,uEAAP,GAAO;IAC/D,SAAO,IAAI,IAAI,EAAE,GAAG,mBAAL,GAA2B,CAA/B,CAAX;IACD,CAFM;IAIA,MAAM,kBAAkB,GAAI,OAAD,IAAuC;IACvE,QAAM;IAAE,IAAA,IAAI,GAAG,GAAT;IAAc,IAAA,MAAM,GAAG,CAAvB;IAA0B,IAAA,EAAE,GAAG;IAA/B,MAAuC,OAA7C;IACA,SAAQ,IAAI,GAAG,MAAP,IAAiB,EAAE,GAAG,gBAAL,GAAwB,CAAC,IAAI,EAAL,IAAW,IAAI,CAAC,EAAzD,CAAD,GAAiE,CAAxE;IACD,CAHM;IAKA,MAAM,oBAAoB,GAAG,YAA4B;IAAA,MAA3B,IAA2B,uEAApB,MAAoB;IAAA,MAAZ,EAAY,uEAAP,GAAO;IAC9D,SAAO,EAAE,GAAG,CAAL,GAAS,mBAAmB,CAAC,IAAD,CAA5B,GAAqC,iBAAiB,CAAC,IAAD,CAA7D;IACD,CAFM;IAIA,MAAM,kBAAkB,GAAG,YAG9B;IAAA,MAFF,KAEE,uEAF+B,EAE/B;IAAA,MADF,OACE,uEAD0B,EAC1B;IACF,MAAI;IAAE,IAAA,IAAI,GAAG,GAAT;IAAc,IAAA,EAAE,GAAG;IAAnB,MAA2B,KAA/B;IACA,MAAI;IACF,IAAA,MADE;IAEF,IAAA,MAAM,GAAG,oBAAoB,CAAC,KAAD,EAAQ,EAAR,CAF3B;IAGF,IAAA,MAAM,GAAG,0BAA0B,CAAC;IAAE,MAAA,IAAF;IAAQ,MAAA,EAAR;IAAY,MAAA,IAAI,EAAE;IAAlB,KAAD;IAHjC,MAIA,OAJJ;;IAMA,MAAI,CAAC,MAAL,EAAa;IACX,IAAA,MAAM,GACJ,KACE,EAAE,GAAG,IAAI,CAAC,IAAL,CAAU,CAAC,mBAAD,GAAuB,IAAI,CAAC,EAAtC,CAAN,GAAmD,IAAnD,GACE,CAAC,IAAI,EAAL,IAAW,IAAX,GAAkB,IAAI,CAAC,EAAxB,GAA8B,CAFhC,CADF;IAID;;IAED,MAAI,CAAC,MAAL,EAAa;IACX,IAAA,MAAM,GAAG,IAAI,CAAC,GAAL,CAAS,IAAI,CAAC,IAAL,CAAU,IAAI,GAAG,MAAjB,CAAT,EAAmC,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,EAAZ,IAAkB,CAArD,CAAT;IACA,QAAI,MAAM,GAAG,CAAT,KAAe,CAAnB,EAAsB,MAAM;IAC7B;;IAED,QAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAV,IAAe,CAA9B;IACA,QAAM,IAAI,GAAG,IAAI,YAAJ,CAAiB,MAAjB,CAAb;;IACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,IAAI,MAArB,EAA6B,CAAC,EAA9B,EAAkC;IAChC,IAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,cAAc,CAAC,CAAC,GAAG,MAAL,EAAa,IAAb,EAAmB,EAAnB,CAAd,GAAuC,MAAjD;IACA,IAAA,IAAI,CAAC,MAAM,GAAG,CAAT,GAAa,CAAd,CAAJ,GAAuB,IAAI,CAAC,CAAD,CAA3B;IACD;;IAED,SAAO,IAAP;IACD,CA/BM;;IC1ED,MAAO,UAAP,CAAiB;IAIrB,EAAA,WAAA,GAAuD;IAAA,QAApC,OAAoC,uEAAF,EAAE;IACrD,QAAI;IAAE,MAAA,IAAI,GAAG,EAAT;IAAa,MAAA;IAAb,QAAoB,OAAxB;IAEA,IAAA,IAAI,GAAG,YAAY,CAAC,IAAD,EAAO,EAAP,CAAnB;IAEA,SAAK,KAAL,GAAa,IAAI,CAAC,CAAlB;IACA,SAAK,KAAL,GAAa,IAAI,CAAC,CAAlB;IACD;;IAEM,EAAA,GAAG,CAAC,CAAD,EAAY,CAAZ,EAAqB;IAC7B,WAAO,aAAa,CAAC,CAAD,EAAI,CAAJ,EAAO,KAAK,KAAZ,EAAmB,KAAK,KAAxB,CAApB;IACD;;IAEM,EAAA,OAAO,GAA+B;IAAA,QAA9B,OAA8B,uEAAF,EAAE;IAC3C,WAAO,iBAAiB,CACtB;IACE,MAAA,IAAI,EAAE;IAAE,QAAA,CAAC,EAAE,KAAK,KAAV;IAAiB,QAAA,CAAC,EAAE,KAAK;IAAzB;IADR,KADsB,EAItB,OAJsB,CAAxB;IAMD;;IAEM,EAAA,SAAS,GAAW;IAAA,QAAV,MAAU,uEAAD,CAAC;IACzB,WAAO,iBAAiB,CAAC,MAAD,CAAxB;IACD;;IAEM,EAAA,SAAS,GAIZ;IAAA,QAHF,MAGE,uEAHO,yBAAyB,CAAC;IACjC,MAAA,IAAI,EAAE;IAAE,QAAA,CAAC,EAAE,KAAK,KAAV;IAAiB,QAAA,CAAC,EAAE,KAAK;IAAzB,OAD2B;IAEjC,MAAA,MAAM,EAAE;IAFyB,KAAD,CAGhC;IAEF,WAAO,mBAAmB,CAAC;IACzB,MAAA,IAAI,EAAE;IAAE,QAAA,CAAC,EAAE,KAAK,KAAV;IAAiB,QAAA,CAAC,EAAE,KAAK;IAAzB,OADmB;IAEzB,MAAA;IAFyB,KAAD,CAA1B;IAID;;IAEM,EAAA,WAAW,CAAC,KAAD,EAAc;IAC9B,WAAO,mBAAmB,CAAC,KAAD,CAA1B;IACD;;IAEM,EAAA,WAAW,CAAC,IAAD,EAAa;IAC7B,WAAO,mBAAmB,CAAC,IAAD,CAA1B;IACD;;IAEM,EAAA,eAAe,GAAW;IAAA,QAAV,MAAU,uEAAD,CAAC;IAC/B,WAAO,yBAAyB,CAAC;IAC/B,MAAA,MAD+B;IAE/B,MAAA,IAAI,EAAE;IAAE,QAAA,CAAC,EAAE,KAAK,KAAV;IAAiB,QAAA,CAAC,EAAE,KAAK;IAAzB;IAFyB,KAAD,CAAhC;IAID;;IAEc,MAAJ,IAAI,CAAC,IAAD,EAAwB;IACrC,IAAA,IAAI,GAAGA,gBAAc,CAAC,IAAD,CAArB;IACA,SAAK,KAAL,GAAa,IAAI,CAAC,CAAlB;IACA,SAAK,KAAL,GAAa,IAAI,CAAC,CAAlB;IACD;;IA7DoB;IAgEhB,MAAM,aAAa,GAAG,CAC3B,CAD2B,EAE3B,CAF2B,EAG3B,KAH2B,EAI3B,KAJ2B,KAKzB;IACF,SAAO,IAAI,CAAC,GAAL,CACL,mBAAmB,IAAI,IAAI,CAAC,GAAL,CAAS,CAAC,GAAG,KAAb,EAAoB,CAApB,IAAyB,IAAI,CAAC,GAAL,CAAS,CAAC,GAAG,KAAb,EAAoB,CAApB,CAA7B,CADd,CAAP;IAGD,CATM;IAWA,MAAM,iBAAiB,GAAG,UAC/B,KAD+B,EAG7B;IAAA,MADF,OACE,uEAD0B,EAC1B;IACF,MAAI;IAAE,IAAA,IAAI,GAAG,EAAT;IAAa,IAAA;IAAb,MAAoB,KAAxB;IAEA,EAAA,IAAI,GAAG,YAAY,CAAC,IAAD,EAAO,EAAP,CAAnB;IAEA,MAAI;IACF,IAAA,MAAM,GAAG,iBAAiB,EADxB;IAEF,IAAA,MAAM,GAAG;IAAE,MAAA,CAAC,EAAE,CAAL;IAAQ,MAAA,CAAC,EAAE;IAAX,KAFP;IAGF,IAAA,MAAM,GAAG,yBAAyB,CAAC;IAAE,MAAA,IAAF;IAAQ,MAAA,MAAM,EAAE;IAAhB,KAAD;IAHhC,MAIA,OAJJ;IAMA,EAAA,MAAM,GAAGA,gBAAc,CAAC,MAAD,CAAvB;IAEA,EAAA,MAAM,GAAGA,gBAAc,CAAC,MAAD,CAAvB;;IAEA,OAAK,MAAM,IAAX,IAAmB,CAAC,GAAD,EAAM,GAAN,CAAnB,EAAwC;IACtC,QAAI,CAAC,MAAM,CAAC,IAAD,CAAX,EAAmB;IACjB,MAAA,MAAM,CAAC,IAAD,CAAN,GAAe,IAAI,CAAC,GAAL,CACb,IAAI,CAAC,IAAL,CAAU,IAAI,CAAC,IAAD,CAAJ,GAAa,MAAM,CAAC,IAAD,CAA7B,CADa,EAEb,IAAI,CAAC,GAAL,CAAS,CAAT,EAAY,EAAZ,IAAkB,CAFL,CAAf;IAIA,UAAI,MAAM,CAAC,IAAD,CAAN,GAAe,CAAf,KAAqB,CAAzB,EAA4B,MAAM,CAAC,IAAD,CAAN;IAC7B;IACF;;IAED,QAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAP,GAAW,CAAZ,IAAiB,CAAjC;IACA,QAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAP,GAAW,CAAZ,IAAiB,CAAjC;IACA,QAAM,IAAI,GAAG,IAAI,KAAJ,CAAU,MAAM,CAAC,CAAjB,CAAb;;IACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,MAAM,CAAC,CAA3B,EAA8B,CAAC,EAA/B,EAAmC;IACjC,IAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,IAAI,YAAJ,CAAiB,MAAM,CAAC,CAAxB,CAAV;IACD;;IACD,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,MAAM,CAAC,CAA3B,EAA8B,CAAC,EAA/B,EAAmC;IACjC,SAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,MAAM,CAAC,CAA3B,EAA8B,CAAC,EAA/B,EAAmC;IACjC,MAAA,IAAI,CAAC,CAAD,CAAJ,CAAQ,CAAR,IACE,aAAa,CAAC,CAAC,GAAG,OAAL,EAAc,CAAC,GAAG,OAAlB,EAA2B,IAAI,CAAC,CAAhC,EAAmC,IAAI,CAAC,CAAxC,CAAb,GAA0D,MAD5D;IAED;IACF;;IACD,SAAO,IAAP;IACD,CAzCM;IA2CA,MAAM,yBAAyB,GAAG,YAErC;IAAA,MADF,OACE,uEAD0C,EAC1C;IACF,MAAI;IAAE,IAAA,MAAM,GAAG,CAAX;IAAc,IAAA,IAAI,GAAG,EAArB;IAAyB,IAAA;IAAzB,MAAgC,OAApC;IACA,EAAA,IAAI,GAAG,YAAY,CAAC,IAAD,EAAO,EAAP,CAAnB;IACA,SAAQ,MAAM,GAAG,IAAI,CAAC,GAAd,GAAoB,CAArB,IAA2B,IAAI,CAAC,EAAL,GAAU,IAAI,CAAC,CAAf,GAAmB,IAAI,CAAC,CAAnD,CAAP;IACD,CANM;IAQA,MAAM,mBAAmB,GAAG,YAE/B;IAAA,MADF,OACE,uEADoC,EACpC;IACF,MAAI;IAAE,IAAA,IAAI,GAAG,EAAT;IAAa,IAAA,MAAM,GAAG,CAAtB;IAAyB,IAAA;IAAzB,MAAgC,OAApC;IAEA,EAAA,IAAI,GAAG,YAAY,CAAC,IAAD,EAAO,EAAP,CAAnB;IAEA,SAAQ,MAAM,GAAG,IAAI,CAAC,EAAd,GAAmB,IAAI,CAAC,CAAxB,GAA4B,IAAI,CAAC,CAAlC,GAAuC,IAAI,CAAC,GAA5C,GAAkD,CAAzD;IACD,CARM;;IAUP,SAASA,gBAAT,CAAwB,KAAxB,EAAgD;IAC9C,SAAO,OAAO,KAAP,KAAiB,QAAjB,GAA4B;IAAE,IAAA,CAAC,EAAE,KAAL;IAAY,IAAA,CAAC,EAAE;IAAf,GAA5B,GAAqD,EAAE,GAAG;IAAL,GAA5D;IACD;;IAED,SAAS,YAAT,CAAsB,IAAtB,EAAgD,EAAhD,EAAsE;IACpE,MAAI,EAAE,KAAK,SAAX,EAAsB;IACpB,QAAI,QAAQ,GAAGA,gBAAc,CAAC,EAAD,CAA7B;IACA,WAAO;IACL,MAAA,CAAC,EAAE,mBAAmB,CAAC,IAAI,QAAQ,CAAC,CAAd,CADjB;IAEL,MAAA,CAAC,EAAE,mBAAmB,CAAC,IAAI,QAAQ,CAAC,CAAd;IAFjB,KAAP;IAID,GAND,MAMO,IAAI,IAAI,KAAK,SAAb,EAAwB;IAC7B,WAAOA,gBAAc,CAAC,IAAD,CAArB;IACD,GAFM,MAEA;IACL,UAAM,IAAI,KAAJ,CAAU,kDAAV,CAAN;IACD;IACF;;IClND;;IAEG;;IACG,SAAU,UAAV,CAAqB,KAArB,EAAmC;IACvC,QAAM;IAAE,IAAA;IAAF,MAAW,KAAjB;;IAEA,UAAQ,IAAR;IACE,SAAK,UAAL;IACE,aAAO,IAAI,QAAJ,CAAa,KAAb,CAAP;;IACF,SAAK,YAAL;IACE,aAAO,IAAI,UAAJ,CAAe,KAAf,CAAP;;IACF,SAAK,aAAL;IACE,aAAO,IAAI,WAAJ,CAAgB,KAAhB,CAAP;;IACF;IAAS;IACP,cAAM,KAAK,CAAC,wBAAwB,IAAc,EAAvC,CAAX;IACD;IATH;IAWD;;ICnBD;;IAEG;;IACG,SAAU,UAAV,CAAqB,KAArB,EAAmC;IACvC,QAAM;IAAE,IAAA;IAAF,MAAW,KAAjB;;IACA,UAAQ,IAAR;IACE,SAAK,UAAL;IACE,aAAO,IAAI,UAAJ,CAAe,KAAf,CAAP;;IACF;IAAS;IACP,cAAM,SAAS,GAAU,IAAzB,CADO;;IAGP,cAAM,KAAK,CAAC,wBAAwB,SAAS,EAAlC,CAAX;IACD;IAPH;IASD;;ICba,SAAU,WAAV,CAAsB,IAAtB,EAAoC,WAApC,EAA2D;IACvE,MAAI,CAAC,WAAL,EAAkB,OAAO,IAAP;IAClB,MAAI,EAAE,GAAG,IAAI,CAAC,CAAd;IACA,MAAI,EAAE,GAAG,IAAI,CAAC,CAAd;;IACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,EAAE,CAAC,MAAvB,EAA+B,CAAC,EAAhC,EAAoC;IAClC,IAAA,EAAE,CAAC,CAAD,CAAF,IAAS,WAAW,CAAC,EAAE,CAAC,CAAD,CAAH,CAApB;IACD;;IACD,SAAO,IAAP;IACD;;ACZD,wBAAeC,IAAI,CAACC,MAApB;;ACEA,wBAAe,CAAC,SAASC,mBAAT,CAA6BC,MAA7B,EAAqC;IACnD,WAASC,aAAT,CAAuBC,GAAvB,EAA4BC,GAA5B,EAAiC;IAC/BD,IAAAA,GAAG,GAAGA,GAAG,IAAI,IAAP,GAAc,CAAd,GAAkB,CAACA,GAAzB;IACAC,IAAAA,GAAG,GAAGA,GAAG,IAAI,IAAP,GAAc,CAAd,GAAkB,CAACA,GAAzB;IACA,QAAIC,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4BF,GAAG,GAAGD,GAAN,EAAWA,GAAG,GAAG,CAAjB,CAA5B,KACKC,GAAG,IAAID,GAAP;IACL,WAAO,YAAW;IAChB,aAAOF,MAAM,KAAKG,GAAX,GAAiBD,GAAxB;IACD,KAFD;IAGD;;IAEDD,EAAAA,aAAa,CAACD,MAAd,GAAuBD,mBAAvB;IAEA,SAAOE,aAAP;IACD,CAdc,EAcZK,aAdY,CAAf;;ACAA,uBAAe,CAAC,SAASC,kBAAT,CAA4BP,MAA5B,EAAoC;IAClD,WAASQ,YAAT,CAAsBC,EAAtB,EAA0BC,KAA1B,EAAiC;IAC/B,QAAIC,CAAJ,EAAOC,CAAP;IACAH,IAAAA,EAAE,GAAGA,EAAE,IAAI,IAAN,GAAa,CAAb,GAAiB,CAACA,EAAvB;IACAC,IAAAA,KAAK,GAAGA,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoB,CAACA,KAA7B;IACA,WAAO,YAAW;IAChB,UAAIG,CAAJ,CADgB;;IAIhB,UAAIF,CAAC,IAAI,IAAT,EAAeE,CAAC,GAAGF,CAAJ,EAAOA,CAAC,GAAG,IAAX,CAAf;IAAA,WAGK,GAAG;IACNA,QAAAA,CAAC,GAAGX,MAAM,KAAK,CAAX,GAAe,CAAnB;IACAa,QAAAA,CAAC,GAAGb,MAAM,KAAK,CAAX,GAAe,CAAnB;IACAY,QAAAA,CAAC,GAAGD,CAAC,GAAGA,CAAJ,GAAQE,CAAC,GAAGA,CAAhB;IACD,OAJI,QAII,CAACD,CAAD,IAAMA,CAAC,GAAG,CAJd;IAML,aAAOH,EAAE,GAAGC,KAAK,GAAGG,CAAR,GAAYhB,IAAI,CAACiB,IAAL,CAAU,CAAC,CAAD,GAAKjB,IAAI,CAACkB,GAAL,CAASH,CAAT,CAAL,GAAmBA,CAA7B,CAAxB;IACD,KAdD;IAeD;;IAEDJ,EAAAA,YAAY,CAACR,MAAb,GAAsBO,kBAAtB;IAEA,SAAOC,YAAP;IACD,CAzBc,EAyBZF,aAzBY,CAAf;;ICFA,MAAMU,IAAI,GAAG,CAAb;IACA,MAAMC,SAAS,GAAG,IAAI,QAAtB;IACA,MAAMC,GAAG,GAAG,EAAZ;IACA,MAAMC,GAAG,GAAG,EAAZ;IACA,MAAMC,GAAG,GAAG,EAAZ;;IACA,SAASC,eAAT,CAAyBC,CAAzB,EAA4BC,CAA5B,EAA+B;IAC3BD,EAAAA,CAAC,MAAM,CAAP;IACAC,EAAAA,CAAC,MAAM,CAAP;IACA,QAAMC,GAAG,GAAGF,CAAC,GAAG,MAAhB;IACA,QAAMG,GAAG,GAAGH,CAAC,GAAGE,GAAhB;IACA,SAAQ,CAAEC,GAAG,GAAGF,CAAP,KAAc,CAAf,IAAoBC,GAAG,GAAGD,CAA3B,KAAkC,CAAzC;IACH;;IACc,MAAMG,KAAN,CAAY;IACvBC,EAAAA,WAAW,GAAoB;IAAA,QAAnBC,IAAmB,uEAAZC,IAAI,CAACC,GAAL,EAAY;IAC3B,SAAKC,KAAL,GAAa,IAAIC,WAAJ,CAAgB,CAAhB,CAAb;IACA,SAAKC,IAAL,CAAUL,IAAV;IACA,SAAK9B,MAAL,GAAc,KAAKoC,QAAL,CAAcC,IAAd,CAAmB,IAAnB,CAAd;IACH;IACD;IACJ;IACA;;;IACIC,EAAAA,SAAS,GAAG;IACR,SAAKC,SAAL;IACA,WAAQ,KAAKN,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAjB,KAAoC,CAA3C;IACH;IACD;IACJ;IACA;;;IACIG,EAAAA,QAAQ,GAAG;IACP,WAAO,CAAC,KAAKE,SAAL,OAAqB,CAAtB,IAA2BnB,SAAlC;IACH;;IACDgB,EAAAA,IAAI,CAACL,IAAD,EAAO;IACP,QAAI,CAACU,MAAM,CAACC,SAAP,CAAiBX,IAAjB,CAAL,EAA6B;IACzB,YAAM,IAAIY,SAAJ,CAAc,yBAAd,CAAN;IACH;;IACD,SAAKT,KAAL,CAAW,CAAX,IAAgBH,IAAhB;IACA,SAAKG,KAAL,CAAW,CAAX,IAAgB,CAAhB;IACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,CAAhB;IACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,CAAhB;;IACA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGzB,IAApB,EAA0ByB,CAAC,EAA3B,EAA+B;IAC3B,WAAKV,KAAL,CAAWU,CAAC,GAAG,CAAf,KACKA,CAAC,GACEpB,eAAe,CAAC,UAAD,EAAa,KAAKU,KAAL,CAAYU,CAAC,GAAG,CAAL,GAAU,CAArB,IAA4B,KAAKV,KAAL,CAAYU,CAAC,GAAG,CAAL,GAAU,CAArB,MAA4B,EAA7B,KAAqC,CAA7E,CADnB,KAEI,CAHR;IAIH;;IACD,SAAKC,mBAAL;;IACA,SAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGzB,IAApB,EAA0ByB,CAAC,EAA3B,EAA+B;IAC3B,WAAKJ,SAAL;IACH;IACJ;;IACDK,EAAAA,mBAAmB,GAAG;IAClB,QAAI,KAAKX,KAAL,CAAW,CAAX,MAAkB,CAAlB,IACA,KAAKA,KAAL,CAAW,CAAX,MAAkB,CADlB,IAEA,KAAKA,KAAL,CAAW,CAAX,MAAkB,CAFlB,IAGA,KAAKA,KAAL,CAAW,CAAX,MAAkB,CAHtB,EAGyB;IACrB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CADqB;;IAErB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CAFqB;;IAGrB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CAHqB;;IAIrB,WAAKA,KAAL,CAAW,CAAX,IAAgB,EAAhB,CAJqB;IAKxB;IACJ;;IACDM,EAAAA,SAAS,GAAG;IACR,QAAIM,CAAC,GAAG,KAAKZ,KAAL,CAAW,CAAX,CAAR;IACAY,IAAAA,CAAC,IAAIA,CAAC,IAAIzB,GAAV;IACAyB,IAAAA,CAAC,IAAIA,CAAC,KAAKxB,GAAX;IACAwB,IAAAA,CAAC,IAAI,KAAKZ,KAAL,CAAW,CAAX,KAAiBX,GAAtB;IACA,SAAKW,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAhB;IACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAhB;IACA,SAAKA,KAAL,CAAW,CAAX,IAAgB,KAAKA,KAAL,CAAW,CAAX,CAAhB;IACA,SAAKA,KAAL,CAAW,CAAX,IAAgBY,CAAhB;IACH;;IA1DsB;;ICMb,SAAU,QAAV,CACZ,IADY,EAGiB;IAAA,MAD7B,OAC6B,uEADnB,CACmB;IAAA,MAA7B,OAA6B,uEAAF,EAAE;IAE7B,QAAM;IAAE,IAAA;IAAF,MAAW,OAAjB;IACA,QAAM,YAAY,GAAG,OAAO,CAAC,YAAR,IAAyB,SAA9C;IACA,MAAI,oBAAJ;;IAEA,UAAQ,YAAR;IACE,SAAK,SAAL;IAAgB;IACd,QAAA,oBAAoB,GAAG,SAAS,CAAC,aAAD,EAAgB,IAAhB,EAAsB,CAAC,GAAvB,EAA4B,GAA5B,CAAhC;IACA;IACD;;IACD,SAAK,QAAL;IAAe;IACb,QAAA,oBAAoB,GAAG,SAAS,CAAC,YAAD,EAAe,IAAf,CAAhC;IACA;IACD;;IACD;IAAS;IACP,cAAM,SAAS,GAAU,YAAzB,CADO;;IAGP,cAAM,KAAK,CAAC,wBAAwB,SAAS,EAAlC,CAAX;IACD;IAbH;;IAgBA,MAAI,CAAC,OAAL,EAAc,OAAO,IAAP;IACd,MAAI,EAAE,GAAG,IAAI,CAAC,CAAd;IACA,MAAI,MAAM,GAAI,OAAO,GAAG,OAAO,CAAC,EAAD,CAAlB,GAA0B,GAAvC;;IACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,EAAE,CAAC,MAAvB,EAA+B,CAAC,EAAhC,EAAoC;IAClC,IAAA,EAAE,CAAC,CAAD,CAAF,IAAS,oBAAoB,KAAK,MAAlC;IACD;;IACD,SAAO,IAAP;IACD;;IAED,SAAS,SAAT,CACE,IADF,EAEE,IAFF,EAG4C;IAAA,oCAAvC,IAAuC;IAAvC,IAAA,IAAuC;IAAA;;IAE1C,SAAO,OAAO,IAAP,KAAgB,QAAhB,GACH,IAAI,CAAC,MAAL,CAAY,IAAIC,KAAJ,CAAU,IAAV,EAAgB,MAA5B,EAAoC,GAAG,IAAvC,CADG,GAEH,IAAI,CAAC,GAAG,IAAJ,CAFR;IAGD;;IAED,SAAS,OAAT,CAAiB,KAAjB,EAA+C;IAC7C,MAAI,GAAG,GAAG,MAAM,CAAC,SAAjB;;IACA,OAAK,IAAI,IAAT,IAAiB,KAAjB,EAAwB;IACtB,QAAI,IAAI,GAAG,GAAX,EAAgB,GAAG,GAAG,IAAN;IACjB;;IACD,SAAO,GAAP;IACD;;ICgDK,MAAO,iBAAP,CAAwB;IAS5B,EAAA,WAAA,GAA4C;IAAA,QAAzB,OAAyB,uEAAF,EAAE;IAC1C,UAAM;IACJ,MAAA,IAAI,GAAG,CADH;IAEJ,MAAA,EAAE,GAAG,IAFD;IAGJ,MAAA,QAAQ,GAAG,KAHP;IAIJ,MAAA,YAAY,GAAG,MAAM,CAJjB;IAKJ,MAAA,KAAK,GAAG;IAAE,QAAA,IAAI,EAAE;IAAR;IALJ,QAMF,OANJ;IAQA,SAAK,IAAL,GAAY,IAAZ;IACA,SAAK,EAAL,GAAU,EAAV;IACA,SAAK,QAAL,GAAgB,QAAhB;IACA,SAAK,QAAL,GAAgB,CAAC,KAAK,EAAL,GAAU,KAAK,IAAhB,KAAyB,KAAK,QAAL,GAAgB,CAAzC,CAAhB;IACA,SAAK,YAAL,GAAoB,YAApB;IACA,SAAK,aAAL,GAAqB,MAAM,CAAC,gBAA5B;IAEA,SAAK,IAAL,GAAY;IACV,MAAA,CAAC,EAAE,IAAI,YAAJ,CAAiB,KAAK,QAAtB,CADO;IAEV,MAAA,CAAC,EAAE,IAAI,YAAJ,CAAiB,KAAK,QAAtB;IAFO,KAAZ;IAKA,QAAI,cAAc,GAAG,UAAU,CAAC,KAAD,CAA/B;IACA,SAAK,KAAL,GAAa,cAAb;IAEA,IAAAC,cAAY,CAAC,KAAK,IAAN,EAAY,MAAZ,CAAZ;IACA,IAAAA,cAAY,CAAC,KAAK,EAAN,EAAU,IAAV,CAAZ;IACA,IAAAC,eAAa,CAAC,KAAK,QAAN,EAAgB,UAAhB,CAAb;;IAEA,QAAI,KAAK,EAAL,IAAW,KAAK,IAApB,EAA0B;IACxB,YAAM,IAAI,UAAJ,CAAe,oCAAf,CAAN;IACD;;IAED,QAAI,OAAO,KAAK,YAAZ,KAA6B,UAAjC,EAA6C;IAC3C,YAAM,IAAI,SAAJ,CAAc,wCAAd,CAAN;IACD;;IAED,SAAK,KAAL;IACD;IAED;;;IAGG;;;IACI,EAAA,QAAQ,CAAC,KAAD,EAA+B,OAA/B,EAAuD;IACpE,QACE,CAAC,KAAK,CAAC,OAAN,CAAc,KAAd,CAAD,KACC,OAAO,KAAP,KAAiB,QAAjB,IACC,KAAK,CAAC,CAAN,KAAY,SADb,IAEC,KAAK,CAAC,CAAN,KAAY,SAFb,IAGC,CAAC,KAAK,CAAC,OAAN,CAAc,KAAK,CAAC,CAApB,CAHF,IAIC,CAAC,KAAK,CAAC,OAAN,CAAc,KAAK,CAAC,CAApB,CAJF,IAKC,KAAK,CAAC,CAAN,CAAQ,MAAR,KAAmB,KAAK,CAAC,CAAN,CAAQ,MAN7B,CADF,EAQE;IACA,YAAM,IAAI,SAAJ,CACJ,4DADI,CAAN;IAGD;;IACD,QAAI,KAAK,CAAC,OAAN,CAAc,KAAd,CAAJ,EAA0B;IACxB,WAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;IACxB,aAAK,OAAL,CAAa,IAAb,EAAmB,OAAnB;IACD;IACF,KAJD,MAIO;IACL,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,CAAC,CAAN,CAAQ,MAA5B,EAAoC,CAAC,EAArC,EAAyC;IACvC,aAAK,OAAL,CAAa,CAAC,KAAK,CAAC,CAAN,CAAQ,CAAR,CAAD,EAAa,KAAK,CAAC,CAAN,CAAQ,CAAR,CAAb,CAAb,EAAuC,OAAvC;IACD;IACF;IACF;IACD;;;;IAIG;;;IAEI,EAAA,OAAO,CAAC,IAAD,EAA2C;IAAA,QAA5B,OAA4B,uEAAF,EAAE;;IACvD,QAAI,KAAK,CAAC,OAAN,CAAc,IAAd,KAAuB,IAAI,CAAC,MAAL,GAAc,CAAzC,EAA4C;IAC1C,YAAM,IAAI,KAAJ,CACJ,iFADI,CAAN;IAGD;;IAED,QACE,CAAC,KAAK,CAAC,OAAN,CAAc,IAAd,CAAD,KACC,IAAI,CAAC,CAAL,KAAW,SAAX,IAAwB,IAAI,CAAC,CAAL,KAAW,SADpC,CADF,EAGE;IACA,YAAM,IAAI,KAAJ,CACJ,iFADI,CAAN;IAGD;;IAED,QAAI,SAAJ;IACA,QAAI,SAAJ;IACA,QAAI,QAAJ;IACA,QAAI,gBAAJ;;IACA,QAAI,KAAK,CAAC,OAAN,CAAc,IAAd,CAAJ,EAAyB;IACvB,OAAC,SAAD,EAAY,SAAZ,EAAuB,QAAvB,EAAiC,gBAAjC,IAAqD,IAArD;IACD,KAFD,MAEO;IACL,MAAA,SAAS,GAAG,IAAI,CAAC,CAAjB;IACA,MAAA,SAAS,GAAG,IAAI,CAAC,CAAjB;IACA,MAAA,QAAQ,GAAG,IAAI,CAAC,IAAL,IAAa,IAAI,CAAC,KAA7B;IACA,MAAA,gBAAgB,GAAG,IAAI,CAAC,KAAxB;IACD;;IACD,QAAI,SAAS,GAAG,KAAK,aAArB,EAAoC,KAAK,aAAL,GAAqB,SAArB;IAEpC,QAAI;IACF,MAAA,IAAI,GAAG,QAAQ,KAAK,SAAb,GAAyB,KAAK,YAAL,CAAkB,SAAlB,CAAzB,GAAwD,QAD7D;IAEF,MAAA,SAFE;IAGF,MAAA,UAHE;IAIF,MAAA,KAAK,EAAE;IAJL,QAKA,OALJ;;IAOA,QAAI,gBAAJ,EAAsB;IACpB,MAAA,YAAY,GAAG,YAAY,GACvB,EAAE,GAAG,YAAL;IAAmB,WAAG;IAAtB,OADuB,GAEvB,gBAFJ;IAGD;;IAED,QAAI,YAAJ,EAAkB;IAChB,WAAK,KAAL,GAAa,UAAU,CAAC,YAAD,CAAvB;IACD;;IAED,QAAI,CAAC,SAAL,EAAgB,SAAS,GAAG,IAAZ;IAChB,QAAI,CAAC,UAAL,EAAiB,UAAU,GAAG,IAAb;;IAEjB,QAAI,CAAC,SAAD,IAAc,CAAC,UAAnB,EAA+B;IAC7B,YAAM,IAAI,KAAJ,CAAU,0CAAV,CAAN;IACD;;IAED,QAAI,MAAM,GACR,OAAO,CAAC,MAAR,KAAmB,SAAnB,GAA+B,KAAK,KAAL,CAAW,SAAX,EAA/B,GAAwD,OAAO,CAAC,MADlE;IAGA,UAAM,UAAU,GAAG,SAAS,GAAI,SAAS,GAAG,CAAb,GAAkB,MAAjD;IACA,UAAM,SAAS,GAAG,SAAS,GAAI,UAAU,GAAG,CAAd,GAAmB,MAAjD;IAEA,UAAM,UAAU,GAAG,IAAI,CAAC,GAAL,CACjB,CADiB,EAEjB,IAAI,CAAC,KAAL,CAAW,CAAC,UAAU,GAAG,KAAK,IAAnB,IAA2B,KAAK,QAA3C,CAFiB,CAAnB;IAIA,UAAM,SAAS,GAAG,IAAI,CAAC,GAAL,CAChB,KAAK,QAAL,GAAgB,CADA,EAEhB,IAAI,CAAC,IAAL,CAAU,CAAC,SAAS,GAAG,KAAK,IAAlB,IAA0B,KAAK,QAAzC,CAFgB,CAAlB;IAIA,UAAM,WAAW,GAAG,IAAI,CAAC,KAAL,CAAW,CAAC,SAAS,GAAG,KAAK,IAAlB,IAA0B,KAAK,QAA1C,CAApB,CApEuD;IAsEvD;;IAEA,SAAK,KAAL,CAAW,IAAX,GAAkB,SAAlB;;IACA,SAAK,IAAI,KAAK,GAAG,UAAjB,EAA6B,KAAK,GAAG,IAAI,CAAC,GAAL,CAAS,WAAT,EAAsB,CAAtB,CAArC,EAA+D,KAAK,EAApE,EAAwE;IACtE,WAAK,IAAL,CAAU,CAAV,CAAY,KAAZ,KACE,SAAS,GAAG,KAAK,KAAL,CAAW,GAAX,CAAe,KAAK,IAAL,CAAU,CAAV,CAAY,KAAZ,IAAqB,SAApC,CADd;IAED,KA5EsD;;;IA+EvD,SAAK,KAAL,CAAW,IAAX,GAAkB,UAAlB;;IACA,SACE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAL,CAAS,WAAT,EAAsB,SAAtB,CADd,EAEE,KAAK,IAAI,SAFX,EAGE,KAAK,EAHP,EAIE;IACA,WAAK,IAAL,CAAU,CAAV,CAAY,KAAZ,KACE,SAAS,GAAG,KAAK,KAAL,CAAW,GAAX,CAAe,KAAK,IAAL,CAAU,CAAV,CAAY,KAAZ,IAAqB,SAApC,CADd;IAED;IACF;IAED;;;IAGG;;;IACI,EAAA,WAAW,CAAC,WAAD,EAAwB;IACxC,IAAA,WAAW,CAAC,KAAK,IAAN,EAAY,WAAZ,CAAX;IACA,WAAO,IAAP;IACD;IAED;;;IAGG;;;IACI,EAAA,QAAQ,CAAC,OAAD,EAAkB,OAAlB,EAA2C;IACxD,IAAA,QAAQ,CAAC,KAAK,IAAN,EAAY,OAAZ,EAAqB,OAArB,CAAR;IACA,WAAO,IAAP;IACD;IAED;;IAEG;;;IACI,EAAA,WAAW,GAA2C;IAAA,QAA1C,OAA0C,uEAAF,EAAE;;IAC3D,QAAI,OAAO,OAAP,KAAmB,SAAvB,EAAkC;IAChC,MAAA,OAAO,GAAG;IAAE,QAAA,IAAI,EAAE;IAAR,OAAV;IACD;;IACD,UAAM;IAAE,MAAA,IAAI,GAAG,IAAT;IAAe,MAAA,SAAS,GAAG;IAA3B,QAAiC,OAAvC;;IACA,QAAI,SAAJ,EAAe;IACb,UAAI,aAAa,GAAG,KAAK,aAAL,GAAqB,SAAzC;IACA,UAAI,CAAC,GAAG,EAAR;IACA,UAAI,CAAC,GAAG,EAAR;;IACA,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,IAAL,CAAU,CAAV,CAAY,MAAhC,EAAwC,CAAC,EAAzC,EAA6C;IAC3C,YAAI,KAAK,IAAL,CAAU,CAAV,CAAY,CAAZ,KAAkB,aAAtB,EAAqC;IACnC,UAAA,CAAC,CAAC,IAAF,CAAO,KAAK,IAAL,CAAU,CAAV,CAAY,CAAZ,CAAP;IACA,UAAA,CAAC,CAAC,IAAF,CAAO,KAAK,IAAL,CAAU,CAAV,CAAY,CAAZ,CAAP;IACD;IACF;;IACD,aAAO;IAAE,QAAA,CAAF;IAAK,QAAA;IAAL,OAAP;IACD;;IACD,QAAI,IAAJ,EAAU;IACR,aAAO;IACL,QAAA,CAAC,EAAE,KAAK,IAAL,CAAU,CAAV,CAAY,KAAZ,EADE;IAEL,QAAA,CAAC,EAAE,KAAK,IAAL,CAAU,CAAV,CAAY,KAAZ;IAFE,OAAP;IAID,KALD,MAKO;IACL,aAAO,KAAK,IAAZ;IACD;IACF;IAED;;IAEG;;;IACI,EAAA,KAAK,GAAA;IACV,UAAM,QAAQ,GAAG,KAAK,IAAtB;;IAEA,SAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,QAAzB,EAAmC,CAAC,EAApC,EAAwC;IACtC,MAAA,QAAQ,CAAC,CAAT,CAAW,CAAX,IAAgB,KAAK,IAAL,GAAY,CAAC,GAAG,KAAK,QAArC;IACD;;IAED,WAAO,IAAP;IACD;;IAvO2B;;IA0O9B,SAASA,eAAT,CAAuB,KAAvB,EAAsC,IAAtC,EAAkD;IAChD,MAAI,CAAC,MAAM,CAAC,SAAP,CAAiB,KAAjB,CAAL,EAA8B;IAC5B,UAAM,IAAI,SAAJ,CAAc,GAAG,IAAI,4BAArB,CAAN;IACD;IACF;;IAED,SAASD,cAAT,CAAsB,KAAtB,EAAqC,IAArC,EAAiD;IAC/C,MAAI,CAAC,MAAM,CAAC,QAAP,CAAgB,KAAhB,CAAL,EAA6B;IAC3B,UAAM,IAAI,SAAJ,CAAc,GAAG,IAAI,0BAArB,CAAN;IACD;IACF;IAED;;;;IAIG;;;IAEG,SAAU,gBAAV,CACJ,KADI,EAEiC;IAAA,MAArC,OAAqC,uEAAF,EAAE;IAErC,QAAM;IACJ,IAAA,SAAS,EAAE,gBADP;IAEJ,IAAA,KAFI;IAGJ,IAAA,QAHI;IAIJ,IAAA,SAJI;IAKJ,IAAA,KAAK,EAAE;IALH,MAMF,OANJ;IAQA,QAAM,SAAS,GAAG,IAAI,iBAAJ,CAAsB,gBAAtB,CAAlB;IAEA,EAAA,SAAS,CAAC,QAAV,CAAmB,KAAnB,EAA0B,eAA1B;IACA,MAAI,QAAJ,EAAc,SAAS,CAAC,WAAV,CAAsB,QAAtB;;IACd,MAAI,KAAJ,EAAW;IACT,UAAM;IAAE,MAAA,OAAF;IAAW,MAAA,OAAO,EAAE;IAApB,QAAwC,KAA9C;IACA,IAAA,SAAS,CAAC,QAAV,CAAmB,OAAnB,EAA4B,eAA5B;IACD;;IACD,SAAO,SAAS,CAAC,WAAV,CAAsB;IAC3B,IAAA;IAD2B,GAAtB,CAAP;IAGD;;ICvYD,MAAME,QAAQ,GAAGC,MAAM,CAACC,SAAP,CAAiBF,QAAlC;IAEe,SAASG,UAAT,CAAoBC,MAApB,EAA4B;IACzC,SAAOJ,QAAQ,CAACK,IAAT,CAAcD,MAAd,EAAsBE,QAAtB,CAA+B,QAA/B,CAAP;IACD;;ICFD,SAASlD,GAAT,CAAamD,KAAb,EAAoB;IAClB,MAAIC,OAAO,GAAGnD,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBoD,SAAzC,GAAqDpD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;IAEA,MAAI,CAACqD,UAAO,CAACH,KAAD,CAAZ,EAAqB;IACnB,UAAM,IAAId,SAAJ,CAAc,wBAAd,CAAN;IACD;;IAED,MAAIc,KAAK,CAACjD,MAAN,KAAiB,CAArB,EAAwB;IACtB,UAAM,IAAImC,SAAJ,CAAc,yBAAd,CAAN;IACD;;IAED,MAAIkB,kBAAkB,GAAGH,OAAO,CAACI,SAAjC;IAAA,MACIA,SAAS,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,CAAhC,GAAoCA,kBADpD;IAAA,MAEIE,gBAAgB,GAAGL,OAAO,CAACM,OAF/B;IAAA,MAGIA,OAAO,GAAGD,gBAAgB,KAAK,KAAK,CAA1B,GAA8BN,KAAK,CAACjD,MAApC,GAA6CuD,gBAH3D;;IAKA,MAAID,SAAS,GAAG,CAAZ,IAAiBA,SAAS,IAAIL,KAAK,CAACjD,MAApC,IAA8C,CAACiC,MAAM,CAACC,SAAP,CAAiBoB,SAAjB,CAAnD,EAAgF;IAC9E,UAAM,IAAIG,KAAJ,CAAU,0DAAV,CAAN;IACD;;IAED,MAAID,OAAO,IAAIF,SAAX,IAAwBE,OAAO,GAAGP,KAAK,CAACjD,MAAxC,IAAkD,CAACiC,MAAM,CAACC,SAAP,CAAiBsB,OAAjB,CAAvD,EAAkF;IAChF,UAAM,IAAIC,KAAJ,CAAU,+EAAV,CAAN;IACD;;IAED,MAAIC,QAAQ,GAAGT,KAAK,CAACK,SAAD,CAApB;;IAEA,OAAK,IAAIlB,CAAC,GAAGkB,SAAS,GAAG,CAAzB,EAA4BlB,CAAC,GAAGoB,OAAhC,EAAyCpB,CAAC,EAA1C,EAA8C;IAC5C,QAAIa,KAAK,CAACb,CAAD,CAAL,GAAWsB,QAAf,EAAyBA,QAAQ,GAAGT,KAAK,CAACb,CAAD,CAAhB;IAC1B;;IAED,SAAOsB,QAAP;IACD;;IC/BD,SAAS7D,GAAT,CAAaoD,KAAb,EAAoB;IAClB,MAAIC,OAAO,GAAGnD,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBoD,SAAzC,GAAqDpD,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;IAEA,MAAI,CAACqD,UAAO,CAACH,KAAD,CAAZ,EAAqB;IACnB,UAAM,IAAId,SAAJ,CAAc,wBAAd,CAAN;IACD;;IAED,MAAIc,KAAK,CAACjD,MAAN,KAAiB,CAArB,EAAwB;IACtB,UAAM,IAAImC,SAAJ,CAAc,yBAAd,CAAN;IACD;;IAED,MAAIkB,kBAAkB,GAAGH,OAAO,CAACI,SAAjC;IAAA,MACIA,SAAS,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,CAAhC,GAAoCA,kBADpD;IAAA,MAEIE,gBAAgB,GAAGL,OAAO,CAACM,OAF/B;IAAA,MAGIA,OAAO,GAAGD,gBAAgB,KAAK,KAAK,CAA1B,GAA8BN,KAAK,CAACjD,MAApC,GAA6CuD,gBAH3D;;IAKA,MAAID,SAAS,GAAG,CAAZ,IAAiBA,SAAS,IAAIL,KAAK,CAACjD,MAApC,IAA8C,CAACiC,MAAM,CAACC,SAAP,CAAiBoB,SAAjB,CAAnD,EAAgF;IAC9E,UAAM,IAAIG,KAAJ,CAAU,0DAAV,CAAN;IACD;;IAED,MAAID,OAAO,IAAIF,SAAX,IAAwBE,OAAO,GAAGP,KAAK,CAACjD,MAAxC,IAAkD,CAACiC,MAAM,CAACC,SAAP,CAAiBsB,OAAjB,CAAvD,EAAkF;IAChF,UAAM,IAAIC,KAAJ,CAAU,+EAAV,CAAN;IACD;;IAED,MAAIE,QAAQ,GAAGV,KAAK,CAACK,SAAD,CAApB;;IAEA,OAAK,IAAIlB,CAAC,GAAGkB,SAAS,GAAG,CAAzB,EAA4BlB,CAAC,GAAGoB,OAAhC,EAAyCpB,CAAC,EAA1C,EAA8C;IAC5C,QAAIa,KAAK,CAACb,CAAD,CAAL,GAAWuB,QAAf,EAAyBA,QAAQ,GAAGV,KAAK,CAACb,CAAD,CAAhB;IAC1B;;IAED,SAAOuB,QAAP;IACD;;IC9BK,SAAU,SAAV,CAAoB,IAApB,EAAqD;IACzD,MAAI9D,KAAG,GAAG,MAAM,CAAC,gBAAjB;IACA,MAAIC,KAAG,GAAG,MAAM,CAAC,gBAAjB;;IACA,OAAK,IAAI,GAAT,IAAgB,IAAhB,EAAsB;IACpB,QAAI,MAAM,GAAG8D,GAAQ,CAAC,GAAD,CAArB;IACA,QAAI,MAAM,GAAGC,GAAQ,CAAC,GAAD,CAArB;IACA,QAAIhE,KAAG,GAAG,MAAV,EAAkBA,KAAG,GAAG,MAAN;IAClB,QAAIC,KAAG,GAAG,MAAV,EAAkBA,KAAG,GAAG,MAAN;IACnB;;IACD,SAAO;IAAE,SAAAD,KAAF;IAAO,SAAAC;IAAP,GAAP;IACD;;ICCD,MAAM,MAAM,GAAa,CAAC,GAAD,EAAM,GAAN,CAAzB;IAGA,MAAM,eAAe,GAAsB,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,CAA3C;IAsFM,MAAO,mBAAP,CAA0B;IAU9B,EAAA,WAAA,GAA4C;IAAA,QAAzB,OAAyB,uEAAF,EAAE;IAC1C,QAAI;IACF,MAAA,IAAI,GAAG,CADL;IAEF,MAAA,EAAE,GAAG,GAFH;IAGF,MAAA,QAAQ,GAAG,IAHT;IAIF,MAAA,YAAY,GAAG,MAAM,CAJnB;IAKF,MAAA,KAAK,GAAG;IACN,QAAA,IAAI,EAAE;IADA;IALN,QAQA,OARJ;IAUA,IAAA,IAAI,GAAG,cAAc,CAAC,IAAD,CAArB;IACA,IAAA,EAAE,GAAG,cAAc,CAAC,EAAD,CAAnB;IACA,IAAA,QAAQ,GAAG,cAAc,CAAC,QAAD,CAAzB;;IAEA,SAAK,MAAM,IAAX,IAAmB,MAAnB,EAA2B;IACzB,MAAA,YAAY,CAAC,IAAI,CAAC,IAAD,CAAL,EAAa,QAAQ,IAAI,EAAzB,CAAZ;IACA,MAAA,YAAY,CAAC,EAAE,CAAC,IAAD,CAAH,EAAW,MAAM,IAAI,EAArB,CAAZ;IACA,MAAA,aAAa,CAAC,QAAQ,CAAC,IAAD,CAAT,EAAiB,YAAY,IAAI,EAAjC,CAAb;IACD;;IAED,SAAK,IAAL,GAAY,IAAZ;IACA,SAAK,EAAL,GAAU,EAAV;IACA,SAAK,QAAL,GAAgB,QAAhB;IACA,SAAK,QAAL,GAAgB,gBAAgB,CAAC,IAAD,EAAO,EAAP,EAAW,QAAX,CAAhC;IAEA,SAAK,YAAL,GAAoB,YAApB;IACA,SAAK,aAAL,GAAqB,MAAM,CAAC,gBAA5B;IAEA,QAAI,cAAc,GAAG,UAAU,CAAC,KAAD,CAA/B;IACA,SAAK,KAAL,GAAa,cAAb;IAEA,SAAK,IAAL,GAAY;IACV,MAAA,CAAC,EAAE,IAAI,YAAJ,CAAiB,QAAQ,CAAC,CAA1B,CADO;IAEV,MAAA,CAAC,EAAE,IAAI,YAAJ,CAAiB,QAAQ,CAAC,CAA1B,CAFO;IAGV,MAAA,CAAC,EAAE,YAAY,CAAC,KAAK,QAAN;IAHL,KAAZ;;IAMA,SAAK,MAAM,IAAX,IAAmB,MAAnB,EAA2B;IACzB,UAAI,KAAK,EAAL,CAAQ,IAAR,KAAiB,KAAK,IAAL,CAAU,IAAV,CAArB,EAAsC;IACpC,cAAM,IAAI,UAAJ,CAAe,oCAAf,CAAN;IACD;IACF;;IAED,QAAI,OAAO,KAAK,YAAZ,KAA6B,UAAjC,EAA6C;IAC3C,YAAM,IAAI,SAAJ,CAAc,wCAAd,CAAN;IACD;;IAED,SAAK,KAAL;IACD;;IAEM,EAAA,QAAQ,CAAC,KAAD,EAAiC,OAAjC,EAA2D;IACxE,QACE,CAAC,KAAK,CAAC,OAAN,CAAc,KAAd,CAAD,KACC,OAAO,KAAP,KAAiB,QAAjB,IACC,KAAK,CAAC,CAAN,KAAY,SADb,IAEC,KAAK,CAAC,CAAN,KAAY,SAFb,IAGC,CAAC,KAAK,CAAC,OAAN,CAAc,KAAK,CAAC,CAApB,CAHF,IAIC,CAAC,KAAK,CAAC,OAAN,CAAc,KAAK,CAAC,CAApB,CAJF,IAKC,KAAK,CAAC,CAAN,CAAQ,MAAR,KAAmB,KAAK,CAAC,CAAN,CAAQ,MAN7B,CADF,EAQE;IACA,YAAM,IAAI,SAAJ,CACJ,4DADI,CAAN;IAGD;;IACD,QAAI,KAAK,CAAC,OAAN,CAAc,KAAd,CAAJ,EAA0B;IACxB,WAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;IACxB,aAAK,OAAL,CAAa,IAAb,EAAmB,OAAnB;IACD;IACF,KAJD,MAIO;IACL,UAAI,OAAO,GAAG,KAAK,CAAC,CAAN,CAAQ,MAAtB;;IACA,WAAK,MAAM,CAAX,IAAgB,eAAhB,EAAiC;IAC/B,YAAI,KAAK,CAAC,CAAD,CAAL,IAAY,KAAK,CAAC,OAAN,CAAc,KAAK,CAAC,CAAD,CAAnB,CAAhB,EAAyC;IACvC,cAAI,OAAO,KAAK,KAAK,CAAC,CAAD,CAAL,CAAS,MAAzB,EAAiC;IAC/B,kBAAM,IAAI,KAAJ,CAAU,qCAAV,CAAN;IACD;IACF;IACF;;IACD,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,CAAC,CAAN,CAAQ,MAA5B,EAAoC,CAAC,EAArC,EAAyC;IACvC,aAAK,OAAL,CAAa,CAAC,KAAK,CAAC,CAAN,CAAQ,CAAR,CAAD,EAAa,KAAK,CAAC,CAAN,CAAQ,CAAR,CAAb,EAAyB,KAAK,CAAC,CAAN,CAAQ,CAAR,CAAzB,CAAb,EAAmD,OAAnD;IACD;IACF;;IAED,WAAO,IAAP;IACD;;IAEM,EAAA,OAAO,CAAC,IAAD,EAA6C;IAAA,QAA9B,OAA8B,uEAAF,EAAE;;IACzD,QAAI,KAAK,CAAC,OAAN,CAAc,IAAd,KAAuB,IAAI,CAAC,MAAL,GAAc,CAAzC,EAA4C;IAC1C,YAAM,IAAI,KAAJ,CACJ,oFADI,CAAN;IAGD;;IAED,QACE,CAAC,KAAK,CAAC,OAAN,CAAc,IAAd,CAAD,IACA,eAAe,CAAC,IAAhB,CAAsB,CAAD,IAAO,IAAI,CAAC,CAAD,CAAJ,KAAY,SAAxC,CAFF,EAGE;IACA,YAAM,IAAI,KAAJ,CACJ,oFADI,CAAN;IAGD;;IAED,QAAI,SAAJ;IACA,QAAI,SAAJ;IACA,QAAI,SAAJ;IACA,QAAI,QAAJ;IACA,QAAI,gBAAJ;;IACA,QAAI,KAAK,CAAC,OAAN,CAAc,IAAd,CAAJ,EAAyB;IACvB,OAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,QAAlC,EAA4C,gBAA5C,IAAgE,IAAhE;IACD,KAFD,MAEO;IACL,MAAA,SAAS,GAAG,IAAI,CAAC,CAAjB;IACA,MAAA,SAAS,GAAG,IAAI,CAAC,CAAjB;IACA,MAAA,SAAS,GAAG,IAAI,CAAC,CAAjB;IACA,MAAA,QAAQ,GAAG,IAAI,CAAC,IAAL,IAAa,IAAI,CAAC,KAA7B;IACA,MAAA,gBAAgB,GAAG,IAAI,CAAC,KAAxB;IACD;;IAED,UAAM,QAAQ,GAAa;IAAE,MAAA,CAAC,EAAE,SAAL;IAAgB,MAAA,CAAC,EAAE;IAAnB,KAA3B;IACA,QAAI,SAAS,GAAG,KAAK,aAArB,EAAoC,KAAK,aAAL,GAAqB,SAArB;IAEpC,QAAI;IACF,MAAA,IAAI,GAAG,QAAQ,KAAK,SAAb,GACH,KAAK,YAAL,CAAkB,SAAlB,EAA6B,SAA7B,CADG,GAEH,QAHF;IAIF,MAAA,KAAK,EAAE;IAJL,QAKA,OALJ;;IAOA,QAAI,gBAAJ,EAAsB;IACpB,MAAA,YAAY,GAAG,YAAY,GACvB,EAAE,GAAG,YAAL;IAAmB,WAAG;IAAtB,OADuB,GAEvB,gBAFJ;IAGD;;IAED,QAAI,YAAJ,EAAkB;IAChB,WAAK,KAAL,GAAa,UAAU,CAAC,YAAD,CAAvB;IACD;;IAED,IAAA,IAAI,GAAG,cAAc,CAAC,IAAD,CAArB;IACA,QAAI,MAAM,GACR,OAAO,CAAC,MAAR,KAAmB,SAAnB,GAA+B,KAAK,KAAL,CAAW,SAAX,EAA/B,GAAwD,OAAO,CAAC,MADlE;IAGA,IAAA,MAAM,GAAG,cAAc,CAAC,MAAD,CAAvB;IAEA,UAAM,UAAU,GAAa;IAAE,MAAA,CAAC,EAAE,CAAL;IAAQ,MAAA,CAAC,EAAE;IAAX,KAA7B;IACA,UAAM,SAAS,GAAa;IAAE,MAAA,CAAC,EAAE,CAAL;IAAQ,MAAA,CAAC,EAAE;IAAX,KAA5B;;IACA,SAAK,MAAM,IAAX,IAAmB,MAAnB,EAA2B;IACzB,YAAM,KAAK,GAAG,QAAQ,CAAC,IAAD,CAAR,GAAkB,IAAI,CAAC,IAAD,CAAJ,GAAa,CAAd,GAAmB,MAAM,CAAC,IAAD,CAAxD;IACA,YAAM,IAAI,GAAG,QAAQ,CAAC,IAAD,CAAR,GAAkB,IAAI,CAAC,IAAD,CAAJ,GAAa,CAAd,GAAmB,MAAM,CAAC,IAAD,CAAvD;IACA,MAAA,UAAU,CAAC,IAAD,CAAV,GAAmB,IAAI,CAAC,GAAL,CACjB,CADiB,EAEjB,IAAI,CAAC,KAAL,CAAW,CAAC,KAAK,GAAG,KAAK,IAAL,CAAU,IAAV,CAAT,IAA4B,KAAK,QAAL,CAAc,IAAd,CAAvC,CAFiB,CAAnB;IAIA,MAAA,SAAS,CAAC,IAAD,CAAT,GAAkB,IAAI,CAAC,GAAL,CAChB,KAAK,QAAL,CAAc,IAAd,CADgB,EAEhB,IAAI,CAAC,IAAL,CAAU,CAAC,IAAI,GAAG,KAAK,IAAL,CAAU,IAAV,CAAR,IAA2B,KAAK,QAAL,CAAc,IAAd,CAArC,CAFgB,CAAlB;IAID;;IAED,SAAK,KAAL,CAAW,IAAX,GAAkB,IAAlB;;IACA,SAAK,IAAI,MAAM,GAAG,UAAU,CAAC,CAA7B,EAAgC,MAAM,GAAG,SAAS,CAAC,CAAnD,EAAsD,MAAM,EAA5D,EAAgE;IAC9D,WAAK,IAAI,MAAM,GAAG,UAAU,CAAC,CAA7B,EAAgC,MAAM,GAAG,SAAS,CAAC,CAAnD,EAAsD,MAAM,EAA5D,EAAgE;IAC9D,aAAK,IAAL,CAAU,CAAV,CAAY,MAAZ,EAAoB,MAApB,KACE,SAAS,GACT,KAAK,KAAL,CAAW,GAAX,CACE,KAAK,IAAL,CAAU,CAAV,CAAY,MAAZ,IAAsB,QAAQ,CAAC,CADjC,EAEE,KAAK,IAAL,CAAU,CAAV,CAAY,MAAZ,IAAsB,QAAQ,CAAC,CAFjC,CAFF;IAMD;IACF;;IAED,WAAO,IAAP;IACD;;IAEM,EAAA,WAAW,GAA6C;IAAA,QAA5C,OAA4C,uEAAF,EAAE;;IAC7D,QAAI,OAAO,OAAP,KAAmB,SAAvB,EAAkC;IAChC,MAAA,OAAO,GAAG;IAAE,QAAA,IAAI,EAAE;IAAR,OAAV;IACD;;IACD,UAAM;IAAE,MAAA,IAAI,GAAG;IAAT,QAAkB,OAAxB;IACA,QAAI,OAAO,GAAG,SAAS,CAAC,KAAK,IAAL,CAAU,CAAX,CAAvB;IAEA,WAAO;IACL,MAAA,IAAI,EAAE,KAAK,IAAL,CAAU,CADX;IAEL,MAAA,IAAI,EAAE,KAAK,EAAL,CAAQ,CAFT;IAGL,MAAA,IAAI,EAAE,KAAK,EAAL,CAAQ,CAHT;IAIL,MAAA,IAAI,EAAE,KAAK,IAAL,CAAU,CAJX;IAKL,MAAA,IAAI,EAAE,OAAO,CAAC,GALT;IAML,MAAA,IAAI,EAAE,OAAO,CAAC,GANT;IAOL,MAAA,CAAC,EAAE,IAAI,GAAG,KAAK,IAAL,CAAU,CAAV,CAAY,KAAZ,EAAH,GAAyB,KAAK,IAAL,CAAU;IAPrC,KAAP;IASD;;IAEM,EAAA,KAAK,GAAA;IACV,UAAM,QAAQ,GAAW,KAAK,IAA9B;;IAEA,SAAK,MAAM,IAAX,IAAmB,MAAnB,EAA2B;IACzB,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,KAAK,QAAL,CAAc,IAAd,CAApB,EAAyC,CAAC,EAA1C,EAA8C;IAC5C,QAAA,QAAQ,CAAC,IAAD,CAAR,CAAe,CAAf,IAAoB,KAAK,IAAL,CAAU,IAAV,IAAkB,CAAC,GAAG,KAAK,QAAL,CAAc,IAAd,CAA1C;IACD;IACF;;IACD,SAAK,IAAI,GAAT,IAAgB,QAAQ,CAAC,CAAzB,EAA4B;IAC1B,WAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,GAAG,CAAC,MAAxB,EAAgC,CAAC,EAAjC,EAAqC;IACnC,QAAA,GAAG,CAAC,CAAD,CAAH,GAAS,CAAT;IACD;IACF;;IACD,WAAO,IAAP;IACD;;IAvN6B;IA0N1B,SAAU,kBAAV,CACJ,KADI,EAEmC;IAAA,MAAvC,OAAuC,uEAAF,EAAE;IAEvC,QAAM;IAAE,IAAA,SAAS,EAAE,gBAAb;IAA+B,IAAA,KAAK,EAAE;IAAtC,MAA0D,OAAhE;IAEA,QAAM,SAAS,GAAG,IAAI,mBAAJ,CAAwB,gBAAxB,CAAlB;IAEA,EAAA,SAAS,CAAC,QAAV,CAAmB,KAAnB,EAA0B,eAA1B;IACA,SAAO,SAAS,CAAC,WAAV,EAAP;IACD;;IAED,SAAS,cAAT,CAAwB,KAAxB,EAAgD;IAC9C,MAAI,MAAM,GAAG,OAAO,KAAP,KAAiB,QAAjB,GAA4B;IAAE,IAAA,CAAC,EAAE,KAAL;IAAY,IAAA,CAAC,EAAE;IAAf,GAA5B,GAAqD,KAAlE;IACA,SAAO,MAAP;IACD;;IAED,SAAS,gBAAT,CAA0B,IAA1B,EAA0C,EAA1C,EAAwD,QAAxD,EAA0E;IACxE,SAAO;IACL,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,CAAH,GAAO,IAAI,CAAC,CAAb,KAAmB,QAAQ,CAAC,CAAT,GAAa,CAAhC,CADE;IAEL,IAAA,CAAC,EAAE,CAAC,EAAE,CAAC,CAAH,GAAO,IAAI,CAAC,CAAb,KAAmB,QAAQ,CAAC,CAAT,GAAa,CAAhC;IAFE,GAAP;IAID;;IAED,SAAS,aAAT,CAAuB,KAAvB,EAAsC,IAAtC,EAAkD;IAChD,MAAI,CAAC,MAAM,CAAC,SAAP,CAAiB,KAAjB,CAAL,EAA8B;IAC5B,UAAM,IAAI,SAAJ,CAAc,GAAG,IAAI,4BAArB,CAAN;IACD;IACF;;IAED,SAAS,YAAT,CAAsB,KAAtB,EAAqC,IAArC,EAAiD;IAC/C,MAAI,CAAC,MAAM,CAAC,QAAP,CAAgB,KAAhB,CAAL,EAA6B;IAC3B,UAAM,IAAI,SAAJ,CAAc,GAAG,IAAI,0BAArB,CAAN;IACD;IACF;;IAED,SAAS,YAAT,CAAsB,QAAtB,EAAwC;IACtC,QAAM,OAAO,GAAG,IAAI,KAAJ,CAAU,QAAQ,CAAC,CAAnB,CAAhB;;IACA,OAAK,IAAI,CAAC,GAAG,CAAb,EAAgB,CAAC,GAAG,QAAQ,CAAC,CAA7B,EAAgC,CAAC,EAAjC,EAAqC;IACnC,IAAA,OAAO,CAAC,CAAD,CAAP,GAAa,IAAI,YAAJ,CAAiB,QAAQ,CAAC,CAA1B,CAAb;IACD;;IACD,SAAO,OAAP;IACD;;;;;;;;;;;;;"}