{"version":3,"file":"ml-spectra-fitting.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-levenberg-marquardt/src/checkOptions.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-levenberg-marquardt/src/gradientFunction.js","../node_modules/ml-levenberg-marquardt/src/step.js","../node_modules/ml-levenberg-marquardt/src/index.js","../src/selectMethod.js","../node_modules/ml-peak-shape-generator/src/util/constants.js","../node_modules/ml-peak-shape-generator/src/util/erfinv.js","../node_modules/ml-peak-shape-generator/src/classes/Gaussian.js","../node_modules/ml-peak-shape-generator/src/classes/Lorentzian.js","../node_modules/ml-peak-shape-generator/src/classes/PseudoVoigt.js","../src/shapes/sumOfGaussianLorentzians.js","../src/shapes/sumOfGaussians.js","../src/shapes/sumOfLorentzians.js","../src/index.js"],"sourcesContent":["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\nexport default function checkOptions(data, parameterizedFunction, options) {\n  let {\n    timeout,\n    minValues,\n    maxValues,\n    initialValues,\n    weights = 1,\n    damping = 1e-2,\n    dampingStepUp = 11,\n    dampingStepDown = 9,\n    maxIterations = 100,\n    errorTolerance = 1e-7,\n    centralDifference = false,\n    gradientDifference = 10e-2,\n    improvementThreshold = 1e-3,\n  } = options;\n\n  if (damping <= 0) {\n    throw new Error('The damping option must be a positive number');\n  } else if (!data.x || !data.y) {\n    throw new Error('The data parameter must have x and y elements');\n  } else if (\n    !isArray(data.x) ||\n    data.x.length < 2 ||\n    !isArray(data.y) ||\n    data.y.length < 2\n  ) {\n    throw new Error(\n      'The data parameter elements must be an array with more than 2 points',\n    );\n  } else if (data.x.length !== data.y.length) {\n    throw new Error('The data parameter elements must have the same size');\n  }\n\n  let parameters =\n    initialValues || new Array(parameterizedFunction.length).fill(1);\n\n  let nbPoints = data.y.length;\n  let parLen = parameters.length;\n  maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n  minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n\n  if (maxValues.length !== minValues.length) {\n    throw new Error('minValues and maxValues must be the same size');\n  }\n\n  if (!isArray(parameters)) {\n    throw new Error('initialValues must be an array');\n  }\n\n  if (typeof gradientDifference === 'number') {\n    gradientDifference = new Array(parameters.length).fill(gradientDifference);\n  } else if (isArray(gradientDifference)) {\n    if (gradientDifference.length !== parLen) {\n      gradientDifference = new Array(parLen).fill(gradientDifference[0]);\n    }\n  } else {\n    throw new Error(\n      'gradientDifference should be a number or array with length equal to the number of parameters',\n    );\n  }\n\n  let filler;\n  if (typeof weights === 'number') {\n    let value = 1 / weights ** 2;\n    filler = () => value;\n  } else if (isArray(weights)) {\n    if (weights.length < data.x.length) {\n      let value = 1 / weights[0] ** 2;\n      filler = () => value;\n    } else {\n      filler = (i) => 1 / weights[i] ** 2;\n    }\n  } else {\n    throw new Error(\n      'weights should be a number or array with length equal to the number of data points',\n    );\n  }\n\n  let checkTimeout;\n  if (timeout !== undefined) {\n    if (typeof timeout !== 'number') {\n      throw new Error('timeout should be a number');\n    }\n    let endTime = Date.now() + timeout * 1000;\n    checkTimeout = () => Date.now() > endTime;\n  } else {\n    checkTimeout = () => false;\n  }\n\n  let weightSquare = new Array(data.x.length);\n  for (let i = 0; i < nbPoints; i++) {\n    weightSquare[i] = filler(i);\n  }\n\n  return {\n    checkTimeout,\n    minValues,\n    maxValues,\n    parameters,\n    weightSquare,\n    damping,\n    dampingStepUp,\n    dampingStepDown,\n    maxIterations,\n    errorTolerance,\n    centralDifference,\n    gradientDifference,\n    improvementThreshold,\n  };\n}\n","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} parameters - Array of current parameter values\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {Array} weightSquare - Square of weights\n * @return {number}\n */\nexport default function errorCalculation(\n  data,\n  parameters,\n  parameterizedFunction,\n  weightSquare,\n) {\n  let error = 0;\n  const func = parameterizedFunction(parameters);\n  for (let i = 0; i < data.x.length; i++) {\n    error += Math.pow(data.y[i] - func(data.x[i]), 2) / weightSquare[i];\n  }\n\n  return error;\n}\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 isArray 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 (!isArray(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 (!isArray(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 default rescale;\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\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));\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) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\n}\n","export function 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, Math.pow(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, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\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 */\nexport function 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 */\nexport function 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 */\nexport function 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 */\nexport function 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\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function 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\nexport function 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\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import { newArray } from './util';\n\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function 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","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n  checkNonEmpty,\n} from './util';\n\nexport class 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  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() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\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() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\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    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\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  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 resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\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: min,\n          max: 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  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    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[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    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\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 (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(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 (!Array.isArray(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\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[\n    Symbol.for('nodejs.util.inspect.custom')\n  ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\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\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\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    } else if (Array.isArray(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      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\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","import { AbstractMatrix } from '../matrix';\n\nexport default class 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","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class 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","export function 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","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class 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","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class 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 iter = 0;\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          iter = iter + 1;\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          iter = 0;\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","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function 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\nexport function 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","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Matrix}\n */\n\nexport default function gradientFunction(\n  data,\n  evaluatedData,\n  params,\n  gradientDifference,\n  paramFunction,\n  centralDifference,\n) {\n  const nbParams = params.length;\n  const nbPoints = data.x.length;\n  let ans = Matrix.zeros(nbParams, nbPoints);\n\n  let rowIndex = 0;\n  for (let param = 0; param < nbParams; param++) {\n    if (gradientDifference[param] === 0) continue;\n    let delta = gradientDifference[param];\n    let auxParams = params.slice();\n    auxParams[param] += delta;\n    let funcParam = paramFunction(auxParams);\n    if (!centralDifference) {\n      for (let point = 0; point < nbPoints; point++) {\n        ans.set(\n          rowIndex,\n          point,\n          (evaluatedData[point] - funcParam(data.x[point])) / delta,\n        );\n      }\n    } else {\n      auxParams = params.slice();\n      auxParams[param] -= delta;\n      delta *= 2;\n      let funcParam2 = paramFunction(auxParams);\n      for (let point = 0; point < nbPoints; point++) {\n        ans.set(\n          rowIndex,\n          point,\n          (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta,\n        );\n      }\n    }\n    rowIndex++;\n  }\n\n  return ans;\n}\n","import { inverse, Matrix } from 'ml-matrix';\n\nimport gradientFunction from './gradientFunction';\n\n/**\n * Matrix function over the samples\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} evaluatedData - Array of previous evaluated function values\n * @return {Matrix}\n */\nfunction matrixFunction(data, evaluatedData) {\n  const m = data.x.length;\n\n  let ans = new Matrix(m, 1);\n\n  for (let point = 0; point < m; point++) {\n    ans.set(point, 0, data.y[point] - evaluatedData[point]);\n  }\n  return ans;\n}\n\n/**\n * Iteration for Levenberg-Marquardt\n * @ignore\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {Array<number>} params - Array of previous parameter values\n * @param {number} damping - Levenberg-Marquardt parameter\n * @param {number|array} gradientDifference - The step size to approximate the jacobian matrix\n * @param {boolean} centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @return {Array<number>}\n */\nexport default function step(\n  data,\n  params,\n  damping,\n  gradientDifference,\n  parameterizedFunction,\n  centralDifference,\n  weights,\n) {\n  let value = damping;\n  let identity = Matrix.eye(params.length, params.length, value);\n\n  const func = parameterizedFunction(params);\n\n  let evaluatedData = new Float64Array(data.x.length);\n  for (let i = 0; i < data.x.length; i++) {\n    evaluatedData[i] = func(data.x[i]);\n  }\n\n  let gradientFunc = gradientFunction(\n    data,\n    evaluatedData,\n    params,\n    gradientDifference,\n    parameterizedFunction,\n    centralDifference,\n  );\n  let residualError = matrixFunction(data, evaluatedData);\n\n  let inverseMatrix = inverse(\n    identity.add(\n      gradientFunc.mmul(\n        gradientFunc.transpose().scale('row', { scale: weights }),\n      ),\n    ),\n  );\n\n  let jacobianWeigthResidualError = gradientFunc.mmul(\n    residualError.scale('row', { scale: weights }),\n  );\n\n  let perturbations = inverseMatrix.mmul(jacobianWeigthResidualError);\n\n  return {\n    perturbations,\n    jacobianWeigthResidualError,\n  };\n}\n","import checkOptions from './checkOptions';\nimport errorCalculation from './errorCalculation';\nimport step from './step';\n\n/**\n * Curve fitting algorithm\n * @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param {object} [options] - Options object\n * @param {number|array} [options.weights = 1] - weighting vector, if the length does not match with the number of data points, the vector is reconstructed with first value.\n * @param {number} [options.damping = 1e-2] - Levenberg-Marquardt parameter, small values of the damping parameter λ result in a Gauss-Newton update and large\nvalues of λ result in a gradient descent update\n * @param {number} [options.dampingStepDown = 9] - factor to reduce the damping (Levenberg-Marquardt parameter) when there is not an improvement when updating parameters.\n * @param {number} [options.dampingStepUp = 11] - factor to increase the damping (Levenberg-Marquardt parameter) when there is an improvement when updating parameters.\n * @param {number} [options.improvementThreshold = 1e-3] - the threshold to define an improvement through an update of parameters\n * @param {number|array} [options.gradientDifference = 10e-2] - The step size to approximate the jacobian matrix\n * @param {boolean} [options.centralDifference = false] - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param {Array<number>} [options.minValues] - Minimum allowed values for parameters\n * @param {Array<number>} [options.maxValues] - Maximum allowed values for parameters\n * @param {Array<number>} [options.initialValues] - Array of initial parameter values\n * @param {number} [options.maxIterations = 100] - Maximum of allowed iterations\n * @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point.\n * @param {number} [options.timeout] - maximum time running before throw in seconds.\n * @return {{parameterValues: Array<number>, parameterError: number, iterations: number}}\n */\nexport default function levenbergMarquardt(\n  data,\n  parameterizedFunction,\n  options = {},\n) {\n  let {\n    checkTimeout,\n    minValues,\n    maxValues,\n    parameters,\n    weightSquare,\n    damping,\n    dampingStepUp,\n    dampingStepDown,\n    maxIterations,\n    errorTolerance,\n    centralDifference,\n    gradientDifference,\n    improvementThreshold,\n  } = checkOptions(data, parameterizedFunction, options);\n\n  let error = errorCalculation(\n    data,\n    parameters,\n    parameterizedFunction,\n    weightSquare,\n  );\n\n  let converged = error <= errorTolerance;\n\n  let iteration = 0;\n  for (; iteration < maxIterations && !converged; iteration++) {\n    let previousError = error;\n\n    let { perturbations, jacobianWeigthResidualError } = step(\n      data,\n      parameters,\n      damping,\n      gradientDifference,\n      parameterizedFunction,\n      centralDifference,\n      weightSquare,\n    );\n\n    for (let k = 0; k < parameters.length; k++) {\n      parameters[k] = Math.min(\n        Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)),\n        maxValues[k],\n      );\n    }\n\n    error = errorCalculation(\n      data,\n      parameters,\n      parameterizedFunction,\n      weightSquare,\n    );\n\n    if (isNaN(error)) break;\n\n    let improvementMetric =\n      (previousError - error) /\n      perturbations\n        .transpose()\n        .mmul(perturbations.mulS(damping).add(jacobianWeigthResidualError))\n        .get(0, 0);\n\n    if (improvementMetric > improvementThreshold) {\n      damping = Math.max(damping / dampingStepDown, 1e-7);\n    } else {\n      error = previousError;\n      damping = Math.min(damping * dampingStepUp, 1e7);\n    }\n\n    if (checkTimeout()) {\n      throw new Error(\n        `The execution time is over to ${options.timeout} seconds`,\n      );\n    }\n\n    converged = error <= errorTolerance;\n  }\n\n  return {\n    parameterValues: parameters,\n    parameterError: error,\n    iterations: iteration,\n  };\n}\n","import LM from 'ml-levenberg-marquardt';\n\nconst LEVENBERG_MARQUARDT = 1;\n\nexport function selectMethod(optimizationOptions = {}) {\n  let { kind, options } = optimizationOptions;\n  kind = getKind(kind);\n  switch (kind) {\n    case LEVENBERG_MARQUARDT:\n      return {\n        algorithm: LM,\n        optimizationOptions: checkOptions(kind, options),\n      };\n    default:\n      throw new Error(`Unknown kind algorithm`);\n  }\n}\n\nfunction checkOptions(kind, options = {}) {\n  // eslint-disable-next-line default-case\n  switch (kind) {\n    case LEVENBERG_MARQUARDT:\n      return Object.assign({}, lmOptions, options);\n  }\n}\n\nfunction getKind(kind) {\n  if (typeof kind !== 'string') return kind;\n  switch (kind.toLowerCase().replace(/[^a-z]/g, '')) {\n    case 'lm':\n    case 'levenbergmarquardt':\n      return LEVENBERG_MARQUARDT;\n    default:\n      throw new Error(`Unknown kind algorithm`);\n  }\n}\n\nconst lmOptions = {\n  damping: 1.5,\n  maxIterations: 100,\n  errorTolerance: 1e-8,\n};\n","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","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n\nexport default function erfinv(x) {\n  let a = 0.147;\n  if (x === 0) 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","import {\n  ROOT_2LN2,\n  GAUSSIAN_EXP_FACTOR,\n  ROOT_PI_OVER_LN2,\n} from '../util/constants';\nimport erfinv from '../util/erfinv';\n\nexport class Gaussian {\n  /**\n   * @param {object} [options = {}]\n   * @param {number} [options.height=x] Define the height of the peak, by default area=1 (normalized)\n   * @param {number} [options.fwhm = 500] - Full Width at Half Maximum in the number of points in FWHM.\n   * @param {number} [options.sd] - Standard deviation, if it's defined options.fwhm will be ignored and the value will be computed sd * Math.sqrt(8 * Math.LN2);\n   */\n  constructor(options = {}) {\n    this.fwhm = options.sd\n      ? Gaussian.widthToFWHM(2 * options.sd)\n      : options.fwhm\n      ? options.fwhm\n      : 500;\n    this.height =\n      options.height === undefined\n        ? Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI) / this.fwhm\n        : options.height;\n  }\n  /**\n   * Calculate a gaussian shape\n   * @param {object} [options = {}]\n   * @param {number} [options.factor = 6] - Number of time to take fwhm to calculate length. Default covers 99.99 % of area.\n   * @param {number} [options.length = fwhm * factor + 1] - total number of points to calculate\n   * @return {Float64Array} y values\n   */\n\n  getData(options = {}) {\n    let { length, factor = this.getFactor() } = options;\n\n    if (!length) {\n      length = Math.min(Math.ceil(this.fwhm * factor), Math.pow(2, 25) - 1);\n      if (length % 2 === 0) length++;\n    }\n\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n      data[i] = this.fct(i - center) * this.height;\n      data[length - 1 - i] = data[i];\n    }\n\n    return data;\n  }\n\n  /**\n   * Return a parameterized function of a gaussian shape (see README for equation).\n   * @param {number} x - x value to calculate.\n   * @returns {number} - the y value of gaussian with the current parameters.\n   */\n  fct(x) {\n    return Gaussian.fct(x, this.fwhm);\n  }\n\n  /**\n   * Calculate the number of times FWHM allows to reach a specific area coverage\n   * @param {number} [area=0.9999]\n   * @returns {number}\n   */\n  getFactor(area = 0.9999) {\n    return Gaussian.getFactor(area);\n  }\n\n  /**\n   * Calculate the area of the shape.\n   * @returns {number} - returns the area.\n   */\n\n  getArea() {\n    return Gaussian.getArea(this.fwhm, { height: this.height });\n  }\n\n  /**\n   * Compute the value of Full Width at Half Maximum (FWHM) from the width between the inflection points.\n   * //https://mathworld.wolfram.com/GaussianFunction.html\n   * @param {number} width - Width between the inflection points\n   * @returns {number} fwhm\n   */\n  widthToFWHM(width) {\n    //https://mathworld.wolfram.com/GaussianFunction.html\n    return Gaussian.widthToFWHM(width);\n  }\n\n  /**\n   * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n   * //https://mathworld.wolfram.com/GaussianFunction.html\n   * @param {number} fwhm - Full Width at Half Maximum.\n   * @returns {number} width\n   */\n  fwhmToWidth(fwhm = this.fwhm) {\n    return Gaussian.fwhmToWidth(fwhm);\n  }\n\n  /**\n   * set a new full width at half maximum\n   * @param {number} fwhm - full width at half maximum\n   */\n  setFWHM(fwhm) {\n    this.fwhm = fwhm;\n  }\n\n  /**\n   * set a new height\n   * @param {number} height - The maximal intensity of the shape.\n   */\n  setHeight(height) {\n    this.height = height;\n  }\n}\n\n/**\n * Return a parameterized function of a gaussian shape (see README for equation).\n * @param {number} x - x value to calculate.\n * @param {number} fwhm - full width half maximum\n * @returns {number} - the y value of gaussian with the current parameters.\n */\nGaussian.fct = function fct(x, fwhm = 500) {\n  return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n};\n\n/**\n * Compute the value of Full Width at Half Maximum (FWHM) from the width between the inflection points.\n * //https://mathworld.wolfram.com/GaussianFunction.html\n * @param {number} width - Width between the inflection points\n * @returns {number} fwhm\n */\nGaussian.widthToFWHM = function widthToFWHM(width) {\n  return width * ROOT_2LN2;\n};\n\n/**\n * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n * //https://mathworld.wolfram.com/GaussianFunction.html\n * @param {number} fwhm - Full Width at Half Maximum.\n * @returns {number} width\n */\nGaussian.fwhmToWidth = function fwhmToWidth(fwhm) {\n  return fwhm / ROOT_2LN2;\n};\n\n/**\n * Calculate the area of a specific shape.\n * @param {number} fwhm - Full width at half maximum.\n * @param {object} [options = {}] - options.\n * @param {number} [options.height = 1] - Maximum y value of the shape.\n * @returns {number} - returns the area of the specific shape and parameters.\n */\n\nGaussian.getArea = function getArea(fwhm, options = {}) {\n  let { height = 1 } = options;\n  return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n};\n\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage.\n * @param {number} [area=0.9999]\n * @returns {number}\n */\nGaussian.getFactor = function getFactor(area = 0.9999) {\n  return Math.sqrt(2) * erfinv(area);\n};\n","import { ROOT_THREE } from '../util/constants';\n\nexport class Lorentzian {\n  /**\n   * @param {object} [options = {}]\n   * @param {number} [options.height=x] Define the height of the peak, by default area=1 (normalized)\n   * @param {number} [options.fwhm = 500] - Full Width at Half Maximum in the number of points in FWHM.\n   * @param {number} [options.sd] - Standard deviation, if it's defined options.fwhm will be ignored and the value will be computed sd * Math.sqrt(8 * Math.LN2);\n   */\n  constructor(options = {}) {\n    this.fwhm = options.fwhm === undefined ? 500 : options.fwhm;\n    this.height =\n      options.height === undefined ? 2 / Math.PI / this.fwhm : options.height;\n  }\n  /**\n   * Calculate a lorentzian shape\n   * @param {object} [options = {}]\n   * @param {number} [options.factor = Math.tan(Math.PI * (0.9999 - 0.5))] - Number of time to take fwhm to calculate length. Default covers 99.99 % of area.\n   * @param {number} [options.length = fwhm * factor + 1] - total number of points to calculate\n   * @return {Float64Array} y values\n   */\n  getData(options = {}) {\n    let { length, factor = this.getFactor() } = options;\n\n    if (!length) {\n      length = Math.min(Math.ceil(this.fwhm * factor), Math.pow(2, 25) - 1);\n      if (length % 2 === 0) length++;\n    }\n\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n      data[i] = this.fct(i - center) * this.height;\n      data[length - 1 - i] = data[i];\n    }\n    return data;\n  }\n\n  /**\n   * Return a parameterized function of a lorentzian shape (see README for equation).\n   * @param {number} x - x value to calculate.\n   * @returns {number} - the y value of lorentzian with the current parameters.\n   */\n  fct(x) {\n    return Lorentzian.fct(x, this.fwhm);\n  }\n\n  /**\n   * Calculate the number of times FWHM allows to reach a specific area coverage\n   * @param {number} [area=0.9999]\n   * @returns {number}\n   */\n  getFactor(area = 0.9999) {\n    return Lorentzian.getFactor(area);\n  }\n\n  /**\n   * Calculate the area of the shape.\n   * @returns {number} - returns the area.\n   */\n\n  getArea() {\n    return Lorentzian.getArea(this.fwhm, { height: this.height });\n  }\n\n  /**\n   * Compute the value of width between the inflection points of a specific shape from Full Width at Half Maximum (FWHM).\n   * //https://mathworld.wolfram.com/LorentzianFunction.html\n   * @param {number} [fwhm] - Full Width at Half Maximum.\n   * @returns {number} width between the inflection points\n   */\n  fwhmToWidth(fwhm = this.fwhm) {\n    return Lorentzian.fwhmToWidth(fwhm);\n  }\n\n  /**\n   * Compute the value of Full Width at Half Maximum (FWHM) of a specific shape from the width between the inflection points.\n   * //https://mathworld.wolfram.com/LorentzianFunction.html\n   * @param {number} [width] Width between the inflection points\n   * @returns {number} fwhm\n   */\n  widthToFWHM(width) {\n    return Lorentzian.widthToFWHM(width);\n  }\n  /**\n   * set a new full width at half maximum\n   * @param {number} fwhm - full width at half maximum\n   */\n  setFWHM(fwhm) {\n    this.fwhm = fwhm;\n  }\n\n  /**\n   * set a new height\n   * @param {number} height - The maximal intensity of the shape.\n   */\n  setHeight(height) {\n    this.height = height;\n  }\n}\n\n/**\n * Return a parameterized function of a gaussian shape (see README for equation).\n * @param {number} x - x value to calculate.\n * @param {number} fwhm - full width half maximum\n * @returns {number} - the y value of gaussian with the current parameters.\n */\nLorentzian.fct = function fct(x, fwhm) {\n  const squareFWHM = fwhm * fwhm;\n  return squareFWHM / (4 * Math.pow(x, 2) + squareFWHM);\n};\n\n/**\n * Compute the value of width between the inflection points of a specific shape from Full Width at Half Maximum (FWHM).\n * //https://mathworld.wolfram.com/LorentzianFunction.html\n * @param {number} [fwhm] - Full Width at Half Maximum.\n * @returns {number} width between the inflection points\n */\nLorentzian.fwhmToWidth = function fwhmToWidth(fwhm) {\n  return fwhm / ROOT_THREE;\n};\n\n/**\n * Compute the value of Full Width at Half Maximum (FWHM) of a specific shape from the width between the inflection points.\n * //https://mathworld.wolfram.com/LorentzianFunction.html\n * @param {number} [width] Width between the inflection points\n * @returns {number} fwhm\n */\nLorentzian.widthToFWHM = function widthToFWHM(width) {\n  return width * ROOT_THREE;\n};\n\n/**\n * Calculate the area of a specific shape.\n * @param {number} fwhm - Full width at half maximum.\n * @param {*} [options = {}] - options.\n * @param {number} [options.height = 1] - Maximum y value of the shape.\n * @returns {number} - returns the area of the specific shape and parameters.\n */\nLorentzian.getArea = function getArea(fwhm, options = {}) {\n  let { height = 1 } = options;\n\n  return (height * Math.PI * fwhm) / 2;\n};\n\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage\n * @param {number} [area=0.9999]\n * @returns {number}\n */\nLorentzian.getFactor = function getFactor(area = 0.9999) {\n  return 2 * Math.tan(Math.PI * (area - 0.5));\n};\n","import {\n  GAUSSIAN_EXP_FACTOR,\n  ROOT_2LN2_MINUS_ONE,\n  ROOT_PI_OVER_LN2,\n} from '../util/constants';\n\nimport { Gaussian } from './Gaussian';\nimport { Lorentzian } from './Lorentzian';\n\nexport class PseudoVoigt {\n  /**\n   * @param {object} [options={}]\n   * @param {number} [options.height=x] Define the height of the peak, by default area=1 (normalized)\n   * @param {number} [options.fwhm=500] - Full Width at Half Maximum in the number of points in FWHM.\n   * @param {number} [options.mu=0.5] - ratio of gaussian contribution.\n   */\n\n  constructor(options = {}) {\n    this.mu = options.mu === undefined ? 0.5 : options.mu;\n    this.fwhm = options.fwhm === undefined ? 500 : options.fwhm;\n    this.height =\n      options.height === undefined\n        ? 1 /\n          ((this.mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * this.fwhm +\n            ((1 - this.mu) * this.fwhm * Math.PI) / 2)\n        : options.height;\n  }\n\n  /**\n   * Calculate a linear combination of gaussian and lorentzian function width an same full width at half maximum\n   * @param { object } [options = {}]\n   * @param { number } [options.factor = 2 * Math.tan(Math.PI * (0.9999 - 0.5))] - Number of time to take fwhm in the calculation of the length.Default covers 99.99 % of area.\n   * @param { number } [options.length = fwhm * factor + 1] - total number of points to calculate\n   * @return { object } - { fwhm, data<Float64Array>} - An with the number of points at half maximum and the array of y values covering the 99.99 % of the area.\n   */\n\n  getData(options = {}) {\n    let { length, factor = this.getFactor() } = options;\n    if (!length) {\n      length = Math.ceil(this.fwhm * factor);\n      if (length % 2 === 0) length++;\n    }\n\n    const center = (length - 1) / 2;\n\n    let data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n      data[i] = this.fct(i - center) * this.height;\n      data[length - 1 - i] = data[i];\n    }\n\n    return data;\n  }\n\n  /**\n   * Return a parameterized function of a linear combination of Gaussian and Lorentzian shapes where the full width at half maximum are the same for both kind of shapes (see README for equation).\n   * @param {number} [x] x value to calculate.\n   * @returns {number} - the y value of a pseudo voigt with the current parameters.\n   */\n\n  fct(x) {\n    return PseudoVoigt.fct(x, this.fwhm, this.mu);\n  }\n\n  /**\n   * Calculate the number of times FWHM allows to reach a specific area coverage\n   * @param {number} [area=0.9999] - required area to be coverage\n   * @param {number} [mu=this.mu] - ratio of gaussian contribution.\n   * @returns {number}\n   */\n  getFactor(area = 0.9999, mu = this.mu) {\n    return PseudoVoigt.getFactor(area, mu);\n  }\n\n  /**\n   * Calculate the area of the shape.\n   * @returns {number} - returns the area.\n   */\n  getArea() {\n    return PseudoVoigt.getArea(this.fwhm, { height: this.height, mu: this.mu });\n  }\n\n  /**\n   * Compute the value of Full Width at Half Maximum (FMHM) from width between the inflection points.\n   * @param {number} width - width between the inflection points\n   * @param {number} [mu = 0.5] - ratio of gaussian contribution.\n   * @returns {number} Full Width at Half Maximum (FMHM).\n   */\n  widthToFWHM(width, mu) {\n    return PseudoVoigt.widthToFWHM(width, mu);\n  }\n  /**\n   * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n   * @param {number} fwhm - Full Width at Half Maximum.\n   * @param {number} [mu] - ratio of gaussian contribution.\n   * @returns {number} width between the inflection points.\n   */\n  fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n    return PseudoVoigt.fwhmToWidth(fwhm, mu);\n  }\n\n  /**\n   * set a new full width at half maximum\n   * @param {number} fwhm - full width at half maximum\n   */\n  setFWHM(fwhm) {\n    this.fwhm = fwhm;\n  }\n\n  /**\n   * set a new height\n   * @param {number} height - The maximal intensity of the shape.\n   */\n  setHeight(height) {\n    this.height = height;\n  }\n\n  /**\n   * set a new mu\n   * @param {number} mu - ratio of gaussian contribution.\n   */\n  setMu(mu) {\n    this.mu = mu;\n  }\n}\n\n/**\n * Return a parameterized function of a gaussian shape (see README for equation).\n * @param {number} x - x value to calculate.\n * @param {number} fwhm - full width half maximum\n * @param {number} [mu=0.5] - ratio of gaussian contribution.\n * @returns {number} - the y value of gaussian with the current parameters.\n */\nPseudoVoigt.fct = function fct(x, fwhm, mu = 0.5) {\n  return (1 - mu) * Lorentzian.fct(x, fwhm) + mu * Gaussian.fct(x, fwhm);\n};\n\n/**\n * Compute the value of Full Width at Half Maximum (FMHM) from width between the inflection points.\n * @param {number} width - width between the inflection points\n * @param {number} [mu = 0.5] - ratio of gaussian contribution.\n * @returns {number} Full Width at Half Maximum (FMHM).\n */\nPseudoVoigt.widthToFWHM = function widthToFWHM(width, mu = 0.5) {\n  return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\n/**\n * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n * @param {number} fwhm - Full Width at Half Maximum.\n * @param {number} [mu = 0.5] - ratio of gaussian contribution.\n * @returns {number} width between the inflection points.\n */\nPseudoVoigt.fwhmToWidth = function fwhmToWidth(fwhm, mu = 0.5) {\n  return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\n\n/**\n * Calculate the area of a specific shape.\n * @param {number} fwhm - Full width at half maximum.\n * @param {*} [options = {}] - options.\n * @param {number} [options.height = 1] - Maximum y value of the shape.\n * @param {number} [options.mu = 0.5] - ratio of gaussian contribution.\n * @returns {number} - returns the area of the specific shape and parameters.\n */\nPseudoVoigt.getArea = function getArea(fwhm, options = {}) {\n  let { height = 1, mu = 0.5 } = options;\n  return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\n\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage\n * @param {number} [area=0.9999] - required area to be coverage\n * @param {number} [mu=this.mu] - ratio of gaussian contribution.\n * @returns {number}\n */\nPseudoVoigt.getFactor = function getFactor(area = 0.9999, mu = 0.5) {\n  return mu < 1 ? Lorentzian.getFactor(area) : Gaussian.getFactor(area);\n};\n","import { PseudoVoigt } from 'ml-peak-shape-generator';\n\n/**\n * This function calculates the spectrum as a sum of linear combination of gaussian and lorentzian functions. The pseudo voigt\n * parameters are divided in 4 batches. 1st: centers; 2nd: heights; 3th: widths; 4th: mu's ;\n * @param t Ordinate value\n * @param p Lorentzian parameters\n * @returns {*}\n */\n\nexport function sumOfGaussianLorentzians(p) {\n  return function (t) {\n    let nL = p.length / 4;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      result +=\n        p[i + nL] * PseudoVoigt.fct(t - p[i], p[i + nL * 2], p[i + nL * 3]);\n    }\n    return result;\n  };\n}\n","import { Gaussian } from 'ml-peak-shape-generator';\n/**\n * This function calculates the spectrum as a sum of gaussian functions. The Gaussian\n * parameters are divided in 3 batches. 1st: centers; 2nd: height; 3th: widths;\n * @param t Ordinate values\n * @param p Gaussian parameters\n * @returns {*}\n */\n\nexport function sumOfGaussians(p) {\n  return function (t) {\n    let nL = p.length / 3;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      result += p[i + nL] * Gaussian.fct(t - p[i], p[i + nL * 2]);\n    }\n    return result;\n  };\n}\n","import { Lorentzian } from 'ml-peak-shape-generator';\n\n/**\n * This function calculates the spectrum as a sum of lorentzian functions. The Lorentzian\n * parameters are divided in 3 batches. 1st: centers; 2nd: heights; 3th: widths;\n * @param t Ordinate values\n * @param p Lorentzian parameters\n * @returns {*}\n */\n\nexport function sumOfLorentzians(p) {\n  return function (t) {\n    let nL = p.length / 3;\n    let result = 0;\n    for (let i = 0; i < nL; i++) {\n      result += p[i + nL] * Lorentzian.fct(t - p[i], p[i + nL * 2]);\n    }\n    return result;\n  };\n}\n","import getMaxValue from 'ml-array-max';\n\nimport { selectMethod } from './selectMethod';\nimport { sumOfGaussianLorentzians } from './shapes/sumOfGaussianLorentzians';\nimport { sumOfGaussians } from './shapes/sumOfGaussians';\nimport { sumOfLorentzians } from './shapes/sumOfLorentzians';\n\nconst STATE_INIT = 0;\nconst STATE_MIN = 1;\nconst STATE_MAX = 2;\nconst STATE_GRADIENT_DIFFERENCE = 3;\n\nconst X = 0;\nconst Y = 1;\nconst WIDTH = 2;\nconst MU = 3;\n\nconst keys = ['x', 'y', 'width', 'mu'];\n/**\n * Fits a set of points to the sum of a set of bell functions.\n * @param {object} data - An object containing the x and y data to be fitted.\n * @param {array} peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param {object} [options = {}]\n * @param {object} [options.shape={}] - it's specify the kind of shape used to fitting.\n * @param {string} [options.shape.kind = 'gaussian'] - kind of shape; lorentzian, gaussian and pseudovoigt are supported.\n * @param {object} [options.optimization = {}] - it's specify the kind and options of the algorithm use to optimize parameters.\n * @param {object} [options.optimization.kind = 'lm'] - kind of algorithm. By default it's levenberg-marquardt.\n * @param {object} [options.optimization.options = {}] - options for the specific kind of algorithm.\n * @param {number} [options.optimization.options.timeout] - maximum time running before break in seconds.\n * @param {number} [options.optimization.options.damping=1.5]\n * @param {number} [options.optimization.options.maxIterations=100]\n * @param {number} [options.optimization.options.errorTolerance=1e-8]\n * @returns {object} - A object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n  let {\n    shape = { kind: 'gaussian' },\n    optimization = {\n      kind: 'lm',\n    },\n  } = options;\n\n  let {\n    minFactorWidth = 0.25,\n    maxFactorWidth = 4,\n    minFactorX = 2,\n    maxFactorX = 2,\n    minFactorY = 0,\n    maxFactorY = 1.5,\n    minMuValue = 0,\n    maxMuValue = 1,\n    xGradientDifference,\n    yGradientDifference = 1e-3,\n    widthGradientDifference,\n    muGradientDifference = 0.01,\n  } = optimization;\n\n  peaks = JSON.parse(JSON.stringify(peaks));\n\n  if (typeof shape.kind !== 'string') {\n    throw new Error('kind should be a string');\n  }\n\n  let kind = shape.kind.toLowerCase().replace(/[^a-z]/g, '');\n\n  let x = data.x;\n  let maxY = getMaxValue(data.y);\n  let y = new Array(x.length);\n  for (let i = 0; i < x.length; i++) {\n    y[i] = data.y[i] / maxY;\n  }\n\n  let nbParams;\n  let paramsFunc;\n  switch (kind) {\n    case 'gaussian':\n      nbParams = 3;\n      paramsFunc = sumOfGaussians;\n      break;\n    case 'lorentzian':\n      nbParams = 3;\n      paramsFunc = sumOfLorentzians;\n      break;\n    case 'pseudovoigt':\n      nbParams = 4;\n      paramsFunc = sumOfGaussianLorentzians;\n      break;\n    default:\n      throw new Error('kind of shape is not supported');\n  }\n\n  const getValueOptions = {\n    maxY,\n    minFactorX,\n    maxFactorX,\n    minFactorY,\n    maxFactorY,\n    minMuValue,\n    maxMuValue,\n    minFactorWidth,\n    maxFactorWidth,\n    xGradientDifference,\n    yGradientDifference,\n    widthGradientDifference,\n    muGradientDifference,\n  };\n  let nbShapes = peaks.length;\n  let pMin = new Float64Array(nbShapes * nbParams);\n  let pMax = new Float64Array(nbShapes * nbParams);\n  let pInit = new Float64Array(nbShapes * nbParams);\n  let gradientDifference = new Float64Array(nbShapes * nbParams);\n  for (let i = 0; i < nbShapes; i++) {\n    let peak = peaks[i];\n    for (let s = 0; s < nbParams; s++) {\n      pInit[i + s * nbShapes] = getValue(s, peak, STATE_INIT, getValueOptions);\n      pMin[i + s * nbShapes] = getValue(s, peak, STATE_MIN, getValueOptions);\n      pMax[i + s * nbShapes] = getValue(s, peak, STATE_MAX, getValueOptions);\n      gradientDifference[i + s * nbShapes] = getValue(\n        s,\n        peak,\n        STATE_GRADIENT_DIFFERENCE,\n        getValueOptions,\n      );\n    }\n  }\n\n  let { algorithm, optimizationOptions } = selectMethod(optimization);\n\n  optimizationOptions.minValues = pMin;\n  optimizationOptions.maxValues = pMax;\n  optimizationOptions.initialValues = pInit;\n  optimizationOptions.gradientDifference = gradientDifference;\n\n  let pFit = algorithm({ x, y }, paramsFunc, optimizationOptions);\n\n  let { parameterError: error, iterations } = pFit;\n  let result = { error, iterations, peaks };\n  for (let i = 0; i < peaks.length; i++) {\n    pFit.parameterValues[i + peaks.length] *= maxY;\n    for (let s = 0; s < nbParams; s++) {\n      // we modify the optimized parameters\n      peaks[i][keys[s]] = pFit.parameterValues[i + s * peaks.length];\n    }\n  }\n\n  return result;\n}\n\nfunction getValue(parameterIndex, peak, state, options) {\n  let maxY = options.maxY;\n  switch (state) {\n    case STATE_INIT:\n      switch (parameterIndex) {\n        case X:\n          return peak.x;\n        case Y:\n          return peak.y / maxY;\n        case WIDTH:\n          return peak.width;\n        case MU:\n          return peak.mu || 0.5;\n        default:\n          throw new Error('The parameter is not supported');\n      }\n    case STATE_GRADIENT_DIFFERENCE:\n      switch (parameterIndex) {\n        case X:\n          return peak.xGradientDifference !== undefined\n            ? peak.xGradientDifference\n            : options.xGradientDifference !== undefined\n            ? options.xGradientDifference\n            : peak.width / 2e3;\n        case Y:\n          return peak.yGradientDifference !== undefined\n            ? peak.yGradientDifference\n            : options.yGradientDifference;\n        case WIDTH:\n          return peak.widthGradientDifference !== undefined\n            ? peak.widthGradientDifference\n            : options.widthGradientDifference !== undefined\n            ? options.widthGradientDifference\n            : peak.width / 2e3;\n        case MU:\n          return peak.muGradientDifference !== undefined\n            ? peak.muGradientDifference\n            : options.muGradientDifference;\n        default:\n          throw new Error('The parameter is not supported');\n      }\n    case STATE_MIN:\n      switch (parameterIndex) {\n        case X:\n          return peak.x - peak.width * options.minFactorX;\n        case Y:\n          return (peak.y / maxY) * options.minFactorY;\n        case WIDTH:\n          return peak.width * options.minFactorWidth;\n        case MU:\n          return options.minMuValue;\n        default:\n          throw new Error('The parameter is not supported');\n      }\n    case STATE_MAX:\n      switch (parameterIndex) {\n        case X:\n          return peak.x + peak.width * options.maxFactorX;\n        case Y:\n          return (peak.y / maxY) * options.maxFactorY;\n        case WIDTH:\n          return peak.width * options.maxFactorWidth;\n        case MU:\n          return options.maxMuValue;\n        default:\n          throw new Error('The parameter is not supported');\n      }\n    default:\n      throw Error('the state is not supported');\n  }\n}\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","options","arguments","length","undefined","isArray","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","Error","maxValue","i","checkOptions","data","parameterizedFunction","timeout","minValues","maxValues","initialValues","weights","damping","dampingStepUp","dampingStepDown","maxIterations","errorTolerance","centralDifference","gradientDifference","improvementThreshold","x","y","parameters","Array","fill","nbPoints","parLen","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","filler","value","checkTimeout","endTime","Date","now","weightSquare","errorCalculation","error","func","Math","pow","min","minValue","rescale","output","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","constructor","name","inspectData","rows","columns","maxI","maxJ","result","line","j","push","formatNumber","get","join","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","e","slice","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","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","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","arg0","powS","powM","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","array","checkNonEmpty","isEmpty","sumByRow","sum","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","rowVector","columnVector","zeros","ones","rand","random","randInt","interval","eye","diag","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","NaN","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","WrapperMatrix2D","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","col","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","isNaN","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","useSVD","leftHandSide","rightHandSide","gradientFunction","evaluatedData","params","paramFunction","nbParams","ans","param","delta","auxParams","funcParam","point","funcParam2","matrixFunction","step","gradientFunc","residualError","inverseMatrix","jacobianWeigthResidualError","perturbations","levenbergMarquardt","converged","iteration","previousError","improvementMetric","parameterValues","parameterError","iterations","LEVENBERG_MARQUARDT","selectMethod","optimizationOptions","kind","getKind","algorithm","LM","assign","lmOptions","toLowerCase","replace","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","PI","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","fwhm","sd","widthToFWHM","height","getData","getFactor","fct","area","getArea","width","fwhmToWidth","setFWHM","setHeight","Lorentzian","squareFWHM","PseudoVoigt","mu","setMu","sumOfGaussianLorentzians","nL","sumOfGaussians","sumOfLorentzians","STATE_INIT","STATE_MIN","STATE_MAX","STATE_GRADIENT_DIFFERENCE","WIDTH","MU","keys","optimize","peaks","shape","optimization","minFactorWidth","maxFactorWidth","minFactorX","maxFactorX","minFactorY","maxFactorY","minMuValue","maxMuValue","xGradientDifference","yGradientDifference","widthGradientDifference","muGradientDifference","JSON","parse","stringify","maxY","getMaxValue","paramsFunc","getValueOptions","nbShapes","pMin","pMax","pInit","peak","getValue","pFit","parameterIndex","state"],"mappings":";;;;;;;;;;;;EAAA,MAAMA,QAAQ,GAAGC,MAAM,CAACC,SAAP,CAAiBF,QAAlC;EAEe,SAASG,UAAT,CAAoBC,MAApB,EAA4B;EACzC,SAAOJ,QAAQ,CAACK,IAAT,CAAcD,MAAd,EAAsBE,QAAtB,CAA+B,QAA/B,CAAP;EACD;;ECFD,SAASC,GAAT,CAAaC,KAAb,EAAoB;EAClB,MAAIC,OAAO,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACG,UAAO,CAACL,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIN,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIC,kBAAkB,GAAGN,OAAO,CAACO,SAAjC;EAAA,MACIA,SAAS,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,CAAhC,GAAoCA,kBADpD;EAAA,MAEIE,gBAAgB,GAAGR,OAAO,CAACS,OAF/B;EAAA,MAGIA,OAAO,GAAGD,gBAAgB,KAAK,KAAK,CAA1B,GAA8BT,KAAK,CAACG,MAApC,GAA6CM,gBAH3D;;EAKA,MAAID,SAAS,GAAG,CAAZ,IAAiBA,SAAS,IAAIR,KAAK,CAACG,MAApC,IAA8C,CAACQ,MAAM,CAACC,SAAP,CAAiBJ,SAAjB,CAAnD,EAAgF;EAC9E,UAAM,IAAIK,KAAJ,CAAU,0DAAV,CAAN;EACD;;EAED,MAAIH,OAAO,IAAIF,SAAX,IAAwBE,OAAO,GAAGV,KAAK,CAACG,MAAxC,IAAkD,CAACQ,MAAM,CAACC,SAAP,CAAiBF,OAAjB,CAAvD,EAAkF;EAChF,UAAM,IAAIG,KAAJ,CAAU,+EAAV,CAAN;EACD;;EAED,MAAIC,QAAQ,GAAGd,KAAK,CAACQ,SAAD,CAApB;;EAEA,OAAK,IAAIO,CAAC,GAAGP,SAAS,GAAG,CAAzB,EAA4BO,CAAC,GAAGL,OAAhC,EAAyCK,CAAC,EAA1C,EAA8C;EAC5C,QAAIf,KAAK,CAACe,CAAD,CAAL,GAAWD,QAAf,EAAyBA,QAAQ,GAAGd,KAAK,CAACe,CAAD,CAAhB;EAC1B;;EAED,SAAOD,QAAP;EACD;;EC/Bc,SAASE,YAAT,CAAsBC,IAAtB,EAA4BC,qBAA5B,EAAmDjB,OAAnD,EAA4D;EACzE,MAAI;EACFkB,IAAAA,OADE;EAEFC,IAAAA,SAFE;EAGFC,IAAAA,SAHE;EAIFC,IAAAA,aAJE;EAKFC,IAAAA,OAAO,GAAG,CALR;EAMFC,IAAAA,OAAO,GAAG,IANR;EAOFC,IAAAA,aAAa,GAAG,EAPd;EAQFC,IAAAA,eAAe,GAAG,CARhB;EASFC,IAAAA,aAAa,GAAG,GATd;EAUFC,IAAAA,cAAc,GAAG,IAVf;EAWFC,IAAAA,iBAAiB,GAAG,KAXlB;EAYFC,IAAAA,kBAAkB,GAAG,KAZnB;EAaFC,IAAAA,oBAAoB,GAAG;EAbrB,MAcA9B,OAdJ;;EAgBA,MAAIuB,OAAO,IAAI,CAAf,EAAkB;EAChB,UAAM,IAAIX,KAAJ,CAAU,8CAAV,CAAN;EACD,GAFD,MAEO,IAAI,CAACI,IAAI,CAACe,CAAN,IAAW,CAACf,IAAI,CAACgB,CAArB,EAAwB;EAC7B,UAAM,IAAIpB,KAAJ,CAAU,+CAAV,CAAN;EACD,GAFM,MAEA,IACL,CAACR,UAAO,CAACY,IAAI,CAACe,CAAN,CAAR,IACAf,IAAI,CAACe,CAAL,CAAO7B,MAAP,GAAgB,CADhB,IAEA,CAACE,UAAO,CAACY,IAAI,CAACgB,CAAN,CAFR,IAGAhB,IAAI,CAACgB,CAAL,CAAO9B,MAAP,GAAgB,CAJX,EAKL;EACA,UAAM,IAAIU,KAAJ,CACJ,sEADI,CAAN;EAGD,GATM,MASA,IAAII,IAAI,CAACe,CAAL,CAAO7B,MAAP,KAAkBc,IAAI,CAACgB,CAAL,CAAO9B,MAA7B,EAAqC;EAC1C,UAAM,IAAIU,KAAJ,CAAU,qDAAV,CAAN;EACD;;EAED,MAAIqB,UAAU,GACZZ,aAAa,IAAI,IAAIa,KAAJ,CAAUjB,qBAAqB,CAACf,MAAhC,EAAwCiC,IAAxC,CAA6C,CAA7C,CADnB;EAGA,MAAIC,QAAQ,GAAGpB,IAAI,CAACgB,CAAL,CAAO9B,MAAtB;EACA,MAAImC,MAAM,GAAGJ,UAAU,CAAC/B,MAAxB;EACAkB,EAAAA,SAAS,GAAGA,SAAS,IAAI,IAAIc,KAAJ,CAAUG,MAAV,EAAkBF,IAAlB,CAAuBzB,MAAM,CAAC4B,gBAA9B,CAAzB;EACAnB,EAAAA,SAAS,GAAGA,SAAS,IAAI,IAAIe,KAAJ,CAAUG,MAAV,EAAkBF,IAAlB,CAAuBzB,MAAM,CAAC6B,gBAA9B,CAAzB;;EAEA,MAAInB,SAAS,CAAClB,MAAV,KAAqBiB,SAAS,CAACjB,MAAnC,EAA2C;EACzC,UAAM,IAAIU,KAAJ,CAAU,+CAAV,CAAN;EACD;;EAED,MAAI,CAACR,UAAO,CAAC6B,UAAD,CAAZ,EAA0B;EACxB,UAAM,IAAIrB,KAAJ,CAAU,gCAAV,CAAN;EACD;;EAED,MAAI,OAAOiB,kBAAP,KAA8B,QAAlC,EAA4C;EAC1CA,IAAAA,kBAAkB,GAAG,IAAIK,KAAJ,CAAUD,UAAU,CAAC/B,MAArB,EAA6BiC,IAA7B,CAAkCN,kBAAlC,CAArB;EACD,GAFD,MAEO,IAAIzB,UAAO,CAACyB,kBAAD,CAAX,EAAiC;EACtC,QAAIA,kBAAkB,CAAC3B,MAAnB,KAA8BmC,MAAlC,EAA0C;EACxCR,MAAAA,kBAAkB,GAAG,IAAIK,KAAJ,CAAUG,MAAV,EAAkBF,IAAlB,CAAuBN,kBAAkB,CAAC,CAAD,CAAzC,CAArB;EACD;EACF,GAJM,MAIA;EACL,UAAM,IAAIjB,KAAJ,CACJ,8FADI,CAAN;EAGD;;EAED,MAAI4B,MAAJ;;EACA,MAAI,OAAOlB,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,QAAImB,KAAK,GAAG,IAAInB,OAAO,IAAI,CAA3B;;EACAkB,IAAAA,MAAM,GAAG,MAAMC,KAAf;EACD,GAHD,MAGO,IAAIrC,UAAO,CAACkB,OAAD,CAAX,EAAsB;EAC3B,QAAIA,OAAO,CAACpB,MAAR,GAAiBc,IAAI,CAACe,CAAL,CAAO7B,MAA5B,EAAoC;EAClC,UAAIuC,KAAK,GAAG,IAAInB,OAAO,CAAC,CAAD,CAAP,IAAc,CAA9B;;EACAkB,MAAAA,MAAM,GAAG,MAAMC,KAAf;EACD,KAHD,MAGO;EACLD,MAAAA,MAAM,GAAI1B,CAAD,IAAO,IAAIQ,OAAO,CAACR,CAAD,CAAP,IAAc,CAAlC;EACD;EACF,GAPM,MAOA;EACL,UAAM,IAAIF,KAAJ,CACJ,oFADI,CAAN;EAGD;;EAED,MAAI8B,YAAJ;;EACA,MAAIxB,OAAO,KAAKf,SAAhB,EAA2B;EACzB,QAAI,OAAOe,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIN,KAAJ,CAAU,4BAAV,CAAN;EACD;;EACD,QAAI+B,OAAO,GAAGC,IAAI,CAACC,GAAL,KAAa3B,OAAO,GAAG,IAArC;;EACAwB,IAAAA,YAAY,GAAG,MAAME,IAAI,CAACC,GAAL,KAAaF,OAAlC;EACD,GAND,MAMO;EACLD,IAAAA,YAAY,GAAG,MAAM,KAArB;EACD;;EAED,MAAII,YAAY,GAAG,IAAIZ,KAAJ,CAAUlB,IAAI,CAACe,CAAL,CAAO7B,MAAjB,CAAnB;;EACA,OAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsB,QAApB,EAA8BtB,CAAC,EAA/B,EAAmC;EACjCgC,IAAAA,YAAY,CAAChC,CAAD,CAAZ,GAAkB0B,MAAM,CAAC1B,CAAD,CAAxB;EACD;;EAED,SAAO;EACL4B,IAAAA,YADK;EAELvB,IAAAA,SAFK;EAGLC,IAAAA,SAHK;EAILa,IAAAA,UAJK;EAKLa,IAAAA,YALK;EAMLvB,IAAAA,OANK;EAOLC,IAAAA,aAPK;EAQLC,IAAAA,eARK;EASLC,IAAAA,aATK;EAULC,IAAAA,cAVK;EAWLC,IAAAA,iBAXK;EAYLC,IAAAA,kBAZK;EAaLC,IAAAA;EAbK,GAAP;EAeD;;EChHD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACe,SAASiB,gBAAT,CACb/B,IADa,EAEbiB,UAFa,EAGbhB,qBAHa,EAIb6B,YAJa,EAKb;EACA,MAAIE,KAAK,GAAG,CAAZ;EACA,QAAMC,IAAI,GAAGhC,qBAAqB,CAACgB,UAAD,CAAlC;;EACA,OAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGE,IAAI,CAACe,CAAL,CAAO7B,MAA3B,EAAmCY,CAAC,EAApC,EAAwC;EACtCkC,IAAAA,KAAK,IAAIE,IAAI,CAACC,GAAL,CAASnC,IAAI,CAACgB,CAAL,CAAOlB,CAAP,IAAYmC,IAAI,CAACjC,IAAI,CAACe,CAAL,CAAOjB,CAAP,CAAD,CAAzB,EAAsC,CAAtC,IAA2CgC,YAAY,CAAChC,CAAD,CAAhE;EACD;;EAED,SAAOkC,KAAP;EACD;;ECrBD,SAASI,GAAT,CAAarD,KAAb,EAAoB;EAClB,MAAIC,OAAO,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACG,UAAO,CAACL,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIM,SAAJ,CAAc,wBAAd,CAAN;EACD;;EAED,MAAIN,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EACtB,UAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIC,kBAAkB,GAAGN,OAAO,CAACO,SAAjC;EAAA,MACIA,SAAS,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,CAAhC,GAAoCA,kBADpD;EAAA,MAEIE,gBAAgB,GAAGR,OAAO,CAACS,OAF/B;EAAA,MAGIA,OAAO,GAAGD,gBAAgB,KAAK,KAAK,CAA1B,GAA8BT,KAAK,CAACG,MAApC,GAA6CM,gBAH3D;;EAKA,MAAID,SAAS,GAAG,CAAZ,IAAiBA,SAAS,IAAIR,KAAK,CAACG,MAApC,IAA8C,CAACQ,MAAM,CAACC,SAAP,CAAiBJ,SAAjB,CAAnD,EAAgF;EAC9E,UAAM,IAAIK,KAAJ,CAAU,0DAAV,CAAN;EACD;;EAED,MAAIH,OAAO,IAAIF,SAAX,IAAwBE,OAAO,GAAGV,KAAK,CAACG,MAAxC,IAAkD,CAACQ,MAAM,CAACC,SAAP,CAAiBF,OAAjB,CAAvD,EAAkF;EAChF,UAAM,IAAIG,KAAJ,CAAU,+EAAV,CAAN;EACD;;EAED,MAAIyC,QAAQ,GAAGtD,KAAK,CAACQ,SAAD,CAApB;;EAEA,OAAK,IAAIO,CAAC,GAAGP,SAAS,GAAG,CAAzB,EAA4BO,CAAC,GAAGL,OAAhC,EAAyCK,CAAC,EAA1C,EAA8C;EAC5C,QAAIf,KAAK,CAACe,CAAD,CAAL,GAAWuC,QAAf,EAAyBA,QAAQ,GAAGtD,KAAK,CAACe,CAAD,CAAhB;EAC1B;;EAED,SAAOuC,QAAP;EACD;;EC7BD,SAASC,OAAT,CAAiBvD,KAAjB,EAAwB;EACtB,MAAIC,OAAO,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,MAAI,CAACG,UAAO,CAACL,KAAD,CAAZ,EAAqB;EACnB,UAAM,IAAIM,SAAJ,CAAc,wBAAd,CAAN;EACD,GAFD,MAEO,IAAIN,KAAK,CAACG,MAAN,KAAiB,CAArB,EAAwB;EAC7B,UAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACD;;EAED,MAAIkD,MAAJ;;EAEA,MAAIvD,OAAO,CAACuD,MAAR,KAAmBpD,SAAvB,EAAkC;EAChC,QAAI,CAACC,UAAO,CAACJ,OAAO,CAACuD,MAAT,CAAZ,EAA8B;EAC5B,YAAM,IAAIlD,SAAJ,CAAc,6CAAd,CAAN;EACD;;EAEDkD,IAAAA,MAAM,GAAGvD,OAAO,CAACuD,MAAjB;EACD,GAND,MAMO;EACLA,IAAAA,MAAM,GAAG,IAAIrB,KAAJ,CAAUnC,KAAK,CAACG,MAAhB,CAAT;EACD;;EAED,MAAIsD,UAAU,GAAGJ,GAAG,CAACrD,KAAD,CAApB;EACA,MAAI0D,UAAU,GAAG3D,GAAG,CAACC,KAAD,CAApB;;EAEA,MAAIyD,UAAU,KAAKC,UAAnB,EAA+B;EAC7B,UAAM,IAAIC,UAAJ,CAAe,6EAAf,CAAN;EACD;;EAED,MAAIC,YAAY,GAAG3D,OAAO,CAACoD,GAA3B;EAAA,MACIC,QAAQ,GAAGM,YAAY,KAAK,KAAK,CAAtB,GAA0B3D,OAAO,CAAC4D,UAAR,GAAqBJ,UAArB,GAAkC,CAA5D,GAAgEG,YAD/E;EAAA,MAEIE,YAAY,GAAG7D,OAAO,CAACF,GAF3B;EAAA,MAGIe,QAAQ,GAAGgD,YAAY,KAAK,KAAK,CAAtB,GAA0B7D,OAAO,CAAC4D,UAAR,GAAqBH,UAArB,GAAkC,CAA5D,GAAgEI,YAH/E;;EAKA,MAAIR,QAAQ,IAAIxC,QAAhB,EAA0B;EACxB,UAAM,IAAI6C,UAAJ,CAAe,4CAAf,CAAN;EACD;;EAED,MAAII,MAAM,GAAG,CAACjD,QAAQ,GAAGwC,QAAZ,KAAyBI,UAAU,GAAGD,UAAtC,CAAb;;EAEA,OAAK,IAAI1C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGf,KAAK,CAACG,MAA1B,EAAkCY,CAAC,EAAnC,EAAuC;EACrCyC,IAAAA,MAAM,CAACzC,CAAD,CAAN,GAAY,CAACf,KAAK,CAACe,CAAD,CAAL,GAAW0C,UAAZ,IAA0BM,MAA1B,GAAmCT,QAA/C;EACD;;EAED,SAAOE,MAAP;EACD;;EChDD,MAAMQ,MAAM,GAAG,IAAIC,MAAJ,CAAW,CAAX,CAAf;EACA,MAAMC,UAAU,GAAG,IAAID,MAAJ,CAAW,CAAX,CAAnB;EAEO,SAASE,aAAT,GAAyB;EAC9B,SAAOC,wBAAwB,CAAC,IAAD,CAA/B;EACD;EAEM,SAASA,wBAAT,CAAkCC,MAAlC,EAA0CpE,OAAO,GAAG,EAApD,EAAwD;EAC7D,QAAM;EAAEqE,IAAAA,OAAO,GAAG,EAAZ;EAAgBC,IAAAA,UAAU,GAAG,EAA7B;EAAiCC,IAAAA,UAAU,GAAG;EAA9C,MAAoDvE,OAA1D;EACA,SAAQ,GAAEoE,MAAM,CAACI,WAAP,CAAmBC,IAAK;AACpC,EAAEV,MAAO;AACT,EAAEE,UAAW,GAAES,WAAW,CAACN,MAAD,EAASC,OAAT,EAAkBC,UAAlB,EAA8BC,UAA9B,CAA0C;AACpE,EAAER,MAAO;AACT,EAAEA,MAAO,SAAQK,MAAM,CAACO,IAAK;AAC7B,EAAEZ,MAAO,YAAWK,MAAM,CAACQ,OAAQ;AACnC,EANE;EAOD;;EAED,SAASF,WAAT,CAAqBN,MAArB,EAA6BC,OAA7B,EAAsCC,UAAtC,EAAkDC,UAAlD,EAA8D;EAC5D,QAAM;EAAEI,IAAAA,IAAF;EAAQC,IAAAA;EAAR,MAAoBR,MAA1B;EACA,QAAMS,IAAI,GAAG3B,IAAI,CAACE,GAAL,CAASuB,IAAT,EAAeN,OAAf,CAAb;EACA,QAAMS,IAAI,GAAG5B,IAAI,CAACE,GAAL,CAASwB,OAAT,EAAkBN,UAAlB,CAAb;EACA,QAAMS,MAAM,GAAG,EAAf;;EACA,OAAK,IAAIjE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+D,IAApB,EAA0B/D,CAAC,EAA3B,EAA+B;EAC7B,QAAIkE,IAAI,GAAG,EAAX;;EACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,IAApB,EAA0BG,CAAC,EAA3B,EAA+B;EAC7BD,MAAAA,IAAI,CAACE,IAAL,CAAUC,YAAY,CAACf,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAD,EAAmBV,UAAnB,CAAtB;EACD;;EACDQ,IAAAA,MAAM,CAACG,IAAP,CAAa,GAAEF,IAAI,CAACK,IAAL,CAAU,GAAV,CAAe,EAA9B;EACD;;EACD,MAAIP,IAAI,KAAKF,OAAb,EAAsB;EACpBG,IAAAA,MAAM,CAACA,MAAM,CAAC7E,MAAP,GAAgB,CAAjB,CAAN,IAA8B,QAAO0E,OAAO,GAAGN,UAAW,eAA1D;EACD;;EACD,MAAIO,IAAI,KAAKF,IAAb,EAAmB;EACjBI,IAAAA,MAAM,CAACG,IAAP,CAAa,OAAMP,IAAI,GAAGN,OAAQ,YAAlC;EACD;;EACD,SAAOU,MAAM,CAACM,IAAP,CAAa,KAAIpB,UAAW,EAA5B,CAAP;EACD;;EAED,SAASkB,YAAT,CAAsBG,GAAtB,EAA2Bf,UAA3B,EAAuC;EACrC,QAAMgB,MAAM,GAAGC,MAAM,CAACF,GAAD,CAArB;;EACA,MAAIC,MAAM,CAACrF,MAAP,IAAiBqE,UAArB,EAAiC;EAC/B,WAAOgB,MAAM,CAACE,MAAP,CAAclB,UAAd,EAA0B,GAA1B,CAAP;EACD;;EACD,QAAMmB,OAAO,GAAGJ,GAAG,CAACK,WAAJ,CAAgBpB,UAAU,GAAG,CAA7B,CAAhB;;EACA,MAAImB,OAAO,CAACxF,MAAR,IAAkBqE,UAAtB,EAAkC;EAChC,WAAOmB,OAAP;EACD;;EACD,QAAME,WAAW,GAAGN,GAAG,CAACO,aAAJ,CAAkBtB,UAAU,GAAG,CAA/B,CAApB;EACA,QAAMuB,MAAM,GAAGF,WAAW,CAACG,OAAZ,CAAoB,GAApB,CAAf;EACA,QAAMC,CAAC,GAAGJ,WAAW,CAACK,KAAZ,CAAkBH,MAAlB,CAAV;EACA,SAAOF,WAAW,CAACK,KAAZ,CAAkB,CAAlB,EAAqB1B,UAAU,GAAGyB,CAAC,CAAC9F,MAApC,IAA8C8F,CAArD;EACD;;ECpDM,SAASE,qBAAT,CAA+BC,cAA/B,EAA+CC,MAA/C,EAAuD;EAC5DD,EAAAA,cAAc,CAAC1G,SAAf,CAAyB4G,GAAzB,GAA+B,SAASA,GAAT,CAAa5D,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK6D,IAAL,CAAU7D,KAAV,CAAP;EAC/B,WAAO,KAAK8D,IAAL,CAAU9D,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB6G,IAAzB,GAAgC,SAASA,IAAT,CAAc7D,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB8G,IAAzB,GAAgC,SAASA,IAAT,CAAcnC,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACE,GAAf,GAAqB,SAASA,GAAT,CAAajC,MAAb,EAAqB3B,KAArB,EAA4B;EAC/C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACL,GAAV,CAAc5D,KAAd,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBkH,GAAzB,GAA+B,SAASA,GAAT,CAAalE,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKmE,IAAL,CAAUnE,KAAV,CAAP;EAC/B,WAAO,KAAKoE,IAAL,CAAUpE,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBmH,IAAzB,GAAgC,SAASA,IAAT,CAAcnE,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBoH,IAAzB,GAAgC,SAASA,IAAT,CAAczC,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACQ,GAAf,GAAqB,SAASA,GAAT,CAAavC,MAAb,EAAqB3B,KAArB,EAA4B;EAC/C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACC,GAAV,CAAclE,KAAd,CAAP;EACD,GAHD;;EAIA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBqH,QAAzB,GAAoCX,cAAc,CAAC1G,SAAf,CAAyBkH,GAA7D;EACAR,EAAAA,cAAc,CAAC1G,SAAf,CAAyBsH,SAAzB,GAAqCZ,cAAc,CAAC1G,SAAf,CAAyBmH,IAA9D;EACAT,EAAAA,cAAc,CAAC1G,SAAf,CAAyBuH,SAAzB,GAAqCb,cAAc,CAAC1G,SAAf,CAAyBoH,IAA9D;EACAV,EAAAA,cAAc,CAACW,QAAf,GAA0BX,cAAc,CAACQ,GAAzC;;EAEAR,EAAAA,cAAc,CAAC1G,SAAf,CAAyBwH,GAAzB,GAA+B,SAASA,GAAT,CAAaxE,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKyE,IAAL,CAAUzE,KAAV,CAAP;EAC/B,WAAO,KAAK0E,IAAL,CAAU1E,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyByH,IAAzB,GAAgC,SAASA,IAAT,CAAczE,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB0H,IAAzB,GAAgC,SAASA,IAAT,CAAc/C,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACc,GAAf,GAAqB,SAASA,GAAT,CAAa7C,MAAb,EAAqB3B,KAArB,EAA4B;EAC/C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACO,GAAV,CAAcxE,KAAd,CAAP;EACD,GAHD;;EAIA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB2H,QAAzB,GAAoCjB,cAAc,CAAC1G,SAAf,CAAyBwH,GAA7D;EACAd,EAAAA,cAAc,CAAC1G,SAAf,CAAyB4H,SAAzB,GAAqClB,cAAc,CAAC1G,SAAf,CAAyByH,IAA9D;EACAf,EAAAA,cAAc,CAAC1G,SAAf,CAAyB6H,SAAzB,GAAqCnB,cAAc,CAAC1G,SAAf,CAAyB0H,IAA9D;EACAhB,EAAAA,cAAc,CAACiB,QAAf,GAA0BjB,cAAc,CAACc,GAAzC;;EAEAd,EAAAA,cAAc,CAAC1G,SAAf,CAAyB8H,GAAzB,GAA+B,SAASA,GAAT,CAAa9E,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK+E,IAAL,CAAU/E,KAAV,CAAP;EAC/B,WAAO,KAAKgF,IAAL,CAAUhF,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB+H,IAAzB,GAAgC,SAASA,IAAT,CAAc/E,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBgI,IAAzB,GAAgC,SAASA,IAAT,CAAcrD,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACoB,GAAf,GAAqB,SAASA,GAAT,CAAanD,MAAb,EAAqB3B,KAArB,EAA4B;EAC/C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACa,GAAV,CAAc9E,KAAd,CAAP;EACD,GAHD;;EAIA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBiI,MAAzB,GAAkCvB,cAAc,CAAC1G,SAAf,CAAyB8H,GAA3D;EACApB,EAAAA,cAAc,CAAC1G,SAAf,CAAyBkI,OAAzB,GAAmCxB,cAAc,CAAC1G,SAAf,CAAyB+H,IAA5D;EACArB,EAAAA,cAAc,CAAC1G,SAAf,CAAyBmI,OAAzB,GAAmCzB,cAAc,CAAC1G,SAAf,CAAyBgI,IAA5D;EACAtB,EAAAA,cAAc,CAACuB,MAAf,GAAwBvB,cAAc,CAACoB,GAAvC;;EAEApB,EAAAA,cAAc,CAAC1G,SAAf,CAAyBoI,GAAzB,GAA+B,SAASA,GAAT,CAAapF,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKqF,IAAL,CAAUrF,KAAV,CAAP;EAC/B,WAAO,KAAKsF,IAAL,CAAUtF,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBqI,IAAzB,GAAgC,SAASA,IAAT,CAAcrF,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBsI,IAAzB,GAAgC,SAASA,IAAT,CAAc3D,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAAC0B,GAAf,GAAqB,SAASA,GAAT,CAAazD,MAAb,EAAqB3B,KAArB,EAA4B;EAC/C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACmB,GAAV,CAAcpF,KAAd,CAAP;EACD,GAHD;;EAIA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBuI,OAAzB,GAAmC7B,cAAc,CAAC1G,SAAf,CAAyBoI,GAA5D;EACA1B,EAAAA,cAAc,CAAC1G,SAAf,CAAyBwI,QAAzB,GAAoC9B,cAAc,CAAC1G,SAAf,CAAyBqI,IAA7D;EACA3B,EAAAA,cAAc,CAAC1G,SAAf,CAAyByI,QAAzB,GAAoC/B,cAAc,CAAC1G,SAAf,CAAyBsI,IAA7D;EACA5B,EAAAA,cAAc,CAAC6B,OAAf,GAAyB7B,cAAc,CAAC0B,GAAxC;;EAEA1B,EAAAA,cAAc,CAAC1G,SAAf,CAAyB0I,GAAzB,GAA+B,SAASA,GAAT,CAAa1F,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK2F,IAAL,CAAU3F,KAAV,CAAP;EAC/B,WAAO,KAAK4F,IAAL,CAAU5F,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB2I,IAAzB,GAAgC,SAASA,IAAT,CAAc3F,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB4I,IAAzB,GAAgC,SAASA,IAAT,CAAcjE,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACgC,GAAf,GAAqB,SAASA,GAAT,CAAa/D,MAAb,EAAqB3B,KAArB,EAA4B;EAC/C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACyB,GAAV,CAAc1F,KAAd,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB6I,EAAzB,GAA8B,SAASA,EAAT,CAAY7F,KAAZ,EAAmB;EAC/C,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK8F,GAAL,CAAS9F,KAAT,CAAP;EAC/B,WAAO,KAAK+F,GAAL,CAAS/F,KAAT,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB8I,GAAzB,GAA+B,SAASA,GAAT,CAAa9F,KAAb,EAAoB;EACjD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB+I,GAAzB,GAA+B,SAASA,GAAT,CAAapE,MAAb,EAAqB;EAClDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACmC,EAAf,GAAoB,SAASA,EAAT,CAAYlE,MAAZ,EAAoB3B,KAApB,EAA2B;EAC7C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC4B,EAAV,CAAa7F,KAAb,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBgJ,GAAzB,GAA+B,SAASA,GAAT,CAAahG,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKiG,IAAL,CAAUjG,KAAV,CAAP;EAC/B,WAAO,KAAKkG,IAAL,CAAUlG,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBiJ,IAAzB,GAAgC,SAASA,IAAT,CAAcjG,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBxC,KAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBkJ,IAAzB,GAAgC,SAASA,IAAT,CAAcvE,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAhC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACsC,GAAf,GAAqB,SAASA,GAAT,CAAarE,MAAb,EAAqB3B,KAArB,EAA4B;EAC/C,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC+B,GAAV,CAAchG,KAAd,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBmJ,SAAzB,GAAqC,SAASA,SAAT,CAAmBnG,KAAnB,EAA0B;EAC7D,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKoG,UAAL,CAAgBpG,KAAhB,CAAP;EAC/B,WAAO,KAAKqG,UAAL,CAAgBrG,KAAhB,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBoJ,UAAzB,GAAsC,SAASA,UAAT,CAAoBpG,KAApB,EAA2B;EAC/D,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,KAAkBxC,KAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBqJ,UAAzB,GAAsC,SAASA,UAAT,CAAoB1E,MAApB,EAA4B;EAChEA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,KAAkBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAACyC,SAAf,GAA2B,SAASA,SAAT,CAAmBxE,MAAnB,EAA2B3B,KAA3B,EAAkC;EAC3D,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACkC,SAAV,CAAoBnG,KAApB,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBsJ,yBAAzB,GAAqD,SAASA,yBAAT,CAAmCtG,KAAnC,EAA0C;EAC7F,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAKuG,0BAAL,CAAgCvG,KAAhC,CAAP;EAC/B,WAAO,KAAKwG,0BAAL,CAAgCxG,KAAhC,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBuJ,0BAAzB,GAAsD,SAASA,0BAAT,CAAoCvG,KAApC,EAA2C;EAC/F,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,KAAkBxC,KAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBwJ,0BAAzB,GAAsD,SAASA,0BAAT,CAAoC7E,MAApC,EAA4C;EAChGA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,KAAkBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAjC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAAC4C,yBAAf,GAA2C,SAASA,yBAAT,CAAmC3E,MAAnC,EAA2C3B,KAA3C,EAAkD;EAC3F,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACqC,yBAAV,CAAoCtG,KAApC,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyByJ,UAAzB,GAAsC,SAASA,UAAT,CAAoBzG,KAApB,EAA2B;EAC/D,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK0G,WAAL,CAAiB1G,KAAjB,CAAP;EAC/B,WAAO,KAAK2G,WAAL,CAAiB3G,KAAjB,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB0J,WAAzB,GAAuC,SAASA,WAAT,CAAqB1G,KAArB,EAA4B;EACjE,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,MAAmBxC,KAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB2J,WAAzB,GAAuC,SAASA,WAAT,CAAqBhF,MAArB,EAA6B;EAClEA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,MAAmBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;;EAcAkB,EAAAA,cAAc,CAAC+C,UAAf,GAA4B,SAASA,UAAT,CAAoB9E,MAApB,EAA4B3B,KAA5B,EAAmC;EAC7D,UAAMiE,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACwC,UAAV,CAAqBzG,KAArB,CAAP;EACD,GAHD;;EAIA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB4J,kBAAzB,GAA8ClD,cAAc,CAAC1G,SAAf,CAAyByJ,UAAvE;EACA/C,EAAAA,cAAc,CAAC1G,SAAf,CAAyB6J,mBAAzB,GAA+CnD,cAAc,CAAC1G,SAAf,CAAyB0J,WAAxE;EACAhD,EAAAA,cAAc,CAAC1G,SAAf,CAAyB8J,mBAAzB,GAA+CpD,cAAc,CAAC1G,SAAf,CAAyB2J,WAAxE;EACAjD,EAAAA,cAAc,CAACkD,kBAAf,GAAoClD,cAAc,CAAC+C,UAAnD;;EAEA/C,EAAAA,cAAc,CAAC1G,SAAf,CAAyB+J,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAI1I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,CAAE,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAjB;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACqD,GAAf,GAAqB,SAASA,GAAT,CAAapF,MAAb,EAAqB;EACxC,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC8C,GAAV,EAAP;EACD,GAHD;;EAKArD,EAAAA,cAAc,CAAC1G,SAAf,CAAyBgK,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAI3I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACuG,GAAL,CAAS,KAAKrE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACsD,GAAf,GAAqB,SAASA,GAAT,CAAarF,MAAb,EAAqB;EACxC,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC+C,GAAV,EAAP;EACD,GAHD;;EAKAtD,EAAAA,cAAc,CAAC1G,SAAf,CAAyBiK,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI5I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACwG,IAAL,CAAU,KAAKtE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACuD,IAAf,GAAsB,SAASA,IAAT,CAActF,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACgD,IAAV,EAAP;EACD,GAHD;;EAKAvD,EAAAA,cAAc,CAAC1G,SAAf,CAAyBkK,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI7I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACyG,KAAL,CAAW,KAAKvE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACwD,KAAf,GAAuB,SAASA,KAAT,CAAevF,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACiD,KAAV,EAAP;EACD,GAHD;;EAKAxD,EAAAA,cAAc,CAAC1G,SAAf,CAAyBmK,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI9I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC0G,IAAL,CAAU,KAAKxE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACyD,IAAf,GAAsB,SAASA,IAAT,CAAcxF,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACkD,IAAV,EAAP;EACD,GAHD;;EAKAzD,EAAAA,cAAc,CAAC1G,SAAf,CAAyBoK,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI/I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC2G,KAAL,CAAW,KAAKzE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC0D,KAAf,GAAuB,SAASA,KAAT,CAAezF,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACmD,KAAV,EAAP;EACD,GAHD;;EAKA1D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBqK,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIhJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC4G,IAAL,CAAU,KAAK1E,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC2D,IAAf,GAAsB,SAASA,IAAT,CAAc1F,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACoD,IAAV,EAAP;EACD,GAHD;;EAKA3D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBsK,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIjJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC6G,KAAL,CAAW,KAAK3E,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC4D,KAAf,GAAuB,SAASA,KAAT,CAAe3F,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACqD,KAAV,EAAP;EACD,GAHD;;EAKA5D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBuK,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIlJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC8G,IAAL,CAAU,KAAK5E,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC6D,IAAf,GAAsB,SAASA,IAAT,CAAc5F,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACsD,IAAV,EAAP;EACD,GAHD;;EAKA7D,EAAAA,cAAc,CAAC1G,SAAf,CAAyBwK,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAInJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC+G,IAAL,CAAU,KAAK7E,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC8D,IAAf,GAAsB,SAASA,IAAT,CAAc7F,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACuD,IAAV,EAAP;EACD,GAHD;;EAKA9D,EAAAA,cAAc,CAAC1G,SAAf,CAAyByK,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIpJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACgH,KAAL,CAAW,KAAK9E,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC+D,KAAf,GAAuB,SAASA,KAAT,CAAe9F,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACwD,KAAV,EAAP;EACD,GAHD;;EAKA/D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB0K,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIrJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACiH,GAAL,CAAS,KAAK/E,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACgE,GAAf,GAAqB,SAASA,GAAT,CAAa/F,MAAb,EAAqB;EACxC,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACyD,GAAV,EAAP;EACD,GAHD;;EAKAhE,EAAAA,cAAc,CAAC1G,SAAf,CAAyB2K,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAItJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACkH,IAAL,CAAU,KAAKhF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACiE,IAAf,GAAsB,SAASA,IAAT,CAAchG,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC0D,IAAV,EAAP;EACD,GAHD;;EAKAjE,EAAAA,cAAc,CAAC1G,SAAf,CAAyB4K,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIvJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACmH,GAAL,CAAS,KAAKjF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACkE,GAAf,GAAqB,SAASA,GAAT,CAAajG,MAAb,EAAqB;EACxC,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC2D,GAAV,EAAP;EACD,GAHD;;EAKAlE,EAAAA,cAAc,CAAC1G,SAAf,CAAyB6K,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIxJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACoH,KAAL,CAAW,KAAKlF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACmE,KAAf,GAAuB,SAASA,KAAT,CAAelG,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC4D,KAAV,EAAP;EACD,GAHD;;EAKAnE,EAAAA,cAAc,CAAC1G,SAAf,CAAyB8K,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAIzJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACqH,KAAL,CAAW,KAAKnF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACoE,KAAf,GAAuB,SAASA,KAAT,CAAenG,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC6D,KAAV,EAAP;EACD,GAHD;;EAKApE,EAAAA,cAAc,CAAC1G,SAAf,CAAyB+K,MAAzB,GAAkC,SAASA,MAAT,GAAkB;EAClD,SAAK,IAAI1J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACsH,MAAL,CAAY,KAAKpF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAZ,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACqE,MAAf,GAAwB,SAASA,MAAT,CAAgBpG,MAAhB,EAAwB;EAC9C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC8D,MAAV,EAAP;EACD,GAHD;;EAKArE,EAAAA,cAAc,CAAC1G,SAAf,CAAyBgL,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAI3J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACuH,GAAL,CAAS,KAAKrF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACsE,GAAf,GAAqB,SAASA,GAAT,CAAarG,MAAb,EAAqB;EACxC,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC+D,GAAV,EAAP;EACD,GAHD;;EAKAtE,EAAAA,cAAc,CAAC1G,SAAf,CAAyBiL,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI5J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACwH,KAAL,CAAW,KAAKtF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACuE,KAAf,GAAuB,SAASA,KAAT,CAAetG,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACgE,KAAV,EAAP;EACD,GAHD;;EAKAvE,EAAAA,cAAc,CAAC1G,SAAf,CAAyBkL,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI7J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACyH,KAAL,CAAW,KAAKvF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACwE,KAAf,GAAuB,SAASA,KAAT,CAAevG,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACiE,KAAV,EAAP;EACD,GAHD;;EAKAxE,EAAAA,cAAc,CAAC1G,SAAf,CAAyBmL,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAI9J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC0H,IAAL,CAAU,KAAKxF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACyE,IAAf,GAAsB,SAASA,IAAT,CAAcxG,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACkE,IAAV,EAAP;EACD,GAHD;;EAKAzE,EAAAA,cAAc,CAAC1G,SAAf,CAAyBoL,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAI/J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC2H,KAAL,CAAW,KAAKzF,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC0E,KAAf,GAAuB,SAASA,KAAT,CAAezG,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACmE,KAAV,EAAP;EACD,GAHD;;EAKA1E,EAAAA,cAAc,CAAC1G,SAAf,CAAyBqL,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIhK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC4H,IAAL,CAAU,KAAK1F,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC2E,IAAf,GAAsB,SAASA,IAAT,CAAc1G,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACoE,IAAV,EAAP;EACD,GAHD;;EAKA3E,EAAAA,cAAc,CAAC1G,SAAf,CAAyBsL,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIjK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC6H,GAAL,CAAS,KAAK3F,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC4E,GAAf,GAAqB,SAASA,GAAT,CAAa3G,MAAb,EAAqB;EACxC,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACqE,GAAV,EAAP;EACD,GAHD;;EAKA5E,EAAAA,cAAc,CAAC1G,SAAf,CAAyBuL,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIlK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC8H,IAAL,CAAU,KAAK5F,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC6E,IAAf,GAAsB,SAASA,IAAT,CAAc5G,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACsE,IAAV,EAAP;EACD,GAHD;;EAKA7E,EAAAA,cAAc,CAAC1G,SAAf,CAAyBwL,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAInK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAAC+H,IAAL,CAAU,KAAK7F,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC8E,IAAf,GAAsB,SAASA,IAAT,CAAc7G,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACuE,IAAV,EAAP;EACD,GAHD;;EAKA9E,EAAAA,cAAc,CAAC1G,SAAf,CAAyByL,GAAzB,GAA+B,SAASA,GAAT,GAAe;EAC5C,SAAK,IAAIpK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACgI,GAAL,CAAS,KAAK9F,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAAC+E,GAAf,GAAqB,SAASA,GAAT,CAAa9G,MAAb,EAAqB;EACxC,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACwE,GAAV,EAAP;EACD,GAHD;;EAKA/E,EAAAA,cAAc,CAAC1G,SAAf,CAAyB0L,IAAzB,GAAgC,SAASA,IAAT,GAAgB;EAC9C,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACiI,IAAL,CAAU,KAAK/F,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAV,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACgF,IAAf,GAAsB,SAASA,IAAT,CAAc/G,MAAd,EAAsB;EAC1C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACyE,IAAV,EAAP;EACD,GAHD;;EAKAhF,EAAAA,cAAc,CAAC1G,SAAf,CAAyB2L,KAAzB,GAAiC,SAASA,KAAT,GAAiB;EAChD,SAAK,IAAItK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACkI,KAAL,CAAW,KAAKhG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASAkB,EAAAA,cAAc,CAACiF,KAAf,GAAuB,SAASA,KAAT,CAAehH,MAAf,EAAuB;EAC5C,UAAMsC,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAAC0E,KAAV,EAAP;EACD,GAHD;;EAKAjF,EAAAA,cAAc,CAAChD,GAAf,GAAqB,SAASA,GAAT,CAAaiB,MAAb,EAAqBiH,IAArB,EAA2B;EAC9C,UAAM3E,SAAS,GAAG,IAAIN,MAAJ,CAAWhC,MAAX,CAAlB;EACA,WAAOsC,SAAS,CAACvD,GAAV,CAAckI,IAAd,CAAP;EACD,GAHD;;EAKAlF,EAAAA,cAAc,CAAC1G,SAAf,CAAyB0D,GAAzB,GAA+B,SAASA,GAAT,CAAaV,KAAb,EAAoB;EACjD,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAO,KAAK6I,IAAL,CAAU7I,KAAV,CAAP;EAC/B,WAAO,KAAK8I,IAAL,CAAU9I,KAAV,CAAP;EACD,GAHD;;EAKA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB6L,IAAzB,GAAgC,SAASA,IAAT,CAAc7I,KAAd,EAAqB;EACnD,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACC,GAAL,CAAS,KAAKiC,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,EAAyBxC,KAAzB,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAPD;;EASA0D,EAAAA,cAAc,CAAC1G,SAAf,CAAyB8L,IAAzB,GAAgC,SAASA,IAAT,CAAcnH,MAAd,EAAsB;EACpDA,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAI,KAAKO,IAAL,KAAcP,MAAM,CAACO,IAArB,IACF,KAAKC,OAAL,KAAiBR,MAAM,CAACQ,OAD1B,EACmC;EACjC,YAAM,IAAIlB,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,SAAK,IAAI5C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe/B,IAAI,CAACC,GAAL,CAAS,KAAKiC,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAT,EAAyBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAzB,CAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD,GAZD;EAaD;;ECtzBD;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAASuG,aAAT,CAAuBpH,MAAvB,EAA+BqH,KAA/B,EAAsCC,KAAtC,EAA6C;EAClD,MAAI5L,GAAG,GAAG4L,KAAK,GAAGtH,MAAM,CAACO,IAAV,GAAiBP,MAAM,CAACO,IAAP,GAAc,CAA9C;;EACA,MAAI8G,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAG3L,GAAzB,EAA8B;EAC5B,UAAM,IAAI4D,UAAJ,CAAe,wBAAf,CAAN;EACD;EACF;EAED;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASiI,gBAAT,CAA0BvH,MAA1B,EAAkCqH,KAAlC,EAAyCC,KAAzC,EAAgD;EACrD,MAAI5L,GAAG,GAAG4L,KAAK,GAAGtH,MAAM,CAACQ,OAAV,GAAoBR,MAAM,CAACQ,OAAP,GAAiB,CAApD;;EACA,MAAI6G,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAG3L,GAAzB,EAA8B;EAC5B,UAAM,IAAI4D,UAAJ,CAAe,2BAAf,CAAN;EACD;EACF;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASkI,cAAT,CAAwBxH,MAAxB,EAAgCyH,MAAhC,EAAwC;EAC7C,MAAIA,MAAM,CAACC,SAAX,EAAsB;EACpBD,IAAAA,MAAM,GAAGA,MAAM,CAACC,SAAP,EAAT;EACD;;EACD,MAAID,MAAM,CAAC3L,MAAP,KAAkBkE,MAAM,CAACQ,OAA7B,EAAsC;EACpC,UAAM,IAAIlB,UAAJ,CACJ,uDADI,CAAN;EAGD;;EACD,SAAOmI,MAAP;EACD;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASE,iBAAT,CAA2B3H,MAA3B,EAAmCyH,MAAnC,EAA2C;EAChD,MAAIA,MAAM,CAACC,SAAX,EAAsB;EACpBD,IAAAA,MAAM,GAAGA,MAAM,CAACC,SAAP,EAAT;EACD;;EACD,MAAID,MAAM,CAAC3L,MAAP,KAAkBkE,MAAM,CAACO,IAA7B,EAAmC;EACjC,UAAM,IAAIjB,UAAJ,CAAe,oDAAf,CAAN;EACD;;EACD,SAAOmI,MAAP;EACD;EAEM,SAASG,YAAT,CAAsB5H,MAAtB,EAA8B6H,UAA9B,EAA0CC,aAA1C,EAAyD;EAC9D,SAAO;EACLC,IAAAA,GAAG,EAAEC,eAAe,CAAChI,MAAD,EAAS6H,UAAT,CADf;EAELI,IAAAA,MAAM,EAAEC,kBAAkB,CAAClI,MAAD,EAAS8H,aAAT;EAFrB,GAAP;EAID;EAEM,SAASE,eAAT,CAAyBhI,MAAzB,EAAiC6H,UAAjC,EAA6C;EAClD,MAAI,OAAOA,UAAP,KAAsB,QAA1B,EAAoC;EAClC,UAAM,IAAI5L,SAAJ,CAAc,iCAAd,CAAN;EACD;;EAED,MAAIkM,MAAM,GAAGN,UAAU,CAACO,IAAX,CAAiBC,CAAD,IAAO;EAClC,WAAOA,CAAC,GAAG,CAAJ,IAASA,CAAC,IAAIrI,MAAM,CAACO,IAA5B;EACD,GAFY,CAAb;;EAIA,MAAI4H,MAAJ,EAAY;EACV,UAAM,IAAI7I,UAAJ,CAAe,8BAAf,CAAN;EACD;;EAED,MAAI,CAACxB,KAAK,CAAC9B,OAAN,CAAc6L,UAAd,CAAL,EAAgCA,UAAU,GAAG/J,KAAK,CAACwK,IAAN,CAAWT,UAAX,CAAb;EAEhC,SAAOA,UAAP;EACD;EAEM,SAASK,kBAAT,CAA4BlI,MAA5B,EAAoC8H,aAApC,EAAmD;EACxD,MAAI,OAAOA,aAAP,KAAyB,QAA7B,EAAuC;EACrC,UAAM,IAAI7L,SAAJ,CAAc,oCAAd,CAAN;EACD;;EAED,MAAIsM,SAAS,GAAGT,aAAa,CAACM,IAAd,CAAoBI,CAAD,IAAO;EACxC,WAAOA,CAAC,GAAG,CAAJ,IAASA,CAAC,IAAIxI,MAAM,CAACQ,OAA5B;EACD,GAFe,CAAhB;;EAIA,MAAI+H,SAAJ,EAAe;EACb,UAAM,IAAIjJ,UAAJ,CAAe,iCAAf,CAAN;EACD;;EACD,MAAI,CAACxB,KAAK,CAAC9B,OAAN,CAAc8L,aAAd,CAAL,EAAmCA,aAAa,GAAGhK,KAAK,CAACwK,IAAN,CAAWR,aAAX,CAAhB;EAEnC,SAAOA,aAAP;EACD;EAEM,SAASW,UAAT,CAAoBzI,MAApB,EAA4B0I,QAA5B,EAAsCC,MAAtC,EAA8CC,WAA9C,EAA2DC,SAA3D,EAAsE;EAC3E,MAAIhN,SAAS,CAACC,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,UAAM,IAAIwD,UAAJ,CAAe,sBAAf,CAAN;EACD;;EACDwJ,EAAAA,WAAW,CAAC,UAAD,EAAaJ,QAAb,CAAX;EACAI,EAAAA,WAAW,CAAC,QAAD,EAAWH,MAAX,CAAX;EACAG,EAAAA,WAAW,CAAC,aAAD,EAAgBF,WAAhB,CAAX;EACAE,EAAAA,WAAW,CAAC,WAAD,EAAcD,SAAd,CAAX;;EACA,MACEH,QAAQ,GAAGC,MAAX,IACAC,WAAW,GAAGC,SADd,IAEAH,QAAQ,GAAG,CAFX,IAGAA,QAAQ,IAAI1I,MAAM,CAACO,IAHnB,IAIAoI,MAAM,GAAG,CAJT,IAKAA,MAAM,IAAI3I,MAAM,CAACO,IALjB,IAMAqI,WAAW,GAAG,CANd,IAOAA,WAAW,IAAI5I,MAAM,CAACQ,OAPtB,IAQAqI,SAAS,GAAG,CARZ,IASAA,SAAS,IAAI7I,MAAM,CAACQ,OAVtB,EAWE;EACA,UAAM,IAAIlB,UAAJ,CAAe,oCAAf,CAAN;EACD;EACF;EAEM,SAASyJ,QAAT,CAAkBjN,MAAlB,EAA0BuC,KAAK,GAAG,CAAlC,EAAqC;EAC1C,MAAI2K,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAItM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGZ,MAApB,EAA4BY,CAAC,EAA7B,EAAiC;EAC/BsM,IAAAA,KAAK,CAAClI,IAAN,CAAWzC,KAAX;EACD;;EACD,SAAO2K,KAAP;EACD;;EAED,SAASF,WAAT,CAAqBzI,IAArB,EAA2BhC,KAA3B,EAAkC;EAChC,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7B,UAAM,IAAIpC,SAAJ,CAAe,GAAEoE,IAAK,mBAAtB,CAAN;EACD;EACF;;EAEM,SAAS4I,aAAT,CAAuBjJ,MAAvB,EAA+B;EACpC,MAAIA,MAAM,CAACkJ,OAAP,EAAJ,EAAsB;EACpB,UAAM,IAAI1M,KAAJ,CAAU,uCAAV,CAAN;EACD;EACF;;ECpJM,SAAS2M,QAAT,CAAkBnJ,MAAlB,EAA0B;EAC/B,MAAIoJ,GAAG,GAAGL,QAAQ,CAAC/I,MAAM,CAACO,IAAR,CAAlB;;EACA,OAAK,IAAI7D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC,EAAE7D,CAAnC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoC,EAAEK,CAAtC,EAAyC;EACvCuI,MAAAA,GAAG,CAAC1M,CAAD,CAAH,IAAUsD,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAV;EACD;EACF;;EACD,SAAOuI,GAAP;EACD;EAEM,SAASC,WAAT,CAAqBrJ,MAArB,EAA6B;EAClC,MAAIoJ,GAAG,GAAGL,QAAQ,CAAC/I,MAAM,CAACQ,OAAR,CAAlB;;EACA,OAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC,EAAE7D,CAAnC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoC,EAAEK,CAAtC,EAAyC;EACvCuI,MAAAA,GAAG,CAACvI,CAAD,CAAH,IAAUb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAV;EACD;EACF;;EACD,SAAOuI,GAAP;EACD;EAEM,SAASE,MAAT,CAAgBtJ,MAAhB,EAAwB;EAC7B,MAAIuJ,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI7M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvC0I,MAAAA,CAAC,IAAIvJ,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAL;EACD;EACF;;EACD,SAAO0I,CAAP;EACD;EAEM,SAASC,YAAT,CAAsBxJ,MAAtB,EAA8B;EACnC,MAAIoJ,GAAG,GAAGL,QAAQ,CAAC/I,MAAM,CAACO,IAAR,EAAc,CAAd,CAAlB;;EACA,OAAK,IAAI7D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC,EAAE7D,CAAnC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoC,EAAEK,CAAtC,EAAyC;EACvCuI,MAAAA,GAAG,CAAC1M,CAAD,CAAH,IAAUsD,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAV;EACD;EACF;;EACD,SAAOuI,GAAP;EACD;EAEM,SAASK,eAAT,CAAyBzJ,MAAzB,EAAiC;EACtC,MAAIoJ,GAAG,GAAGL,QAAQ,CAAC/I,MAAM,CAACQ,OAAR,EAAiB,CAAjB,CAAlB;;EACA,OAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC,EAAE7D,CAAnC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoC,EAAEK,CAAtC,EAAyC;EACvCuI,MAAAA,GAAG,CAACvI,CAAD,CAAH,IAAUb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAV;EACD;EACF;;EACD,SAAOuI,GAAP;EACD;EAEM,SAASM,UAAT,CAAoB1J,MAApB,EAA4B;EACjC,MAAIuJ,CAAC,GAAG,CAAR;;EACA,OAAK,IAAI7M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvC0I,MAAAA,CAAC,IAAIvJ,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAL;EACD;EACF;;EACD,SAAO0I,CAAP;EACD;EAEM,SAASI,aAAT,CAAuB3J,MAAvB,EAA+B4J,QAA/B,EAAyCC,IAAzC,EAA+C;EACpD,QAAMtJ,IAAI,GAAGP,MAAM,CAACO,IAApB;EACA,QAAMuJ,IAAI,GAAG9J,MAAM,CAACQ,OAApB;EACA,QAAMuJ,QAAQ,GAAG,EAAjB;;EAEA,OAAK,IAAIrN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,QAAIsN,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAItM,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIkD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,IAApB,EAA0BjJ,CAAC,EAA3B,EAA+B;EAC7BlD,MAAAA,CAAC,GAAGqC,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBgJ,IAAI,CAACnN,CAAD,CAA3B;EACAsN,MAAAA,IAAI,IAAIrM,CAAR;EACAsM,MAAAA,IAAI,IAAItM,CAAC,GAAGA,CAAZ;EACD;;EACD,QAAIiM,QAAJ,EAAc;EACZG,MAAAA,QAAQ,CAACjJ,IAAT,CAAc,CAACmJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBF,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAd;EACD,KAFD,MAEO;EACLC,MAAAA,QAAQ,CAACjJ,IAAT,CAAc,CAACmJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBF,IAAxB,IAAgCA,IAA9C;EACD;EACF;;EACD,SAAOC,QAAP;EACD;EAEM,SAASG,gBAAT,CAA0BlK,MAA1B,EAAkC4J,QAAlC,EAA4CC,IAA5C,EAAkD;EACvD,QAAMtJ,IAAI,GAAGP,MAAM,CAACO,IAApB;EACA,QAAMuJ,IAAI,GAAG9J,MAAM,CAACQ,OAApB;EACA,QAAMuJ,QAAQ,GAAG,EAAjB;;EAEA,OAAK,IAAIlJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,IAApB,EAA0BjJ,CAAC,EAA3B,EAA+B;EAC7B,QAAImJ,IAAI,GAAG,CAAX;EACA,QAAIC,IAAI,GAAG,CAAX;EACA,QAAItM,CAAC,GAAG,CAAR;;EACA,SAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7BiB,MAAAA,CAAC,GAAGqC,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBgJ,IAAI,CAAChJ,CAAD,CAA3B;EACAmJ,MAAAA,IAAI,IAAIrM,CAAR;EACAsM,MAAAA,IAAI,IAAItM,CAAC,GAAGA,CAAZ;EACD;;EACD,QAAIiM,QAAJ,EAAc;EACZG,MAAAA,QAAQ,CAACjJ,IAAT,CAAc,CAACmJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBzJ,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAd;EACD,KAFD,MAEO;EACLwJ,MAAAA,QAAQ,CAACjJ,IAAT,CAAc,CAACmJ,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBzJ,IAAxB,IAAgCA,IAA9C;EACD;EACF;;EACD,SAAOwJ,QAAP;EACD;EAEM,SAASI,WAAT,CAAqBnK,MAArB,EAA6B4J,QAA7B,EAAuCC,IAAvC,EAA6C;EAClD,QAAMtJ,IAAI,GAAGP,MAAM,CAACO,IAApB;EACA,QAAMuJ,IAAI,GAAG9J,MAAM,CAACQ,OAApB;EACA,QAAM4J,IAAI,GAAG7J,IAAI,GAAGuJ,IAApB;EAEA,MAAIE,IAAI,GAAG,CAAX;EACA,MAAIC,IAAI,GAAG,CAAX;EACA,MAAItM,CAAC,GAAG,CAAR;;EACA,OAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,IAApB,EAA0BjJ,CAAC,EAA3B,EAA+B;EAC7BlD,MAAAA,CAAC,GAAGqC,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBgJ,IAAvB;EACAG,MAAAA,IAAI,IAAIrM,CAAR;EACAsM,MAAAA,IAAI,IAAItM,CAAC,GAAGA,CAAZ;EACD;EACF;;EACD,MAAIiM,QAAJ,EAAc;EACZ,WAAO,CAACK,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBI,IAAxB,KAAiCA,IAAI,GAAG,CAAxC,CAAP;EACD,GAFD,MAEO;EACL,WAAO,CAACH,IAAI,GAAID,IAAI,GAAGA,IAAR,GAAgBI,IAAxB,IAAgCA,IAAvC;EACD;EACF;EAEM,SAASC,WAAT,CAAqBrK,MAArB,EAA6B6J,IAA7B,EAAmC;EACxC,OAAK,IAAInN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCb,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBgJ,IAAI,CAACnN,CAAD,CAAxC;EACD;EACF;EACF;EAEM,SAAS4N,cAAT,CAAwBtK,MAAxB,EAAgC6J,IAAhC,EAAsC;EAC3C,OAAK,IAAInN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCb,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBgJ,IAAI,CAAChJ,CAAD,CAAxC;EACD;EACF;EACF;EAEM,SAAS0J,SAAT,CAAmBvK,MAAnB,EAA2B6J,IAA3B,EAAiC;EACtC,OAAK,IAAInN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCb,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBgJ,IAApC;EACD;EACF;EACF;EAEM,SAASW,aAAT,CAAuBxK,MAAvB,EAA+B;EACpC,QAAMyK,KAAK,GAAG,EAAd;;EACA,OAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,QAAI0M,GAAG,GAAG,CAAV;;EACA,SAAK,IAAIvI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCuI,MAAAA,GAAG,IAAItK,IAAI,CAACC,GAAL,CAASiB,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAT,EAA2B,CAA3B,KAAiCb,MAAM,CAACQ,OAAP,GAAiB,CAAlD,CAAP;EACD;;EACDiK,IAAAA,KAAK,CAAC3J,IAAN,CAAWhC,IAAI,CAAC+H,IAAL,CAAUuC,GAAV,CAAX;EACD;;EACD,SAAOqB,KAAP;EACD;EAEM,SAASC,UAAT,CAAoB1K,MAApB,EAA4ByK,KAA5B,EAAmC;EACxC,OAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCb,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmB4J,KAAK,CAAC/N,CAAD,CAAzC;EACD;EACF;EACF;EAEM,SAASiO,gBAAT,CAA0B3K,MAA1B,EAAkC;EACvC,QAAMyK,KAAK,GAAG,EAAd;;EACA,OAAK,IAAI5J,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvC,QAAIuI,GAAG,GAAG,CAAV;;EACA,SAAK,IAAI1M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC0M,MAAAA,GAAG,IAAItK,IAAI,CAACC,GAAL,CAASiB,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAT,EAA2B,CAA3B,KAAiCb,MAAM,CAACO,IAAP,GAAc,CAA/C,CAAP;EACD;;EACDkK,IAAAA,KAAK,CAAC3J,IAAN,CAAWhC,IAAI,CAAC+H,IAAL,CAAUuC,GAAV,CAAX;EACD;;EACD,SAAOqB,KAAP;EACD;EAEM,SAASG,aAAT,CAAuB5K,MAAvB,EAA+ByK,KAA/B,EAAsC;EAC3C,OAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCb,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmB4J,KAAK,CAAC5J,CAAD,CAAzC;EACD;EACF;EACF;EAEM,SAASgK,WAAT,CAAqB7K,MAArB,EAA6B;EAClC,QAAM8K,OAAO,GAAG9K,MAAM,CAACoK,IAAP,GAAc,CAA9B;EACA,MAAIhB,GAAG,GAAG,CAAV;;EACA,OAAK,IAAIvI,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvC,SAAK,IAAInE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC0M,MAAAA,GAAG,IAAItK,IAAI,CAACC,GAAL,CAASiB,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAT,EAA2B,CAA3B,IAAgCiK,OAAvC;EACD;EACF;;EACD,SAAOhM,IAAI,CAAC+H,IAAL,CAAUuC,GAAV,CAAP;EACD;EAEM,SAAS2B,QAAT,CAAkB/K,MAAlB,EAA0ByK,KAA1B,EAAiC;EACtC,OAAK,IAAI/N,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,SAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCb,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmB4J,KAApC;EACD;EACF;EACF;;ECjLM,MAAM1I,cAAN,CAAqB;EAC1B,SAAOiJ,WAAP,CAAmBC,OAAnB,EAA4BC,UAA5B,EAAwCC,OAAxC,EAAiD;EAC/C,QAAIrP,MAAM,GAAGmP,OAAO,GAAGC,UAAvB;;EACA,QAAIpP,MAAM,KAAKqP,OAAO,CAACrP,MAAvB,EAA+B;EAC7B,YAAM,IAAIwD,UAAJ,CAAe,6CAAf,CAAN;EACD;;EACD,QAAIgD,SAAS,GAAG,IAAIN,MAAJ,CAAWiJ,OAAX,EAAoBC,UAApB,CAAhB;;EACA,SAAK,IAAInD,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGkD,OAAxB,EAAiClD,GAAG,EAApC,EAAwC;EACtC,WAAK,IAAIE,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAGiD,UAA9B,EAA0CjD,MAAM,EAAhD,EAAoD;EAClD3F,QAAAA,SAAS,CAACF,GAAV,CAAc2F,GAAd,EAAmBE,MAAnB,EAA2BkD,OAAO,CAACpD,GAAG,GAAGmD,UAAN,GAAmBjD,MAApB,CAAlC;EACD;EACF;;EACD,WAAO3F,SAAP;EACD;;EAED,SAAO8I,SAAP,CAAiBD,OAAjB,EAA0B;EACxB,QAAI1D,MAAM,GAAG,IAAIzF,MAAJ,CAAW,CAAX,EAAcmJ,OAAO,CAACrP,MAAtB,CAAb;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyO,OAAO,CAACrP,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC+K,MAAAA,MAAM,CAACrF,GAAP,CAAW,CAAX,EAAc1F,CAAd,EAAiByO,OAAO,CAACzO,CAAD,CAAxB;EACD;;EACD,WAAO+K,MAAP;EACD;;EAED,SAAO4D,YAAP,CAAoBF,OAApB,EAA6B;EAC3B,QAAI1D,MAAM,GAAG,IAAIzF,MAAJ,CAAWmJ,OAAO,CAACrP,MAAnB,EAA2B,CAA3B,CAAb;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyO,OAAO,CAACrP,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC+K,MAAAA,MAAM,CAACrF,GAAP,CAAW1F,CAAX,EAAc,CAAd,EAAiByO,OAAO,CAACzO,CAAD,CAAxB;EACD;;EACD,WAAO+K,MAAP;EACD;;EAED,SAAO6D,KAAP,CAAa/K,IAAb,EAAmBC,OAAnB,EAA4B;EAC1B,WAAO,IAAIwB,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,CAAP;EACD;;EAED,SAAO+K,IAAP,CAAYhL,IAAZ,EAAkBC,OAAlB,EAA2B;EACzB,WAAO,IAAIwB,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,EAA0BzC,IAA1B,CAA+B,CAA/B,CAAP;EACD;;EAED,SAAOyN,IAAP,CAAYjL,IAAZ,EAAkBC,OAAlB,EAA2B5E,OAAO,GAAG,EAArC,EAAyC;EACvC,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEwP,MAAAA,MAAM,GAAG3M,IAAI,CAAC2M;EAAhB,QAA2B7P,OAAjC;EACA,QAAIoE,MAAM,GAAG,IAAIgC,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,OAApB,EAA6BK,CAAC,EAA9B,EAAkC;EAChCb,QAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiB4K,MAAM,EAAvB;EACD;EACF;;EACD,WAAOzL,MAAP;EACD;;EAED,SAAO0L,OAAP,CAAenL,IAAf,EAAqBC,OAArB,EAA8B5E,OAAO,GAAG,EAAxC,EAA4C;EAC1C,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAE+C,MAAAA,GAAG,GAAG,CAAR;EAAWtD,MAAAA,GAAG,GAAG,IAAjB;EAAuB+P,MAAAA,MAAM,GAAG3M,IAAI,CAAC2M;EAArC,QAAgD7P,OAAtD;EACA,QAAI,CAACU,MAAM,CAACC,SAAP,CAAiByC,GAAjB,CAAL,EAA4B,MAAM,IAAI/C,SAAJ,CAAc,wBAAd,CAAN;EAC5B,QAAI,CAACK,MAAM,CAACC,SAAP,CAAiBb,GAAjB,CAAL,EAA4B,MAAM,IAAIO,SAAJ,CAAc,wBAAd,CAAN;EAC5B,QAAI+C,GAAG,IAAItD,GAAX,EAAgB,MAAM,IAAI4D,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAIqM,QAAQ,GAAGjQ,GAAG,GAAGsD,GAArB;EACA,QAAIgB,MAAM,GAAG,IAAIgC,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,OAApB,EAA6BK,CAAC,EAA9B,EAAkC;EAChC,YAAIxC,KAAK,GAAGW,GAAG,GAAGF,IAAI,CAAC2H,KAAL,CAAWgF,MAAM,KAAKE,QAAtB,CAAlB;EACA3L,QAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBxC,KAAjB;EACD;EACF;;EACD,WAAO2B,MAAP;EACD;;EAED,SAAO4L,GAAP,CAAWrL,IAAX,EAAiBC,OAAjB,EAA0BnC,KAA1B,EAAiC;EAC/B,QAAImC,OAAO,KAAKzE,SAAhB,EAA2ByE,OAAO,GAAGD,IAAV;EAC3B,QAAIlC,KAAK,KAAKtC,SAAd,EAAyBsC,KAAK,GAAG,CAAR;EACzB,QAAIW,GAAG,GAAGF,IAAI,CAACE,GAAL,CAASuB,IAAT,EAAeC,OAAf,CAAV;EACA,QAAIR,MAAM,GAAG,KAAKsL,KAAL,CAAW/K,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsC,GAApB,EAAyBtC,CAAC,EAA1B,EAA8B;EAC5BsD,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcA,CAAd,EAAiB2B,KAAjB;EACD;;EACD,WAAO2B,MAAP;EACD;;EAED,SAAO6L,IAAP,CAAYjP,IAAZ,EAAkB2D,IAAlB,EAAwBC,OAAxB,EAAiC;EAC/B,QAAIsL,CAAC,GAAGlP,IAAI,CAACd,MAAb;EACA,QAAIyE,IAAI,KAAKxE,SAAb,EAAwBwE,IAAI,GAAGuL,CAAP;EACxB,QAAItL,OAAO,KAAKzE,SAAhB,EAA2ByE,OAAO,GAAGD,IAAV;EAC3B,QAAIvB,GAAG,GAAGF,IAAI,CAACE,GAAL,CAAS8M,CAAT,EAAYvL,IAAZ,EAAkBC,OAAlB,CAAV;EACA,QAAIR,MAAM,GAAG,KAAKsL,KAAL,CAAW/K,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsC,GAApB,EAAyBtC,CAAC,EAA1B,EAA8B;EAC5BsD,MAAAA,MAAM,CAACoC,GAAP,CAAW1F,CAAX,EAAcA,CAAd,EAAiBE,IAAI,CAACF,CAAD,CAArB;EACD;;EACD,WAAOsD,MAAP;EACD;;EAED,SAAOhB,GAAP,CAAW+M,OAAX,EAAoBC,OAApB,EAA6B;EAC3BD,IAAAA,OAAO,GAAG,KAAK1J,WAAL,CAAiB0J,OAAjB,CAAV;EACAC,IAAAA,OAAO,GAAG,KAAK3J,WAAL,CAAiB2J,OAAjB,CAAV;EACA,QAAIzL,IAAI,GAAGwL,OAAO,CAACxL,IAAnB;EACA,QAAIC,OAAO,GAAGuL,OAAO,CAACvL,OAAtB;EACA,QAAIG,MAAM,GAAG,IAAIqB,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,CAAb;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,OAApB,EAA6BK,CAAC,EAA9B,EAAkC;EAChCF,QAAAA,MAAM,CAACyB,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiB/B,IAAI,CAACE,GAAL,CAAS+M,OAAO,CAAC/K,GAAR,CAAYtE,CAAZ,EAAemE,CAAf,CAAT,EAA4BmL,OAAO,CAAChL,GAAR,CAAYtE,CAAZ,EAAemE,CAAf,CAA5B,CAAjB;EACD;EACF;;EACD,WAAOF,MAAP;EACD;;EAED,SAAOjF,GAAP,CAAWqQ,OAAX,EAAoBC,OAApB,EAA6B;EAC3BD,IAAAA,OAAO,GAAG,KAAK1J,WAAL,CAAiB0J,OAAjB,CAAV;EACAC,IAAAA,OAAO,GAAG,KAAK3J,WAAL,CAAiB2J,OAAjB,CAAV;EACA,QAAIzL,IAAI,GAAGwL,OAAO,CAACxL,IAAnB;EACA,QAAIC,OAAO,GAAGuL,OAAO,CAACvL,OAAtB;EACA,QAAIG,MAAM,GAAG,IAAI,IAAJ,CAASJ,IAAT,EAAeC,OAAf,CAAb;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,OAApB,EAA6BK,CAAC,EAA9B,EAAkC;EAChCF,QAAAA,MAAM,CAACyB,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiB/B,IAAI,CAACpD,GAAL,CAASqQ,OAAO,CAAC/K,GAAR,CAAYtE,CAAZ,EAAemE,CAAf,CAAT,EAA4BmL,OAAO,CAAChL,GAAR,CAAYtE,CAAZ,EAAemE,CAAf,CAA5B,CAAjB;EACD;EACF;;EACD,WAAOF,MAAP;EACD;;EAED,SAAO0B,WAAP,CAAmBhE,KAAnB,EAA0B;EACxB,WAAO0D,cAAc,CAACkK,QAAf,CAAwB5N,KAAxB,IAAiCA,KAAjC,GAAyC,IAAI2D,MAAJ,CAAW3D,KAAX,CAAhD;EACD;;EAED,SAAO4N,QAAP,CAAgB5N,KAAhB,EAAuB;EACrB,WAAOA,KAAK,IAAI,IAAT,IAAiBA,KAAK,CAAC6N,KAAN,KAAgB,QAAxC;EACD;;EAED,MAAI9B,IAAJ,GAAW;EACT,WAAO,KAAK7J,IAAL,GAAY,KAAKC,OAAxB;EACD;;EAED2L,EAAAA,KAAK,CAACC,QAAD,EAAW;EACd,QAAI,OAAOA,QAAP,KAAoB,UAAxB,EAAoC;EAClC,YAAM,IAAInQ,SAAJ,CAAc,6BAAd,CAAN;EACD;;EACD,SAAK,IAAIS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrCuL,QAAAA,QAAQ,CAAC5Q,IAAT,CAAc,IAAd,EAAoBkB,CAApB,EAAuBmE,CAAvB;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED6G,EAAAA,SAAS,GAAG;EACV,QAAIsB,KAAK,GAAG,EAAZ;;EACA,SAAK,IAAItM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrCmI,QAAAA,KAAK,CAAClI,IAAN,CAAW,KAAKE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAX;EACD;EACF;;EACD,WAAOmI,KAAP;EACD;;EAEDqD,EAAAA,SAAS,GAAG;EACV,QAAIC,IAAI,GAAG,EAAX;;EACA,SAAK,IAAI5P,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC4P,MAAAA,IAAI,CAACxL,IAAL,CAAU,EAAV;;EACA,WAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrCyL,QAAAA,IAAI,CAAC5P,CAAD,CAAJ,CAAQoE,IAAR,CAAa,KAAKE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAb;EACD;EACF;;EACD,WAAOyL,IAAP;EACD;;EAEDC,EAAAA,MAAM,GAAG;EACP,WAAO,KAAKF,SAAL,EAAP;EACD;;EAEDG,EAAAA,WAAW,GAAG;EACZ,WAAO,KAAKjM,IAAL,KAAc,CAArB;EACD;;EAEDkM,EAAAA,cAAc,GAAG;EACf,WAAO,KAAKjM,OAAL,KAAiB,CAAxB;EACD;;EAEDkM,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKnM,IAAL,KAAc,CAAd,IAAmB,KAAKC,OAAL,KAAiB,CAA3C;EACD;;EAEDmM,EAAAA,QAAQ,GAAG;EACT,WAAO,KAAKpM,IAAL,KAAc,KAAKC,OAA1B;EACD;;EAED0I,EAAAA,OAAO,GAAG;EACR,WAAO,KAAK3I,IAAL,KAAc,CAAd,IAAmB,KAAKC,OAAL,KAAiB,CAA3C;EACD;;EAEDoM,EAAAA,WAAW,GAAG;EACZ,QAAI,KAAKD,QAAL,EAAJ,EAAqB;EACnB,WAAK,IAAIjQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,aAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAInE,CAArB,EAAwBmE,CAAC,EAAzB,EAA6B;EAC3B,cAAI,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,MAAmB,KAAKG,GAAL,CAASH,CAAT,EAAYnE,CAAZ,CAAvB,EAAuC;EACrC,mBAAO,KAAP;EACD;EACF;EACF;;EACD,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD;;EAEDmQ,EAAAA,aAAa,GAAG;EACd,QAAInQ,CAAC,GAAG,CAAR;EACA,QAAImE,CAAC,GAAG,CAAR;EACA,QAAIiM,cAAc,GAAG,CAAC,CAAtB;EACA,QAAID,aAAa,GAAG,IAApB;EACA,QAAIE,OAAO,GAAG,KAAd;;EACA,WAAOrQ,CAAC,GAAG,KAAK6D,IAAT,IAAiBsM,aAAxB,EAAuC;EACrChM,MAAAA,CAAC,GAAG,CAAJ;EACAkM,MAAAA,OAAO,GAAG,KAAV;;EACA,aAAOlM,CAAC,GAAG,KAAKL,OAAT,IAAoBuM,OAAO,KAAK,KAAvC,EAA8C;EAC5C,YAAI,KAAK/L,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,MAAmB,CAAvB,EAA0B;EACxBA,UAAAA,CAAC;EACF,SAFD,MAEO,IAAI,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,MAAmB,CAAnB,IAAwBA,CAAC,GAAGiM,cAAhC,EAAgD;EACrDC,UAAAA,OAAO,GAAG,IAAV;EACAD,UAAAA,cAAc,GAAGjM,CAAjB;EACD,SAHM,MAGA;EACLgM,UAAAA,aAAa,GAAG,KAAhB;EACAE,UAAAA,OAAO,GAAG,IAAV;EACD;EACF;;EACDrQ,MAAAA,CAAC;EACF;;EACD,WAAOmQ,aAAP;EACD;;EAEDG,EAAAA,oBAAoB,GAAG;EACrB,QAAItQ,CAAC,GAAG,CAAR;EACA,QAAImE,CAAC,GAAG,CAAR;EACA,QAAIiM,cAAc,GAAG,CAAC,CAAtB;EACA,QAAIE,oBAAoB,GAAG,IAA3B;EACA,QAAID,OAAO,GAAG,KAAd;;EACA,WAAOrQ,CAAC,GAAG,KAAK6D,IAAT,IAAiByM,oBAAxB,EAA8C;EAC5CnM,MAAAA,CAAC,GAAG,CAAJ;EACAkM,MAAAA,OAAO,GAAG,KAAV;;EACA,aAAOlM,CAAC,GAAG,KAAKL,OAAT,IAAoBuM,OAAO,KAAK,KAAvC,EAA8C;EAC5C,YAAI,KAAK/L,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,MAAmB,CAAvB,EAA0B;EACxBA,UAAAA,CAAC;EACF,SAFD,MAEO,IAAI,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,MAAmB,CAAnB,IAAwBA,CAAC,GAAGiM,cAAhC,EAAgD;EACrDC,UAAAA,OAAO,GAAG,IAAV;EACAD,UAAAA,cAAc,GAAGjM,CAAjB;EACD,SAHM,MAGA;EACLmM,UAAAA,oBAAoB,GAAG,KAAvB;EACAD,UAAAA,OAAO,GAAG,IAAV;EACD;EACF;;EACD,WAAK,IAAIE,CAAC,GAAGpM,CAAC,GAAG,CAAjB,EAAoBoM,CAAC,GAAG,KAAK1M,IAA7B,EAAmC0M,CAAC,EAApC,EAAwC;EACtC,YAAI,KAAKjM,GAAL,CAAStE,CAAT,EAAYuQ,CAAZ,MAAmB,CAAvB,EAA0B;EACxBD,UAAAA,oBAAoB,GAAG,KAAvB;EACD;EACF;;EACDtQ,MAAAA,CAAC;EACF;;EACD,WAAOsQ,oBAAP;EACD;;EAEDE,EAAAA,WAAW,GAAG;EACZ,QAAIvM,MAAM,GAAG,KAAKwM,KAAL,EAAb;EACA,QAAIC,CAAC,GAAG,CAAR;EACA,QAAIH,CAAC,GAAG,CAAR;;EACA,WAAOG,CAAC,GAAGzM,MAAM,CAACJ,IAAX,IAAmB0M,CAAC,GAAGtM,MAAM,CAACH,OAArC,EAA8C;EAC5C,UAAI6M,IAAI,GAAGD,CAAX;;EACA,WAAK,IAAI1Q,CAAC,GAAG0Q,CAAb,EAAgB1Q,CAAC,GAAGiE,MAAM,CAACJ,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,YAAIiE,MAAM,CAACK,GAAP,CAAWtE,CAAX,EAAcuQ,CAAd,IAAmBtM,MAAM,CAACK,GAAP,CAAWqM,IAAX,EAAiBJ,CAAjB,CAAvB,EAA4C;EAC1CI,UAAAA,IAAI,GAAG3Q,CAAP;EACD;EACF;;EACD,UAAIiE,MAAM,CAACK,GAAP,CAAWqM,IAAX,EAAiBJ,CAAjB,MAAwB,CAA5B,EAA+B;EAC7BA,QAAAA,CAAC;EACF,OAFD,MAEO;EACLtM,QAAAA,MAAM,CAAC2M,QAAP,CAAgBF,CAAhB,EAAmBC,IAAnB;EACA,YAAIE,GAAG,GAAG5M,MAAM,CAACK,GAAP,CAAWoM,CAAX,EAAcH,CAAd,CAAV;;EACA,aAAK,IAAIpM,CAAC,GAAGoM,CAAb,EAAgBpM,CAAC,GAAGF,MAAM,CAACH,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvCF,UAAAA,MAAM,CAACyB,GAAP,CAAWgL,CAAX,EAAcvM,CAAd,EAAiBF,MAAM,CAACK,GAAP,CAAWoM,CAAX,EAAcvM,CAAd,IAAmB0M,GAApC;EACD;;EACD,aAAK,IAAI7Q,CAAC,GAAG0Q,CAAC,GAAG,CAAjB,EAAoB1Q,CAAC,GAAGiE,MAAM,CAACJ,IAA/B,EAAqC7D,CAAC,EAAtC,EAA0C;EACxC,cAAIgD,MAAM,GAAGiB,MAAM,CAACK,GAAP,CAAWtE,CAAX,EAAcuQ,CAAd,IAAmBtM,MAAM,CAACK,GAAP,CAAWoM,CAAX,EAAcH,CAAd,CAAhC;EACAtM,UAAAA,MAAM,CAACyB,GAAP,CAAW1F,CAAX,EAAcuQ,CAAd,EAAiB,CAAjB;;EACA,eAAK,IAAIpM,CAAC,GAAGoM,CAAC,GAAG,CAAjB,EAAoBpM,CAAC,GAAGF,MAAM,CAACH,OAA/B,EAAwCK,CAAC,EAAzC,EAA6C;EAC3CF,YAAAA,MAAM,CAACyB,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiBF,MAAM,CAACK,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBF,MAAM,CAACK,GAAP,CAAWoM,CAAX,EAAcvM,CAAd,IAAmBnB,MAAvD;EACD;EACF;;EACD0N,QAAAA,CAAC;EACDH,QAAAA,CAAC;EACF;EACF;;EACD,WAAOtM,MAAP;EACD;;EAED6M,EAAAA,kBAAkB,GAAG;EACnB,QAAI7M,MAAM,GAAG,KAAKuM,WAAL,EAAb;EACA,QAAIO,CAAC,GAAG9M,MAAM,CAACH,OAAf;EACA,QAAIkN,CAAC,GAAG/M,MAAM,CAACJ,IAAf;EACA,QAAI6M,CAAC,GAAGM,CAAC,GAAG,CAAZ;;EACA,WAAON,CAAC,IAAI,CAAZ,EAAe;EACb,UAAIzM,MAAM,CAACgN,MAAP,CAAcP,CAAd,MAAqB,CAAzB,EAA4B;EAC1BA,QAAAA,CAAC;EACF,OAFD,MAEO;EACL,YAAIQ,CAAC,GAAG,CAAR;EACA,YAAIC,KAAK,GAAG,KAAZ;;EACA,eAAOD,CAAC,GAAGF,CAAJ,IAASG,KAAK,KAAK,KAA1B,EAAiC;EAC/B,cAAIlN,MAAM,CAACK,GAAP,CAAWoM,CAAX,EAAcQ,CAAd,MAAqB,CAAzB,EAA4B;EAC1BC,YAAAA,KAAK,GAAG,IAAR;EACD,WAFD,MAEO;EACLD,YAAAA,CAAC;EACF;EACF;;EACD,aAAK,IAAIlR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0Q,CAApB,EAAuB1Q,CAAC,EAAxB,EAA4B;EAC1B,cAAIgD,MAAM,GAAGiB,MAAM,CAACK,GAAP,CAAWtE,CAAX,EAAckR,CAAd,CAAb;;EACA,eAAK,IAAI/M,CAAC,GAAG+M,CAAb,EAAgB/M,CAAC,GAAG4M,CAApB,EAAuB5M,CAAC,EAAxB,EAA4B;EAC1B,gBAAI0M,GAAG,GAAG5M,MAAM,CAACK,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,IAAmBnB,MAAM,GAAGiB,MAAM,CAACK,GAAP,CAAWoM,CAAX,EAAcvM,CAAd,CAAtC;EACAF,YAAAA,MAAM,CAACyB,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiB0M,GAAjB;EACD;EACF;;EACDH,QAAAA,CAAC;EACF;EACF;;EACD,WAAOzM,MAAP;EACD;;EAEDyB,EAAAA,GAAG,GAAG;EACJ,UAAM,IAAI5F,KAAJ,CAAU,6BAAV,CAAN;EACD;;EAEDwE,EAAAA,GAAG,GAAG;EACJ,UAAM,IAAIxE,KAAJ,CAAU,6BAAV,CAAN;EACD;;EAEDoD,EAAAA,MAAM,CAAChE,OAAO,GAAG,EAAX,EAAe;EACnB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAEsE,MAAAA,IAAI,GAAG,CAAT;EAAYC,MAAAA,OAAO,GAAG;EAAtB,QAA4B5E,OAAlC;;EACA,QAAI,CAACU,MAAM,CAACC,SAAP,CAAiBgE,IAAjB,CAAD,IAA2BA,IAAI,IAAI,CAAvC,EAA0C;EACxC,YAAM,IAAItE,SAAJ,CAAc,iCAAd,CAAN;EACD;;EACD,QAAI,CAACK,MAAM,CAACC,SAAP,CAAiBiE,OAAjB,CAAD,IAA8BA,OAAO,IAAI,CAA7C,EAAgD;EAC9C,YAAM,IAAIvE,SAAJ,CAAc,oCAAd,CAAN;EACD;;EACD,QAAI+D,MAAM,GAAG,IAAIgC,MAAJ,CAAW,KAAKzB,IAAL,GAAYA,IAAvB,EAA6B,KAAKC,OAAL,GAAeA,OAA5C,CAAb;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,OAApB,EAA6BK,CAAC,EAA9B,EAAkC;EAChCb,QAAAA,MAAM,CAAC8N,YAAP,CAAoB,IAApB,EAA0B,KAAKvN,IAAL,GAAY7D,CAAtC,EAAyC,KAAK8D,OAAL,GAAeK,CAAxD;EACD;EACF;;EACD,WAAOb,MAAP;EACD;;EAEDjC,EAAAA,IAAI,CAACM,KAAD,EAAQ;EACV,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAexC,KAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED0P,EAAAA,GAAG,GAAG;EACJ,WAAO,KAAKjL,IAAL,CAAU,CAAC,CAAX,CAAP;EACD;;EAEDkL,EAAAA,MAAM,CAAC3G,KAAD,EAAQ;EACZD,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;EACA,QAAIU,GAAG,GAAG,EAAV;;EACA,SAAK,IAAIrL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrCqL,MAAAA,GAAG,CAACjH,IAAJ,CAAS,KAAKE,GAAL,CAASqG,KAAT,EAAgB3K,CAAhB,CAAT;EACD;;EACD,WAAOqL,GAAP;EACD;;EAEDkG,EAAAA,YAAY,CAAC5G,KAAD,EAAQ;EAClB,WAAOrF,MAAM,CAACoJ,SAAP,CAAiB,KAAK4C,MAAL,CAAY3G,KAAZ,CAAjB,CAAP;EACD;;EAED6G,EAAAA,MAAM,CAAC7G,KAAD,EAAQ2B,KAAR,EAAe;EACnB5B,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;EACA2B,IAAAA,KAAK,GAAGxB,cAAc,CAAC,IAAD,EAAOwB,KAAP,CAAtB;;EACA,SAAK,IAAItM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,WAAK0F,GAAL,CAASiF,KAAT,EAAgB3K,CAAhB,EAAmBsM,KAAK,CAACtM,CAAD,CAAxB;EACD;;EACD,WAAO,IAAP;EACD;;EAED4Q,EAAAA,QAAQ,CAACa,IAAD,EAAOC,IAAP,EAAa;EACnBhH,IAAAA,aAAa,CAAC,IAAD,EAAO+G,IAAP,CAAb;EACA/G,IAAAA,aAAa,CAAC,IAAD,EAAOgH,IAAP,CAAb;;EACA,SAAK,IAAI1R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,UAAI2R,IAAI,GAAG,KAAKrN,GAAL,CAASmN,IAAT,EAAezR,CAAf,CAAX;EACA,WAAK0F,GAAL,CAAS+L,IAAT,EAAezR,CAAf,EAAkB,KAAKsE,GAAL,CAASoN,IAAT,EAAe1R,CAAf,CAAlB;EACA,WAAK0F,GAAL,CAASgM,IAAT,EAAe1R,CAAf,EAAkB2R,IAAlB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDC,EAAAA,SAAS,CAACjH,KAAD,EAAQ;EACfE,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;EACA,QAAIY,MAAM,GAAG,EAAb;;EACA,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClCuL,MAAAA,MAAM,CAACnH,IAAP,CAAY,KAAKE,GAAL,CAAStE,CAAT,EAAY2K,KAAZ,CAAZ;EACD;;EACD,WAAOY,MAAP;EACD;;EAEDsG,EAAAA,eAAe,CAAClH,KAAD,EAAQ;EACrB,WAAOrF,MAAM,CAACqJ,YAAP,CAAoB,KAAKiD,SAAL,CAAejH,KAAf,CAApB,CAAP;EACD;;EAEDmH,EAAAA,SAAS,CAACnH,KAAD,EAAQ2B,KAAR,EAAe;EACtBzB,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;EACA2B,IAAAA,KAAK,GAAGrB,iBAAiB,CAAC,IAAD,EAAOqB,KAAP,CAAzB;;EACA,SAAK,IAAItM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK0F,GAAL,CAAS1F,CAAT,EAAY2K,KAAZ,EAAmB2B,KAAK,CAACtM,CAAD,CAAxB;EACD;;EACD,WAAO,IAAP;EACD;;EAED+R,EAAAA,WAAW,CAACC,OAAD,EAAUC,OAAV,EAAmB;EAC5BpH,IAAAA,gBAAgB,CAAC,IAAD,EAAOmH,OAAP,CAAhB;EACAnH,IAAAA,gBAAgB,CAAC,IAAD,EAAOoH,OAAP,CAAhB;;EACA,SAAK,IAAIjS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,UAAI2R,IAAI,GAAG,KAAKrN,GAAL,CAAStE,CAAT,EAAYgS,OAAZ,CAAX;EACA,WAAKtM,GAAL,CAAS1F,CAAT,EAAYgS,OAAZ,EAAqB,KAAK1N,GAAL,CAAStE,CAAT,EAAYiS,OAAZ,CAArB;EACA,WAAKvM,GAAL,CAAS1F,CAAT,EAAYiS,OAAZ,EAAqBN,IAArB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDO,EAAAA,YAAY,CAACnH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC5G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDgO,EAAAA,YAAY,CAACpH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC5G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDiO,EAAAA,YAAY,CAACrH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC5G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDkO,EAAAA,YAAY,CAACtH,MAAD,EAAS;EACnBA,IAAAA,MAAM,GAAGD,cAAc,CAAC,IAAD,EAAOC,MAAP,CAAvB;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC5G,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDmO,EAAAA,eAAe,CAACvH,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC/K,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDuS,EAAAA,eAAe,CAACxH,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC/K,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDwS,EAAAA,eAAe,CAACzH,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC/K,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDyS,EAAAA,eAAe,CAAC1H,MAAD,EAAS;EACtBA,IAAAA,MAAM,GAAGE,iBAAiB,CAAC,IAAD,EAAOF,MAAP,CAA1B;;EACA,SAAK,IAAI/K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB4G,MAAM,CAAC/K,CAAD,CAAtC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED0S,EAAAA,MAAM,CAAC/H,KAAD,EAAQhJ,KAAR,EAAe;EACnB+I,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;;EACA,SAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,WAAK0F,GAAL,CAASiF,KAAT,EAAgB3K,CAAhB,EAAmB,KAAKsE,GAAL,CAASqG,KAAT,EAAgB3K,CAAhB,IAAqB2B,KAAxC;EACD;;EACD,WAAO,IAAP;EACD;;EAEDgR,EAAAA,SAAS,CAAChI,KAAD,EAAQhJ,KAAR,EAAe;EACtBkJ,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;;EACA,SAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK0F,GAAL,CAAS1F,CAAT,EAAY2K,KAAZ,EAAmB,KAAKrG,GAAL,CAAStE,CAAT,EAAY2K,KAAZ,IAAqBhJ,KAAxC;EACD;;EACD,WAAO,IAAP;EACD;;EAED3C,EAAAA,GAAG,GAAG;EACJ,QAAI,KAAKwN,OAAL,EAAJ,EAAoB;EAClB,aAAOoG,GAAP;EACD;;EACD,QAAI/F,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;;EACA,SAAK,IAAItE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB0I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAJ;EACD;EACF;EACF;;EACD,WAAO0I,CAAP;EACD;;EAEDgG,EAAAA,QAAQ,GAAG;EACTtG,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;EACA,QAAIwO,GAAG,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAV;;EACA,SAAK,IAAI9S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB0I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAJ;EACA2O,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAS9S,CAAT;EACA8S,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAS3O,CAAT;EACD;EACF;EACF;;EACD,WAAO2O,GAAP;EACD;;EAEDxQ,EAAAA,GAAG,GAAG;EACJ,QAAI,KAAKkK,OAAL,EAAJ,EAAoB;EAClB,aAAOoG,GAAP;EACD;;EACD,QAAI/F,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;;EACA,SAAK,IAAItE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB0I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAJ;EACD;EACF;EACF;;EACD,WAAO0I,CAAP;EACD;;EAEDkG,EAAAA,QAAQ,GAAG;EACTxG,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAR;EACA,QAAIwO,GAAG,GAAG,CAAC,CAAD,EAAI,CAAJ,CAAV;;EACA,SAAK,IAAI9S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,YAAI,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB0I,CAArB,EAAwB;EACtBA,UAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAJ;EACA2O,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAS9S,CAAT;EACA8S,UAAAA,GAAG,CAAC,CAAD,CAAH,GAAS3O,CAAT;EACD;EACF;EACF;;EACD,WAAO2O,GAAP;EACD;;EAED7B,EAAAA,MAAM,CAAC5F,GAAD,EAAM;EACVX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;;EACA,QAAI,KAAKmB,OAAL,EAAJ,EAAoB;EAClB,aAAOoG,GAAP;EACD;;EACD,QAAI/F,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAc,CAAd,CAAR;;EACA,SAAK,IAAIrL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKsE,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,IAAmB6M,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,CAAJ;EACD;EACF;;EACD,WAAO6M,CAAP;EACD;;EAEDmG,EAAAA,WAAW,CAAC3H,GAAD,EAAM;EACfX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;EACAkB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAc,CAAd,CAAR;EACA,QAAIyH,GAAG,GAAG,CAACzH,GAAD,EAAM,CAAN,CAAV;;EACA,SAAK,IAAIrL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKsE,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,IAAmB6M,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,CAAJ;EACA8S,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAS9S,CAAT;EACD;EACF;;EACD,WAAO8S,GAAP;EACD;;EAEDG,EAAAA,MAAM,CAAC5H,GAAD,EAAM;EACVX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;;EACA,QAAI,KAAKmB,OAAL,EAAJ,EAAoB;EAClB,aAAOoG,GAAP;EACD;;EACD,QAAI/F,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAc,CAAd,CAAR;;EACA,SAAK,IAAIrL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKsE,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,IAAmB6M,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,CAAJ;EACD;EACF;;EACD,WAAO6M,CAAP;EACD;;EAEDqG,EAAAA,WAAW,CAAC7H,GAAD,EAAM;EACfX,IAAAA,aAAa,CAAC,IAAD,EAAOW,GAAP,CAAb;EACAkB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAc,CAAd,CAAR;EACA,QAAIyH,GAAG,GAAG,CAACzH,GAAD,EAAM,CAAN,CAAV;;EACA,SAAK,IAAIrL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,UAAI,KAAKsE,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,IAAmB6M,CAAvB,EAA0B;EACxBA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAS+G,GAAT,EAAcrL,CAAd,CAAJ;EACA8S,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAS9S,CAAT;EACD;EACF;;EACD,WAAO8S,GAAP;EACD;;EAEDK,EAAAA,SAAS,CAAC5H,MAAD,EAAS;EAChBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;;EACA,QAAI,KAAKiB,OAAL,EAAJ,EAAoB;EAClB,aAAOoG,GAAP;EACD;;EACD,QAAI/F,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAYiH,MAAZ,CAAR;;EACA,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKsE,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,CAAJ;EACD;EACF;;EACD,WAAOsB,CAAP;EACD;;EAEDuG,EAAAA,cAAc,CAAC7H,MAAD,EAAS;EACrBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;EACAgB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAYiH,MAAZ,CAAR;EACA,QAAIuH,GAAG,GAAG,CAAC,CAAD,EAAIvH,MAAJ,CAAV;;EACA,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKsE,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,CAAJ;EACAuH,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAS9S,CAAT;EACD;EACF;;EACD,WAAO8S,GAAP;EACD;;EAEDO,EAAAA,SAAS,CAAC9H,MAAD,EAAS;EAChBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;;EACA,QAAI,KAAKiB,OAAL,EAAJ,EAAoB;EAClB,aAAOoG,GAAP;EACD;;EACD,QAAI/F,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAYiH,MAAZ,CAAR;;EACA,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKsE,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,CAAJ;EACD;EACF;;EACD,WAAOsB,CAAP;EACD;;EAEDyG,EAAAA,cAAc,CAAC/H,MAAD,EAAS;EACrBV,IAAAA,gBAAgB,CAAC,IAAD,EAAOU,MAAP,CAAhB;EACAgB,IAAAA,aAAa,CAAC,IAAD,CAAb;EACA,QAAIM,CAAC,GAAG,KAAKvI,GAAL,CAAS,CAAT,EAAYiH,MAAZ,CAAR;EACA,QAAIuH,GAAG,GAAG,CAAC,CAAD,EAAIvH,MAAJ,CAAV;;EACA,SAAK,IAAIvL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,UAAI,KAAKsE,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,IAAsBsB,CAA1B,EAA6B;EAC3BA,QAAAA,CAAC,GAAG,KAAKvI,GAAL,CAAStE,CAAT,EAAYuL,MAAZ,CAAJ;EACAuH,QAAAA,GAAG,CAAC,CAAD,CAAH,GAAS9S,CAAT;EACD;EACF;;EACD,WAAO8S,GAAP;EACD;;EAED3D,EAAAA,IAAI,GAAG;EACL,QAAI7M,GAAG,GAAGF,IAAI,CAACE,GAAL,CAAS,KAAKuB,IAAd,EAAoB,KAAKC,OAAzB,CAAV;EACA,QAAIqL,IAAI,GAAG,EAAX;;EACA,SAAK,IAAInP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsC,GAApB,EAAyBtC,CAAC,EAA1B,EAA8B;EAC5BmP,MAAAA,IAAI,CAAC/K,IAAL,CAAU,KAAKE,GAAL,CAAStE,CAAT,EAAYA,CAAZ,CAAV;EACD;;EACD,WAAOmP,IAAP;EACD;;EAEDoE,EAAAA,IAAI,CAACC,IAAI,GAAG,WAAR,EAAqB;EACvB,QAAIvP,MAAM,GAAG,CAAb;;EACA,QAAIuP,IAAI,KAAK,KAAb,EAAoB;EAClB,aAAO,KAAKxU,GAAL,EAAP;EACD,KAFD,MAEO,IAAIwU,IAAI,KAAK,WAAb,EAA0B;EAC/B,WAAK,IAAIxT,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,aAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrCF,UAAAA,MAAM,GAAGA,MAAM,GAAG,KAAKK,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB,KAAKG,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAnC;EACD;EACF;;EACD,aAAO/B,IAAI,CAAC+H,IAAL,CAAUlG,MAAV,CAAP;EACD,KAPM,MAOA;EACL,YAAM,IAAIrB,UAAJ,CAAgB,sBAAqB4Q,IAAK,EAA1C,CAAN;EACD;EACF;;EAEDC,EAAAA,aAAa,GAAG;EACd,QAAI/G,GAAG,GAAG,CAAV;;EACA,SAAK,IAAI1M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrCuI,QAAAA,GAAG,IAAI,KAAKpI,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAP;EACA,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAeuI,GAAf;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDgH,EAAAA,GAAG,CAACC,OAAD,EAAU;EACX,QAAItO,cAAc,CAACkK,QAAf,CAAwBoE,OAAxB,CAAJ,EAAsCA,OAAO,GAAGA,OAAO,CAAC3I,SAAR,EAAV;EACtC,QAAI4I,OAAO,GAAG,KAAK5I,SAAL,EAAd;;EACA,QAAI4I,OAAO,CAACxU,MAAR,KAAmBuU,OAAO,CAACvU,MAA/B,EAAuC;EACrC,YAAM,IAAIwD,UAAJ,CAAe,mCAAf,CAAN;EACD;;EACD,QAAI8Q,GAAG,GAAG,CAAV;;EACA,SAAK,IAAI1T,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4T,OAAO,CAACxU,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC0T,MAAAA,GAAG,IAAIE,OAAO,CAAC5T,CAAD,CAAP,GAAa2T,OAAO,CAAC3T,CAAD,CAA3B;EACD;;EACD,WAAO0T,GAAP;EACD;;EAEDG,EAAAA,IAAI,CAACC,KAAD,EAAQ;EACVA,IAAAA,KAAK,GAAGxO,MAAM,CAACK,WAAP,CAAmBmO,KAAnB,CAAR;EAEA,QAAI/C,CAAC,GAAG,KAAKlN,IAAb;EACA,QAAImN,CAAC,GAAG,KAAKlN,OAAb;EACA,QAAIoN,CAAC,GAAG4C,KAAK,CAAChQ,OAAd;EAEA,QAAIG,MAAM,GAAG,IAAIqB,MAAJ,CAAWyL,CAAX,EAAcG,CAAd,CAAb;EAEA,QAAI6C,KAAK,GAAG,IAAIC,YAAJ,CAAiBhD,CAAjB,CAAZ;;EACA,SAAK,IAAI7M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+M,CAApB,EAAuB/M,CAAC,EAAxB,EAA4B;EAC1B,WAAK,IAAIoM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGS,CAApB,EAAuBT,CAAC,EAAxB,EAA4B;EAC1BwD,QAAAA,KAAK,CAACxD,CAAD,CAAL,GAAWuD,KAAK,CAACxP,GAAN,CAAUiM,CAAV,EAAapM,CAAb,CAAX;EACD;;EAED,WAAK,IAAInE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1B,YAAIiU,CAAC,GAAG,CAAR;;EACA,aAAK,IAAI1D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGS,CAApB,EAAuBT,CAAC,EAAxB,EAA4B;EAC1B0D,UAAAA,CAAC,IAAI,KAAK3P,GAAL,CAAStE,CAAT,EAAYuQ,CAAZ,IAAiBwD,KAAK,CAACxD,CAAD,CAA3B;EACD;;EAEDtM,QAAAA,MAAM,CAACyB,GAAP,CAAW1F,CAAX,EAAcmE,CAAd,EAAiB8P,CAAjB;EACD;EACF;;EACD,WAAOhQ,MAAP;EACD;;EAEDiQ,EAAAA,WAAW,CAACJ,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAGxO,MAAM,CAACK,WAAP,CAAmBmO,KAAnB,CAAR;EACA,QAAI7P,MAAM,GAAG,IAAIqB,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAb;EACA,UAAM6O,GAAG,GAAG,KAAK7P,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAM8P,GAAG,GAAGN,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM+P,GAAG,GAAG,KAAK/P,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMgQ,GAAG,GAAGR,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMiQ,GAAG,GAAG,KAAKjQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMkQ,GAAG,GAAGV,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMmQ,GAAG,GAAG,KAAKnQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMoQ,GAAG,GAAGZ,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ,CAViB;;EAajB,UAAMqQ,EAAE,GAAG,CAACR,GAAG,GAAGM,GAAP,KAAeL,GAAG,GAAGM,GAArB,CAAX;EACA,UAAME,EAAE,GAAG,CAACL,GAAG,GAAGE,GAAP,IAAcL,GAAzB;EACA,UAAMS,EAAE,GAAGV,GAAG,IAAIG,GAAG,GAAGI,GAAV,CAAd;EACA,UAAMI,EAAE,GAAGL,GAAG,IAAID,GAAG,GAAGJ,GAAV,CAAd;EACA,UAAMW,EAAE,GAAG,CAACZ,GAAG,GAAGE,GAAP,IAAcK,GAAzB;EACA,UAAMM,EAAE,GAAG,CAACT,GAAG,GAAGJ,GAAP,KAAeC,GAAG,GAAGE,GAArB,CAAX;EACA,UAAMW,EAAE,GAAG,CAACZ,GAAG,GAAGI,GAAP,KAAeD,GAAG,GAAGE,GAArB,CAAX,CAnBiB;;EAsBjB,UAAMQ,GAAG,GAAGP,EAAE,GAAGG,EAAL,GAAUC,EAAV,GAAeE,EAA3B;EACA,UAAME,GAAG,GAAGN,EAAE,GAAGE,EAAjB;EACA,UAAMK,GAAG,GAAGR,EAAE,GAAGE,EAAjB;EACA,UAAMO,GAAG,GAAGV,EAAE,GAAGC,EAAL,GAAUC,EAAV,GAAeG,EAA3B;EAEA/Q,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBwP,GAAjB;EACAjR,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiByP,GAAjB;EACAlR,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB0P,GAAjB;EACAnR,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB2P,GAAjB;EACA,WAAOpR,MAAP;EACD;;EAEDqR,EAAAA,WAAW,CAACxB,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAGxO,MAAM,CAACK,WAAP,CAAmBmO,KAAnB,CAAR;EACA,QAAI7P,MAAM,GAAG,IAAIqB,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAb;EAEA,UAAMiQ,GAAG,GAAG,KAAKjR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMkR,GAAG,GAAG,KAAKlR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMmR,GAAG,GAAG,KAAKnR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMoR,GAAG,GAAG,KAAKpR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAM6P,GAAG,GAAG,KAAK7P,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAM+P,GAAG,GAAG,KAAK/P,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMqR,GAAG,GAAG,KAAKrR,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMiQ,GAAG,GAAG,KAAKjQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EACA,UAAMmQ,GAAG,GAAG,KAAKnQ,GAAL,CAAS,CAAT,EAAY,CAAZ,CAAZ;EAEA,UAAMsR,GAAG,GAAG9B,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMuR,GAAG,GAAG/B,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMwR,GAAG,GAAGhC,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMyR,GAAG,GAAGjC,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM8P,GAAG,GAAGN,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMgQ,GAAG,GAAGR,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAM0R,GAAG,GAAGlC,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMkQ,GAAG,GAAGV,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EACA,UAAMoQ,GAAG,GAAGZ,KAAK,CAACxP,GAAN,CAAU,CAAV,EAAa,CAAb,CAAZ;EAEA,UAAMqQ,EAAE,GAAG,CAACY,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBvB,GAAxB,GAA8BI,GAA9B,GAAoCE,GAArC,IAA4CL,GAAvD;EACA,UAAMQ,EAAE,GAAG,CAACW,GAAG,GAAGG,GAAP,KAAe,CAACG,GAAD,GAAOzB,GAAtB,CAAX;EACA,UAAMS,EAAE,GAAGV,GAAG,IAAI,CAACyB,GAAD,GAAOC,GAAP,GAAaE,GAAb,GAAmB3B,GAAnB,GAAyBE,GAAzB,GAA+B0B,GAA/B,GAAqCtB,GAAzC,CAAd;EACA,UAAMI,EAAE,GAAG,CAAC,CAACS,GAAD,GAAOG,GAAP,GAAavB,GAAd,KAAsByB,GAAG,GAAGC,GAAN,GAAYzB,GAAlC,CAAX;EACA,UAAMW,EAAE,GAAG,CAACW,GAAG,GAAGvB,GAAP,KAAe,CAACyB,GAAD,GAAOC,GAAtB,CAAX;EACA,UAAMb,EAAE,GAAGO,GAAG,GAAGK,GAAjB;EACA,UAAMX,EAAE,GAAG,CAAC,CAACM,GAAD,GAAOI,GAAP,GAAapB,GAAd,KAAsBqB,GAAG,GAAGE,GAAN,GAAYxB,GAAlC,CAAX;EACA,UAAM2B,EAAE,GAAG,CAAC,CAACV,GAAD,GAAOI,GAAR,KAAgBG,GAAG,GAAGxB,GAAtB,CAAX;EACA,UAAM4B,EAAE,GAAG,CAACP,GAAG,GAAGpB,GAAP,KAAe,CAACqB,GAAD,GAAOE,GAAtB,CAAX;EACA,UAAMK,GAAG,GAAG,CAACZ,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBtB,GAAlB,GAAwBE,GAAxB,GAA8BsB,GAA9B,GAAoCpB,GAArC,IAA4CD,GAAxD;EACA,UAAM8B,GAAG,GAAG7B,GAAG,IAAI,CAACqB,GAAD,GAAOE,GAAP,GAAaC,GAAb,GAAmB3B,GAAnB,GAAyBE,GAAzB,GAA+B0B,GAA/B,GAAqCxB,GAAzC,CAAf;EACA,UAAM6B,GAAG,GAAG,CAAC,CAACZ,GAAD,GAAOlB,GAAP,GAAaE,GAAd,KAAsBL,GAAG,GAAG4B,GAAN,GAAYxB,GAAlC,CAAZ;EACA,UAAM8B,GAAG,GAAG,CAACb,GAAG,GAAGhB,GAAP,KAAeL,GAAG,GAAGI,GAArB,CAAZ;EACA,UAAM+B,GAAG,GAAGd,GAAG,GAAGO,GAAlB;EACA,UAAMQ,GAAG,GAAG,CAACjC,GAAG,GAAGE,GAAP,KAAe,CAACuB,GAAD,GAAOxB,GAAtB,CAAZ;EACA,UAAMiC,GAAG,GAAG,CAAC,CAAChB,GAAD,GAAOtB,GAAP,GAAaE,GAAd,KAAsBC,GAAG,GAAG0B,GAAN,GAAYtB,GAAlC,CAAZ;EACA,UAAMgC,GAAG,GAAG,CAACjB,GAAG,GAAGpB,GAAP,KAAeC,GAAG,GAAGI,GAArB,CAAZ;EACA,UAAMiC,GAAG,GAAG,CAACxC,GAAG,GAAGE,GAAP,KAAe,CAAC2B,GAAD,GAAOtB,GAAtB,CAAZ;EACA,UAAMkC,GAAG,GAAGpB,GAAG,GAAGO,GAAlB;EACA,UAAMc,GAAG,GAAGxC,GAAG,GAAGG,GAAlB;EACA,UAAMsC,GAAG,GAAGpB,GAAG,GAAGI,GAAlB;EACA,UAAMiB,GAAG,GAAGpB,GAAG,GAAGE,GAAlB;EACA,UAAMmB,GAAG,GAAGvC,GAAG,GAAGC,GAAlB;EAEA,UAAMQ,GAAG,GAAGF,EAAE,GAAGuB,GAAL,GAAWK,GAAvB;EACA,UAAMzB,GAAG,GAAGR,EAAE,GAAGG,EAAL,GAAUC,EAAV,GAAeC,EAAf,GAAoBqB,GAApB,GAA0BE,GAA1B,GAAgCC,GAA5C;EACA,UAAMS,GAAG,GAAGjC,EAAE,GAAGC,EAAL,GAAUiB,EAAV,GAAeC,GAAf,GAAqBI,GAArB,GAA2BE,GAA3B,GAAiCE,GAA7C;EACA,UAAMvB,GAAG,GAAGR,EAAE,GAAGC,EAAL,GAAUC,EAAV,GAAeE,EAAf,GAAoBuB,GAApB,GAA0BE,GAA1B,GAAgCC,GAA5C;EACA,UAAMrB,GAAG,GAAGT,EAAE,GAAGE,EAAL,GAAUC,EAAV,GAAeC,EAAf,GAAoB6B,GAAhC;EACA,UAAMK,GAAG,GAAGX,GAAG,GAAGE,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBG,GAApC;EACA,UAAMK,GAAG,GAAGnC,EAAE,GAAGC,EAAL,GAAUgB,EAAV,GAAeG,GAAf,GAAqBC,GAArB,GAA2BC,GAA3B,GAAiCC,GAA7C;EACA,UAAMa,GAAG,GAAGf,GAAG,GAAGC,GAAN,GAAYC,GAAZ,GAAkBC,GAAlB,GAAwBO,GAApC;EACA,UAAMM,GAAG,GAAGrC,EAAE,GAAGC,EAAL,GAAUgB,EAAV,GAAeC,EAAf,GAAoBc,GAAhC;EAEA/S,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBwP,GAAjB;EACAjR,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiByP,GAAjB;EACAlR,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBuR,GAAjB;EACAhT,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB0P,GAAjB;EACAnR,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB2P,GAAjB;EACApR,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiBwR,GAAjB;EACAjT,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiByR,GAAjB;EACAlT,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB0R,GAAjB;EACAnT,IAAAA,MAAM,CAACyB,GAAP,CAAW,CAAX,EAAc,CAAd,EAAiB2R,GAAjB;EACA,WAAOpT,MAAP;EACD;;EAEDqT,EAAAA,YAAY,CAACpW,CAAD,EAAI;EACdA,IAAAA,CAAC,GAAGoE,MAAM,CAACK,WAAP,CAAmBzE,CAAnB,CAAJ;EACA,QAAID,CAAC,GAAG,KAAKwP,KAAL,EAAR;EACA,QAAI8G,EAAE,GAAGtW,CAAC,CAAC4C,IAAX;EACA,QAAI2T,EAAE,GAAGvW,CAAC,CAAC6C,OAAX;EACA,QAAI2T,EAAE,GAAGvW,CAAC,CAAC2C,IAAX;EACA,QAAI6T,EAAE,GAAGxW,CAAC,CAAC4C,OAAX;;EACA,QAAI0T,EAAE,KAAKC,EAAX,EAAe;EACb;EACAE,MAAAA,OAAO,CAACC,IAAR,CACG,eAAcL,EAAG,MAAKC,EAAG,QAAOC,EAAG,MAAKC,EAAG,mCAD9C;EAGD,KAZa;EAed;;;EACA,aAASG,KAAT,CAAeC,GAAf,EAAoBjU,IAApB,EAA0BuJ,IAA1B,EAAgC;EAC9B,UAAIzB,CAAC,GAAGmM,GAAG,CAACjU,IAAZ;EACA,UAAIiI,CAAC,GAAGgM,GAAG,CAAChU,OAAZ;;EACA,UAAI6H,CAAC,KAAK9H,IAAN,IAAciI,CAAC,KAAKsB,IAAxB,EAA8B;EAC5B,eAAO0K,GAAP;EACD,OAFD,MAEO;EACL,YAAIC,QAAQ,GAAG1S,cAAc,CAACuJ,KAAf,CAAqB/K,IAArB,EAA2BuJ,IAA3B,CAAf;EACA2K,QAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsB0G,GAAtB,EAA2B,CAA3B,EAA8B,CAA9B,CAAX;EACA,eAAOC,QAAP;EACD;EACF,KA1Ba;EA6Bd;EACA;;;EAEA,QAAIpM,CAAC,GAAGvJ,IAAI,CAACpD,GAAL,CAASuY,EAAT,EAAaE,EAAb,CAAR;EACA,QAAI3L,CAAC,GAAG1J,IAAI,CAACpD,GAAL,CAASwY,EAAT,EAAaE,EAAb,CAAR;EACAzW,IAAAA,CAAC,GAAG4W,KAAK,CAAC5W,CAAD,EAAI0K,CAAJ,EAAOG,CAAP,CAAT;EACA5K,IAAAA,CAAC,GAAG2W,KAAK,CAAC3W,CAAD,EAAIyK,CAAJ,EAAOG,CAAP,CAAT,CAnCc;;EAsCd,aAASkM,SAAT,CAAmBC,CAAnB,EAAsBC,CAAtB,EAAyBrU,IAAzB,EAA+BuJ,IAA/B,EAAqC;EACnC;EACA,UAAIvJ,IAAI,IAAI,GAAR,IAAeuJ,IAAI,IAAI,GAA3B,EAAgC;EAC9B,eAAO6K,CAAC,CAACpE,IAAF,CAAOqE,CAAP,CAAP,CAD8B;EAE/B,OAJkC;;;EAOnC,UAAIrU,IAAI,GAAG,CAAP,KAAa,CAAb,IAAkBuJ,IAAI,GAAG,CAAP,KAAa,CAAnC,EAAsC;EACpC6K,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAIpU,IAAI,GAAG,CAAX,EAAcuJ,IAAI,GAAG,CAArB,CAAT;EACA8K,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAIrU,IAAI,GAAG,CAAX,EAAcuJ,IAAI,GAAG,CAArB,CAAT;EACD,OAHD,MAGO,IAAIvJ,IAAI,GAAG,CAAP,KAAa,CAAjB,EAAoB;EACzBoU,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAIpU,IAAI,GAAG,CAAX,EAAcuJ,IAAd,CAAT;EACA8K,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAIrU,IAAI,GAAG,CAAX,EAAcuJ,IAAd,CAAT;EACD,OAHM,MAGA,IAAIA,IAAI,GAAG,CAAP,KAAa,CAAjB,EAAoB;EACzB6K,QAAAA,CAAC,GAAGJ,KAAK,CAACI,CAAD,EAAIpU,IAAJ,EAAUuJ,IAAI,GAAG,CAAjB,CAAT;EACA8K,QAAAA,CAAC,GAAGL,KAAK,CAACK,CAAD,EAAIrU,IAAJ,EAAUuJ,IAAI,GAAG,CAAjB,CAAT;EACD;;EAED,UAAI+K,QAAQ,GAAGC,QAAQ,CAACH,CAAC,CAACpU,IAAF,GAAS,CAAV,EAAa,EAAb,CAAvB;EACA,UAAIwU,QAAQ,GAAGD,QAAQ,CAACH,CAAC,CAACnU,OAAF,GAAY,CAAb,EAAgB,EAAhB,CAAvB,CAnBmC;;EAqBnC,UAAIqQ,GAAG,GAAG8D,CAAC,CAACK,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6B,CAA7B,EAAgCE,QAAQ,GAAG,CAA3C,CAAV;EACA,UAAIjE,GAAG,GAAG8D,CAAC,CAACI,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6B,CAA7B,EAAgCE,QAAQ,GAAG,CAA3C,CAAV;EAEA,UAAIhE,GAAG,GAAG4D,CAAC,CAACK,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6BE,QAA7B,EAAuCJ,CAAC,CAACnU,OAAF,GAAY,CAAnD,CAAV;EACA,UAAIwQ,GAAG,GAAG4D,CAAC,CAACI,SAAF,CAAY,CAAZ,EAAeH,QAAQ,GAAG,CAA1B,EAA6BE,QAA7B,EAAuCH,CAAC,CAACpU,OAAF,GAAY,CAAnD,CAAV;EAEA,UAAIyQ,GAAG,GAAG0D,CAAC,CAACK,SAAF,CAAYH,QAAZ,EAAsBF,CAAC,CAACpU,IAAF,GAAS,CAA/B,EAAkC,CAAlC,EAAqCwU,QAAQ,GAAG,CAAhD,CAAV;EACA,UAAI7D,GAAG,GAAG0D,CAAC,CAACI,SAAF,CAAYH,QAAZ,EAAsBD,CAAC,CAACrU,IAAF,GAAS,CAA/B,EAAkC,CAAlC,EAAqCwU,QAAQ,GAAG,CAAhD,CAAV;EAEA,UAAI5D,GAAG,GAAGwD,CAAC,CAACK,SAAF,CAAYH,QAAZ,EAAsBF,CAAC,CAACpU,IAAF,GAAS,CAA/B,EAAkCwU,QAAlC,EAA4CJ,CAAC,CAACnU,OAAF,GAAY,CAAxD,CAAV;EACA,UAAI4Q,GAAG,GAAGwD,CAAC,CAACI,SAAF,CAAYH,QAAZ,EAAsBD,CAAC,CAACrU,IAAF,GAAS,CAA/B,EAAkCwU,QAAlC,EAA4CH,CAAC,CAACpU,OAAF,GAAY,CAAxD,CAAV,CA/BmC;;EAkCnC,UAAI6Q,EAAE,GAAGqD,SAAS,CAChB3S,cAAc,CAACE,GAAf,CAAmB4O,GAAnB,EAAwBM,GAAxB,CADgB,EAEhBpP,cAAc,CAACE,GAAf,CAAmB6O,GAAnB,EAAwBM,GAAxB,CAFgB,EAGhByD,QAHgB,EAIhBE,QAJgB,CAAlB;EAMA,UAAIzD,EAAE,GAAGoD,SAAS,CAAC3S,cAAc,CAACE,GAAf,CAAmBgP,GAAnB,EAAwBE,GAAxB,CAAD,EAA+BL,GAA/B,EAAoC+D,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIxD,EAAE,GAAGmD,SAAS,CAAC7D,GAAD,EAAM9O,cAAc,CAACQ,GAAf,CAAmByO,GAAnB,EAAwBI,GAAxB,CAAN,EAAoCyD,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIvD,EAAE,GAAGkD,SAAS,CAACvD,GAAD,EAAMpP,cAAc,CAACQ,GAAf,CAAmB2O,GAAnB,EAAwBJ,GAAxB,CAAN,EAAoC+D,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAItD,EAAE,GAAGiD,SAAS,CAAC3S,cAAc,CAACE,GAAf,CAAmB4O,GAAnB,EAAwBE,GAAxB,CAAD,EAA+BK,GAA/B,EAAoCyD,QAApC,EAA8CE,QAA9C,CAAlB;EACA,UAAIrD,EAAE,GAAGgD,SAAS,CAChB3S,cAAc,CAACQ,GAAf,CAAmB0O,GAAnB,EAAwBJ,GAAxB,CADgB,EAEhB9O,cAAc,CAACE,GAAf,CAAmB6O,GAAnB,EAAwBE,GAAxB,CAFgB,EAGhB6D,QAHgB,EAIhBE,QAJgB,CAAlB;EAMA,UAAIpD,EAAE,GAAG+C,SAAS,CAChB3S,cAAc,CAACQ,GAAf,CAAmBwO,GAAnB,EAAwBI,GAAxB,CADgB,EAEhBpP,cAAc,CAACE,GAAf,CAAmBiP,GAAnB,EAAwBE,GAAxB,CAFgB,EAGhByD,QAHgB,EAIhBE,QAJgB,CAAlB,CAlDmC;;EA0DnC,UAAIhD,GAAG,GAAGhQ,cAAc,CAACE,GAAf,CAAmBoP,EAAnB,EAAuBG,EAAvB,CAAV;EACAO,MAAAA,GAAG,CAACxP,GAAJ,CAAQkP,EAAR;EACAM,MAAAA,GAAG,CAAC9P,GAAJ,CAAQ0P,EAAR;EACA,UAAIiC,GAAG,GAAG7R,cAAc,CAACE,GAAf,CAAmBsP,EAAnB,EAAuBE,EAAvB,CAAV;EACA,UAAIqC,GAAG,GAAG/R,cAAc,CAACE,GAAf,CAAmBqP,EAAnB,EAAuBE,EAAvB,CAAV;EACA,UAAIuC,GAAG,GAAGhS,cAAc,CAACQ,GAAf,CAAmB8O,EAAnB,EAAuBC,EAAvB,CAAV;EACAyC,MAAAA,GAAG,CAAC9R,GAAJ,CAAQsP,EAAR;EACAwC,MAAAA,GAAG,CAAC9R,GAAJ,CAAQyP,EAAR,EAjEmC;;EAoEnC,UAAI+C,QAAQ,GAAG1S,cAAc,CAACuJ,KAAf,CAAqB,IAAIyG,GAAG,CAACxR,IAA7B,EAAmC,IAAIwR,GAAG,CAACvR,OAA3C,CAAf;EACAiU,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsBiE,GAAtB,EAA2B,CAA3B,EAA8B,CAA9B,CAAX;EACA0C,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsB8F,GAAtB,EAA2B7B,GAAG,CAACxR,IAA/B,EAAqC,CAArC,CAAX;EACAkU,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsBgG,GAAtB,EAA2B,CAA3B,EAA8B/B,GAAG,CAACvR,OAAlC,CAAX;EACAiU,MAAAA,QAAQ,GAAGA,QAAQ,CAAC3G,YAAT,CAAsBiG,GAAtB,EAA2BhC,GAAG,CAACxR,IAA/B,EAAqCwR,GAAG,CAACvR,OAAzC,CAAX;EACA,aAAOiU,QAAQ,CAACO,SAAT,CAAmB,CAAnB,EAAsBzU,IAAI,GAAG,CAA7B,EAAgC,CAAhC,EAAmCuJ,IAAI,GAAG,CAA1C,CAAP;EACD;;EACD,WAAO4K,SAAS,CAAC/W,CAAD,EAAIC,CAAJ,EAAOyK,CAAP,EAAUG,CAAV,CAAhB;EACD;;EAEDyM,EAAAA,SAAS,CAACrZ,OAAO,GAAG,EAAX,EAAe;EACtB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAE+C,MAAAA,GAAG,GAAG,CAAR;EAAWtD,MAAAA,GAAG,GAAG;EAAjB,QAAuBE,OAA7B;EACA,QAAI,CAACU,MAAM,CAAC4Y,QAAP,CAAgBlW,GAAhB,CAAL,EAA2B,MAAM,IAAI/C,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI,CAACK,MAAM,CAAC4Y,QAAP,CAAgBxZ,GAAhB,CAAL,EAA2B,MAAM,IAAIO,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI+C,GAAG,IAAItD,GAAX,EAAgB,MAAM,IAAI4D,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAIgD,SAAS,GAAG,IAAIN,MAAJ,CAAW,KAAKzB,IAAhB,EAAsB,KAAKC,OAA3B,CAAhB;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,YAAMqL,GAAG,GAAG,KAAKiG,MAAL,CAAYtR,CAAZ,CAAZ;;EACA,UAAIqL,GAAG,CAACjM,MAAJ,GAAa,CAAjB,EAAoB;EAClBoD,QAAAA,OAAO,CAAC6I,GAAD,EAAM;EAAE/I,UAAAA,GAAF;EAAOtD,UAAAA,GAAP;EAAYyD,UAAAA,MAAM,EAAE4I;EAApB,SAAN,CAAP;EACD;;EACDzF,MAAAA,SAAS,CAAC4L,MAAV,CAAiBxR,CAAjB,EAAoBqL,GAApB;EACD;;EACD,WAAOzF,SAAP;EACD;;EAED6S,EAAAA,YAAY,CAACvZ,OAAO,GAAG,EAAX,EAAe;EACzB,QAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAE+C,MAAAA,GAAG,GAAG,CAAR;EAAWtD,MAAAA,GAAG,GAAG;EAAjB,QAAuBE,OAA7B;EACA,QAAI,CAACU,MAAM,CAAC4Y,QAAP,CAAgBlW,GAAhB,CAAL,EAA2B,MAAM,IAAI/C,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI,CAACK,MAAM,CAAC4Y,QAAP,CAAgBxZ,GAAhB,CAAL,EAA2B,MAAM,IAAIO,SAAJ,CAAc,sBAAd,CAAN;EAC3B,QAAI+C,GAAG,IAAItD,GAAX,EAAgB,MAAM,IAAI4D,UAAJ,CAAe,8BAAf,CAAN;EAChB,QAAIgD,SAAS,GAAG,IAAIN,MAAJ,CAAW,KAAKzB,IAAhB,EAAsB,KAAKC,OAA3B,CAAhB;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,YAAMuL,MAAM,GAAG,KAAKqG,SAAL,CAAe5R,CAAf,CAAf;;EACA,UAAIuL,MAAM,CAACnM,MAAX,EAAmB;EACjBoD,QAAAA,OAAO,CAAC+I,MAAD,EAAS;EACdjJ,UAAAA,GAAG,EAAEA,GADS;EAEdtD,UAAAA,GAAG,EAAEA,GAFS;EAGdyD,UAAAA,MAAM,EAAE8I;EAHM,SAAT,CAAP;EAKD;;EACD3F,MAAAA,SAAS,CAACkM,SAAV,CAAoB9R,CAApB,EAAuBuL,MAAvB;EACD;;EACD,WAAO3F,SAAP;EACD;;EAED8S,EAAAA,QAAQ,GAAG;EACT,UAAMC,MAAM,GAAGvW,IAAI,CAAC+G,IAAL,CAAU,KAAKrF,OAAL,GAAe,CAAzB,CAAf;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwU,MAApB,EAA4BxU,CAAC,EAA7B,EAAiC;EAC/B,YAAIyU,KAAK,GAAG,KAAKtU,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAZ;EACA,YAAI0U,IAAI,GAAG,KAAKvU,GAAL,CAAStE,CAAT,EAAY,KAAK8D,OAAL,GAAe,CAAf,GAAmBK,CAA/B,CAAX;EACA,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe0U,IAAf;EACA,aAAKnT,GAAL,CAAS1F,CAAT,EAAY,KAAK8D,OAAL,GAAe,CAAf,GAAmBK,CAA/B,EAAkCyU,KAAlC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDE,EAAAA,WAAW,GAAG;EACZ,UAAMH,MAAM,GAAGvW,IAAI,CAAC+G,IAAL,CAAU,KAAKtF,IAAL,GAAY,CAAtB,CAAf;;EACA,SAAK,IAAIM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrC,WAAK,IAAInE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2Y,MAApB,EAA4B3Y,CAAC,EAA7B,EAAiC;EAC/B,YAAI4Y,KAAK,GAAG,KAAKtU,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAZ;EACA,YAAI0U,IAAI,GAAG,KAAKvU,GAAL,CAAS,KAAKT,IAAL,GAAY,CAAZ,GAAgB7D,CAAzB,EAA4BmE,CAA5B,CAAX;EACA,aAAKuB,GAAL,CAAS1F,CAAT,EAAYmE,CAAZ,EAAe0U,IAAf;EACA,aAAKnT,GAAL,CAAS,KAAK7B,IAAL,GAAY,CAAZ,GAAgB7D,CAAzB,EAA4BmE,CAA5B,EAA+ByU,KAA/B;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDG,EAAAA,gBAAgB,CAACjF,KAAD,EAAQ;EACtBA,IAAAA,KAAK,GAAGxO,MAAM,CAACK,WAAP,CAAmBmO,KAAnB,CAAR;EAEA,QAAI/C,CAAC,GAAG,KAAKlN,IAAb;EACA,QAAImN,CAAC,GAAG,KAAKlN,OAAb;EACA,QAAIoN,CAAC,GAAG4C,KAAK,CAACjQ,IAAd;EACA,QAAImV,CAAC,GAAGlF,KAAK,CAAChQ,OAAd;EAEA,QAAIG,MAAM,GAAG,IAAIqB,MAAJ,CAAWyL,CAAC,GAAGG,CAAf,EAAkBF,CAAC,GAAGgI,CAAtB,CAAb;;EACA,SAAK,IAAIhZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6M,CAApB,EAAuB7M,CAAC,EAAxB,EAA4B;EAC1B,aAAK,IAAIoM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGW,CAApB,EAAuBX,CAAC,EAAxB,EAA4B;EAC1B,eAAK,IAAInB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4J,CAApB,EAAuB5J,CAAC,EAAxB,EAA4B;EAC1BnL,YAAAA,MAAM,CAACyB,GAAP,CAAWwL,CAAC,GAAGlR,CAAJ,GAAQuQ,CAAnB,EAAsByI,CAAC,GAAG7U,CAAJ,GAAQiL,CAA9B,EAAiC,KAAK9K,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,IAAiB2P,KAAK,CAACxP,GAAN,CAAUiM,CAAV,EAAanB,CAAb,CAAlD;EACD;EACF;EACF;EACF;;EACD,WAAOnL,MAAP;EACD;;EAEDgV,EAAAA,SAAS,GAAG;EACV,QAAIhV,MAAM,GAAG,IAAIqB,MAAJ,CAAW,KAAKxB,OAAhB,EAAyB,KAAKD,IAA9B,CAAb;;EACA,SAAK,IAAI7D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKL,OAAzB,EAAkCK,CAAC,EAAnC,EAAuC;EACrCF,QAAAA,MAAM,CAACyB,GAAP,CAAWvB,CAAX,EAAcnE,CAAd,EAAiB,KAAKsE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAjB;EACD;EACF;;EACD,WAAOF,MAAP;EACD;;EAEDiV,EAAAA,QAAQ,CAACC,eAAe,GAAGC,cAAnB,EAAmC;EACzC,SAAK,IAAIpZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,WAAKwR,MAAL,CAAYxR,CAAZ,EAAe,KAAKsR,MAAL,CAAYtR,CAAZ,EAAeqZ,IAAf,CAAoBF,eAApB,CAAf;EACD;;EACD,WAAO,IAAP;EACD;;EAEDG,EAAAA,WAAW,CAACH,eAAe,GAAGC,cAAnB,EAAmC;EAC5C,SAAK,IAAIpZ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC,WAAK8R,SAAL,CAAe9R,CAAf,EAAkB,KAAK4R,SAAL,CAAe5R,CAAf,EAAkBqZ,IAAlB,CAAuBF,eAAvB,CAAlB;EACD;;EACD,WAAO,IAAP;EACD;;EAEDb,EAAAA,SAAS,CAACtM,QAAD,EAAWC,MAAX,EAAmBC,WAAnB,EAAgCC,SAAhC,EAA2C;EAClDJ,IAAAA,UAAU,CAAC,IAAD,EAAOC,QAAP,EAAiBC,MAAjB,EAAyBC,WAAzB,EAAsCC,SAAtC,CAAV;EACA,QAAIvG,SAAS,GAAG,IAAIN,MAAJ,CACd2G,MAAM,GAAGD,QAAT,GAAoB,CADN,EAEdG,SAAS,GAAGD,WAAZ,GAA0B,CAFZ,CAAhB;;EAIA,SAAK,IAAIlM,CAAC,GAAGgM,QAAb,EAAuBhM,CAAC,IAAIiM,MAA5B,EAAoCjM,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAImE,CAAC,GAAG+H,WAAb,EAA0B/H,CAAC,IAAIgI,SAA/B,EAA0ChI,CAAC,EAA3C,EAA+C;EAC7CyB,QAAAA,SAAS,CAACF,GAAV,CAAc1F,CAAC,GAAGgM,QAAlB,EAA4B7H,CAAC,GAAG+H,WAAhC,EAA6C,KAAK5H,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAA7C;EACD;EACF;;EACD,WAAOyB,SAAP;EACD;;EAED2T,EAAAA,YAAY,CAACC,OAAD,EAAUtN,WAAV,EAAuBC,SAAvB,EAAkC;EAC5C,QAAID,WAAW,KAAK7M,SAApB,EAA+B6M,WAAW,GAAG,CAAd;EAC/B,QAAIC,SAAS,KAAK9M,SAAlB,EAA6B8M,SAAS,GAAG,KAAKrI,OAAL,GAAe,CAA3B;;EAC7B,QACEoI,WAAW,GAAGC,SAAd,IACAD,WAAW,GAAG,CADd,IAEAA,WAAW,IAAI,KAAKpI,OAFpB,IAGAqI,SAAS,GAAG,CAHZ,IAIAA,SAAS,IAAI,KAAKrI,OALpB,EAME;EACA,YAAM,IAAIlB,UAAJ,CAAe,uBAAf,CAAN;EACD;;EAED,QAAIgD,SAAS,GAAG,IAAIN,MAAJ,CAAWkU,OAAO,CAACpa,MAAnB,EAA2B+M,SAAS,GAAGD,WAAZ,GAA0B,CAArD,CAAhB;;EACA,SAAK,IAAIlM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwZ,OAAO,CAACpa,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAImE,CAAC,GAAG+H,WAAb,EAA0B/H,CAAC,IAAIgI,SAA/B,EAA0ChI,CAAC,EAA3C,EAA+C;EAC7C,YAAIqV,OAAO,CAACxZ,CAAD,CAAP,GAAa,CAAb,IAAkBwZ,OAAO,CAACxZ,CAAD,CAAP,IAAc,KAAK6D,IAAzC,EAA+C;EAC7C,gBAAM,IAAIjB,UAAJ,CAAgB,2BAA0B4W,OAAO,CAACxZ,CAAD,CAAI,EAArD,CAAN;EACD;;EACD4F,QAAAA,SAAS,CAACF,GAAV,CAAc1F,CAAd,EAAiBmE,CAAC,GAAG+H,WAArB,EAAkC,KAAK5H,GAAL,CAASkV,OAAO,CAACxZ,CAAD,CAAhB,EAAqBmE,CAArB,CAAlC;EACD;EACF;;EACD,WAAOyB,SAAP;EACD;;EAED6T,EAAAA,eAAe,CAACD,OAAD,EAAUxN,QAAV,EAAoBC,MAApB,EAA4B;EACzC,QAAID,QAAQ,KAAK3M,SAAjB,EAA4B2M,QAAQ,GAAG,CAAX;EAC5B,QAAIC,MAAM,KAAK5M,SAAf,EAA0B4M,MAAM,GAAG,KAAKpI,IAAL,GAAY,CAArB;;EAC1B,QACEmI,QAAQ,GAAGC,MAAX,IACAD,QAAQ,GAAG,CADX,IAEAA,QAAQ,IAAI,KAAKnI,IAFjB,IAGAoI,MAAM,GAAG,CAHT,IAIAA,MAAM,IAAI,KAAKpI,IALjB,EAME;EACA,YAAM,IAAIjB,UAAJ,CAAe,uBAAf,CAAN;EACD;;EAED,QAAIgD,SAAS,GAAG,IAAIN,MAAJ,CAAW2G,MAAM,GAAGD,QAAT,GAAoB,CAA/B,EAAkCwN,OAAO,CAACpa,MAA1C,CAAhB;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwZ,OAAO,CAACpa,MAA5B,EAAoCY,CAAC,EAArC,EAAyC;EACvC,WAAK,IAAImE,CAAC,GAAG6H,QAAb,EAAuB7H,CAAC,IAAI8H,MAA5B,EAAoC9H,CAAC,EAArC,EAAyC;EACvC,YAAIqV,OAAO,CAACxZ,CAAD,CAAP,GAAa,CAAb,IAAkBwZ,OAAO,CAACxZ,CAAD,CAAP,IAAc,KAAK8D,OAAzC,EAAkD;EAChD,gBAAM,IAAIlB,UAAJ,CAAgB,8BAA6B4W,OAAO,CAACxZ,CAAD,CAAI,EAAxD,CAAN;EACD;;EACD4F,QAAAA,SAAS,CAACF,GAAV,CAAcvB,CAAC,GAAG6H,QAAlB,EAA4BhM,CAA5B,EAA+B,KAAKsE,GAAL,CAASH,CAAT,EAAYqV,OAAO,CAACxZ,CAAD,CAAnB,CAA/B;EACD;EACF;;EACD,WAAO4F,SAAP;EACD;;EAEDwL,EAAAA,YAAY,CAAC9N,MAAD,EAAS0I,QAAT,EAAmBE,WAAnB,EAAgC;EAC1C5I,IAAAA,MAAM,GAAGgC,MAAM,CAACK,WAAP,CAAmBrC,MAAnB,CAAT;;EACA,QAAIA,MAAM,CAACkJ,OAAP,EAAJ,EAAsB;EACpB,aAAO,IAAP;EACD;;EACD,QAAIP,MAAM,GAAGD,QAAQ,GAAG1I,MAAM,CAACO,IAAlB,GAAyB,CAAtC;EACA,QAAIsI,SAAS,GAAGD,WAAW,GAAG5I,MAAM,CAACQ,OAArB,GAA+B,CAA/C;EACAiI,IAAAA,UAAU,CAAC,IAAD,EAAOC,QAAP,EAAiBC,MAAjB,EAAyBC,WAAzB,EAAsCC,SAAtC,CAAV;;EACA,SAAK,IAAInM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsD,MAAM,CAACO,IAA3B,EAAiC7D,CAAC,EAAlC,EAAsC;EACpC,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGb,MAAM,CAACQ,OAA3B,EAAoCK,CAAC,EAArC,EAAyC;EACvC,aAAKuB,GAAL,CAASsG,QAAQ,GAAGhM,CAApB,EAAuBkM,WAAW,GAAG/H,CAArC,EAAwCb,MAAM,CAACgB,GAAP,CAAWtE,CAAX,EAAcmE,CAAd,CAAxC;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAEDuV,EAAAA,SAAS,CAACvO,UAAD,EAAaC,aAAb,EAA4B;EACnC,QAAIoO,OAAO,GAAGtO,YAAY,CAAC,IAAD,EAAOC,UAAP,EAAmBC,aAAnB,CAA1B;EACA,QAAIxF,SAAS,GAAG,IAAIN,MAAJ,CAAW6F,UAAU,CAAC/L,MAAtB,EAA8BgM,aAAa,CAAChM,MAA5C,CAAhB;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwZ,OAAO,CAACnO,GAAR,CAAYjM,MAAhC,EAAwCY,CAAC,EAAzC,EAA6C;EAC3C,UAAI2Z,QAAQ,GAAGH,OAAO,CAACnO,GAAR,CAAYrL,CAAZ,CAAf;;EACA,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqV,OAAO,CAACjO,MAAR,CAAenM,MAAnC,EAA2C+E,CAAC,EAA5C,EAAgD;EAC9C,YAAIyV,WAAW,GAAGJ,OAAO,CAACjO,MAAR,CAAepH,CAAf,CAAlB;EACAyB,QAAAA,SAAS,CAACF,GAAV,CAAc1F,CAAd,EAAiBmE,CAAjB,EAAoB,KAAKG,GAAL,CAASqV,QAAT,EAAmBC,WAAnB,CAApB;EACD;EACF;;EACD,WAAOhU,SAAP;EACD;;EAEDiU,EAAAA,KAAK,GAAG;EACN,QAAIvX,GAAG,GAAGF,IAAI,CAACE,GAAL,CAAS,KAAKuB,IAAd,EAAoB,KAAKC,OAAzB,CAAV;EACA,QAAI+V,KAAK,GAAG,CAAZ;;EACA,SAAK,IAAI7Z,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsC,GAApB,EAAyBtC,CAAC,EAA1B,EAA8B;EAC5B6Z,MAAAA,KAAK,IAAI,KAAKvV,GAAL,CAAStE,CAAT,EAAYA,CAAZ,CAAT;EACD;;EACD,WAAO6Z,KAAP;EACD;;EAEDpJ,EAAAA,KAAK,GAAG;EACN,QAAI7K,SAAS,GAAG,IAAIN,MAAJ,CAAW,KAAKzB,IAAhB,EAAsB,KAAKC,OAA3B,CAAhB;;EACA,SAAK,IAAIuH,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAG,KAAKxH,IAA7B,EAAmCwH,GAAG,EAAtC,EAA0C;EACxC,WAAK,IAAIE,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAG,KAAKzH,OAAnC,EAA4CyH,MAAM,EAAlD,EAAsD;EACpD3F,QAAAA,SAAS,CAACF,GAAV,CAAc2F,GAAd,EAAmBE,MAAnB,EAA2B,KAAKjH,GAAL,CAAS+G,GAAT,EAAcE,MAAd,CAA3B;EACD;EACF;;EACD,WAAO3F,SAAP;EACD;;EAED8G,EAAAA,GAAG,CAACoN,EAAD,EAAK;EACN,YAAQA,EAAR;EACE,WAAK,KAAL;EACE,eAAOrN,QAAQ,CAAC,IAAD,CAAf;;EACF,WAAK,QAAL;EACE,eAAOE,WAAW,CAAC,IAAD,CAAlB;;EACF,WAAKtN,SAAL;EACE,eAAOuN,MAAM,CAAC,IAAD,CAAb;;EACF;EACE,cAAM,IAAI9M,KAAJ,CAAW,mBAAkBga,EAAG,EAAhC,CAAN;EARJ;EAUD;;EAEDC,EAAAA,OAAO,CAACD,EAAD,EAAK;EACV,YAAQA,EAAR;EACE,WAAK,KAAL;EACE,eAAOhN,YAAY,CAAC,IAAD,CAAnB;;EACF,WAAK,QAAL;EACE,eAAOC,eAAe,CAAC,IAAD,CAAtB;;EACF,WAAK1N,SAAL;EACE,eAAO2N,UAAU,CAAC,IAAD,CAAjB;;EACF;EACE,cAAM,IAAIlN,KAAJ,CAAW,mBAAkBga,EAAG,EAAhC,CAAN;EARJ;EAUD;;EAED3M,EAAAA,IAAI,CAAC2M,EAAD,EAAK;EACP,UAAMpN,GAAG,GAAG,KAAKA,GAAL,CAASoN,EAAT,CAAZ;;EACA,YAAQA,EAAR;EACE,WAAK,KAAL;EAAY;EACV,eAAK,IAAI9Z,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC0M,YAAAA,GAAG,CAAC1M,CAAD,CAAH,IAAU,KAAK8D,OAAf;EACD;;EACD,iBAAO4I,GAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,eAAK,IAAI1M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK8D,OAAzB,EAAkC9D,CAAC,EAAnC,EAAuC;EACrC0M,YAAAA,GAAG,CAAC1M,CAAD,CAAH,IAAU,KAAK6D,IAAf;EACD;;EACD,iBAAO6I,GAAP;EACD;;EACD,WAAKrN,SAAL;EACE,eAAOqN,GAAG,GAAG,KAAKgB,IAAlB;;EACF;EACE,cAAM,IAAI5N,KAAJ,CAAW,mBAAkBga,EAAG,EAAhC,CAAN;EAhBJ;EAkBD;;EAEDzM,EAAAA,QAAQ,CAACyM,EAAD,EAAK5a,OAAO,GAAG,EAAf,EAAmB;EACzB,QAAI,OAAO4a,EAAP,KAAc,QAAlB,EAA4B;EAC1B5a,MAAAA,OAAO,GAAG4a,EAAV;EACAA,MAAAA,EAAE,GAAGza,SAAL;EACD;;EACD,QAAI,OAAOH,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAE2N,MAAAA,QAAQ,GAAG,IAAb;EAAmBC,MAAAA,IAAI,GAAG,KAAKA,IAAL,CAAU2M,EAAV;EAA1B,QAA4C5a,OAAlD;;EACA,QAAI,OAAOgO,QAAP,KAAoB,SAAxB,EAAmC;EACjC,YAAM,IAAI3N,SAAJ,CAAc,4BAAd,CAAN;EACD;;EACD,YAAQua,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAI,CAAC1Y,KAAK,CAAC9B,OAAN,CAAc6N,IAAd,CAAL,EAA0B;EACxB,kBAAM,IAAI5N,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAO0N,aAAa,CAAC,IAAD,EAAOC,QAAP,EAAiBC,IAAjB,CAApB;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAI,CAAC/L,KAAK,CAAC9B,OAAN,CAAc6N,IAAd,CAAL,EAA0B;EACxB,kBAAM,IAAI5N,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOiO,gBAAgB,CAAC,IAAD,EAAON,QAAP,EAAiBC,IAAjB,CAAvB;EACD;;EACD,WAAK9N,SAAL;EAAgB;EACd,cAAI,OAAO8N,IAAP,KAAgB,QAApB,EAA8B;EAC5B,kBAAM,IAAI5N,SAAJ,CAAc,uBAAd,CAAN;EACD;;EACD,iBAAOkO,WAAW,CAAC,IAAD,EAAOP,QAAP,EAAiBC,IAAjB,CAAlB;EACD;;EACD;EACE,cAAM,IAAIrN,KAAJ,CAAW,mBAAkBga,EAAG,EAAhC,CAAN;EApBJ;EAsBD;;EAEDE,EAAAA,iBAAiB,CAACF,EAAD,EAAK5a,OAAL,EAAc;EAC7B,QAAI,OAAO4a,EAAP,KAAc,QAAlB,EAA4B;EAC1B5a,MAAAA,OAAO,GAAG4a,EAAV;EACAA,MAAAA,EAAE,GAAGza,SAAL;EACD;;EACD,UAAMgO,QAAQ,GAAG,KAAKA,QAAL,CAAcyM,EAAd,EAAkB5a,OAAlB,CAAjB;;EACA,QAAI4a,EAAE,KAAKza,SAAX,EAAsB;EACpB,aAAO+C,IAAI,CAAC+H,IAAL,CAAUkD,QAAV,CAAP;EACD,KAFD,MAEO;EACL,WAAK,IAAIrN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqN,QAAQ,CAACjO,MAA7B,EAAqCY,CAAC,EAAtC,EAA0C;EACxCqN,QAAAA,QAAQ,CAACrN,CAAD,CAAR,GAAcoC,IAAI,CAAC+H,IAAL,CAAUkD,QAAQ,CAACrN,CAAD,CAAlB,CAAd;EACD;;EACD,aAAOqN,QAAP;EACD;EACF;;EAED4M,EAAAA,MAAM,CAACH,EAAD,EAAK5a,OAAO,GAAG,EAAf,EAAmB;EACvB,QAAI,OAAO4a,EAAP,KAAc,QAAlB,EAA4B;EAC1B5a,MAAAA,OAAO,GAAG4a,EAAV;EACAA,MAAAA,EAAE,GAAGza,SAAL;EACD;;EACD,QAAI,OAAOH,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,UAAM;EAAE0a,MAAAA,MAAM,GAAG,KAAK9M,IAAL,CAAU2M,EAAV;EAAX,QAA6B5a,OAAnC;;EACA,YAAQ4a,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAI,CAAC1Y,KAAK,CAAC9B,OAAN,CAAc2a,MAAd,CAAL,EAA4B;EAC1B,kBAAM,IAAI1a,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACDoO,UAAAA,WAAW,CAAC,IAAD,EAAOsM,MAAP,CAAX;EACA,iBAAO,IAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAI,CAAC7Y,KAAK,CAAC9B,OAAN,CAAc2a,MAAd,CAAL,EAA4B;EAC1B,kBAAM,IAAI1a,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACDqO,UAAAA,cAAc,CAAC,IAAD,EAAOqM,MAAP,CAAd;EACA,iBAAO,IAAP;EACD;;EACD,WAAK5a,SAAL;EAAgB;EACd,cAAI,OAAO4a,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,kBAAM,IAAI1a,SAAJ,CAAc,yBAAd,CAAN;EACD;;EACDsO,UAAAA,SAAS,CAAC,IAAD,EAAOoM,MAAP,CAAT;EACA,iBAAO,IAAP;EACD;;EACD;EACE,cAAM,IAAIna,KAAJ,CAAW,mBAAkBga,EAAG,EAAhC,CAAN;EAvBJ;EAyBD;;EAED/L,EAAAA,KAAK,CAAC+L,EAAD,EAAK5a,OAAO,GAAG,EAAf,EAAmB;EACtB,QAAI,OAAO4a,EAAP,KAAc,QAAlB,EAA4B;EAC1B5a,MAAAA,OAAO,GAAG4a,EAAV;EACAA,MAAAA,EAAE,GAAGza,SAAL;EACD;;EACD,QAAI,OAAOH,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,YAAM,IAAIK,SAAJ,CAAc,2BAAd,CAAN;EACD;;EACD,QAAIwO,KAAK,GAAG7O,OAAO,CAAC6O,KAApB;;EACA,YAAQ+L,EAAR;EACE,WAAK,KAAL;EAAY;EACV,cAAI/L,KAAK,KAAK1O,SAAd,EAAyB;EACvB0O,YAAAA,KAAK,GAAGD,aAAa,CAAC,IAAD,CAArB;EACD,WAFD,MAEO,IAAI,CAAC1M,KAAK,CAAC9B,OAAN,CAAcyO,KAAd,CAAL,EAA2B;EAChC,kBAAM,IAAIxO,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACDyO,UAAAA,UAAU,CAAC,IAAD,EAAOD,KAAP,CAAV;EACA,iBAAO,IAAP;EACD;;EACD,WAAK,QAAL;EAAe;EACb,cAAIA,KAAK,KAAK1O,SAAd,EAAyB;EACvB0O,YAAAA,KAAK,GAAGE,gBAAgB,CAAC,IAAD,CAAxB;EACD,WAFD,MAEO,IAAI,CAAC7M,KAAK,CAAC9B,OAAN,CAAcyO,KAAd,CAAL,EAA2B;EAChC,kBAAM,IAAIxO,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACD2O,UAAAA,aAAa,CAAC,IAAD,EAAOH,KAAP,CAAb;EACA,iBAAO,IAAP;EACD;;EACD,WAAK1O,SAAL;EAAgB;EACd,cAAI0O,KAAK,KAAK1O,SAAd,EAAyB;EACvB0O,YAAAA,KAAK,GAAGI,WAAW,CAAC,IAAD,CAAnB;EACD,WAFD,MAEO,IAAI,OAAOJ,KAAP,KAAiB,QAArB,EAA+B;EACpC,kBAAM,IAAIxO,SAAJ,CAAc,wBAAd,CAAN;EACD;;EACD8O,UAAAA,QAAQ,CAAC,IAAD,EAAON,KAAP,CAAR;EACA,iBAAO,IAAP;EACD;;EACD;EACE,cAAM,IAAIjO,KAAJ,CAAW,mBAAkBga,EAAG,EAAhC,CAAN;EA7BJ;EA+BD;;EAEDrb,EAAAA,QAAQ,CAACS,OAAD,EAAU;EAChB,WAAOmE,wBAAwB,CAAC,IAAD,EAAOnE,OAAP,CAA/B;EACD;;EA33CyB;EA83C5BmG,cAAc,CAAC1G,SAAf,CAAyB6Q,KAAzB,GAAiC,QAAjC;;EACA,IAAI,OAAO0K,MAAP,KAAkB,WAAtB,EAAmC;EACjC7U,EAAAA,cAAc,CAAC1G,SAAf,CACEub,MAAM,CAACC,GAAP,CAAW,4BAAX,CADF,IAEI/W,aAFJ;EAGD;;EAED,SAASgW,cAAT,CAAwBnB,CAAxB,EAA2BC,CAA3B,EAA8B;EAC5B,SAAOD,CAAC,GAAGC,CAAX;EACD;;;EAGD7S,cAAc,CAAC0J,MAAf,GAAwB1J,cAAc,CAACyJ,IAAvC;EACAzJ,cAAc,CAAC+U,SAAf,GAA2B/U,cAAc,CAAC2J,OAA1C;EACA3J,cAAc,CAACgV,QAAf,GAA0BhV,cAAc,CAAC8J,IAAzC;EACA9J,cAAc,CAAC1G,SAAf,CAAyB0b,QAAzB,GAAoChV,cAAc,CAAC1G,SAAf,CAAyBwQ,IAA7D;EACA9J,cAAc,CAACiV,QAAf,GAA0BjV,cAAc,CAAC6J,GAAzC;EACA7J,cAAc,CAAC1G,SAAf,CAAyB4b,MAAzB,GAAkClV,cAAc,CAAC1G,SAAf,CAAyB0S,GAA3D;EACAhM,cAAc,CAAC1G,SAAf,CAAyB6b,aAAzB,GACEnV,cAAc,CAAC1G,SAAf,CAAyBoa,gBAD3B;EAGe,MAAMzT,MAAN,SAAqBD,cAArB,CAAoC;EACjD3B,EAAAA,WAAW,CAAC+W,KAAD,EAAQC,QAAR,EAAkB;EAC3B;;EACA,QAAIpV,MAAM,CAACiK,QAAP,CAAgBkL,KAAhB,CAAJ,EAA4B;EAC1B;EACA,aAAOA,KAAK,CAAChK,KAAN,EAAP;EACD,KAHD,MAGO,IAAI7Q,MAAM,CAACC,SAAP,CAAiB4a,KAAjB,KAA2BA,KAAK,IAAI,CAAxC,EAA2C;EAChD;EACA,WAAKva,IAAL,GAAY,EAAZ;;EACA,UAAIN,MAAM,CAACC,SAAP,CAAiB6a,QAAjB,KAA8BA,QAAQ,IAAI,CAA9C,EAAiD;EAC/C,aAAK,IAAI1a,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGya,KAApB,EAA2Bza,CAAC,EAA5B,EAAgC;EAC9B,eAAKE,IAAL,CAAUkE,IAAV,CAAe,IAAI4P,YAAJ,CAAiB0G,QAAjB,CAAf;EACD;EACF,OAJD,MAIO;EACL,cAAM,IAAInb,SAAJ,CAAc,qCAAd,CAAN;EACD;EACF,KAVM,MAUA,IAAI6B,KAAK,CAAC9B,OAAN,CAAcmb,KAAd,CAAJ,EAA0B;EAC/B;EACA,YAAME,SAAS,GAAGF,KAAlB;EACAA,MAAAA,KAAK,GAAGE,SAAS,CAACvb,MAAlB;EACAsb,MAAAA,QAAQ,GAAGD,KAAK,GAAGE,SAAS,CAAC,CAAD,CAAT,CAAavb,MAAhB,GAAyB,CAAzC;;EACA,UAAI,OAAOsb,QAAP,KAAoB,QAAxB,EAAkC;EAChC,cAAM,IAAInb,SAAJ,CACJ,mDADI,CAAN;EAGD;;EACD,WAAKW,IAAL,GAAY,EAAZ;;EACA,WAAK,IAAIF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGya,KAApB,EAA2Bza,CAAC,EAA5B,EAAgC;EAC9B,YAAI2a,SAAS,CAAC3a,CAAD,CAAT,CAAaZ,MAAb,KAAwBsb,QAA5B,EAAsC;EACpC,gBAAM,IAAI9X,UAAJ,CAAe,+BAAf,CAAN;EACD;;EACD,aAAK1C,IAAL,CAAUkE,IAAV,CAAe4P,YAAY,CAACpI,IAAb,CAAkB+O,SAAS,CAAC3a,CAAD,CAA3B,CAAf;EACD;EACF,KAjBM,MAiBA;EACL,YAAM,IAAIT,SAAJ,CACJ,sDADI,CAAN;EAGD;;EACD,SAAKsE,IAAL,GAAY4W,KAAZ;EACA,SAAK3W,OAAL,GAAe4W,QAAf;EACD;;EAEDhV,EAAAA,GAAG,CAACiU,QAAD,EAAWC,WAAX,EAAwBjY,KAAxB,EAA+B;EAChC,SAAKzB,IAAL,CAAUyZ,QAAV,EAAoBC,WAApB,IAAmCjY,KAAnC;EACA,WAAO,IAAP;EACD;;EAED2C,EAAAA,GAAG,CAACqV,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAK1Z,IAAL,CAAUyZ,QAAV,EAAoBC,WAApB,CAAP;EACD;;EAEDgB,EAAAA,SAAS,CAACjQ,KAAD,EAAQ;EACfD,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,CAAb;EACA,SAAKzK,IAAL,CAAU2a,MAAV,CAAiBlQ,KAAjB,EAAwB,CAAxB;EACA,SAAK9G,IAAL,IAAa,CAAb;EACA,WAAO,IAAP;EACD;;EAEDiX,EAAAA,MAAM,CAACnQ,KAAD,EAAQ2B,KAAR,EAAe;EACnB,QAAIA,KAAK,KAAKjN,SAAd,EAAyB;EACvBiN,MAAAA,KAAK,GAAG3B,KAAR;EACAA,MAAAA,KAAK,GAAG,KAAK9G,IAAb;EACD;;EACD6G,IAAAA,aAAa,CAAC,IAAD,EAAOC,KAAP,EAAc,IAAd,CAAb;EACA2B,IAAAA,KAAK,GAAG0H,YAAY,CAACpI,IAAb,CAAkBd,cAAc,CAAC,IAAD,EAAOwB,KAAP,CAAhC,CAAR;EACA,SAAKpM,IAAL,CAAU2a,MAAV,CAAiBlQ,KAAjB,EAAwB,CAAxB,EAA2B2B,KAA3B;EACA,SAAKzI,IAAL,IAAa,CAAb;EACA,WAAO,IAAP;EACD;;EAEDkX,EAAAA,YAAY,CAACpQ,KAAD,EAAQ;EAClBE,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,CAAhB;;EACA,SAAK,IAAI3K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,YAAMgb,MAAM,GAAG,IAAIhH,YAAJ,CAAiB,KAAKlQ,OAAL,GAAe,CAAhC,CAAf;;EACA,WAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwG,KAApB,EAA2BxG,CAAC,EAA5B,EAAgC;EAC9B6W,QAAAA,MAAM,CAAC7W,CAAD,CAAN,GAAY,KAAKjE,IAAL,CAAUF,CAAV,EAAamE,CAAb,CAAZ;EACD;;EACD,WAAK,IAAIA,CAAC,GAAGwG,KAAK,GAAG,CAArB,EAAwBxG,CAAC,GAAG,KAAKL,OAAjC,EAA0CK,CAAC,EAA3C,EAA+C;EAC7C6W,QAAAA,MAAM,CAAC7W,CAAC,GAAG,CAAL,CAAN,GAAgB,KAAKjE,IAAL,CAAUF,CAAV,EAAamE,CAAb,CAAhB;EACD;;EACD,WAAKjE,IAAL,CAAUF,CAAV,IAAegb,MAAf;EACD;;EACD,SAAKlX,OAAL,IAAgB,CAAhB;EACA,WAAO,IAAP;EACD;;EAEDmX,EAAAA,SAAS,CAACtQ,KAAD,EAAQ2B,KAAR,EAAe;EACtB,QAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;EAChCA,MAAAA,KAAK,GAAG3B,KAAR;EACAA,MAAAA,KAAK,GAAG,KAAK7G,OAAb;EACD;;EACD+G,IAAAA,gBAAgB,CAAC,IAAD,EAAOF,KAAP,EAAc,IAAd,CAAhB;EACA2B,IAAAA,KAAK,GAAGrB,iBAAiB,CAAC,IAAD,EAAOqB,KAAP,CAAzB;;EACA,SAAK,IAAItM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK6D,IAAzB,EAA+B7D,CAAC,EAAhC,EAAoC;EAClC,YAAMgb,MAAM,GAAG,IAAIhH,YAAJ,CAAiB,KAAKlQ,OAAL,GAAe,CAAhC,CAAf;EACA,UAAIK,CAAC,GAAG,CAAR;;EACA,aAAOA,CAAC,GAAGwG,KAAX,EAAkBxG,CAAC,EAAnB,EAAuB;EACrB6W,QAAAA,MAAM,CAAC7W,CAAD,CAAN,GAAY,KAAKjE,IAAL,CAAUF,CAAV,EAAamE,CAAb,CAAZ;EACD;;EACD6W,MAAAA,MAAM,CAAC7W,CAAC,EAAF,CAAN,GAAcmI,KAAK,CAACtM,CAAD,CAAnB;;EACA,aAAOmE,CAAC,GAAG,KAAKL,OAAL,GAAe,CAA1B,EAA6BK,CAAC,EAA9B,EAAkC;EAChC6W,QAAAA,MAAM,CAAC7W,CAAD,CAAN,GAAY,KAAKjE,IAAL,CAAUF,CAAV,EAAamE,CAAC,GAAG,CAAjB,CAAZ;EACD;;EACD,WAAKjE,IAAL,CAAUF,CAAV,IAAegb,MAAf;EACD;;EACD,SAAKlX,OAAL,IAAgB,CAAhB;EACA,WAAO,IAAP;EACD;;EA3GgD;EA8GnDsB,qBAAqB,CAACC,cAAD,EAAiBC,MAAjB,CAArB;;ECjiDe,MAAM4V,eAAN,SAA8B7V,cAA9B,CAA6C;EAC1D3B,EAAAA,WAAW,CAACxD,IAAD,EAAO;EAChB;EACA,SAAKA,IAAL,GAAYA,IAAZ;EACA,SAAK2D,IAAL,GAAY3D,IAAI,CAACd,MAAjB;EACA,SAAK0E,OAAL,GAAe5D,IAAI,CAAC,CAAD,CAAJ,CAAQd,MAAvB;EACD;;EAEDsG,EAAAA,GAAG,CAACiU,QAAD,EAAWC,WAAX,EAAwBjY,KAAxB,EAA+B;EAChC,SAAKzB,IAAL,CAAUyZ,QAAV,EAAoBC,WAApB,IAAmCjY,KAAnC;EACA,WAAO,IAAP;EACD;;EAED2C,EAAAA,GAAG,CAACqV,QAAD,EAAWC,WAAX,EAAwB;EACzB,WAAO,KAAK1Z,IAAL,CAAUyZ,QAAV,EAAoBC,WAApB,CAAP;EACD;;EAfyD;;ECC7C,MAAMuB,eAAN,CAAsB;EACnCzX,EAAAA,WAAW,CAACJ,MAAD,EAAS;EAClBA,IAAAA,MAAM,GAAG4X,eAAe,CAACvV,WAAhB,CAA4BrC,MAA5B,CAAT;EAEA,QAAI8X,EAAE,GAAG9X,MAAM,CAACmN,KAAP,EAAT;EACA,QAAI5M,IAAI,GAAGuX,EAAE,CAACvX,IAAd;EACA,QAAIC,OAAO,GAAGsX,EAAE,CAACtX,OAAjB;EACA,QAAIuX,WAAW,GAAG,IAAIrH,YAAJ,CAAiBnQ,IAAjB,CAAlB;EACA,QAAIyX,SAAS,GAAG,CAAhB;EACA,QAAItb,CAAJ,EAAOmE,CAAP,EAAUoM,CAAV,EAAaW,CAAb,EAAgB+C,CAAhB,EAAmBsH,CAAnB,EAAsB1O,CAAtB;EACA,QAAI2O,MAAJ,EAAYC,IAAZ;;EAEA,SAAKzb,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG6D,IAAhB,EAAsB7D,CAAC,EAAvB,EAA2B;EACzBqb,MAAAA,WAAW,CAACrb,CAAD,CAAX,GAAiBA,CAAjB;EACD;;EAEDwb,IAAAA,MAAM,GAAG,IAAIxH,YAAJ,CAAiBnQ,IAAjB,CAAT;;EAEA,SAAKM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGL,OAAhB,EAAyBK,CAAC,EAA1B,EAA8B;EAC5B,WAAKnE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG6D,IAAhB,EAAsB7D,CAAC,EAAvB,EAA2B;EACzBwb,QAAAA,MAAM,CAACxb,CAAD,CAAN,GAAYob,EAAE,CAAC9W,GAAH,CAAOtE,CAAP,EAAUmE,CAAV,CAAZ;EACD;;EAED,WAAKnE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG6D,IAAhB,EAAsB7D,CAAC,EAAvB,EAA2B;EACzByb,QAAAA,IAAI,GAAGrZ,IAAI,CAACE,GAAL,CAAStC,CAAT,EAAYmE,CAAZ,CAAP;EACA8P,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGkL,IAAhB,EAAsBlL,CAAC,EAAvB,EAA2B;EACzB0D,UAAAA,CAAC,IAAImH,EAAE,CAAC9W,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,IAAeiL,MAAM,CAACjL,CAAD,CAA1B;EACD;;EACDiL,QAAAA,MAAM,CAACxb,CAAD,CAAN,IAAaiU,CAAb;EACAmH,QAAAA,EAAE,CAAC1V,GAAH,CAAO1F,CAAP,EAAUmE,CAAV,EAAaqX,MAAM,CAACxb,CAAD,CAAnB;EACD;;EAEDkR,MAAAA,CAAC,GAAG/M,CAAJ;;EACA,WAAKnE,CAAC,GAAGmE,CAAC,GAAG,CAAb,EAAgBnE,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,YAAIoC,IAAI,CAACuG,GAAL,CAAS6S,MAAM,CAACxb,CAAD,CAAf,IAAsBoC,IAAI,CAACuG,GAAL,CAAS6S,MAAM,CAACtK,CAAD,CAAf,CAA1B,EAA+C;EAC7CA,UAAAA,CAAC,GAAGlR,CAAJ;EACD;EACF;;EAED,UAAIkR,CAAC,KAAK/M,CAAV,EAAa;EACX,aAAKoM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGzM,OAAhB,EAAyByM,CAAC,EAA1B,EAA8B;EAC5BgL,UAAAA,CAAC,GAAGH,EAAE,CAAC9W,GAAH,CAAO4M,CAAP,EAAUX,CAAV,CAAJ;EACA6K,UAAAA,EAAE,CAAC1V,GAAH,CAAOwL,CAAP,EAAUX,CAAV,EAAa6K,EAAE,CAAC9W,GAAH,CAAOH,CAAP,EAAUoM,CAAV,CAAb;EACA6K,UAAAA,EAAE,CAAC1V,GAAH,CAAOvB,CAAP,EAAUoM,CAAV,EAAagL,CAAb;EACD;;EAED1O,QAAAA,CAAC,GAAGwO,WAAW,CAACnK,CAAD,CAAf;EACAmK,QAAAA,WAAW,CAACnK,CAAD,CAAX,GAAiBmK,WAAW,CAAClX,CAAD,CAA5B;EACAkX,QAAAA,WAAW,CAAClX,CAAD,CAAX,GAAiB0I,CAAjB;EAEAyO,QAAAA,SAAS,GAAG,CAACA,SAAb;EACD;;EAED,UAAInX,CAAC,GAAGN,IAAJ,IAAYuX,EAAE,CAAC9W,GAAH,CAAOH,CAAP,EAAUA,CAAV,MAAiB,CAAjC,EAAoC;EAClC,aAAKnE,CAAC,GAAGmE,CAAC,GAAG,CAAb,EAAgBnE,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7Bob,UAAAA,EAAE,CAAC1V,GAAH,CAAO1F,CAAP,EAAUmE,CAAV,EAAaiX,EAAE,CAAC9W,GAAH,CAAOtE,CAAP,EAAUmE,CAAV,IAAeiX,EAAE,CAAC9W,GAAH,CAAOH,CAAP,EAAUA,CAAV,CAA5B;EACD;EACF;EACF;;EAED,SAAKuX,EAAL,GAAUN,EAAV;EACA,SAAKC,WAAL,GAAmBA,WAAnB;EACA,SAAKC,SAAL,GAAiBA,SAAjB;EACD;;EAEDK,EAAAA,UAAU,GAAG;EACX,QAAIzb,IAAI,GAAG,KAAKwb,EAAhB;EACA,QAAIE,GAAG,GAAG1b,IAAI,CAAC4D,OAAf;;EACA,SAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyX,GAApB,EAAyBzX,CAAC,EAA1B,EAA8B;EAC5B,UAAIjE,IAAI,CAACoE,GAAL,CAASH,CAAT,EAAYA,CAAZ,MAAmB,CAAvB,EAA0B;EACxB,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD;;EAED0X,EAAAA,KAAK,CAACla,KAAD,EAAQ;EACXA,IAAAA,KAAK,GAAG2D,MAAM,CAACK,WAAP,CAAmBhE,KAAnB,CAAR;EAEA,QAAIyZ,EAAE,GAAG,KAAKM,EAAd;EACA,QAAI7X,IAAI,GAAGuX,EAAE,CAACvX,IAAd;;EAEA,QAAIA,IAAI,KAAKlC,KAAK,CAACkC,IAAnB,EAAyB;EACvB,YAAM,IAAI/D,KAAJ,CAAU,2BAAV,CAAN;EACD;;EACD,QAAI,KAAK6b,UAAL,EAAJ,EAAuB;EACrB,YAAM,IAAI7b,KAAJ,CAAU,uBAAV,CAAN;EACD;;EAED,QAAIgc,KAAK,GAAGna,KAAK,CAACmC,OAAlB;EACA,QAAIiY,CAAC,GAAGpa,KAAK,CAAC4X,YAAN,CAAmB,KAAK8B,WAAxB,EAAqC,CAArC,EAAwCS,KAAK,GAAG,CAAhD,CAAR;EACA,QAAIhY,OAAO,GAAGsX,EAAE,CAACtX,OAAjB;EACA,QAAI9D,CAAJ,EAAOmE,CAAP,EAAUoM,CAAV;;EAEA,SAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGzM,OAAhB,EAAyByM,CAAC,EAA1B,EAA8B;EAC5B,WAAKvQ,CAAC,GAAGuQ,CAAC,GAAG,CAAb,EAAgBvQ,CAAC,GAAG8D,OAApB,EAA6B9D,CAAC,EAA9B,EAAkC;EAChC,aAAKmE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY4X,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAc4X,CAAC,CAACzX,GAAF,CAAMiM,CAAN,EAASpM,CAAT,IAAciX,EAAE,CAAC9W,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,CAAxC;EACD;EACF;EACF;;EACD,SAAKA,CAAC,GAAGzM,OAAO,GAAG,CAAnB,EAAsByM,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,WAAKpM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,QAAAA,CAAC,CAACrW,GAAF,CAAM6K,CAAN,EAASpM,CAAT,EAAY4X,CAAC,CAACzX,GAAF,CAAMiM,CAAN,EAASpM,CAAT,IAAciX,EAAE,CAAC9W,GAAH,CAAOiM,CAAP,EAAUA,CAAV,CAA1B;EACD;;EACD,WAAKvQ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGuQ,CAAhB,EAAmBvQ,CAAC,EAApB,EAAwB;EACtB,aAAKmE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY4X,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAc4X,CAAC,CAACzX,GAAF,CAAMiM,CAAN,EAASpM,CAAT,IAAciX,EAAE,CAAC9W,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,CAAxC;EACD;EACF;EACF;;EACD,WAAOwL,CAAP;EACD;;EAED,MAAIC,WAAJ,GAAkB;EAChB,QAAI9b,IAAI,GAAG,KAAKwb,EAAhB;;EACA,QAAI,CAACxb,IAAI,CAAC+P,QAAL,EAAL,EAAsB;EACpB,YAAM,IAAInQ,KAAJ,CAAU,uBAAV,CAAN;EACD;;EACD,QAAIkc,WAAW,GAAG,KAAKV,SAAvB;EACA,QAAIM,GAAG,GAAG1b,IAAI,CAAC4D,OAAf;;EACA,SAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyX,GAApB,EAAyBzX,CAAC,EAA1B,EAA8B;EAC5B6X,MAAAA,WAAW,IAAI9b,IAAI,CAACoE,GAAL,CAASH,CAAT,EAAYA,CAAZ,CAAf;EACD;;EACD,WAAO6X,WAAP;EACD;;EAED,MAAIC,qBAAJ,GAA4B;EAC1B,QAAI/b,IAAI,GAAG,KAAKwb,EAAhB;EACA,QAAI7X,IAAI,GAAG3D,IAAI,CAAC2D,IAAhB;EACA,QAAIC,OAAO,GAAG5D,IAAI,CAAC4D,OAAnB;EACA,QAAIiY,CAAC,GAAG,IAAIzW,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,CAAR;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,OAApB,EAA6BK,CAAC,EAA9B,EAAkC;EAChC,YAAInE,CAAC,GAAGmE,CAAR,EAAW;EACT4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYjE,IAAI,CAACoE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAZ;EACD,SAFD,MAEO,IAAInE,CAAC,KAAKmE,CAAV,EAAa;EAClB4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY,CAAZ;EACD,SAFM,MAEA;EACL4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAO4X,CAAP;EACD;;EAED,MAAIG,qBAAJ,GAA4B;EAC1B,QAAIhc,IAAI,GAAG,KAAKwb,EAAhB;EACA,QAAI7X,IAAI,GAAG3D,IAAI,CAAC2D,IAAhB;EACA,QAAIC,OAAO,GAAG5D,IAAI,CAAC4D,OAAnB;EACA,QAAIiY,CAAC,GAAG,IAAIzW,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,CAAR;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6D,IAApB,EAA0B7D,CAAC,EAA3B,EAA+B;EAC7B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGL,OAApB,EAA6BK,CAAC,EAA9B,EAAkC;EAChC,YAAInE,CAAC,IAAImE,CAAT,EAAY;EACV4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYjE,IAAI,CAACoE,GAAL,CAAStE,CAAT,EAAYmE,CAAZ,CAAZ;EACD,SAFD,MAEO;EACL4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAO4X,CAAP;EACD;;EAED,MAAII,sBAAJ,GAA6B;EAC3B,WAAO/a,KAAK,CAACwK,IAAN,CAAW,KAAKyP,WAAhB,CAAP;EACD;;EAtKkC;;ECH9B,SAASe,UAAT,CAAoBnE,CAApB,EAAuBC,CAAvB,EAA0B;EAC/B,MAAIvM,CAAC,GAAG,CAAR;;EACA,MAAIvJ,IAAI,CAACuG,GAAL,CAASsP,CAAT,IAAc7V,IAAI,CAACuG,GAAL,CAASuP,CAAT,CAAlB,EAA+B;EAC7BvM,IAAAA,CAAC,GAAGuM,CAAC,GAAGD,CAAR;EACA,WAAO7V,IAAI,CAACuG,GAAL,CAASsP,CAAT,IAAc7V,IAAI,CAAC+H,IAAL,CAAU,IAAIwB,CAAC,GAAGA,CAAlB,CAArB;EACD;;EACD,MAAIuM,CAAC,KAAK,CAAV,EAAa;EACXvM,IAAAA,CAAC,GAAGsM,CAAC,GAAGC,CAAR;EACA,WAAO9V,IAAI,CAACuG,GAAL,CAASuP,CAAT,IAAc9V,IAAI,CAAC+H,IAAL,CAAU,IAAIwB,CAAC,GAAGA,CAAlB,CAArB;EACD;;EACD,SAAO,CAAP;EACD;;ECNc,MAAM0Q,eAAN,CAAsB;EACnC3Y,EAAAA,WAAW,CAAC/B,KAAD,EAAQ;EACjBA,IAAAA,KAAK,GAAGuZ,eAAe,CAACvV,WAAhB,CAA4BhE,KAA5B,CAAR;EAEA,QAAI2a,EAAE,GAAG3a,KAAK,CAAC8O,KAAN,EAAT;EACA,QAAIM,CAAC,GAAGpP,KAAK,CAACkC,IAAd;EACA,QAAImN,CAAC,GAAGrP,KAAK,CAACmC,OAAd;EACA,QAAIyY,KAAK,GAAG,IAAIvI,YAAJ,CAAiBhD,CAAjB,CAAZ;EACA,QAAIhR,CAAJ,EAAOmE,CAAP,EAAUoM,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtB,UAAIiM,GAAG,GAAG,CAAV;;EACA,WAAKxc,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG+Q,CAAhB,EAAmB/Q,CAAC,EAApB,EAAwB;EACtBwc,QAAAA,GAAG,GAAGJ,UAAU,CAACI,GAAD,EAAMF,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,CAAN,CAAhB;EACD;;EACD,UAAIiM,GAAG,KAAK,CAAZ,EAAe;EACb,YAAIF,EAAE,CAAChY,GAAH,CAAOiM,CAAP,EAAUA,CAAV,IAAe,CAAnB,EAAsB;EACpBiM,UAAAA,GAAG,GAAG,CAACA,GAAP;EACD;;EACD,aAAKxc,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG+Q,CAAhB,EAAmB/Q,CAAC,EAApB,EAAwB;EACtBsc,UAAAA,EAAE,CAAC5W,GAAH,CAAO1F,CAAP,EAAUuQ,CAAV,EAAa+L,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,IAAeiM,GAA5B;EACD;;EACDF,QAAAA,EAAE,CAAC5W,GAAH,CAAO6K,CAAP,EAAUA,CAAV,EAAa+L,EAAE,CAAChY,GAAH,CAAOiM,CAAP,EAAUA,CAAV,IAAe,CAA5B;;EACA,aAAKpM,CAAC,GAAGoM,CAAC,GAAG,CAAb,EAAgBpM,CAAC,GAAG6M,CAApB,EAAuB7M,CAAC,EAAxB,EAA4B;EAC1B8P,UAAAA,CAAC,GAAG,CAAJ;;EACA,eAAKjU,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG+Q,CAAhB,EAAmB/Q,CAAC,EAApB,EAAwB;EACtBiU,YAAAA,CAAC,IAAIqI,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,IAAe+L,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUmE,CAAV,CAApB;EACD;;EACD8P,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKqI,EAAE,CAAChY,GAAH,CAAOiM,CAAP,EAAUA,CAAV,CAAT;;EACA,eAAKvQ,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG+Q,CAAhB,EAAmB/Q,CAAC,EAApB,EAAwB;EACtBsc,YAAAA,EAAE,CAAC5W,GAAH,CAAO1F,CAAP,EAAUmE,CAAV,EAAamY,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUmE,CAAV,IAAe8P,CAAC,GAAGqI,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,CAAhC;EACD;EACF;EACF;;EACDgM,MAAAA,KAAK,CAAChM,CAAD,CAAL,GAAW,CAACiM,GAAZ;EACD;;EAED,SAAKC,EAAL,GAAUH,EAAV;EACA,SAAKI,KAAL,GAAaH,KAAb;EACD;;EAEDV,EAAAA,KAAK,CAACla,KAAD,EAAQ;EACXA,IAAAA,KAAK,GAAG2D,MAAM,CAACK,WAAP,CAAmBhE,KAAnB,CAAR;EAEA,QAAI2a,EAAE,GAAG,KAAKG,EAAd;EACA,QAAI1L,CAAC,GAAGuL,EAAE,CAACzY,IAAX;;EAEA,QAAIlC,KAAK,CAACkC,IAAN,KAAekN,CAAnB,EAAsB;EACpB,YAAM,IAAIjR,KAAJ,CAAU,kCAAV,CAAN;EACD;;EACD,QAAI,CAAC,KAAK6c,UAAL,EAAL,EAAwB;EACtB,YAAM,IAAI7c,KAAJ,CAAU,0BAAV,CAAN;EACD;;EAED,QAAIgc,KAAK,GAAGna,KAAK,CAACmC,OAAlB;EACA,QAAIiY,CAAC,GAAGpa,KAAK,CAAC8O,KAAN,EAAR;EACA,QAAIO,CAAC,GAAGsL,EAAE,CAACxY,OAAX;EACA,QAAI9D,CAAJ,EAAOmE,CAAP,EAAUoM,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGS,CAAhB,EAAmBT,CAAC,EAApB,EAAwB;EACtB,WAAKpM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B8P,QAAAA,CAAC,GAAG,CAAJ;;EACA,aAAKjU,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG+Q,CAAhB,EAAmB/Q,CAAC,EAApB,EAAwB;EACtBiU,UAAAA,CAAC,IAAIqI,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,IAAewL,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAApB;EACD;;EACD8P,QAAAA,CAAC,GAAG,CAACA,CAAD,GAAKqI,EAAE,CAAChY,GAAH,CAAOiM,CAAP,EAAUA,CAAV,CAAT;;EACA,aAAKvQ,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG+Q,CAAhB,EAAmB/Q,CAAC,EAApB,EAAwB;EACtB+b,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY4X,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAc8P,CAAC,GAAGqI,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,CAA9B;EACD;EACF;EACF;;EACD,SAAKA,CAAC,GAAGS,CAAC,GAAG,CAAb,EAAgBT,CAAC,IAAI,CAArB,EAAwBA,CAAC,EAAzB,EAA6B;EAC3B,WAAKpM,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,QAAAA,CAAC,CAACrW,GAAF,CAAM6K,CAAN,EAASpM,CAAT,EAAY4X,CAAC,CAACzX,GAAF,CAAMiM,CAAN,EAASpM,CAAT,IAAc,KAAKuY,KAAL,CAAWnM,CAAX,CAA1B;EACD;;EACD,WAAKvQ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGuQ,CAAhB,EAAmBvQ,CAAC,EAApB,EAAwB;EACtB,aAAKmE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG2X,KAAhB,EAAuB3X,CAAC,EAAxB,EAA4B;EAC1B4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY4X,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAc4X,CAAC,CAACzX,GAAF,CAAMiM,CAAN,EAASpM,CAAT,IAAcmY,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,CAAxC;EACD;EACF;EACF;;EAED,WAAOwL,CAAC,CAACzD,SAAF,CAAY,CAAZ,EAAetH,CAAC,GAAG,CAAnB,EAAsB,CAAtB,EAAyB8K,KAAK,GAAG,CAAjC,CAAP;EACD;;EAEDa,EAAAA,UAAU,GAAG;EACX,QAAI7Y,OAAO,GAAG,KAAK2Y,EAAL,CAAQ3Y,OAAtB;;EACA,SAAK,IAAI9D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8D,OAApB,EAA6B9D,CAAC,EAA9B,EAAkC;EAChC,UAAI,KAAK0c,KAAL,CAAW1c,CAAX,MAAkB,CAAtB,EAAyB;EACvB,eAAO,KAAP;EACD;EACF;;EACD,WAAO,IAAP;EACD;;EAED,MAAIkc,qBAAJ,GAA4B;EAC1B,QAAII,EAAE,GAAG,KAAKG,EAAd;EACA,QAAIzL,CAAC,GAAGsL,EAAE,CAACxY,OAAX;EACA,QAAIiY,CAAC,GAAG,IAAIzW,MAAJ,CAAW0L,CAAX,EAAcA,CAAd,CAAR;EACA,QAAIhR,CAAJ,EAAOmE,CAAP;;EACA,SAAKnE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGgR,CAAhB,EAAmBhR,CAAC,EAApB,EAAwB;EACtB,WAAKmE,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG6M,CAAhB,EAAmB7M,CAAC,EAApB,EAAwB;EACtB,YAAInE,CAAC,GAAGmE,CAAR,EAAW;EACT4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYmY,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUmE,CAAV,CAAZ;EACD,SAFD,MAEO,IAAInE,CAAC,KAAKmE,CAAV,EAAa;EAClB4X,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY,KAAKuY,KAAL,CAAW1c,CAAX,CAAZ;EACD,SAFM,MAEA;EACL+b,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EACD,WAAO4X,CAAP;EACD;;EAED,MAAIa,gBAAJ,GAAuB;EACrB,QAAIN,EAAE,GAAG,KAAKG,EAAd;EACA,QAAI5Y,IAAI,GAAGyY,EAAE,CAACzY,IAAd;EACA,QAAIC,OAAO,GAAGwY,EAAE,CAACxY,OAAjB;EACA,QAAIiY,CAAC,GAAG,IAAIzW,MAAJ,CAAWzB,IAAX,EAAiBC,OAAjB,CAAR;EACA,QAAI9D,CAAJ,EAAOmE,CAAP,EAAUoM,CAAV,EAAa0D,CAAb;;EAEA,SAAK1D,CAAC,GAAGzM,OAAO,GAAG,CAAnB,EAAsByM,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,WAAKvQ,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG6D,IAAhB,EAAsB7D,CAAC,EAAvB,EAA2B;EACzB+b,QAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY,CAAZ;EACD;;EACDwL,MAAAA,CAAC,CAACrW,GAAF,CAAM6K,CAAN,EAASA,CAAT,EAAY,CAAZ;;EACA,WAAKpM,CAAC,GAAGoM,CAAT,EAAYpM,CAAC,GAAGL,OAAhB,EAAyBK,CAAC,EAA1B,EAA8B;EAC5B,YAAImY,EAAE,CAAChY,GAAH,CAAOiM,CAAP,EAAUA,CAAV,MAAiB,CAArB,EAAwB;EACtB0D,UAAAA,CAAC,GAAG,CAAJ;;EACA,eAAKjU,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG6D,IAAhB,EAAsB7D,CAAC,EAAvB,EAA2B;EACzBiU,YAAAA,CAAC,IAAIqI,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,IAAewL,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAApB;EACD;;EAED8P,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKqI,EAAE,CAAChY,GAAH,CAAOiM,CAAP,EAAUA,CAAV,CAAT;;EAEA,eAAKvQ,CAAC,GAAGuQ,CAAT,EAAYvQ,CAAC,GAAG6D,IAAhB,EAAsB7D,CAAC,EAAvB,EAA2B;EACzB+b,YAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY4X,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAc8P,CAAC,GAAGqI,EAAE,CAAChY,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,CAA9B;EACD;EACF;EACF;EACF;;EACD,WAAOwL,CAAP;EACD;;EA9IkC;;ECAtB,MAAMc,0BAAN,CAAiC;EAC9CnZ,EAAAA,WAAW,CAAC/B,KAAD,EAAQzC,OAAO,GAAG,EAAlB,EAAsB;EAC/ByC,IAAAA,KAAK,GAAGuZ,eAAe,CAACvV,WAAhB,CAA4BhE,KAA5B,CAAR;;EAEA,QAAIA,KAAK,CAAC6K,OAAN,EAAJ,EAAqB;EACnB,YAAM,IAAI1M,KAAJ,CAAU,0BAAV,CAAN;EACD;;EAED,QAAIiR,CAAC,GAAGpP,KAAK,CAACkC,IAAd;EACA,QAAImN,CAAC,GAAGrP,KAAK,CAACmC,OAAd;EAEA,UAAM;EACJgZ,MAAAA,0BAA0B,GAAG,IADzB;EAEJC,MAAAA,2BAA2B,GAAG,IAF1B;EAGJC,MAAAA,aAAa,GAAG;EAHZ,QAIF9d,OAJJ;EAMA,QAAI+d,KAAK,GAAGC,OAAO,CAACJ,0BAAD,CAAnB;EACA,QAAIK,KAAK,GAAGD,OAAO,CAACH,2BAAD,CAAnB;EAEA,QAAIK,OAAO,GAAG,KAAd;EACA,QAAInF,CAAJ;;EACA,QAAIlH,CAAC,GAAGC,CAAR,EAAW;EACT,UAAI,CAACgM,aAAL,EAAoB;EAClB/E,QAAAA,CAAC,GAAGtW,KAAK,CAAC8O,KAAN,EAAJ,CADkB;;EAGlBkH,QAAAA,OAAO,CAACC,IAAR,CACE,wFADF;EAGD,OAND,MAMO;EACLK,QAAAA,CAAC,GAAGtW,KAAK,CAACsX,SAAN,EAAJ;EACAlI,QAAAA,CAAC,GAAGkH,CAAC,CAACpU,IAAN;EACAmN,QAAAA,CAAC,GAAGiH,CAAC,CAACnU,OAAN;EACAsZ,QAAAA,OAAO,GAAG,IAAV;EACA,YAAIC,GAAG,GAAGJ,KAAV;EACAA,QAAAA,KAAK,GAAGE,KAAR;EACAA,QAAAA,KAAK,GAAGE,GAAR;EACD;EACF,KAhBD,MAgBO;EACLpF,MAAAA,CAAC,GAAGtW,KAAK,CAAC8O,KAAN,EAAJ;EACD;;EAED,QAAI6M,EAAE,GAAGlb,IAAI,CAACE,GAAL,CAASyO,CAAT,EAAYC,CAAZ,CAAT;EACA,QAAIuM,EAAE,GAAGnb,IAAI,CAACE,GAAL,CAASyO,CAAC,GAAG,CAAb,EAAgBC,CAAhB,CAAT;EACA,QAAIiD,CAAC,GAAG,IAAID,YAAJ,CAAiBuJ,EAAjB,CAAR;EACA,QAAIC,CAAC,GAAG,IAAIlY,MAAJ,CAAWyL,CAAX,EAAcuM,EAAd,CAAR;EACA,QAAIG,CAAC,GAAG,IAAInY,MAAJ,CAAW0L,CAAX,EAAcA,CAAd,CAAR;EAEA,QAAI9L,CAAC,GAAG,IAAI8O,YAAJ,CAAiBhD,CAAjB,CAAR;EACA,QAAI0M,IAAI,GAAG,IAAI1J,YAAJ,CAAiBjD,CAAjB,CAAX;EAEA,QAAI4M,EAAE,GAAG,IAAI3J,YAAJ,CAAiBuJ,EAAjB,CAAT;;EACA,SAAK,IAAIvd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGud,EAApB,EAAwBvd,CAAC,EAAzB,EAA6B2d,EAAE,CAAC3d,CAAD,CAAF,GAAQA,CAAR;;EAE7B,QAAI4d,GAAG,GAAGxb,IAAI,CAACE,GAAL,CAASyO,CAAC,GAAG,CAAb,EAAgBC,CAAhB,CAAV;EACA,QAAI6M,GAAG,GAAGzb,IAAI,CAACpD,GAAL,CAAS,CAAT,EAAYoD,IAAI,CAACE,GAAL,CAAS0O,CAAC,GAAG,CAAb,EAAgBD,CAAhB,CAAZ,CAAV;EACA,QAAI+M,GAAG,GAAG1b,IAAI,CAACpD,GAAL,CAAS4e,GAAT,EAAcC,GAAd,CAAV;;EAEA,SAAK,IAAItN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuN,GAApB,EAAyBvN,CAAC,EAA1B,EAA8B;EAC5B,UAAIA,CAAC,GAAGqN,GAAR,EAAa;EACX3J,QAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAP;;EACA,aAAK,IAAIvQ,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1BiU,UAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO6L,UAAU,CAACnI,CAAC,CAAC1D,CAAD,CAAF,EAAO0H,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAAP,CAAjB;EACD;;EACD,YAAI0D,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,cAAI0H,CAAC,CAAC3T,GAAF,CAAMiM,CAAN,EAASA,CAAT,IAAc,CAAlB,EAAqB;EACnB0D,YAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAC0D,CAAC,CAAC1D,CAAD,CAAT;EACD;;EACD,eAAK,IAAIvQ,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1BiY,YAAAA,CAAC,CAACvS,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY0H,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,IAAc0D,CAAC,CAAC1D,CAAD,CAA3B;EACD;;EACD0H,UAAAA,CAAC,CAACvS,GAAF,CAAM6K,CAAN,EAASA,CAAT,EAAY0H,CAAC,CAAC3T,GAAF,CAAMiM,CAAN,EAASA,CAAT,IAAc,CAA1B;EACD;;EACD0D,QAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAC0D,CAAC,CAAC1D,CAAD,CAAT;EACD;;EAED,WAAK,IAAIpM,CAAC,GAAGoM,CAAC,GAAG,CAAjB,EAAoBpM,CAAC,GAAG6M,CAAxB,EAA2B7M,CAAC,EAA5B,EAAgC;EAC9B,YAAIoM,CAAC,GAAGqN,GAAJ,IAAW3J,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAxB,EAA2B;EACzB,cAAIgL,CAAC,GAAG,CAAR;;EACA,eAAK,IAAIvb,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bub,YAAAA,CAAC,IAAItD,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,IAAc0H,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAnB;EACD;;EACDoX,UAAAA,CAAC,GAAG,CAACA,CAAD,GAAKtD,CAAC,CAAC3T,GAAF,CAAMiM,CAAN,EAASA,CAAT,CAAT;;EACA,eAAK,IAAIvQ,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1BiY,YAAAA,CAAC,CAACvS,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY8T,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAcoX,CAAC,GAAGtD,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAA9B;EACD;EACF;;EACDrL,QAAAA,CAAC,CAACf,CAAD,CAAD,GAAO8T,CAAC,CAAC3T,GAAF,CAAMiM,CAAN,EAASpM,CAAT,CAAP;EACD;;EAED,UAAI8Y,KAAK,IAAI1M,CAAC,GAAGqN,GAAjB,EAAsB;EACpB,aAAK,IAAI5d,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bwd,UAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY0H,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAAZ;EACD;EACF;;EAED,UAAIA,CAAC,GAAGsN,GAAR,EAAa;EACX3Y,QAAAA,CAAC,CAACqL,CAAD,CAAD,GAAO,CAAP;;EACA,aAAK,IAAIvQ,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAGgR,CAAxB,EAA2BhR,CAAC,EAA5B,EAAgC;EAC9BkF,UAAAA,CAAC,CAACqL,CAAD,CAAD,GAAO6L,UAAU,CAAClX,CAAC,CAACqL,CAAD,CAAF,EAAOrL,CAAC,CAAClF,CAAD,CAAR,CAAjB;EACD;;EACD,YAAIkF,CAAC,CAACqL,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,cAAIrL,CAAC,CAACqL,CAAC,GAAG,CAAL,CAAD,GAAW,CAAf,EAAkB;EAChBrL,YAAAA,CAAC,CAACqL,CAAD,CAAD,GAAO,IAAIrL,CAAC,CAACqL,CAAD,CAAZ;EACD;;EACD,eAAK,IAAIvQ,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAGgR,CAAxB,EAA2BhR,CAAC,EAA5B,EAAgC;EAC9BkF,YAAAA,CAAC,CAAClF,CAAD,CAAD,IAAQkF,CAAC,CAACqL,CAAD,CAAT;EACD;;EACDrL,UAAAA,CAAC,CAACqL,CAAC,GAAG,CAAL,CAAD,IAAY,CAAZ;EACD;;EACDrL,QAAAA,CAAC,CAACqL,CAAD,CAAD,GAAO,CAACrL,CAAC,CAACqL,CAAD,CAAT;;EACA,YAAIA,CAAC,GAAG,CAAJ,GAAQQ,CAAR,IAAa7L,CAAC,CAACqL,CAAD,CAAD,KAAS,CAA1B,EAA6B;EAC3B,eAAK,IAAIvQ,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAG+Q,CAAxB,EAA2B/Q,CAAC,EAA5B,EAAgC;EAC9B0d,YAAAA,IAAI,CAAC1d,CAAD,CAAJ,GAAU,CAAV;EACD;;EACD,eAAK,IAAIA,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAG+Q,CAAxB,EAA2B/Q,CAAC,EAA5B,EAAgC;EAC9B,iBAAK,IAAImE,CAAC,GAAGoM,CAAC,GAAG,CAAjB,EAAoBpM,CAAC,GAAG6M,CAAxB,EAA2B7M,CAAC,EAA5B,EAAgC;EAC9BuZ,cAAAA,IAAI,CAAC1d,CAAD,CAAJ,IAAWkF,CAAC,CAACf,CAAD,CAAD,GAAO8T,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAlB;EACD;EACF;;EACD,eAAK,IAAIA,CAAC,GAAGoM,CAAC,GAAG,CAAjB,EAAoBpM,CAAC,GAAG6M,CAAxB,EAA2B7M,CAAC,EAA5B,EAAgC;EAC9B,gBAAIoX,CAAC,GAAG,CAACrW,CAAC,CAACf,CAAD,CAAF,GAAQe,CAAC,CAACqL,CAAC,GAAG,CAAL,CAAjB;;EACA,iBAAK,IAAIvQ,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAG+Q,CAAxB,EAA2B/Q,CAAC,EAA5B,EAAgC;EAC9BiY,cAAAA,CAAC,CAACvS,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY8T,CAAC,CAAC3T,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAcoX,CAAC,GAAGmC,IAAI,CAAC1d,CAAD,CAAlC;EACD;EACF;EACF;;EACD,YAAImd,KAAJ,EAAW;EACT,eAAK,IAAInd,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAGgR,CAAxB,EAA2BhR,CAAC,EAA5B,EAAgC;EAC9Byd,YAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAYrL,CAAC,CAAClF,CAAD,CAAb;EACD;EACF;EACF;EACF;;EAED,QAAIkR,CAAC,GAAG9O,IAAI,CAACE,GAAL,CAAS0O,CAAT,EAAYD,CAAC,GAAG,CAAhB,CAAR;;EACA,QAAI6M,GAAG,GAAG5M,CAAV,EAAa;EACXiD,MAAAA,CAAC,CAAC2J,GAAD,CAAD,GAAS3F,CAAC,CAAC3T,GAAF,CAAMsZ,GAAN,EAAWA,GAAX,CAAT;EACD;;EACD,QAAI7M,CAAC,GAAGG,CAAR,EAAW;EACT+C,MAAAA,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;EACD;;EACD,QAAI2M,GAAG,GAAG,CAAN,GAAU3M,CAAd,EAAiB;EACfhM,MAAAA,CAAC,CAAC2Y,GAAD,CAAD,GAAS5F,CAAC,CAAC3T,GAAF,CAAMuZ,GAAN,EAAW3M,CAAC,GAAG,CAAf,CAAT;EACD;;EACDhM,IAAAA,CAAC,CAACgM,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EAEA,QAAI+L,KAAJ,EAAW;EACT,WAAK,IAAI9Y,CAAC,GAAGyZ,GAAb,EAAkBzZ,CAAC,GAAGmZ,EAAtB,EAA0BnZ,CAAC,EAA3B,EAA+B;EAC7B,aAAK,IAAInE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bwd,UAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAY,CAAZ;EACD;;EACDqZ,QAAAA,CAAC,CAAC9X,GAAF,CAAMvB,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;;EACD,WAAK,IAAIoM,CAAC,GAAGqN,GAAG,GAAG,CAAnB,EAAsBrN,CAAC,IAAI,CAA3B,EAA8BA,CAAC,EAA/B,EAAmC;EACjC,YAAI0D,CAAC,CAAC1D,CAAD,CAAD,KAAS,CAAb,EAAgB;EACd,eAAK,IAAIpM,CAAC,GAAGoM,CAAC,GAAG,CAAjB,EAAoBpM,CAAC,GAAGmZ,EAAxB,EAA4BnZ,CAAC,EAA7B,EAAiC;EAC/B,gBAAIoX,CAAC,GAAG,CAAR;;EACA,iBAAK,IAAIvb,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bub,cAAAA,CAAC,IAAIiC,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,IAAciN,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAnB;EACD;;EACDoX,YAAAA,CAAC,GAAG,CAACA,CAAD,GAAKiC,CAAC,CAAClZ,GAAF,CAAMiM,CAAN,EAASA,CAAT,CAAT;;EACA,iBAAK,IAAIvQ,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bwd,cAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYqZ,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAcoX,CAAC,GAAGiC,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAA9B;EACD;EACF;;EACD,eAAK,IAAIvQ,CAAC,GAAGuQ,CAAb,EAAgBvQ,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bwd,YAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY,CAACiN,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAAb;EACD;;EACDiN,UAAAA,CAAC,CAAC9X,GAAF,CAAM6K,CAAN,EAASA,CAAT,EAAY,IAAIiN,CAAC,CAAClZ,GAAF,CAAMiM,CAAN,EAASA,CAAT,CAAhB;;EACA,eAAK,IAAIvQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuQ,CAAC,GAAG,CAAxB,EAA2BvQ,CAAC,EAA5B,EAAgC;EAC9Bwd,YAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY,CAAZ;EACD;EACF,SAlBD,MAkBO;EACL,eAAK,IAAIvQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bwd,YAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY,CAAZ;EACD;;EACDiN,UAAAA,CAAC,CAAC9X,GAAF,CAAM6K,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;EACF;EACF;;EAED,QAAI4M,KAAJ,EAAW;EACT,WAAK,IAAI5M,CAAC,GAAGS,CAAC,GAAG,CAAjB,EAAoBT,CAAC,IAAI,CAAzB,EAA4BA,CAAC,EAA7B,EAAiC;EAC/B,YAAIA,CAAC,GAAGsN,GAAJ,IAAW3Y,CAAC,CAACqL,CAAD,CAAD,KAAS,CAAxB,EAA2B;EACzB,eAAK,IAAIpM,CAAC,GAAGoM,CAAC,GAAG,CAAjB,EAAoBpM,CAAC,GAAG6M,CAAxB,EAA2B7M,CAAC,EAA5B,EAAgC;EAC9B,gBAAIoX,CAAC,GAAG,CAAR;;EACA,iBAAK,IAAIvb,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAGgR,CAAxB,EAA2BhR,CAAC,EAA5B,EAAgC;EAC9Bub,cAAAA,CAAC,IAAIkC,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,IAAckN,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAnB;EACD;;EACDoX,YAAAA,CAAC,GAAG,CAACA,CAAD,GAAKkC,CAAC,CAACnZ,GAAF,CAAMiM,CAAC,GAAG,CAAV,EAAaA,CAAb,CAAT;;EACA,iBAAK,IAAIvQ,CAAC,GAAGuQ,CAAC,GAAG,CAAjB,EAAoBvQ,CAAC,GAAGgR,CAAxB,EAA2BhR,CAAC,EAA5B,EAAgC;EAC9Byd,cAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYsZ,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAcoX,CAAC,GAAGkC,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAA9B;EACD;EACF;EACF;;EACD,aAAK,IAAIvQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgR,CAApB,EAAuBhR,CAAC,EAAxB,EAA4B;EAC1Byd,UAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY,CAAZ;EACD;;EACDkN,QAAAA,CAAC,CAAC/X,GAAF,CAAM6K,CAAN,EAASA,CAAT,EAAY,CAAZ;EACD;EACF;;EAED,QAAIwN,EAAE,GAAG7M,CAAC,GAAG,CAAb;EAEA,QAAI8M,GAAG,GAAGpe,MAAM,CAACqe,OAAjB;;EACA,WAAO/M,CAAC,GAAG,CAAX,EAAc;EACZ,UAAIX,CAAJ,EAAO2N,IAAP;;EACA,WAAK3N,CAAC,GAAGW,CAAC,GAAG,CAAb,EAAgBX,CAAC,IAAI,CAAC,CAAtB,EAAyBA,CAAC,EAA1B,EAA8B;EAC5B,YAAIA,CAAC,KAAK,CAAC,CAAX,EAAc;EACZ;EACD;;EACD,cAAM4N,KAAK,GACTve,MAAM,CAACwe,SAAP,GAAmBJ,GAAG,GAAG5b,IAAI,CAACuG,GAAL,CAASsL,CAAC,CAAC1D,CAAD,CAAD,GAAOnO,IAAI,CAACuG,GAAL,CAASsL,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAV,CAAhB,CAD3B;;EAEA,YAAInO,IAAI,CAACuG,GAAL,CAASzD,CAAC,CAACqL,CAAD,CAAV,KAAkB4N,KAAlB,IAA2Bve,MAAM,CAACye,KAAP,CAAanZ,CAAC,CAACqL,CAAD,CAAd,CAA/B,EAAmD;EACjDrL,UAAAA,CAAC,CAACqL,CAAD,CAAD,GAAO,CAAP;EACA;EACD;EACF;;EACD,UAAIA,CAAC,KAAKW,CAAC,GAAG,CAAd,EAAiB;EACfgN,QAAAA,IAAI,GAAG,CAAP;EACD,OAFD,MAEO;EACL,YAAII,EAAJ;;EACA,aAAKA,EAAE,GAAGpN,CAAC,GAAG,CAAd,EAAiBoN,EAAE,IAAI/N,CAAvB,EAA0B+N,EAAE,EAA5B,EAAgC;EAC9B,cAAIA,EAAE,KAAK/N,CAAX,EAAc;EACZ;EACD;;EACD,cAAIgL,CAAC,GACH,CAAC+C,EAAE,KAAKpN,CAAP,GAAW9O,IAAI,CAACuG,GAAL,CAASzD,CAAC,CAACoZ,EAAD,CAAV,CAAX,GAA6B,CAA9B,KACCA,EAAE,KAAK/N,CAAC,GAAG,CAAX,GAAenO,IAAI,CAACuG,GAAL,CAASzD,CAAC,CAACoZ,EAAE,GAAG,CAAN,CAAV,CAAf,GAAqC,CADtC,CADF;;EAGA,cAAIlc,IAAI,CAACuG,GAAL,CAASsL,CAAC,CAACqK,EAAD,CAAV,KAAmBN,GAAG,GAAGzC,CAA7B,EAAgC;EAC9BtH,YAAAA,CAAC,CAACqK,EAAD,CAAD,GAAQ,CAAR;EACA;EACD;EACF;;EACD,YAAIA,EAAE,KAAK/N,CAAX,EAAc;EACZ2N,UAAAA,IAAI,GAAG,CAAP;EACD,SAFD,MAEO,IAAII,EAAE,KAAKpN,CAAC,GAAG,CAAf,EAAkB;EACvBgN,UAAAA,IAAI,GAAG,CAAP;EACD,SAFM,MAEA;EACLA,UAAAA,IAAI,GAAG,CAAP;EACA3N,UAAAA,CAAC,GAAG+N,EAAJ;EACD;EACF;;EAED/N,MAAAA,CAAC;;EAED,cAAQ2N,IAAR;EACE,aAAK,CAAL;EAAQ;EACN,gBAAIK,CAAC,GAAGrZ,CAAC,CAACgM,CAAC,GAAG,CAAL,CAAT;EACAhM,YAAAA,CAAC,CAACgM,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EACA,iBAAK,IAAI/M,CAAC,GAAG+M,CAAC,GAAG,CAAjB,EAAoB/M,CAAC,IAAIoM,CAAzB,EAA4BpM,CAAC,EAA7B,EAAiC;EAC/B,kBAAIoX,CAAC,GAAGa,UAAU,CAACnI,CAAC,CAAC9P,CAAD,CAAF,EAAOoa,CAAP,CAAlB;EACA,kBAAIC,EAAE,GAAGvK,CAAC,CAAC9P,CAAD,CAAD,GAAOoX,CAAhB;EACA,kBAAIkD,EAAE,GAAGF,CAAC,GAAGhD,CAAb;EACAtH,cAAAA,CAAC,CAAC9P,CAAD,CAAD,GAAOoX,CAAP;;EACA,kBAAIpX,CAAC,KAAKoM,CAAV,EAAa;EACXgO,gBAAAA,CAAC,GAAG,CAACE,EAAD,GAAMvZ,CAAC,CAACf,CAAC,GAAG,CAAL,CAAX;EACAe,gBAAAA,CAAC,CAACf,CAAC,GAAG,CAAL,CAAD,GAAWqa,EAAE,GAAGtZ,CAAC,CAACf,CAAC,GAAG,CAAL,CAAjB;EACD;;EACD,kBAAIgZ,KAAJ,EAAW;EACT,qBAAK,IAAInd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgR,CAApB,EAAuBhR,CAAC,EAAxB,EAA4B;EAC1Bub,kBAAAA,CAAC,GAAGiD,EAAE,GAAGf,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAL,GAAmBsa,EAAE,GAAGhB,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASkR,CAAC,GAAG,CAAb,CAA5B;EACAuM,kBAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASkR,CAAC,GAAG,CAAb,EAAgB,CAACuN,EAAD,GAAMhB,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAN,GAAoBqa,EAAE,GAAGf,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASkR,CAAC,GAAG,CAAb,CAAzC;EACAuM,kBAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYoX,CAAZ;EACD;EACF;EACF;;EACD;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,gBAAIgD,CAAC,GAAGrZ,CAAC,CAACqL,CAAC,GAAG,CAAL,CAAT;EACArL,YAAAA,CAAC,CAACqL,CAAC,GAAG,CAAL,CAAD,GAAW,CAAX;;EACA,iBAAK,IAAIpM,CAAC,GAAGoM,CAAb,EAAgBpM,CAAC,GAAG+M,CAApB,EAAuB/M,CAAC,EAAxB,EAA4B;EAC1B,kBAAIoX,CAAC,GAAGa,UAAU,CAACnI,CAAC,CAAC9P,CAAD,CAAF,EAAOoa,CAAP,CAAlB;EACA,kBAAIC,EAAE,GAAGvK,CAAC,CAAC9P,CAAD,CAAD,GAAOoX,CAAhB;EACA,kBAAIkD,EAAE,GAAGF,CAAC,GAAGhD,CAAb;EACAtH,cAAAA,CAAC,CAAC9P,CAAD,CAAD,GAAOoX,CAAP;EACAgD,cAAAA,CAAC,GAAG,CAACE,EAAD,GAAMvZ,CAAC,CAACf,CAAD,CAAX;EACAe,cAAAA,CAAC,CAACf,CAAD,CAAD,GAAOqa,EAAE,GAAGtZ,CAAC,CAACf,CAAD,CAAb;;EACA,kBAAI8Y,KAAJ,EAAW;EACT,qBAAK,IAAIjd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bub,kBAAAA,CAAC,GAAGiD,EAAE,GAAGhB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAL,GAAmBsa,EAAE,GAAGjB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAC,GAAG,CAAb,CAA5B;EACAiN,kBAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASuQ,CAAC,GAAG,CAAb,EAAgB,CAACkO,EAAD,GAAMjB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAN,GAAoBqa,EAAE,GAAGhB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAC,GAAG,CAAb,CAAzC;EACAiN,kBAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYoX,CAAZ;EACD;EACF;EACF;;EACD;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,kBAAMxN,KAAK,GAAG3L,IAAI,CAACpD,GAAL,CACZoD,IAAI,CAACuG,GAAL,CAASsL,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAV,CADY,EAEZ9O,IAAI,CAACuG,GAAL,CAASsL,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAV,CAFY,EAGZ9O,IAAI,CAACuG,GAAL,CAASzD,CAAC,CAACgM,CAAC,GAAG,CAAL,CAAV,CAHY,EAIZ9O,IAAI,CAACuG,GAAL,CAASsL,CAAC,CAAC1D,CAAD,CAAV,CAJY,EAKZnO,IAAI,CAACuG,GAAL,CAASzD,CAAC,CAACqL,CAAD,CAAV,CALY,CAAd;EAOA,kBAAMmO,EAAE,GAAGzK,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAWnD,KAAtB;EACA,kBAAM4Q,IAAI,GAAG1K,CAAC,CAAC/C,CAAC,GAAG,CAAL,CAAD,GAAWnD,KAAxB;EACA,kBAAM6Q,IAAI,GAAG1Z,CAAC,CAACgM,CAAC,GAAG,CAAL,CAAD,GAAWnD,KAAxB;EACA,kBAAM8Q,EAAE,GAAG5K,CAAC,CAAC1D,CAAD,CAAD,GAAOxC,KAAlB;EACA,kBAAM+Q,EAAE,GAAG5Z,CAAC,CAACqL,CAAD,CAAD,GAAOxC,KAAlB;EACA,kBAAMmK,CAAC,GAAG,CAAC,CAACyG,IAAI,GAAGD,EAAR,KAAeC,IAAI,GAAGD,EAAtB,IAA4BE,IAAI,GAAGA,IAApC,IAA4C,CAAtD;EACA,kBAAM9S,CAAC,GAAG4S,EAAE,GAAGE,IAAL,IAAaF,EAAE,GAAGE,IAAlB,CAAV;EACA,gBAAIG,KAAK,GAAG,CAAZ;;EACA,gBAAI7G,CAAC,KAAK,CAAN,IAAWpM,CAAC,KAAK,CAArB,EAAwB;EACtB,kBAAIoM,CAAC,GAAG,CAAR,EAAW;EACT6G,gBAAAA,KAAK,GAAG,IAAI3c,IAAI,CAAC+H,IAAL,CAAU+N,CAAC,GAAGA,CAAJ,GAAQpM,CAAlB,CAAZ;EACD,eAFD,MAEO;EACLiT,gBAAAA,KAAK,GAAG3c,IAAI,CAAC+H,IAAL,CAAU+N,CAAC,GAAGA,CAAJ,GAAQpM,CAAlB,CAAR;EACD;;EACDiT,cAAAA,KAAK,GAAGjT,CAAC,IAAIoM,CAAC,GAAG6G,KAAR,CAAT;EACD;;EACD,gBAAIR,CAAC,GAAG,CAACM,EAAE,GAAGH,EAAN,KAAaG,EAAE,GAAGH,EAAlB,IAAwBK,KAAhC;EACA,gBAAIC,CAAC,GAAGH,EAAE,GAAGC,EAAb;;EACA,iBAAK,IAAI3a,CAAC,GAAGoM,CAAb,EAAgBpM,CAAC,GAAG+M,CAAC,GAAG,CAAxB,EAA2B/M,CAAC,EAA5B,EAAgC;EAC9B,kBAAIoX,CAAC,GAAGa,UAAU,CAACmC,CAAD,EAAIS,CAAJ,CAAlB;EACA,kBAAIzD,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG3b,MAAM,CAACwe,SAAX;EACb,kBAAII,EAAE,GAAGD,CAAC,GAAGhD,CAAb;EACA,kBAAIkD,EAAE,GAAGO,CAAC,GAAGzD,CAAb;;EACA,kBAAIpX,CAAC,KAAKoM,CAAV,EAAa;EACXrL,gBAAAA,CAAC,CAACf,CAAC,GAAG,CAAL,CAAD,GAAWoX,CAAX;EACD;;EACDgD,cAAAA,CAAC,GAAGC,EAAE,GAAGvK,CAAC,CAAC9P,CAAD,CAAN,GAAYsa,EAAE,GAAGvZ,CAAC,CAACf,CAAD,CAAtB;EACAe,cAAAA,CAAC,CAACf,CAAD,CAAD,GAAOqa,EAAE,GAAGtZ,CAAC,CAACf,CAAD,CAAN,GAAYsa,EAAE,GAAGxK,CAAC,CAAC9P,CAAD,CAAzB;EACA6a,cAAAA,CAAC,GAAGP,EAAE,GAAGxK,CAAC,CAAC9P,CAAC,GAAG,CAAL,CAAV;EACA8P,cAAAA,CAAC,CAAC9P,CAAC,GAAG,CAAL,CAAD,GAAWqa,EAAE,GAAGvK,CAAC,CAAC9P,CAAC,GAAG,CAAL,CAAjB;;EACA,kBAAIgZ,KAAJ,EAAW;EACT,qBAAK,IAAInd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgR,CAApB,EAAuBhR,CAAC,EAAxB,EAA4B;EAC1Bub,kBAAAA,CAAC,GAAGiD,EAAE,GAAGf,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAL,GAAmBsa,EAAE,GAAGhB,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAC,GAAG,CAAb,CAA5B;EACAsZ,kBAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASmE,CAAC,GAAG,CAAb,EAAgB,CAACsa,EAAD,GAAMhB,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAN,GAAoBqa,EAAE,GAAGf,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAC,GAAG,CAAb,CAAzC;EACAsZ,kBAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYoX,CAAZ;EACD;EACF;;EACDA,cAAAA,CAAC,GAAGa,UAAU,CAACmC,CAAD,EAAIS,CAAJ,CAAd;EACA,kBAAIzD,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAG3b,MAAM,CAACwe,SAAX;EACbI,cAAAA,EAAE,GAAGD,CAAC,GAAGhD,CAAT;EACAkD,cAAAA,EAAE,GAAGO,CAAC,GAAGzD,CAAT;EACAtH,cAAAA,CAAC,CAAC9P,CAAD,CAAD,GAAOoX,CAAP;EACAgD,cAAAA,CAAC,GAAGC,EAAE,GAAGtZ,CAAC,CAACf,CAAD,CAAN,GAAYsa,EAAE,GAAGxK,CAAC,CAAC9P,CAAC,GAAG,CAAL,CAAtB;EACA8P,cAAAA,CAAC,CAAC9P,CAAC,GAAG,CAAL,CAAD,GAAW,CAACsa,EAAD,GAAMvZ,CAAC,CAACf,CAAD,CAAP,GAAaqa,EAAE,GAAGvK,CAAC,CAAC9P,CAAC,GAAG,CAAL,CAA9B;EACA6a,cAAAA,CAAC,GAAGP,EAAE,GAAGvZ,CAAC,CAACf,CAAC,GAAG,CAAL,CAAV;EACAe,cAAAA,CAAC,CAACf,CAAC,GAAG,CAAL,CAAD,GAAWqa,EAAE,GAAGtZ,CAAC,CAACf,CAAC,GAAG,CAAL,CAAjB;;EACA,kBAAI8Y,KAAK,IAAI9Y,CAAC,GAAG4M,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAI/Q,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bub,kBAAAA,CAAC,GAAGiD,EAAE,GAAGhB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAL,GAAmBsa,EAAE,GAAGjB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAC,GAAG,CAAb,CAA5B;EACAqZ,kBAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASmE,CAAC,GAAG,CAAb,EAAgB,CAACsa,EAAD,GAAMjB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,CAAN,GAAoBqa,EAAE,GAAGhB,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASmE,CAAC,GAAG,CAAb,CAAzC;EACAqZ,kBAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYoX,CAAZ;EACD;EACF;EACF;;EACDrW,YAAAA,CAAC,CAACgM,CAAC,GAAG,CAAL,CAAD,GAAWqN,CAAX;EAEA;EACD;;EACD,aAAK,CAAL;EAAQ;EACN,gBAAItK,CAAC,CAAC1D,CAAD,CAAD,IAAQ,CAAZ,EAAe;EACb0D,cAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO0D,CAAC,CAAC1D,CAAD,CAAD,GAAO,CAAP,GAAW,CAAC0D,CAAC,CAAC1D,CAAD,CAAb,GAAmB,CAA1B;;EACA,kBAAI4M,KAAJ,EAAW;EACT,qBAAK,IAAInd,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAI+d,EAArB,EAAyB/d,CAAC,EAA1B,EAA8B;EAC5Byd,kBAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAY,CAACkN,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAAb;EACD;EACF;EACF;;EACD,mBAAOA,CAAC,GAAGwN,EAAX,EAAe;EACb,kBAAI9J,CAAC,CAAC1D,CAAD,CAAD,IAAQ0D,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAb,EAAsB;EACpB;EACD;;EACD,kBAAIgL,CAAC,GAAGtH,CAAC,CAAC1D,CAAD,CAAT;EACA0D,cAAAA,CAAC,CAAC1D,CAAD,CAAD,GAAO0D,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAR;EACA0D,cAAAA,CAAC,CAAC1D,CAAC,GAAG,CAAL,CAAD,GAAWgL,CAAX;;EACA,kBAAI4B,KAAK,IAAI5M,CAAC,GAAGS,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAIhR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgR,CAApB,EAAuBhR,CAAC,EAAxB,EAA4B;EAC1Bub,kBAAAA,CAAC,GAAGkC,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAC,GAAG,CAAb,CAAJ;EACAkN,kBAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASuQ,CAAC,GAAG,CAAb,EAAgBkN,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAAhB;EACAkN,kBAAAA,CAAC,CAAC/X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAYgL,CAAZ;EACD;EACF;;EACD,kBAAI0B,KAAK,IAAI1M,CAAC,GAAGQ,CAAC,GAAG,CAArB,EAAwB;EACtB,qBAAK,IAAI/Q,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+Q,CAApB,EAAuB/Q,CAAC,EAAxB,EAA4B;EAC1Bub,kBAAAA,CAAC,GAAGiC,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAC,GAAG,CAAb,CAAJ;EACAiN,kBAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASuQ,CAAC,GAAG,CAAb,EAAgBiN,CAAC,CAAClZ,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,CAAhB;EACAiN,kBAAAA,CAAC,CAAC9X,GAAF,CAAM1F,CAAN,EAASuQ,CAAT,EAAYgL,CAAZ;EACD;EACF;;EACDhL,cAAAA,CAAC;EACF;EAEDW,YAAAA,CAAC;EACD;EACD;EACD;EAjJF;EAmJD;;EAED,QAAIkM,OAAJ,EAAa;EACX,UAAIvM,GAAG,GAAG4M,CAAV;EACAA,MAAAA,CAAC,GAAGD,CAAJ;EACAA,MAAAA,CAAC,GAAG3M,GAAJ;EACD;;EAED,SAAKE,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACA,SAAKiD,CAAL,GAASA,CAAT;EACA,SAAKuJ,CAAL,GAASA,CAAT;EACA,SAAKC,CAAL,GAASA,CAAT;EACD;;EAED5B,EAAAA,KAAK,CAACla,KAAD,EAAQ;EACX,QAAIsd,CAAC,GAAGtd,KAAR;EACA,QAAIuD,CAAC,GAAG,KAAKga,SAAb;EACA,QAAIC,KAAK,GAAG,KAAKlL,CAAL,CAAO7U,MAAnB;EACA,QAAIggB,EAAE,GAAG9Z,MAAM,CAACsJ,KAAP,CAAauQ,KAAb,EAAoBA,KAApB,CAAT;;EAEA,SAAK,IAAInf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmf,KAApB,EAA2Bnf,CAAC,EAA5B,EAAgC;EAC9B,UAAIoC,IAAI,CAACuG,GAAL,CAAS,KAAKsL,CAAL,CAAOjU,CAAP,CAAT,KAAuBkF,CAA3B,EAA8B;EAC5Bka,QAAAA,EAAE,CAAC1Z,GAAH,CAAO1F,CAAP,EAAUA,CAAV,EAAa,CAAb;EACD,OAFD,MAEO;EACLof,QAAAA,EAAE,CAAC1Z,GAAH,CAAO1F,CAAP,EAAUA,CAAV,EAAa,IAAI,KAAKiU,CAAL,CAAOjU,CAAP,CAAjB;EACD;EACF;;EAED,QAAIwd,CAAC,GAAG,KAAKA,CAAb;EACA,QAAIC,CAAC,GAAG,KAAK4B,oBAAb;EAEA,QAAIC,EAAE,GAAG7B,CAAC,CAAC5J,IAAF,CAAOuL,EAAP,CAAT;EACA,QAAIG,KAAK,GAAG9B,CAAC,CAAC5Z,IAAd;EACA,QAAI2b,KAAK,GAAGhC,CAAC,CAAC3Z,IAAd;EACA,QAAI4b,GAAG,GAAGna,MAAM,CAACsJ,KAAP,CAAa2Q,KAAb,EAAoBC,KAApB,CAAV;;EAEA,SAAK,IAAIxf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuf,KAApB,EAA2Bvf,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqb,KAApB,EAA2Brb,CAAC,EAA5B,EAAgC;EAC9B,YAAIuI,GAAG,GAAG,CAAV;;EACA,aAAK,IAAI6D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4O,KAApB,EAA2B5O,CAAC,EAA5B,EAAgC;EAC9B7D,UAAAA,GAAG,IAAI4S,EAAE,CAAChb,GAAH,CAAOtE,CAAP,EAAUuQ,CAAV,IAAeiN,CAAC,CAAClZ,GAAF,CAAMH,CAAN,EAASoM,CAAT,CAAtB;EACD;;EACDkP,QAAAA,GAAG,CAAC/Z,GAAJ,CAAQ1F,CAAR,EAAWmE,CAAX,EAAcuI,GAAd;EACD;EACF;;EAED,WAAO+S,GAAG,CAAC5L,IAAJ,CAASoL,CAAT,CAAP;EACD;;EAEDS,EAAAA,gBAAgB,CAAC/d,KAAD,EAAQ;EACtB,WAAO,KAAKka,KAAL,CAAWvW,MAAM,CAAC6J,IAAP,CAAYxN,KAAZ,CAAX,CAAP;EACD;;EAEDge,EAAAA,OAAO,GAAG;EACR,QAAIlC,CAAC,GAAG,KAAKA,CAAb;EACA,QAAIvY,CAAC,GAAG,KAAKga,SAAb;EACA,QAAIK,KAAK,GAAG9B,CAAC,CAAC5Z,IAAd;EACA,QAAI+b,KAAK,GAAGnC,CAAC,CAAC3Z,OAAd;EACA,QAAIiY,CAAC,GAAG,IAAIzW,MAAJ,CAAWia,KAAX,EAAkB,KAAKtL,CAAL,CAAO7U,MAAzB,CAAR;;EAEA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuf,KAApB,EAA2Bvf,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyb,KAApB,EAA2Bzb,CAAC,EAA5B,EAAgC;EAC9B,YAAI/B,IAAI,CAACuG,GAAL,CAAS,KAAKsL,CAAL,CAAO9P,CAAP,CAAT,IAAsBe,CAA1B,EAA6B;EAC3B6W,UAAAA,CAAC,CAACrW,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYsZ,CAAC,CAACnZ,GAAF,CAAMtE,CAAN,EAASmE,CAAT,IAAc,KAAK8P,CAAL,CAAO9P,CAAP,CAA1B;EACD;EACF;EACF;;EAED,QAAIqZ,CAAC,GAAG,KAAKA,CAAb;EAEA,QAAIgC,KAAK,GAAGhC,CAAC,CAAC3Z,IAAd;EACA,QAAIgc,KAAK,GAAGrC,CAAC,CAAC1Z,OAAd;EACA,QAAImb,CAAC,GAAG,IAAI3Z,MAAJ,CAAWia,KAAX,EAAkBC,KAAlB,CAAR;;EAEA,SAAK,IAAIxf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuf,KAApB,EAA2Bvf,CAAC,EAA5B,EAAgC;EAC9B,WAAK,IAAImE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqb,KAApB,EAA2Brb,CAAC,EAA5B,EAAgC;EAC9B,YAAIuI,GAAG,GAAG,CAAV;;EACA,aAAK,IAAI6D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsP,KAApB,EAA2BtP,CAAC,EAA5B,EAAgC;EAC9B7D,UAAAA,GAAG,IAAIqP,CAAC,CAACzX,GAAF,CAAMtE,CAAN,EAASuQ,CAAT,IAAciN,CAAC,CAAClZ,GAAF,CAAMH,CAAN,EAASoM,CAAT,CAArB;EACD;;EACD0O,QAAAA,CAAC,CAACvZ,GAAF,CAAM1F,CAAN,EAASmE,CAAT,EAAYuI,GAAZ;EACD;EACF;;EAED,WAAOuS,CAAP;EACD;;EAED,MAAIa,SAAJ,GAAgB;EACd,WAAO,KAAK7L,CAAL,CAAO,CAAP,IAAY,KAAKA,CAAL,CAAO7R,IAAI,CAACE,GAAL,CAAS,KAAKyO,CAAd,EAAiB,KAAKC,CAAtB,IAA2B,CAAlC,CAAnB;EACD;;EAED,MAAI+O,KAAJ,GAAY;EACV,WAAO,KAAK9L,CAAL,CAAO,CAAP,CAAP;EACD;;EAED,MAAI+L,IAAJ,GAAW;EACT,QAAIC,GAAG,GAAG7d,IAAI,CAACpD,GAAL,CAAS,KAAK+R,CAAd,EAAiB,KAAKC,CAAtB,IAA2B,KAAKiD,CAAL,CAAO,CAAP,CAA3B,GAAuCrU,MAAM,CAACqe,OAAxD;EACA,QAAItS,CAAC,GAAG,CAAR;EACA,QAAIsI,CAAC,GAAG,KAAKA,CAAb;;EACA,SAAK,IAAIjU,CAAC,GAAG,CAAR,EAAWkgB,EAAE,GAAGjM,CAAC,CAAC7U,MAAvB,EAA+BY,CAAC,GAAGkgB,EAAnC,EAAuClgB,CAAC,EAAxC,EAA4C;EAC1C,UAAIiU,CAAC,CAACjU,CAAD,CAAD,GAAOigB,GAAX,EAAgB;EACdtU,QAAAA,CAAC;EACF;EACF;;EACD,WAAOA,CAAP;EACD;;EAED,MAAI0O,QAAJ,GAAe;EACb,WAAOjZ,KAAK,CAACwK,IAAN,CAAW,KAAKqI,CAAhB,CAAP;EACD;;EAED,MAAIiL,SAAJ,GAAgB;EACd,WAAQtf,MAAM,CAACqe,OAAP,GAAiB,CAAlB,GAAuB7b,IAAI,CAACpD,GAAL,CAAS,KAAK+R,CAAd,EAAiB,KAAKC,CAAtB,CAAvB,GAAkD,KAAKiD,CAAL,CAAO,CAAP,CAAzD;EACD;;EAED,MAAIkM,mBAAJ,GAA0B;EACxB,WAAO,KAAK3C,CAAZ;EACD;;EAED,MAAI6B,oBAAJ,GAA2B;EACzB,WAAO,KAAK5B,CAAZ;EACD;;EAED,MAAI2C,cAAJ,GAAqB;EACnB,WAAO9a,MAAM,CAAC6J,IAAP,CAAY,KAAK8E,CAAjB,CAAP;EACD;;EAxgB6C;;ECCzC,SAAS0L,OAAT,CAAiBrc,MAAjB,EAAyB+c,MAAM,GAAG,KAAlC,EAAyC;EAC9C/c,EAAAA,MAAM,GAAG4X,eAAe,CAACvV,WAAhB,CAA4BrC,MAA5B,CAAT;;EACA,MAAI+c,MAAJ,EAAY;EACV,WAAO,IAAIxD,0BAAJ,CAA+BvZ,MAA/B,EAAuCqc,OAAvC,EAAP;EACD,GAFD,MAEO;EACL,WAAO9D,KAAK,CAACvY,MAAD,EAASgC,MAAM,CAAC4J,GAAP,CAAW5L,MAAM,CAACO,IAAlB,CAAT,CAAZ;EACD;EACF;EAEM,SAASgY,KAAT,CAAeyE,YAAf,EAA6BC,aAA7B,EAA4CF,MAAM,GAAG,KAArD,EAA4D;EACjEC,EAAAA,YAAY,GAAGpF,eAAe,CAACvV,WAAhB,CAA4B2a,YAA5B,CAAf;EACAC,EAAAA,aAAa,GAAGrF,eAAe,CAACvV,WAAhB,CAA4B4a,aAA5B,CAAhB;;EACA,MAAIF,MAAJ,EAAY;EACV,WAAO,IAAIxD,0BAAJ,CAA+ByD,YAA/B,EAA6CzE,KAA7C,CAAmD0E,aAAnD,CAAP;EACD,GAFD,MAEO;EACL,WAAOD,YAAY,CAACrQ,QAAb,KACH,IAAIkL,eAAJ,CAAoBmF,YAApB,EAAkCzE,KAAlC,CAAwC0E,aAAxC,CADG,GAEH,IAAIlE,eAAJ,CAAoBiE,YAApB,EAAkCzE,KAAlC,CAAwC0E,aAAxC,CAFJ;EAGD;EACF;;ECxBD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEe,SAASC,gBAAT,CACbtgB,IADa,EAEbugB,aAFa,EAGbC,MAHa,EAIb3f,kBAJa,EAKb4f,aALa,EAMb7f,iBANa,EAOb;EACA,QAAM8f,QAAQ,GAAGF,MAAM,CAACthB,MAAxB;EACA,QAAMkC,QAAQ,GAAGpB,IAAI,CAACe,CAAL,CAAO7B,MAAxB;EACA,MAAIyhB,GAAG,GAAGvb,MAAM,CAACsJ,KAAP,CAAagS,QAAb,EAAuBtf,QAAvB,CAAV;EAEA,MAAIqY,QAAQ,GAAG,CAAf;;EACA,OAAK,IAAImH,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGF,QAA5B,EAAsCE,KAAK,EAA3C,EAA+C;EAC7C,QAAI/f,kBAAkB,CAAC+f,KAAD,CAAlB,KAA8B,CAAlC,EAAqC;EACrC,QAAIC,KAAK,GAAGhgB,kBAAkB,CAAC+f,KAAD,CAA9B;EACA,QAAIE,SAAS,GAAGN,MAAM,CAACvb,KAAP,EAAhB;EACA6b,IAAAA,SAAS,CAACF,KAAD,CAAT,IAAoBC,KAApB;EACA,QAAIE,SAAS,GAAGN,aAAa,CAACK,SAAD,CAA7B;;EACA,QAAI,CAAClgB,iBAAL,EAAwB;EACtB,WAAK,IAAIogB,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG5f,QAA5B,EAAsC4f,KAAK,EAA3C,EAA+C;EAC7CL,QAAAA,GAAG,CAACnb,GAAJ,CACEiU,QADF,EAEEuH,KAFF,EAGE,CAACT,aAAa,CAACS,KAAD,CAAb,GAAuBD,SAAS,CAAC/gB,IAAI,CAACe,CAAL,CAAOigB,KAAP,CAAD,CAAjC,IAAoDH,KAHtD;EAKD;EACF,KARD,MAQO;EACLC,MAAAA,SAAS,GAAGN,MAAM,CAACvb,KAAP,EAAZ;EACA6b,MAAAA,SAAS,CAACF,KAAD,CAAT,IAAoBC,KAApB;EACAA,MAAAA,KAAK,IAAI,CAAT;EACA,UAAII,UAAU,GAAGR,aAAa,CAACK,SAAD,CAA9B;;EACA,WAAK,IAAIE,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG5f,QAA5B,EAAsC4f,KAAK,EAA3C,EAA+C;EAC7CL,QAAAA,GAAG,CAACnb,GAAJ,CACEiU,QADF,EAEEuH,KAFF,EAGE,CAACC,UAAU,CAACjhB,IAAI,CAACe,CAAL,CAAOigB,KAAP,CAAD,CAAV,GAA4BD,SAAS,CAAC/gB,IAAI,CAACe,CAAL,CAAOigB,KAAP,CAAD,CAAtC,IAAyDH,KAH3D;EAKD;EACF;;EACDpH,IAAAA,QAAQ;EACT;;EAED,SAAOkH,GAAP;EACD;;ECrDD;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASO,cAAT,CAAwBlhB,IAAxB,EAA8BugB,aAA9B,EAA6C;EAC3C,QAAM1P,CAAC,GAAG7Q,IAAI,CAACe,CAAL,CAAO7B,MAAjB;EAEA,MAAIyhB,GAAG,GAAG,IAAIvb,MAAJ,CAAWyL,CAAX,EAAc,CAAd,CAAV;;EAEA,OAAK,IAAImQ,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGnQ,CAA5B,EAA+BmQ,KAAK,EAApC,EAAwC;EACtCL,IAAAA,GAAG,CAACnb,GAAJ,CAAQwb,KAAR,EAAe,CAAf,EAAkBhhB,IAAI,CAACgB,CAAL,CAAOggB,KAAP,IAAgBT,aAAa,CAACS,KAAD,CAA/C;EACD;;EACD,SAAOL,GAAP;EACD;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACe,SAASQ,IAAT,CACbnhB,IADa,EAEbwgB,MAFa,EAGbjgB,OAHa,EAIbM,kBAJa,EAKbZ,qBALa,EAMbW,iBANa,EAObN,OAPa,EAQb;EACA,MAAImB,KAAK,GAAGlB,OAAZ;EACA,MAAI6Z,QAAQ,GAAGhV,MAAM,CAAC4J,GAAP,CAAWwR,MAAM,CAACthB,MAAlB,EAA0BshB,MAAM,CAACthB,MAAjC,EAAyCuC,KAAzC,CAAf;EAEA,QAAMQ,IAAI,GAAGhC,qBAAqB,CAACugB,MAAD,CAAlC;EAEA,MAAID,aAAa,GAAG,IAAIzM,YAAJ,CAAiB9T,IAAI,CAACe,CAAL,CAAO7B,MAAxB,CAApB;;EACA,OAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGE,IAAI,CAACe,CAAL,CAAO7B,MAA3B,EAAmCY,CAAC,EAApC,EAAwC;EACtCygB,IAAAA,aAAa,CAACzgB,CAAD,CAAb,GAAmBmC,IAAI,CAACjC,IAAI,CAACe,CAAL,CAAOjB,CAAP,CAAD,CAAvB;EACD;;EAED,MAAIshB,YAAY,GAAGd,gBAAgB,CACjCtgB,IADiC,EAEjCugB,aAFiC,EAGjCC,MAHiC,EAIjC3f,kBAJiC,EAKjCZ,qBALiC,EAMjCW,iBANiC,CAAnC;EAQA,MAAIygB,aAAa,GAAGH,cAAc,CAAClhB,IAAD,EAAOugB,aAAP,CAAlC;EAEA,MAAIe,aAAa,GAAG7B,OAAO,CACzBrF,QAAQ,CAAC/U,GAAT,CACE+b,YAAY,CAACzN,IAAb,CACEyN,YAAY,CAACrI,SAAb,GAAyBlL,KAAzB,CAA+B,KAA/B,EAAsC;EAAEA,IAAAA,KAAK,EAAEvN;EAAT,GAAtC,CADF,CADF,CADyB,CAA3B;EAQA,MAAIihB,2BAA2B,GAAGH,YAAY,CAACzN,IAAb,CAChC0N,aAAa,CAACxT,KAAd,CAAoB,KAApB,EAA2B;EAAEA,IAAAA,KAAK,EAAEvN;EAAT,GAA3B,CADgC,CAAlC;EAIA,MAAIkhB,aAAa,GAAGF,aAAa,CAAC3N,IAAd,CAAmB4N,2BAAnB,CAApB;EAEA,SAAO;EACLC,IAAAA,aADK;EAELD,IAAAA;EAFK,GAAP;EAID;;EC5ED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACe,SAASE,kBAAT,CACbzhB,IADa,EAEbC,qBAFa,EAGbjB,OAAO,GAAG,EAHG,EAIb;EACA,MAAI;EACF0C,IAAAA,YADE;EAEFvB,IAAAA,SAFE;EAGFC,IAAAA,SAHE;EAIFa,IAAAA,UAJE;EAKFa,IAAAA,YALE;EAMFvB,IAAAA,OANE;EAOFC,IAAAA,aAPE;EAQFC,IAAAA,eARE;EASFC,IAAAA,aATE;EAUFC,IAAAA,cAVE;EAWFC,IAAAA,iBAXE;EAYFC,IAAAA,kBAZE;EAaFC,IAAAA;EAbE,MAcAf,YAAY,CAACC,IAAD,EAAOC,qBAAP,EAA8BjB,OAA9B,CAdhB;EAgBA,MAAIgD,KAAK,GAAGD,gBAAgB,CAC1B/B,IAD0B,EAE1BiB,UAF0B,EAG1BhB,qBAH0B,EAI1B6B,YAJ0B,CAA5B;EAOA,MAAI4f,SAAS,GAAG1f,KAAK,IAAIrB,cAAzB;EAEA,MAAIghB,SAAS,GAAG,CAAhB;;EACA,SAAOA,SAAS,GAAGjhB,aAAZ,IAA6B,CAACghB,SAArC,EAAgDC,SAAS,EAAzD,EAA6D;EAC3D,QAAIC,aAAa,GAAG5f,KAApB;EAEA,QAAI;EAAEwf,MAAAA,aAAF;EAAiBD,MAAAA;EAAjB,QAAiDJ,IAAI,CACvDnhB,IADuD,EAEvDiB,UAFuD,EAGvDV,OAHuD,EAIvDM,kBAJuD,EAKvDZ,qBALuD,EAMvDW,iBANuD,EAOvDkB,YAPuD,CAAzD;;EAUA,SAAK,IAAIuO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpP,UAAU,CAAC/B,MAA/B,EAAuCmR,CAAC,EAAxC,EAA4C;EAC1CpP,MAAAA,UAAU,CAACoP,CAAD,CAAV,GAAgBnO,IAAI,CAACE,GAAL,CACdF,IAAI,CAACpD,GAAL,CAASqB,SAAS,CAACkQ,CAAD,CAAlB,EAAuBpP,UAAU,CAACoP,CAAD,CAAV,GAAgBmR,aAAa,CAACpd,GAAd,CAAkBiM,CAAlB,EAAqB,CAArB,CAAvC,CADc,EAEdjQ,SAAS,CAACiQ,CAAD,CAFK,CAAhB;EAID;;EAEDrO,IAAAA,KAAK,GAAGD,gBAAgB,CACtB/B,IADsB,EAEtBiB,UAFsB,EAGtBhB,qBAHsB,EAItB6B,YAJsB,CAAxB;EAOA,QAAIqc,KAAK,CAACnc,KAAD,CAAT,EAAkB;EAElB,QAAI6f,iBAAiB,GACnB,CAACD,aAAa,GAAG5f,KAAjB,IACAwf,aAAa,CACVzI,SADH,GAEGpF,IAFH,CAEQ6N,aAAa,CAACtb,IAAd,CAAmB3F,OAAnB,EAA4B8E,GAA5B,CAAgCkc,2BAAhC,CAFR,EAGGnd,GAHH,CAGO,CAHP,EAGU,CAHV,CAFF;;EAOA,QAAIyd,iBAAiB,GAAG/gB,oBAAxB,EAA8C;EAC5CP,MAAAA,OAAO,GAAG2B,IAAI,CAACpD,GAAL,CAASyB,OAAO,GAAGE,eAAnB,EAAoC,IAApC,CAAV;EACD,KAFD,MAEO;EACLuB,MAAAA,KAAK,GAAG4f,aAAR;EACArhB,MAAAA,OAAO,GAAG2B,IAAI,CAACE,GAAL,CAAS7B,OAAO,GAAGC,aAAnB,EAAkC,GAAlC,CAAV;EACD;;EAED,QAAIkB,YAAY,EAAhB,EAAoB;EAClB,YAAM,IAAI9B,KAAJ,CACH,iCAAgCZ,OAAO,CAACkB,OAAQ,UAD7C,CAAN;EAGD;;EAEDwhB,IAAAA,SAAS,GAAG1f,KAAK,IAAIrB,cAArB;EACD;;EAED,SAAO;EACLmhB,IAAAA,eAAe,EAAE7gB,UADZ;EAEL8gB,IAAAA,cAAc,EAAE/f,KAFX;EAGLggB,IAAAA,UAAU,EAAEL;EAHP,GAAP;EAKD;;EC/GD,MAAMM,mBAAmB,GAAG,CAA5B;EAEO,SAASC,YAAT,CAAsBC,mBAAmB,GAAG,EAA5C,EAAgD;EACrD,MAAI;EAAEC,IAAAA,IAAF;EAAQpjB,IAAAA;EAAR,MAAoBmjB,mBAAxB;EACAC,EAAAA,IAAI,GAAGC,OAAO,CAACD,IAAD,CAAd;;EACA,UAAQA,IAAR;EACE,SAAKH,mBAAL;EACE,aAAO;EACLK,QAAAA,SAAS,EAAEC,kBADN;EAELJ,QAAAA,mBAAmB,EAAEpiB,cAAY,CAACqiB,IAAD,EAAOpjB,OAAP;EAF5B,OAAP;;EAIF;EACE,YAAM,IAAIY,KAAJ,CAAW,wBAAX,CAAN;EAPJ;EASD;;EAED,SAASG,cAAT,CAAsBqiB,IAAtB,EAA4BpjB,OAAO,GAAG,EAAtC,EAA0C;EACxC;EACA,UAAQojB,IAAR;EACE,SAAKH,mBAAL;EACE,aAAOzjB,MAAM,CAACgkB,MAAP,CAAc,EAAd,EAAkBC,SAAlB,EAA6BzjB,OAA7B,CAAP;EAFJ;EAID;;EAED,SAASqjB,OAAT,CAAiBD,IAAjB,EAAuB;EACrB,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B,OAAOA,IAAP;;EAC9B,UAAQA,IAAI,CAACM,WAAL,GAAmBC,OAAnB,CAA2B,SAA3B,EAAsC,EAAtC,CAAR;EACE,SAAK,IAAL;EACA,SAAK,oBAAL;EACE,aAAOV,mBAAP;;EACF;EACE,YAAM,IAAIriB,KAAJ,CAAW,wBAAX,CAAN;EALJ;EAOD;;EAED,MAAM6iB,SAAS,GAAG;EAChBliB,EAAAA,OAAO,EAAE,GADO;EAEhBG,EAAAA,aAAa,EAAE,GAFC;EAGhBC,EAAAA,cAAc,EAAE;EAHA,CAAlB;;ECrCO,MAAMiiB,mBAAmB,GAAG,CAAC,CAAD,GAAK1gB,IAAI,CAAC2gB,GAAtC;EACA,MAAMC,gBAAgB,GAAG5gB,IAAI,CAAC+H,IAAL,CAAU/H,IAAI,CAAC6gB,EAAL,GAAU7gB,IAAI,CAAC2gB,GAAzB,CAAzB;EACA,MAAMG,UAAU,GAAG9gB,IAAI,CAAC+H,IAAL,CAAU,CAAV,CAAnB;EACA,MAAMgZ,SAAS,GAAG/gB,IAAI,CAAC+H,IAAL,CAAU,IAAI/H,IAAI,CAAC2gB,GAAnB,CAAlB;EACA,MAAMK,mBAAmB,GAAGhhB,IAAI,CAAC+H,IAAL,CAAU,IAAI/H,IAAI,CAAC2gB,GAAnB,IAA0B,CAAtD;;ECJP;EACA;EAEA;EAEe,SAASM,MAAT,CAAgBpiB,CAAhB,EAAmB;EAChC,MAAIgX,CAAC,GAAG,KAAR;EACA,MAAIhX,CAAC,KAAK,CAAV,EAAa,OAAO,CAAP;EACb,MAAIqiB,aAAa,GAAGlhB,IAAI,CAACuH,GAAL,CAAS,IAAI1I,CAAC,GAAGA,CAAjB,CAApB;EACA,MAAIsiB,aAAa,GAAGD,aAAa,GAAG,CAAhB,GAAoB,KAAKlhB,IAAI,CAAC6gB,EAAL,GAAUhL,CAAf,CAAxC;EACA,MAAIuL,SAAS,GAAGphB,IAAI,CAAC+H,IAAL,CAAUoZ,aAAa,IAAI,CAAjB,GAAqBD,aAAa,GAAGrL,CAA/C,CAAhB;EACA,MAAIwL,UAAU,GAAGrhB,IAAI,CAAC+H,IAAL,CAAUqZ,SAAS,GAAGD,aAAtB,CAAjB;EACA,SAAOE,UAAU,IAAIxiB,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAY,CAAC,CAAjB,CAAjB;EACD;;ECNM,MAAMyiB,QAAN,CAAe;EACpB;EACF;EACA;EACA;EACA;EACA;EACEhgB,EAAAA,WAAW,CAACxE,OAAO,GAAG,EAAX,EAAe;EACxB,SAAKykB,IAAL,GAAYzkB,OAAO,CAAC0kB,EAAR,GACRF,QAAQ,CAACG,WAAT,CAAqB,IAAI3kB,OAAO,CAAC0kB,EAAjC,CADQ,GAER1kB,OAAO,CAACykB,IAAR,GACAzkB,OAAO,CAACykB,IADR,GAEA,GAJJ;EAKA,SAAKG,MAAL,GACE5kB,OAAO,CAAC4kB,MAAR,KAAmBzkB,SAAnB,GACI+C,IAAI,CAAC+H,IAAL,CAAU,CAAC2Y,mBAAD,GAAuB1gB,IAAI,CAAC6gB,EAAtC,IAA4C,KAAKU,IADrD,GAEIzkB,OAAO,CAAC4kB,MAHd;EAID;EACD;EACF;EACA;EACA;EACA;EACA;EACA;;;EAEEC,EAAAA,OAAO,CAAC7kB,OAAO,GAAG,EAAX,EAAe;EACpB,QAAI;EAAEE,MAAAA,MAAF;EAAU4D,MAAAA,MAAM,GAAG,KAAKghB,SAAL;EAAnB,QAAwC9kB,OAA5C;;EAEA,QAAI,CAACE,MAAL,EAAa;EACXA,MAAAA,MAAM,GAAGgD,IAAI,CAACE,GAAL,CAASF,IAAI,CAAC+G,IAAL,CAAU,KAAKwa,IAAL,GAAY3gB,MAAtB,CAAT,EAAwCZ,IAAI,CAACC,GAAL,CAAS,CAAT,EAAY,EAAZ,IAAkB,CAA1D,CAAT;EACA,UAAIjD,MAAM,GAAG,CAAT,KAAe,CAAnB,EAAsBA,MAAM;EAC7B;;EAED,UAAM6a,MAAM,GAAG,CAAC7a,MAAM,GAAG,CAAV,IAAe,CAA9B;EACA,UAAMc,IAAI,GAAG,IAAI8T,YAAJ,CAAiB5U,MAAjB,CAAb;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIia,MAArB,EAA6Bja,CAAC,EAA9B,EAAkC;EAChCE,MAAAA,IAAI,CAACF,CAAD,CAAJ,GAAU,KAAKikB,GAAL,CAASjkB,CAAC,GAAGia,MAAb,IAAuB,KAAK6J,MAAtC;EACA5jB,MAAAA,IAAI,CAACd,MAAM,GAAG,CAAT,GAAaY,CAAd,CAAJ,GAAuBE,IAAI,CAACF,CAAD,CAA3B;EACD;;EAED,WAAOE,IAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACE+jB,EAAAA,GAAG,CAAChjB,CAAD,EAAI;EACL,WAAOyiB,QAAQ,CAACO,GAAT,CAAahjB,CAAb,EAAgB,KAAK0iB,IAArB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEK,EAAAA,SAAS,CAACE,IAAI,GAAG,MAAR,EAAgB;EACvB,WAAOR,QAAQ,CAACM,SAAT,CAAmBE,IAAnB,CAAP;EACD;EAED;EACF;EACA;EACA;;;EAEEC,EAAAA,OAAO,GAAG;EACR,WAAOT,QAAQ,CAACS,OAAT,CAAiB,KAAKR,IAAtB,EAA4B;EAAEG,MAAAA,MAAM,EAAE,KAAKA;EAAf,KAA5B,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACED,EAAAA,WAAW,CAACO,KAAD,EAAQ;EACjB;EACA,WAAOV,QAAQ,CAACG,WAAT,CAAqBO,KAArB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,WAAW,CAACV,IAAI,GAAG,KAAKA,IAAb,EAAmB;EAC5B,WAAOD,QAAQ,CAACW,WAAT,CAAqBV,IAArB,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACEW,EAAAA,OAAO,CAACX,IAAD,EAAO;EACZ,SAAKA,IAAL,GAAYA,IAAZ;EACD;EAED;EACF;EACA;EACA;;;EACEY,EAAAA,SAAS,CAACT,MAAD,EAAS;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACD;;EA1GmB;EA6GtB;EACA;EACA;EACA;EACA;EACA;;EACAJ,QAAQ,CAACO,GAAT,GAAe,SAASA,GAAT,CAAahjB,CAAb,EAAgB0iB,IAAI,GAAG,GAAvB,EAA4B;EACzC,SAAOvhB,IAAI,CAACmH,GAAL,CAASuZ,mBAAmB,GAAG1gB,IAAI,CAACC,GAAL,CAASpB,CAAC,GAAG0iB,IAAb,EAAmB,CAAnB,CAA/B,CAAP;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;;;EACAD,QAAQ,CAACG,WAAT,GAAuB,SAASA,WAAT,CAAqBO,KAArB,EAA4B;EACjD,SAAOA,KAAK,GAAGjB,SAAf;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;;;EACAO,QAAQ,CAACW,WAAT,GAAuB,SAASA,WAAT,CAAqBV,IAArB,EAA2B;EAChD,SAAOA,IAAI,GAAGR,SAAd;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;;;EAEAO,QAAQ,CAACS,OAAT,GAAmB,SAASA,OAAT,CAAiBR,IAAjB,EAAuBzkB,OAAO,GAAG,EAAjC,EAAqC;EACtD,MAAI;EAAE4kB,IAAAA,MAAM,GAAG;EAAX,MAAiB5kB,OAArB;EACA,SAAQ4kB,MAAM,GAAGd,gBAAT,GAA4BW,IAA7B,GAAqC,CAA5C;EACD,CAHD;EAKA;EACA;EACA;EACA;EACA;;;EACAD,QAAQ,CAACM,SAAT,GAAqB,SAASA,SAAT,CAAmBE,IAAI,GAAG,MAA1B,EAAkC;EACrD,SAAO9hB,IAAI,CAAC+H,IAAL,CAAU,CAAV,IAAekZ,MAAM,CAACa,IAAD,CAA5B;EACD,CAFD;;EClKO,MAAMM,UAAN,CAAiB;EACtB;EACF;EACA;EACA;EACA;EACA;EACE9gB,EAAAA,WAAW,CAACxE,OAAO,GAAG,EAAX,EAAe;EACxB,SAAKykB,IAAL,GAAYzkB,OAAO,CAACykB,IAAR,KAAiBtkB,SAAjB,GAA6B,GAA7B,GAAmCH,OAAO,CAACykB,IAAvD;EACA,SAAKG,MAAL,GACE5kB,OAAO,CAAC4kB,MAAR,KAAmBzkB,SAAnB,GAA+B,IAAI+C,IAAI,CAAC6gB,EAAT,GAAc,KAAKU,IAAlD,GAAyDzkB,OAAO,CAAC4kB,MADnE;EAED;EACD;EACF;EACA;EACA;EACA;EACA;EACA;;;EACEC,EAAAA,OAAO,CAAC7kB,OAAO,GAAG,EAAX,EAAe;EACpB,QAAI;EAAEE,MAAAA,MAAF;EAAU4D,MAAAA,MAAM,GAAG,KAAKghB,SAAL;EAAnB,QAAwC9kB,OAA5C;;EAEA,QAAI,CAACE,MAAL,EAAa;EACXA,MAAAA,MAAM,GAAGgD,IAAI,CAACE,GAAL,CAASF,IAAI,CAAC+G,IAAL,CAAU,KAAKwa,IAAL,GAAY3gB,MAAtB,CAAT,EAAwCZ,IAAI,CAACC,GAAL,CAAS,CAAT,EAAY,EAAZ,IAAkB,CAA1D,CAAT;EACA,UAAIjD,MAAM,GAAG,CAAT,KAAe,CAAnB,EAAsBA,MAAM;EAC7B;;EAED,UAAM6a,MAAM,GAAG,CAAC7a,MAAM,GAAG,CAAV,IAAe,CAA9B;EACA,UAAMc,IAAI,GAAG,IAAI8T,YAAJ,CAAiB5U,MAAjB,CAAb;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIia,MAArB,EAA6Bja,CAAC,EAA9B,EAAkC;EAChCE,MAAAA,IAAI,CAACF,CAAD,CAAJ,GAAU,KAAKikB,GAAL,CAASjkB,CAAC,GAAGia,MAAb,IAAuB,KAAK6J,MAAtC;EACA5jB,MAAAA,IAAI,CAACd,MAAM,GAAG,CAAT,GAAaY,CAAd,CAAJ,GAAuBE,IAAI,CAACF,CAAD,CAA3B;EACD;;EACD,WAAOE,IAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACE+jB,EAAAA,GAAG,CAAChjB,CAAD,EAAI;EACL,WAAOujB,UAAU,CAACP,GAAX,CAAehjB,CAAf,EAAkB,KAAK0iB,IAAvB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EACEK,EAAAA,SAAS,CAACE,IAAI,GAAG,MAAR,EAAgB;EACvB,WAAOM,UAAU,CAACR,SAAX,CAAqBE,IAArB,CAAP;EACD;EAED;EACF;EACA;EACA;;;EAEEC,EAAAA,OAAO,GAAG;EACR,WAAOK,UAAU,CAACL,OAAX,CAAmB,KAAKR,IAAxB,EAA8B;EAAEG,MAAAA,MAAM,EAAE,KAAKA;EAAf,KAA9B,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEO,EAAAA,WAAW,CAACV,IAAI,GAAG,KAAKA,IAAb,EAAmB;EAC5B,WAAOa,UAAU,CAACH,WAAX,CAAuBV,IAAvB,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEE,EAAAA,WAAW,CAACO,KAAD,EAAQ;EACjB,WAAOI,UAAU,CAACX,WAAX,CAAuBO,KAAvB,CAAP;EACD;EACD;EACF;EACA;EACA;;;EACEE,EAAAA,OAAO,CAACX,IAAD,EAAO;EACZ,SAAKA,IAAL,GAAYA,IAAZ;EACD;EAED;EACF;EACA;EACA;;;EACEY,EAAAA,SAAS,CAACT,MAAD,EAAS;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACD;;EAhGqB;EAmGxB;EACA;EACA;EACA;EACA;EACA;;EACAU,UAAU,CAACP,GAAX,GAAiB,SAASA,GAAT,CAAahjB,CAAb,EAAgB0iB,IAAhB,EAAsB;EACrC,QAAMc,UAAU,GAAGd,IAAI,GAAGA,IAA1B;EACA,SAAOc,UAAU,IAAI,IAAIriB,IAAI,CAACC,GAAL,CAASpB,CAAT,EAAY,CAAZ,CAAJ,GAAqBwjB,UAAzB,CAAjB;EACD,CAHD;EAKA;EACA;EACA;EACA;EACA;EACA;;;EACAD,UAAU,CAACH,WAAX,GAAyB,SAASA,WAAT,CAAqBV,IAArB,EAA2B;EAClD,SAAOA,IAAI,GAAGT,UAAd;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;;;EACAsB,UAAU,CAACX,WAAX,GAAyB,SAASA,WAAT,CAAqBO,KAArB,EAA4B;EACnD,SAAOA,KAAK,GAAGlB,UAAf;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACAsB,UAAU,CAACL,OAAX,GAAqB,SAASA,OAAT,CAAiBR,IAAjB,EAAuBzkB,OAAO,GAAG,EAAjC,EAAqC;EACxD,MAAI;EAAE4kB,IAAAA,MAAM,GAAG;EAAX,MAAiB5kB,OAArB;EAEA,SAAQ4kB,MAAM,GAAG1hB,IAAI,CAAC6gB,EAAd,GAAmBU,IAApB,GAA4B,CAAnC;EACD,CAJD;EAMA;EACA;EACA;EACA;EACA;;;EACAa,UAAU,CAACR,SAAX,GAAuB,SAASA,SAAT,CAAmBE,IAAI,GAAG,MAA1B,EAAkC;EACvD,SAAO,IAAI9hB,IAAI,CAACgI,GAAL,CAAShI,IAAI,CAAC6gB,EAAL,IAAWiB,IAAI,GAAG,GAAlB,CAAT,CAAX;EACD,CAFD;;EC7IO,MAAMQ,WAAN,CAAkB;EACvB;EACF;EACA;EACA;EACA;EACA;EAEEhhB,EAAAA,WAAW,CAACxE,OAAO,GAAG,EAAX,EAAe;EACxB,SAAKylB,EAAL,GAAUzlB,OAAO,CAACylB,EAAR,KAAetlB,SAAf,GAA2B,GAA3B,GAAiCH,OAAO,CAACylB,EAAnD;EACA,SAAKhB,IAAL,GAAYzkB,OAAO,CAACykB,IAAR,KAAiBtkB,SAAjB,GAA6B,GAA7B,GAAmCH,OAAO,CAACykB,IAAvD;EACA,SAAKG,MAAL,GACE5kB,OAAO,CAAC4kB,MAAR,KAAmBzkB,SAAnB,GACI,KACE,KAAKslB,EAAL,GAAUviB,IAAI,CAAC+H,IAAL,CAAU,CAAC2Y,mBAAD,GAAuB1gB,IAAI,CAAC6gB,EAAtC,CAAX,GAAwD,KAAKU,IAA7D,GACE,CAAC,IAAI,KAAKgB,EAAV,IAAgB,KAAKhB,IAArB,GAA4BvhB,IAAI,CAAC6gB,EAAlC,GAAwC,CAF1C,CADJ,GAII/jB,OAAO,CAAC4kB,MALd;EAMD;EAED;EACF;EACA;EACA;EACA;EACA;EACA;;;EAEEC,EAAAA,OAAO,CAAC7kB,OAAO,GAAG,EAAX,EAAe;EACpB,QAAI;EAAEE,MAAAA,MAAF;EAAU4D,MAAAA,MAAM,GAAG,KAAKghB,SAAL;EAAnB,QAAwC9kB,OAA5C;;EACA,QAAI,CAACE,MAAL,EAAa;EACXA,MAAAA,MAAM,GAAGgD,IAAI,CAAC+G,IAAL,CAAU,KAAKwa,IAAL,GAAY3gB,MAAtB,CAAT;EACA,UAAI5D,MAAM,GAAG,CAAT,KAAe,CAAnB,EAAsBA,MAAM;EAC7B;;EAED,UAAM6a,MAAM,GAAG,CAAC7a,MAAM,GAAG,CAAV,IAAe,CAA9B;EAEA,QAAIc,IAAI,GAAG,IAAI8T,YAAJ,CAAiB5U,MAAjB,CAAX;;EACA,SAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,IAAIia,MAArB,EAA6Bja,CAAC,EAA9B,EAAkC;EAChCE,MAAAA,IAAI,CAACF,CAAD,CAAJ,GAAU,KAAKikB,GAAL,CAASjkB,CAAC,GAAGia,MAAb,IAAuB,KAAK6J,MAAtC;EACA5jB,MAAAA,IAAI,CAACd,MAAM,GAAG,CAAT,GAAaY,CAAd,CAAJ,GAAuBE,IAAI,CAACF,CAAD,CAA3B;EACD;;EAED,WAAOE,IAAP;EACD;EAED;EACF;EACA;EACA;EACA;;;EAEE+jB,EAAAA,GAAG,CAAChjB,CAAD,EAAI;EACL,WAAOyjB,WAAW,CAACT,GAAZ,CAAgBhjB,CAAhB,EAAmB,KAAK0iB,IAAxB,EAA8B,KAAKgB,EAAnC,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEX,EAAAA,SAAS,CAACE,IAAI,GAAG,MAAR,EAAgBS,EAAE,GAAG,KAAKA,EAA1B,EAA8B;EACrC,WAAOD,WAAW,CAACV,SAAZ,CAAsBE,IAAtB,EAA4BS,EAA5B,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACER,EAAAA,OAAO,GAAG;EACR,WAAOO,WAAW,CAACP,OAAZ,CAAoB,KAAKR,IAAzB,EAA+B;EAAEG,MAAAA,MAAM,EAAE,KAAKA,MAAf;EAAuBa,MAAAA,EAAE,EAAE,KAAKA;EAAhC,KAA/B,CAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACEd,EAAAA,WAAW,CAACO,KAAD,EAAQO,EAAR,EAAY;EACrB,WAAOD,WAAW,CAACb,WAAZ,CAAwBO,KAAxB,EAA+BO,EAA/B,CAAP;EACD;EACD;EACF;EACA;EACA;EACA;EACA;;;EACEN,EAAAA,WAAW,CAACV,IAAI,GAAG,KAAKA,IAAb,EAAmBgB,EAAE,GAAG,KAAKA,EAA7B,EAAiC;EAC1C,WAAOD,WAAW,CAACL,WAAZ,CAAwBV,IAAxB,EAA8BgB,EAA9B,CAAP;EACD;EAED;EACF;EACA;EACA;;;EACEL,EAAAA,OAAO,CAACX,IAAD,EAAO;EACZ,SAAKA,IAAL,GAAYA,IAAZ;EACD;EAED;EACF;EACA;EACA;;;EACEY,EAAAA,SAAS,CAACT,MAAD,EAAS;EAChB,SAAKA,MAAL,GAAcA,MAAd;EACD;EAED;EACF;EACA;EACA;;;EACEc,EAAAA,KAAK,CAACD,EAAD,EAAK;EACR,SAAKA,EAAL,GAAUA,EAAV;EACD;;EAlHsB;EAqHzB;EACA;EACA;EACA;EACA;EACA;EACA;;EACAD,WAAW,CAACT,GAAZ,GAAkB,SAASA,GAAT,CAAahjB,CAAb,EAAgB0iB,IAAhB,EAAsBgB,EAAE,GAAG,GAA3B,EAAgC;EAChD,SAAO,CAAC,IAAIA,EAAL,IAAWH,UAAU,CAACP,GAAX,CAAehjB,CAAf,EAAkB0iB,IAAlB,CAAX,GAAqCgB,EAAE,GAAGjB,QAAQ,CAACO,GAAT,CAAahjB,CAAb,EAAgB0iB,IAAhB,CAAjD;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;;;EACAe,WAAW,CAACb,WAAZ,GAA0B,SAASA,WAAT,CAAqBO,KAArB,EAA4BO,EAAE,GAAG,GAAjC,EAAsC;EAC9D,SAAOP,KAAK,IAAIO,EAAE,GAAGvB,mBAAL,GAA2B,CAA/B,CAAZ;EACD,CAFD;EAGA;EACA;EACA;EACA;EACA;EACA;;;EACAsB,WAAW,CAACL,WAAZ,GAA0B,SAASA,WAAT,CAAqBV,IAArB,EAA2BgB,EAAE,GAAG,GAAhC,EAAqC;EAC7D,SAAOhB,IAAI,IAAIgB,EAAE,GAAGvB,mBAAL,GAA2B,CAA/B,CAAX;EACD,CAFD;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACAsB,WAAW,CAACP,OAAZ,GAAsB,SAASA,OAAT,CAAiBR,IAAjB,EAAuBzkB,OAAO,GAAG,EAAjC,EAAqC;EACzD,MAAI;EAAE4kB,IAAAA,MAAM,GAAG,CAAX;EAAca,IAAAA,EAAE,GAAG;EAAnB,MAA2BzlB,OAA/B;EACA,SAAQykB,IAAI,GAAGG,MAAP,IAAiBa,EAAE,GAAG3B,gBAAL,GAAwB,CAAC,IAAI2B,EAAL,IAAWviB,IAAI,CAAC6gB,EAAzD,CAAD,GAAiE,CAAxE;EACD,CAHD;EAKA;EACA;EACA;EACA;EACA;EACA;;;EACAyB,WAAW,CAACV,SAAZ,GAAwB,SAASA,SAAT,CAAmBE,IAAI,GAAG,MAA1B,EAAkCS,EAAE,GAAG,GAAvC,EAA4C;EAClE,SAAOA,EAAE,GAAG,CAAL,GAASH,UAAU,CAACR,SAAX,CAAqBE,IAArB,CAAT,GAAsCR,QAAQ,CAACM,SAAT,CAAmBE,IAAnB,CAA7C;EACD,CAFD;;EC7KA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEO,SAASW,wBAAT,CAAkC3T,CAAlC,EAAqC;EAC1C,SAAO,UAAUqK,CAAV,EAAa;EAClB,QAAIuJ,EAAE,GAAG5T,CAAC,CAAC9R,MAAF,GAAW,CAApB;EACA,QAAI6E,MAAM,GAAG,CAAb;;EACA,SAAK,IAAIjE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8kB,EAApB,EAAwB9kB,CAAC,EAAzB,EAA6B;EAC3BiE,MAAAA,MAAM,IACJiN,CAAC,CAAClR,CAAC,GAAG8kB,EAAL,CAAD,GAAYJ,WAAW,CAACT,GAAZ,CAAgB1I,CAAC,GAAGrK,CAAC,CAAClR,CAAD,CAArB,EAA0BkR,CAAC,CAAClR,CAAC,GAAG8kB,EAAE,GAAG,CAAV,CAA3B,EAAyC5T,CAAC,CAAClR,CAAC,GAAG8kB,EAAE,GAAG,CAAV,CAA1C,CADd;EAED;;EACD,WAAO7gB,MAAP;EACD,GARD;EASD;;ECnBD;EACA;EACA;EACA;EACA;EACA;EACA;;EAEO,SAAS8gB,cAAT,CAAwB7T,CAAxB,EAA2B;EAChC,SAAO,UAAUqK,CAAV,EAAa;EAClB,QAAIuJ,EAAE,GAAG5T,CAAC,CAAC9R,MAAF,GAAW,CAApB;EACA,QAAI6E,MAAM,GAAG,CAAb;;EACA,SAAK,IAAIjE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8kB,EAApB,EAAwB9kB,CAAC,EAAzB,EAA6B;EAC3BiE,MAAAA,MAAM,IAAIiN,CAAC,CAAClR,CAAC,GAAG8kB,EAAL,CAAD,GAAYpB,QAAQ,CAACO,GAAT,CAAa1I,CAAC,GAAGrK,CAAC,CAAClR,CAAD,CAAlB,EAAuBkR,CAAC,CAAClR,CAAC,GAAG8kB,EAAE,GAAG,CAAV,CAAxB,CAAtB;EACD;;EACD,WAAO7gB,MAAP;EACD,GAPD;EAQD;;EChBD;EACA;EACA;EACA;EACA;EACA;EACA;;EAEO,SAAS+gB,gBAAT,CAA0B9T,CAA1B,EAA6B;EAClC,SAAO,UAAUqK,CAAV,EAAa;EAClB,QAAIuJ,EAAE,GAAG5T,CAAC,CAAC9R,MAAF,GAAW,CAApB;EACA,QAAI6E,MAAM,GAAG,CAAb;;EACA,SAAK,IAAIjE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8kB,EAApB,EAAwB9kB,CAAC,EAAzB,EAA6B;EAC3BiE,MAAAA,MAAM,IAAIiN,CAAC,CAAClR,CAAC,GAAG8kB,EAAL,CAAD,GAAYN,UAAU,CAACP,GAAX,CAAe1I,CAAC,GAAGrK,CAAC,CAAClR,CAAD,CAApB,EAAyBkR,CAAC,CAAClR,CAAC,GAAG8kB,EAAE,GAAG,CAAV,CAA1B,CAAtB;EACD;;EACD,WAAO7gB,MAAP;EACD,GAPD;EAQD;;ECZD,MAAMghB,UAAU,GAAG,CAAnB;EACA,MAAMC,SAAS,GAAG,CAAlB;EACA,MAAMC,SAAS,GAAG,CAAlB;EACA,MAAMC,yBAAyB,GAAG,CAAlC;EAEA,MAAMrJ,CAAC,GAAG,CAAV;EACA,MAAMkD,CAAC,GAAG,CAAV;EACA,MAAMoG,KAAK,GAAG,CAAd;EACA,MAAMC,EAAE,GAAG,CAAX;EAEA,MAAMC,IAAI,GAAG,CAAC,GAAD,EAAM,GAAN,EAAW,OAAX,EAAoB,IAApB,CAAb;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACO,SAASC,QAAT,CAAkBtlB,IAAlB,EAAwBulB,KAAxB,EAA+BvmB,OAAO,GAAG,EAAzC,EAA6C;EAClD,MAAI;EACFwmB,IAAAA,KAAK,GAAG;EAAEpD,MAAAA,IAAI,EAAE;EAAR,KADN;EAEFqD,IAAAA,YAAY,GAAG;EACbrD,MAAAA,IAAI,EAAE;EADO;EAFb,MAKApjB,OALJ;EAOA,MAAI;EACF0mB,IAAAA,cAAc,GAAG,IADf;EAEFC,IAAAA,cAAc,GAAG,CAFf;EAGFC,IAAAA,UAAU,GAAG,CAHX;EAIFC,IAAAA,UAAU,GAAG,CAJX;EAKFC,IAAAA,UAAU,GAAG,CALX;EAMFC,IAAAA,UAAU,GAAG,GANX;EAOFC,IAAAA,UAAU,GAAG,CAPX;EAQFC,IAAAA,UAAU,GAAG,CARX;EASFC,IAAAA,mBATE;EAUFC,IAAAA,mBAAmB,GAAG,IAVpB;EAWFC,IAAAA,uBAXE;EAYFC,IAAAA,oBAAoB,GAAG;EAZrB,MAaAZ,YAbJ;EAeAF,EAAAA,KAAK,GAAGe,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAejB,KAAf,CAAX,CAAR;;EAEA,MAAI,OAAOC,KAAK,CAACpD,IAAb,KAAsB,QAA1B,EAAoC;EAClC,UAAM,IAAIxiB,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAED,MAAIwiB,IAAI,GAAGoD,KAAK,CAACpD,IAAN,CAAWM,WAAX,GAAyBC,OAAzB,CAAiC,SAAjC,EAA4C,EAA5C,CAAX;EAEA,MAAI5hB,CAAC,GAAGf,IAAI,CAACe,CAAb;EACA,MAAI0lB,IAAI,GAAGC,GAAW,CAAC1mB,IAAI,CAACgB,CAAN,CAAtB;EACA,MAAIA,CAAC,GAAG,IAAIE,KAAJ,CAAUH,CAAC,CAAC7B,MAAZ,CAAR;;EACA,OAAK,IAAIY,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiB,CAAC,CAAC7B,MAAtB,EAA8BY,CAAC,EAA/B,EAAmC;EACjCkB,IAAAA,CAAC,CAAClB,CAAD,CAAD,GAAOE,IAAI,CAACgB,CAAL,CAAOlB,CAAP,IAAY2mB,IAAnB;EACD;;EAED,MAAI/F,QAAJ;EACA,MAAIiG,UAAJ;;EACA,UAAQvE,IAAR;EACE,SAAK,UAAL;EACE1B,MAAAA,QAAQ,GAAG,CAAX;EACAiG,MAAAA,UAAU,GAAG9B,cAAb;EACA;;EACF,SAAK,YAAL;EACEnE,MAAAA,QAAQ,GAAG,CAAX;EACAiG,MAAAA,UAAU,GAAG7B,gBAAb;EACA;;EACF,SAAK,aAAL;EACEpE,MAAAA,QAAQ,GAAG,CAAX;EACAiG,MAAAA,UAAU,GAAGhC,wBAAb;EACA;;EACF;EACE,YAAM,IAAI/kB,KAAJ,CAAU,gCAAV,CAAN;EAdJ;;EAiBA,QAAMgnB,eAAe,GAAG;EACtBH,IAAAA,IADsB;EAEtBb,IAAAA,UAFsB;EAGtBC,IAAAA,UAHsB;EAItBC,IAAAA,UAJsB;EAKtBC,IAAAA,UALsB;EAMtBC,IAAAA,UANsB;EAOtBC,IAAAA,UAPsB;EAQtBP,IAAAA,cARsB;EAStBC,IAAAA,cATsB;EAUtBO,IAAAA,mBAVsB;EAWtBC,IAAAA,mBAXsB;EAYtBC,IAAAA,uBAZsB;EAatBC,IAAAA;EAbsB,GAAxB;EAeA,MAAIQ,QAAQ,GAAGtB,KAAK,CAACrmB,MAArB;EACA,MAAI4nB,IAAI,GAAG,IAAIhT,YAAJ,CAAiB+S,QAAQ,GAAGnG,QAA5B,CAAX;EACA,MAAIqG,IAAI,GAAG,IAAIjT,YAAJ,CAAiB+S,QAAQ,GAAGnG,QAA5B,CAAX;EACA,MAAIsG,KAAK,GAAG,IAAIlT,YAAJ,CAAiB+S,QAAQ,GAAGnG,QAA5B,CAAZ;EACA,MAAI7f,kBAAkB,GAAG,IAAIiT,YAAJ,CAAiB+S,QAAQ,GAAGnG,QAA5B,CAAzB;;EACA,OAAK,IAAI5gB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+mB,QAApB,EAA8B/mB,CAAC,EAA/B,EAAmC;EACjC,QAAImnB,IAAI,GAAG1B,KAAK,CAACzlB,CAAD,CAAhB;;EACA,SAAK,IAAIiU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2M,QAApB,EAA8B3M,CAAC,EAA/B,EAAmC;EACjCiT,MAAAA,KAAK,CAAClnB,CAAC,GAAGiU,CAAC,GAAG8S,QAAT,CAAL,GAA0BK,QAAQ,CAACnT,CAAD,EAAIkT,IAAJ,EAAUlC,UAAV,EAAsB6B,eAAtB,CAAlC;EACAE,MAAAA,IAAI,CAAChnB,CAAC,GAAGiU,CAAC,GAAG8S,QAAT,CAAJ,GAAyBK,QAAQ,CAACnT,CAAD,EAAIkT,IAAJ,EAAUjC,SAAV,EAAqB4B,eAArB,CAAjC;EACAG,MAAAA,IAAI,CAACjnB,CAAC,GAAGiU,CAAC,GAAG8S,QAAT,CAAJ,GAAyBK,QAAQ,CAACnT,CAAD,EAAIkT,IAAJ,EAAUhC,SAAV,EAAqB2B,eAArB,CAAjC;EACA/lB,MAAAA,kBAAkB,CAACf,CAAC,GAAGiU,CAAC,GAAG8S,QAAT,CAAlB,GAAuCK,QAAQ,CAC7CnT,CAD6C,EAE7CkT,IAF6C,EAG7C/B,yBAH6C,EAI7C0B,eAJ6C,CAA/C;EAMD;EACF;;EAED,MAAI;EAAEtE,IAAAA,SAAF;EAAaH,IAAAA;EAAb,MAAqCD,YAAY,CAACuD,YAAD,CAArD;EAEAtD,EAAAA,mBAAmB,CAAChiB,SAApB,GAAgC2mB,IAAhC;EACA3E,EAAAA,mBAAmB,CAAC/hB,SAApB,GAAgC2mB,IAAhC;EACA5E,EAAAA,mBAAmB,CAAC9hB,aAApB,GAAoC2mB,KAApC;EACA7E,EAAAA,mBAAmB,CAACthB,kBAApB,GAAyCA,kBAAzC;EAEA,MAAIsmB,IAAI,GAAG7E,SAAS,CAAC;EAAEvhB,IAAAA,CAAF;EAAKC,IAAAA;EAAL,GAAD,EAAW2lB,UAAX,EAAuBxE,mBAAvB,CAApB;EAEA,MAAI;EAAEJ,IAAAA,cAAc,EAAE/f,KAAlB;EAAyBggB,IAAAA;EAAzB,MAAwCmF,IAA5C;EACA,MAAIpjB,MAAM,GAAG;EAAE/B,IAAAA,KAAF;EAASggB,IAAAA,UAAT;EAAqBuD,IAAAA;EAArB,GAAb;;EACA,OAAK,IAAIzlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGylB,KAAK,CAACrmB,MAA1B,EAAkCY,CAAC,EAAnC,EAAuC;EACrCqnB,IAAAA,IAAI,CAACrF,eAAL,CAAqBhiB,CAAC,GAAGylB,KAAK,CAACrmB,MAA/B,KAA0CunB,IAA1C;;EACA,SAAK,IAAI1S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2M,QAApB,EAA8B3M,CAAC,EAA/B,EAAmC;EACjC;EACAwR,MAAAA,KAAK,CAACzlB,CAAD,CAAL,CAASulB,IAAI,CAACtR,CAAD,CAAb,IAAoBoT,IAAI,CAACrF,eAAL,CAAqBhiB,CAAC,GAAGiU,CAAC,GAAGwR,KAAK,CAACrmB,MAAnC,CAApB;EACD;EACF;;EAED,SAAO6E,MAAP;EACD;;EAED,SAASmjB,QAAT,CAAkBE,cAAlB,EAAkCH,IAAlC,EAAwCI,KAAxC,EAA+CroB,OAA/C,EAAwD;EACtD,MAAIynB,IAAI,GAAGznB,OAAO,CAACynB,IAAnB;;EACA,UAAQY,KAAR;EACE,SAAKtC,UAAL;EACE,cAAQqC,cAAR;EACE,aAAKvL,CAAL;EACE,iBAAOoL,IAAI,CAAClmB,CAAZ;;EACF,aAAKge,CAAL;EACE,iBAAOkI,IAAI,CAACjmB,CAAL,GAASylB,IAAhB;;EACF,aAAKtB,KAAL;EACE,iBAAO8B,IAAI,CAAC/C,KAAZ;;EACF,aAAKkB,EAAL;EACE,iBAAO6B,IAAI,CAACxC,EAAL,IAAW,GAAlB;;EACF;EACE,gBAAM,IAAI7kB,KAAJ,CAAU,gCAAV,CAAN;EAVJ;;EAYF,SAAKslB,yBAAL;EACE,cAAQkC,cAAR;EACE,aAAKvL,CAAL;EACE,iBAAOoL,IAAI,CAACf,mBAAL,KAA6B/mB,SAA7B,GACH8nB,IAAI,CAACf,mBADF,GAEHlnB,OAAO,CAACknB,mBAAR,KAAgC/mB,SAAhC,GACAH,OAAO,CAACknB,mBADR,GAEAe,IAAI,CAAC/C,KAAL,GAAa,GAJjB;;EAKF,aAAKnF,CAAL;EACE,iBAAOkI,IAAI,CAACd,mBAAL,KAA6BhnB,SAA7B,GACH8nB,IAAI,CAACd,mBADF,GAEHnnB,OAAO,CAACmnB,mBAFZ;;EAGF,aAAKhB,KAAL;EACE,iBAAO8B,IAAI,CAACb,uBAAL,KAAiCjnB,SAAjC,GACH8nB,IAAI,CAACb,uBADF,GAEHpnB,OAAO,CAAConB,uBAAR,KAAoCjnB,SAApC,GACAH,OAAO,CAAConB,uBADR,GAEAa,IAAI,CAAC/C,KAAL,GAAa,GAJjB;;EAKF,aAAKkB,EAAL;EACE,iBAAO6B,IAAI,CAACZ,oBAAL,KAA8BlnB,SAA9B,GACH8nB,IAAI,CAACZ,oBADF,GAEHrnB,OAAO,CAACqnB,oBAFZ;;EAGF;EACE,gBAAM,IAAIzmB,KAAJ,CAAU,gCAAV,CAAN;EAtBJ;;EAwBF,SAAKolB,SAAL;EACE,cAAQoC,cAAR;EACE,aAAKvL,CAAL;EACE,iBAAOoL,IAAI,CAAClmB,CAAL,GAASkmB,IAAI,CAAC/C,KAAL,GAAallB,OAAO,CAAC4mB,UAArC;;EACF,aAAK7G,CAAL;EACE,iBAAQkI,IAAI,CAACjmB,CAAL,GAASylB,IAAV,GAAkBznB,OAAO,CAAC8mB,UAAjC;;EACF,aAAKX,KAAL;EACE,iBAAO8B,IAAI,CAAC/C,KAAL,GAAallB,OAAO,CAAC0mB,cAA5B;;EACF,aAAKN,EAAL;EACE,iBAAOpmB,OAAO,CAACgnB,UAAf;;EACF;EACE,gBAAM,IAAIpmB,KAAJ,CAAU,gCAAV,CAAN;EAVJ;;EAYF,SAAKqlB,SAAL;EACE,cAAQmC,cAAR;EACE,aAAKvL,CAAL;EACE,iBAAOoL,IAAI,CAAClmB,CAAL,GAASkmB,IAAI,CAAC/C,KAAL,GAAallB,OAAO,CAAC6mB,UAArC;;EACF,aAAK9G,CAAL;EACE,iBAAQkI,IAAI,CAACjmB,CAAL,GAASylB,IAAV,GAAkBznB,OAAO,CAAC+mB,UAAjC;;EACF,aAAKZ,KAAL;EACE,iBAAO8B,IAAI,CAAC/C,KAAL,GAAallB,OAAO,CAAC2mB,cAA5B;;EACF,aAAKP,EAAL;EACE,iBAAOpmB,OAAO,CAACinB,UAAf;;EACF;EACE,gBAAM,IAAIrmB,KAAJ,CAAU,gCAAV,CAAN;EAVJ;;EAYF;EACE,YAAMA,KAAK,CAAC,4BAAD,CAAX;EAlEJ;EAoED;;;;;;;;;;"}