{"version":3,"file":"xrd-analysis.min.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xAdd.js","../node_modules/ml-spectra-processing/src/x/xMultiply.js","../node_modules/ml-spectra-processing/src/x/xDivide.js","../node_modules/ml-spectra-processing/src/x/xFindClosestIndex.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xIsMonotone.js","../node_modules/ml-array-sum/lib-es6/index.js","../node_modules/ml-array-mean/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xSubtract.js","../node_modules/ml-spectra-processing/src/xy/xyCheck.js","../node_modules/ml-spectra-processing/src/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/src/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/src/xy/xyIntegration.js","../node_modules/ml-spectra-processing/src/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/src/xy/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/src/xy/xyMinClosestYPoint.js","../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/Shape1D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/util/getShape1D.js","../node_modules/ml-savitzky-golay-generalized/src/index.js","../node_modules/ml-gsd/src/gsd.js","../node_modules/assign-symbols/index.js","../node_modules/assign-deep/index.js","../node_modules/ml-spectra-fitting/node_modules/ml-peak-shape-generator/src/util/constants.js","../node_modules/ml-spectra-fitting/node_modules/ml-peak-shape-generator/src/classes/Gaussian.js","../node_modules/ml-spectra-fitting/node_modules/ml-peak-shape-generator/src/util/erfinv.js","../node_modules/ml-spectra-fitting/node_modules/ml-peak-shape-generator/src/classes/Lorentzian.js","../node_modules/ml-spectra-fitting/node_modules/ml-peak-shape-generator/src/classes/PseudoVoigt.js","../node_modules/ml-spectra-fitting/src/shapes/sumOfGaussianLorentzians.js","../node_modules/ml-spectra-fitting/src/shapes/sumOfGaussians.js","../node_modules/ml-spectra-fitting/src/shapes/sumOfLorentzians.js","../node_modules/ml-levenberg-marquardt/src/errorCalculation.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/transpose.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/step.js","../node_modules/ml-levenberg-marquardt/src/gradientFunction.js","../node_modules/ml-levenberg-marquardt/src/index.js","../node_modules/ml-levenberg-marquardt/src/checkOptions.js","../node_modules/ml-spectra-fitting/src/selectMethod.js","../node_modules/ml-spectra-fitting/src/index.js","../node_modules/ml-spectra-fitting/src/checkInput.js","../node_modules/common-spectrum/lib-esm/jsgraph/addStyle.js","../node_modules/common-spectrum/lib-esm/jsgraph/colors.js","../node_modules/common-spectrum/lib-esm/util/appendDistinctParameter.js","../node_modules/common-spectrum/lib-esm/util/appendDistinctValue.js","../node_modules/ml-airpls/src/choleskySolver.js","../node_modules/cuthill-mckee/cuthill-mckee.js","../node_modules/ml-airpls/src/utils.js","../node_modules/ml-airpls/src/index.js","../node_modules/baselines/src/airPLS.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/baselines/src/iterativePolynomial.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/baselines/node_modules/ml-spectra-processing/src/x/xCheck.js","../node_modules/baselines/node_modules/ml-spectra-processing/src/x/xRolling.js","../node_modules/baselines/node_modules/ml-spectra-processing/src/x/xPadding.js","../node_modules/baselines/src/rollingAverage.js","../node_modules/baselines/node_modules/ml-spectra-processing/src/x/xRollingAverage.js","../node_modules/baselines/src/rollingBall.js","../node_modules/ml-rolling-ball-baseline/src/rollingBall.js","../node_modules/baselines/src/rollingMedian.js","../node_modules/baselines/node_modules/ml-spectra-processing/src/x/xRollingMedian.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-zones/src/normalize.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-zones/src/invert.js","../node_modules/ml-zones/src/zonesWithPoints.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-filter-x/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/lib-esm/index.js","../node_modules/ml-stat/array.js","../node_modules/common-spectrum/lib-esm/util/getNormalizedSpectrum.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/lib-esm/util/convertUnit.js","../node_modules/common-spectrum/lib-esm/util/ensureRegexp.js","../node_modules/common-spectrum/lib-esm/util/getConvertedVariable.js","../node_modules/common-spectrum/lib-esm/util/getXYSpectrum.js","../node_modules/common-spectrum/lib-esm/Analysis.js","../node_modules/jcampconverter/node_modules/ensure-string/src/index.js","../node_modules/dynamic-typing/src/parseString.js","../node_modules/jcampconverter/src/complexChromatogram.js","../node_modules/jcampconverter/src/convertToFloatArray.js","../node_modules/jcampconverter/src/parse/fastParseXYData.js","../node_modules/jcampconverter/src/parse/parsePeakTable.js","../node_modules/jcampconverter/src/parse/parseXYA.js","../node_modules/jcampconverter/src/2d/add2D.js","../node_modules/jcampconverter/src/2d/convertTo3DZ.js","../node_modules/jcampconverter/src/2d/generateContourLines.js","../node_modules/d3-random/src/defaultSource.js","../node_modules/d3-random/src/uniform.js","../node_modules/d3-random/src/normal.js","../node_modules/ml-xsadd/lib-es6/xsadd.js","../node_modules/spectrum-generator/lib-esm/util/addNoise.js","../node_modules/spectrum-generator/lib-esm/SpectrumGenerator.js","../node_modules/spectrum-generator/lib-esm/util/addBaseline.js","../node_modules/nmr-processing/src/constants/gyromagneticRatio.js","../node_modules/jcampconverter/src/profiling.js","../node_modules/jcampconverter/src/simpleChromatogram.js","../node_modules/jcampconverter/src/postProcessing.js","../node_modules/jcampconverter/src/postProcessingNMR.js","../node_modules/jcampconverter/src/prepareNtuplesDatatable.js","../node_modules/jcampconverter/src/prepareSpectrum.js","../node_modules/jcampconverter/src/convert.js","../node_modules/convert-to-jcamp/src/utils/getNumber.js","../node_modules/convert-to-jcamp/src/fromJSON.js","../node_modules/convert-to-jcamp/src/utils/xyDataCreator.js","../node_modules/convert-to-jcamp/src/utils/peakTableCreator.js","../node_modules/convert-to-jcamp/src/fromVariables.js","../node_modules/convert-to-jcamp/src/creatorNtuples.js","../node_modules/common-spectrum/lib-esm/to/toJcamps.js","../node_modules/common-spectrum/lib-esm/index.js","../node_modules/common-spectrum/lib-esm/jsgraph/getJSGraph.js","../node_modules/common-spectrum/lib-esm/jsgraph/getNormalizationAnnotations.js","../node_modules/fast-xml-parser/src/util.js","../node_modules/fast-xml-parser/src/node2json.js","../node_modules/fast-xml-parser/src/xmlstr2xmlnode.js","../node_modules/fast-xml-parser/src/xmlNode.js","../node_modules/fast-xml-parser/src/validator.js","../node_modules/fast-xml-parser/src/nimndata.js","../node_modules/fast-xml-parser/src/node2json_str.js","../node_modules/fast-xml-parser/src/json2xml.js","../node_modules/fast-xml-parser/src/parser.js","../node_modules/jszip/dist/jszip.min.js","../src/from/parseBRML.js","../src/from/parsePowDLLXY.js","../src/constants/wavelengths.js","../src/analysis/utils.js","../src/analysis/scherrerForSpectrum.js","../src/index.js","../src/jsgraph/getAnnotations.js","../node_modules/common-spectrum/lib-esm/AnalysesManager.js","../node_modules/common-spectrum/lib-esm/util/autoPeakPicking.js","../src/analysis/convert.js","../src/analysis/computeCrystallinity.js","../src/from/fromBRML.js","../node_modules/common-spectrum/lib-esm/from/fromJcamp.js","../src/from/fromPowDLLXY.js","../src/analysis/generatePattern.js","../node_modules/common-spectrum/lib-esm/util/peakPicking.js","../node_modules/common-spectrum/lib-esm/to/toJcamp.js"],"sourcesContent":["const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import isArray from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\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  return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","import isAnyArray from 'is-any-array';\n\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param {Array<Number>} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Array}\n */\nexport function xAdd(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] + constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] + array2[i];\n    }\n  }\n\n  return array3;\n}\n","import isAnyArray from 'is-any-array';\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param {Array} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Float64Array}\n */\nexport function xMultiply(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Float64Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] * constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] * array2[i];\n    }\n  }\n\n  return array3;\n}\n","import isAnyArray from 'is-any-array';\n\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param {Array<Number>} array1 - the array that will be rotated\n * @param {Array<Number>|Number} array2\n * @return {Array}\n */\nexport function xDivide(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] / constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] / array2[i];\n    }\n  }\n\n  return array3;\n}\n","/**\n * Returns the closest index of a `target` in an ordered array\n * @param {array<Number>} array\n * @param {number} target\n */\n\nexport function xFindClosestIndex(array, target) {\n  let low = 0;\n  let high = array.length - 1;\n  let middle = 0;\n  while (high - low > 1) {\n    middle = low + ((high - low) >> 1);\n    if (array[middle] < target) {\n      low = middle;\n    } else if (array[middle] > target) {\n      high = middle;\n    } else {\n      return middle;\n    }\n  }\n\n  if (low < array.length - 1) {\n    if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n      return low;\n    } else {\n      return low + 1;\n    }\n  } else {\n    return low;\n  }\n}\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\r\n * Fill an array with sequential numbers\r\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\r\n * @param {object} [options={}]\r\n * @param {number} [options.from=0] - first value in the array\r\n * @param {number} [options.to=10] - last value in the array\r\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\r\n * @param {number} [options.step] - if not provided calculated from size\r\n * @return {Array<number>}\r\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size !== 0 && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    // only works with normal array\n    input.length = 0;\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport default sequentialFill;\n","/**\n * Returns true if x is monotone\n * @param {Array} array\n * @return {boolean}\n */\nexport function xIsMonotone(array) {\n  if (array.length <= 2) {\n    return true;\n  }\n  if (array[0] === array[1]) {\n    // maybe a constant series\n    for (let i = 1; i < array.length - 1; i++) {\n      if (array[i] !== array[i + 1]) return false;\n    }\n    return true;\n  }\n\n  if (array[0] < array[array.length - 1]) {\n    for (let i = 0; i < array.length - 1; i++) {\n      if (array[i] >= array[i + 1]) return false;\n    }\n  } else {\n    for (let i = 0; i < array.length - 1; i++) {\n      if (array[i] <= array[i + 1]) return false;\n    }\n  }\n  return true;\n}\n","import isArray from 'is-any-array';\n\nfunction sum(input) {\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 sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += input[i];\n  }\n\n  return sumValue;\n}\n\nexport default sum;\n","import sum from 'ml-array-sum';\n\nfunction mean(input) {\n  return sum(input) / input.length;\n}\n\nexport default mean;\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';\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 isAnyArray from 'is-any-array';\n/**\n * This function xSubtract the first array by the second array or a constant value from each element of the first array\n * @param {Array} array1 - the array that will be rotated\n * @param {Array|Number} array2\n * @return {Array}\n */\nexport function xSubtract(array1, array2) {\n  let isConstant = false;\n  let constant;\n  if (isAnyArray(array2)) {\n    if (array1.length !== array2.length) {\n      throw new Error('sub: size of array1 and array2 must be identical');\n    }\n  } else {\n    isConstant = true;\n    constant = Number(array2);\n  }\n\n  let array3 = new Array(array1.length);\n  if (isConstant) {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] - constant;\n    }\n  } else {\n    for (let i = 0; i < array1.length; i++) {\n      array3[i] = array1[i] - array2[i];\n    }\n  }\n\n  return array3;\n}\n","import isAnyArray from 'is-any-array';\n\n/**\n * Throw an error in no an object of x,y arrays\n * @param {DataXY} [data={}]\n */\nexport function xyCheck(data = {}) {\n  if (!isAnyArray(data.x) || !isAnyArray(data.y)) {\n    throw new Error('Data must be an object of x and y arrays');\n  }\n  if (data.x.length !== data.y.length) {\n    throw new Error('The x and y arrays mush have the same length');\n  }\n}\n","import { xyCheck } from './xyCheck';\n\n/**\n * Filters x,y values to allow strictly growing values in x axis.\n * @param {DataXY} [data={}] - Object that contains property x (an ordered increasing array) and y (an array)\n * @return {DataXY}\n */\nexport function xyEnsureGrowingX(data = {}) {\n  xyCheck(data);\n  const x = Array.from(data.x);\n  const y = Array.from(data.y);\n  let prevX = -Infinity;\n  let ansX = [];\n  let ansY = [];\n\n  for (let index = 0; index < x.length; index++) {\n    if (prevX < x[index]) {\n      ansX.push(x[index]);\n      ansY.push(y[index]);\n      prevX = x[index];\n    }\n  }\n  return { x: ansX, y: ansY };\n}\n","import { xyCheck } from './xyCheck';\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param {DataXY} [data={}]\n * @return {{x:[],y:[]}} An object with the filtered data\n */\n\nexport function xyFilterXPositive(data = {}) {\n  xyCheck(data);\n  const { x, y } = data;\n  const newX = [];\n  const newY = [];\n  for (let i = 0; i < x.length; i++) {\n    if (x[i] > 0) {\n      newX.push(x[i]);\n      newY.push(y[i]);\n    }\n  }\n\n  return { x: newX, y: newY };\n}\n","import { xGetFromToIndex } from '../x/xGetFromToIndex';\n\nimport { xyCheck } from './xyCheck';\n\n/**\n * Calculate integration\n * @param {DataXY} [data={}] - Object that contains property x (an ordered increasing array) and y (an array)\n * @param {object} [options={}]\n * @param {number} [options.from] - First value for xyIntegration in the X scale\n * @param {number} [options.fromIndex=0] - First point for xyIntegration\n * @param {number} [options.to] - Last value for xyIntegration in the X scale\n * @param {number} [options.toIndex=x.length-1] - Last point for xyIntegration\n * @return {number} xyIntegration value on the specified range\n */\n\nexport function xyIntegration(data = {}, options = {}) {\n  xyCheck(data);\n  const { x, y } = data;\n  if (x.length < 2) return 0;\n  const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n  let currentxyIntegration = 0;\n  for (let i = fromIndex; i < toIndex; i++) {\n    currentxyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n  }\n\n  return currentxyIntegration;\n}\n","import { xFindClosestIndex } from './xFindClosestIndex';\n\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param {array} x\n * @param {object} [options={}]\n * @param {number} [options.from] - First value for xyIntegration in the X scale\n * @param {number} [options.fromIndex=0] - First point for xyIntegration\n * @param {number} [options.to] - Last value for xyIntegration in the X scale\n * @param {number} [options.toIndex=x.length-1] - Last point for xyIntegration\n */\n\nexport function xGetFromToIndex(x, options = {}) {\n  let { fromIndex, toIndex, from, to } = options;\n\n  if (fromIndex === undefined) {\n    if (from !== undefined) {\n      fromIndex = xFindClosestIndex(x, from);\n    } else {\n      fromIndex = 0;\n    }\n  }\n  if (toIndex === undefined) {\n    if (to !== undefined) {\n      toIndex = xFindClosestIndex(x, to);\n    } else {\n      toIndex = x.length - 1;\n    }\n  }\n  if (fromIndex > toIndex) [fromIndex, toIndex] = [toIndex, fromIndex];\n  return { fromIndex, toIndex };\n}\n","import { xFindClosestIndex } from '../x/xFindClosestIndex';\n\nimport { xyCheck } from './xyCheck';\n\n/**\n * Find the closest maximum going up hill\n * @param {DataXY} [data={}] - Object that contains property x (an ordered increasing array) and y (an array)\n * @param {object} [options={}]\n * @param {number} [options.target]\n * @param {number} [options.targetIndex=0]\n * @return {{x,y,xIndex}} An object with the x/y value\n */\n\nexport function xyMaxClosestYPoint(data, options = {}) {\n  xyCheck(data);\n  const { x, y } = data;\n\n  let { target, targetIndex } = options;\n\n  if (targetIndex === undefined) {\n    if (target !== undefined) {\n      targetIndex = xFindClosestIndex(x, target);\n    } else {\n      targetIndex = 0;\n    }\n  }\n\n  let previousIndex = Number.MIN_SAFE_INTEGER;\n  let currentIndex = targetIndex;\n\n  let xyMaxY = y[targetIndex];\n\n  while (currentIndex !== previousIndex) {\n    previousIndex = currentIndex;\n    if (currentIndex > 0 && y[currentIndex - 1] > xyMaxY) {\n      currentIndex--;\n    } else if (currentIndex < x.length - 1 && y[currentIndex + 1] > xyMaxY) {\n      currentIndex++;\n    }\n    xyMaxY = y[currentIndex];\n  }\n  return {\n    x: x[currentIndex],\n    y: y[currentIndex],\n    index: currentIndex,\n  };\n}\n","import { xFindClosestIndex } from '../x/xFindClosestIndex';\n\nimport { xyCheck } from './xyCheck';\n\n/**\n * Find the closest minimum going down hill\n * @param {DataXY} [data={}] - Object that contains property x (an ordered increasing array) and y (an array)\n * @param {object} [options={}]\n * @param {number} [options.target]\n * @param {number} [options.targetIndex=0]\n * @return {{x,y,xIndex}} An object with the x/y value\n */\n\nexport function xyMinClosestYPoint(data, options = {}) {\n  xyCheck(data);\n  const { x, y } = data;\n\n  let { target, targetIndex } = options;\n\n  if (targetIndex === undefined) {\n    if (target !== undefined) {\n      targetIndex = xFindClosestIndex(x, target);\n    } else {\n      targetIndex = 0;\n    }\n  }\n\n  let previousIndex = Number.MIN_SAFE_INTEGER;\n  let currentIndex = targetIndex;\n\n  let minY = y[targetIndex];\n\n  while (currentIndex !== previousIndex) {\n    previousIndex = currentIndex;\n    if (currentIndex > 0 && y[currentIndex - 1] < minY) {\n      currentIndex--;\n    } else if (currentIndex < x.length - 1 && y[currentIndex + 1] < minY) {\n      currentIndex++;\n    }\n    minY = y[currentIndex];\n  }\n  return {\n    x: x[currentIndex],\n    y: y[currentIndex],\n    index: currentIndex,\n  };\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//# sourceMappingURL=constants.js.map","export class Shape1D {\n}\n//# sourceMappingURL=Shape1D.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nimport { Shape1D } from '../Shape1D';\nexport class Gaussian extends Shape1D {\n    constructor(options = {}) {\n        super();\n        const { fwhm = 500, sd, height } = options;\n        this.fwhm = sd ? widthToFWHM(2 * sd) : fwhm;\n        this.height =\n            height === undefined\n                ? Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI) / this.fwhm\n                : height;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return fwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return widthToFWHM(width);\n    }\n    fct(x) {\n        return fct(x, this.fwhm);\n    }\n    getArea() {\n        return getArea({ fwhm: this.fwhm, height: this.height });\n    }\n    getFactor(area) {\n        return getFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor } = options;\n        return getData({ fwhm: this.fwhm, height: this.height, factor, length });\n    }\n}\n/**\n * Return a parameterized function of a gaussian shape (see README for equation).\n * @returns - the y value of gaussian with the current parameters.\n */\nexport function fct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\n/**\n * Compute the value of Full Width at Half Maximum (FWHM) from the width between the inflection points.\n * for more information check the [mathworld page](https://mathworld.wolfram.com/GaussianFunction.html)\n * @returns fwhm\n */\nexport function widthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\n/**\n * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n * for more information check the [mathworld page](https://mathworld.wolfram.com/GaussianFunction.html)\n * @param fwhm - Full Width at Half Maximum.\n * @returns width\n */\nexport function fwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\n/**\n * Calculate the area of a specific shape.\n * @returns returns the area of the specific shape and parameters.\n */\nexport function getArea(options) {\n    let { fwhm, sd, height = 1 } = options;\n    if (sd)\n        fwhm = widthToFWHM(2 * sd);\n    if (fwhm === undefined) {\n        throw new Error('should pass fwhm or sd parameters');\n    }\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage.\n * @param [area=0.9999] Expected area to be covered.\n * @returns\n */\nexport function getFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\n/**\n * Calculate intensity array of a gaussian shape.\n * @returns {Float64Array} Intensity values.\n */\nexport function getData(options = {}) {\n    let { length, factor = getFactor(), fwhm = 500, sd, height } = options;\n    if (sd)\n        fwhm = widthToFWHM(2 * sd);\n    if (!height) {\n        height = Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI) / fwhm;\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = fct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_THREE } from '../../../util/constants';\nimport { Shape1D } from '../Shape1D';\nexport class Lorentzian extends Shape1D {\n    constructor(options = {}) {\n        super();\n        const { fwhm = 500, height } = options;\n        this.fwhm = fwhm;\n        this.height = height === undefined ? 2 / Math.PI / fwhm : height;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return fwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return widthToFWHM(width);\n    }\n    fct(x) {\n        return fct(x, this.fwhm);\n    }\n    getArea() {\n        return getArea({ fwhm: this.fwhm, height: this.height });\n    }\n    getFactor(area) {\n        return getFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor } = options;\n        return getData({ fwhm: this.fwhm, height: this.height, factor, length });\n    }\n}\n/**\n * Return a parameterized function of a lorentzian shape (see README for equation).\n * @param x - x value to calculate.\n * @param fwhm - full width half maximum\n * @returns - the y value of lorentzian with the current parameters.\n */\nexport function fct(x, fwhm) {\n    return Math.pow(fwhm, 2) / (4 * Math.pow(x, 2) + Math.pow(fwhm, 2));\n}\n/**\n * Compute the value of Full Width at Half Maximum (FWHM) from the width between the inflection points.\n * for more information check the [mathworld page](https://mathworld.wolfram.com/LorentzianFunction.html)\n * @param width - Width between the inflection points\n * @returns fwhm\n */\nexport function widthToFWHM(width) {\n    return width * ROOT_THREE;\n}\n/**\n * Compute the value of width between the inflection points from Full Width at Half Maximum (FWHM).\n * for more information check the [mathworld page](https://mathworld.wolfram.com/LorentzianFunction.html)\n * @param fwhm - Full Width at Half Maximum.\n * @returns width\n */\nexport function fwhmToWidth(fwhm) {\n    return fwhm / ROOT_THREE;\n}\n/**\n * Calculate the area of a specific shape.\n * @returns returns the area of the specific shape and parameters.\n */\nexport function getArea(options) {\n    const { fwhm, height = 1 } = options;\n    if (fwhm === undefined) {\n        throw new Error('should pass fwhm or sd parameters');\n    }\n    return (height * Math.PI * fwhm) / 2;\n}\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage.\n * @param [area=0.9999] Expected area to be covered.\n * @returns\n */\nexport function getFactor(area = 0.9999) {\n    return 2 * Math.tan(Math.PI * (area - 0.5));\n}\n/**\n * Calculate intensity array of a lorentzian shape.\n * @returns {Float64Array} y values\n */\nexport function getData(options = {}) {\n    let { length, factor = getFactor(), fwhm = 500, height } = options;\n    if (!height) {\n        height = 2 / Math.PI / fwhm;\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = fct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Lorentzian.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { Shape1D } from '../Shape1D';\nimport { fct as gaussian, getFactor as getFactorGaussian, } from '../gaussian/Gaussian';\nimport { fct as lorentzian, getFactor as getFactorLorentzian, } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt extends Shape1D {\n    constructor(options = {}) {\n        super();\n        const { fwhm = 500, height, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n        this.height =\n            height === undefined\n                ? 1 /\n                    ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                        ((1 - mu) * fwhm * Math.PI) / 2)\n                : height;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return fwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return widthToFWHM(width, mu);\n    }\n    fct(x) {\n        return fct(x, this.fwhm, this.mu);\n    }\n    getArea() {\n        return getArea({ fwhm: this.fwhm, height: this.height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor } = options;\n        return getData({\n            fwhm: this.fwhm,\n            height: this.height,\n            mu: this.mu,\n            factor,\n            length,\n        });\n    }\n}\n/**\n * Return a parameterized function of a pseudo voigt shape (see README for equation).\n * @param x - x value to calculate.\n * @param fwhm - full width half maximum\n * @returns - the y value of pseudo voigt with the current parameters.\n */\nexport function fct(x, fwhm, mu) {\n    return (1 - mu) * lorentzian(x, fwhm) + mu * gaussian(x, fwhm);\n}\n/**\n * Compute the value of Full Width at Half Maximum (FWHM) from the width between the inflection points.\n * @param width - Width between the inflection points\n * @param [mu=0.5] Ratio of gaussian contribution in the shape\n * @returns fwhm\n */\nexport 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 fwhm - Full Width at Half Maximum.\n * @param [mu=0.5] Ratio of gaussian contribution in the shape\n * @returns width\n */\nexport function fwhmToWidth(fwhm, mu = 0.5) {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n}\n/**\n * Calculate the area of a specific shape.\n * @returns returns the area of the specific shape and parameters.\n */\nexport function getArea(options) {\n    const { fwhm, height = 1, mu = 0.5 } = options;\n    if (fwhm === undefined) {\n        throw new Error('should pass fwhm or sd parameters');\n    }\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n}\n/**\n * Calculate the number of times FWHM allows to reach a specific area coverage.\n * @param [area=0.9999] Expected area to be covered.\n * @returns\n */\nexport function getFactor(area = 0.9999, mu = 0.5) {\n    return mu < 1 ? getFactorLorentzian(area) : getFactorGaussian(area);\n}\n/**\n * Calculate intensity array of a pseudo voigt shape.\n * @returns {Float64Array} y values\n */\nexport function getData(options = {}) {\n    let { length, factor = getFactor(), fwhm = 500, height, mu = 0.5 } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = fct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=PseudoVoigt.js.map","import { Gaussian } from '../shapes/1d/gaussian/Gaussian';\nimport { Lorentzian } from '../shapes/1d/lorentzian/Lorentzian';\nimport { PseudoVoigt } from '../shapes/1d/pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(kind, shapeOptions = {}) {\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shapeOptions);\n        case 'lorentzian':\n            return new Lorentzian(shapeOptions);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shapeOptions);\n        default: {\n            const unHandled = kind;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","/**\n * Apply Savitzky Golay algorithm\n * @param {array} [ys] Array of y values\n * @param {array|number} [xs] Array of X or deltaX\n * @param {object} [options={}]\n * @param {number} [options.windowSize=9]\n * @param {number} [options.derivative=0]\n * @param {number} [options.polynomial=3]\n * @return {array} Array containing the new ys (same length)\n */\n\nexport default function SavitzkyGolay(ys, xs, options = {}) {\n  let { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n\n  if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n    throw new RangeError(\n      'Invalid window size (should be odd and at least 5 integer number)',\n    );\n  }\n  if (windowSize > ys.length) {\n    throw new RangeError(\n      `Window size is higher than the data length ${windowSize}>${ys.length}`,\n    );\n  }\n  if (derivative < 0 || !Number.isInteger(derivative)) {\n    throw new RangeError('Derivative should be a positive integer');\n  }\n  if (polynomial < 1 || !Number.isInteger(polynomial)) {\n    throw new RangeError('Polynomial should be a positive integer');\n  }\n  if (polynomial >= 6) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      'You should not use polynomial grade higher than 5 if you are' +\n        ' not sure that your data arises from such a model. Possible polynomial oscillation problems',\n    );\n  }\n\n  let half = Math.floor(windowSize / 2);\n  let np = ys.length;\n  let ans = new Array(np);\n  let weights = fullWeights(windowSize, polynomial, derivative);\n  let hs = 0;\n  let constantH = true;\n  if (Array.isArray(xs)) {\n    constantH = false;\n  } else {\n    hs = Math.pow(xs, derivative);\n  }\n\n  //For the borders\n  for (let i = 0; i < half; i++) {\n    let wg1 = weights[half - i - 1];\n    let wg2 = weights[half + i + 1];\n    let d1 = 0;\n    let d2 = 0;\n    for (let l = 0; l < windowSize; l++) {\n      d1 += wg1[l] * ys[l];\n      d2 += wg2[l] * ys[np - windowSize + l];\n    }\n    if (constantH) {\n      ans[half - i - 1] = d1 / hs;\n      ans[np - half + i] = d2 / hs;\n    } else {\n      hs = getHs(xs, half - i - 1, half, derivative);\n      ans[half - i - 1] = d1 / hs;\n      hs = getHs(xs, np - half + i, half, derivative);\n      ans[np - half + i] = d2 / hs;\n    }\n  }\n\n  //For the internal points\n  let wg = weights[half];\n  for (let i = windowSize; i <= np; i++) {\n    let d = 0;\n    for (let l = 0; l < windowSize; l++) d += wg[l] * ys[l + i - windowSize];\n    if (!constantH) hs = getHs(xs, i - half - 1, half, derivative);\n    ans[i - half - 1] = d / hs;\n  }\n  return ans;\n}\n\nfunction getHs(h, center, half, derivative) {\n  let hs = 0;\n  let count = 0;\n  for (let i = center - half; i < center + half; i++) {\n    if (i >= 0 && i < h.length - 1) {\n      hs += h[i + 1] - h[i];\n      count++;\n    }\n  }\n  return Math.pow(hs / count, derivative);\n}\n\nfunction GramPoly(i, m, k, s) {\n  let Grampoly = 0;\n  if (k > 0) {\n    Grampoly =\n      ((4 * k - 2) / (k * (2 * m - k + 1))) *\n        (i * GramPoly(i, m, k - 1, s) + s * GramPoly(i, m, k - 1, s - 1)) -\n      (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n        GramPoly(i, m, k - 2, s);\n  } else {\n    if (k === 0 && s === 0) {\n      Grampoly = 1;\n    } else {\n      Grampoly = 0;\n    }\n  }\n  return Grampoly;\n}\n\nfunction GenFact(a, b) {\n  let gf = 1;\n  if (a >= b) {\n    for (let j = a - b + 1; j <= a; j++) {\n      gf *= j;\n    }\n  }\n  return gf;\n}\n\nfunction Weight(i, t, m, n, s) {\n  let sum = 0;\n  for (let k = 0; k <= n; k++) {\n    //console.log(k);\n    sum +=\n      (2 * k + 1) *\n      (GenFact(2 * m, k) / GenFact(2 * m + k + 1, k + 1)) *\n      GramPoly(i, m, k, 0) *\n      GramPoly(t, m, k, s);\n  }\n  return sum;\n}\n\n/**\n *\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n  let weights = new Array(m);\n  let np = Math.floor(m / 2);\n  for (let t = -np; t <= np; t++) {\n    weights[t + np] = new Array(m);\n    for (let j = -np; j <= np; j++) {\n      weights[t + np][j + np] = Weight(j, t, np, n, s);\n    }\n  }\n  return weights;\n}\n\n/*function entropy(data,h,options){\n    var trend = SavitzkyGolay(data,h,trendOptions);\n    var copy = new Array(data.length);\n    var sum = 0;\n    var max = 0;\n    for(var i=0;i<data.length;i++){\n        copy[i] = data[i]-trend[i];\n    }\n\n    sum/=data.length;\n    console.log(sum+\" \"+max);\n    console.log(stat.array.standardDeviation(copy));\n    console.log(Math.abs(stat.array.mean(copy))/stat.array.standardDeviation(copy));\n    return sum;\n\n}\n\n\n\nfunction guessWindowSize(data, h){\n    console.log(\"entropy \"+entropy(data,h,trendOptions));\n    return 5;\n}\n*/\n","import { getShape1D } from 'ml-peak-shape-generator';\nimport SG from 'ml-savitzky-golay-generalized';\n\n/**\n * Global spectra deconvolution\n * @param {object} data - Object data with x and y arrays\n * @param {Array<number>} [data.x] - Independent variable\n * @param {Array<number>} [data.y] - Dependent variable\n * @param {object} [options={}] - Options object\n * @param {object} [options.shape={}] - Object that specified the kind of shape to calculate the FWHM instead of width between inflection points. see https://mljs.github.io/peak-shape-generator/#inflectionpointswidthtofwhm\n * @param {object} [options.shape.kind='gaussian']\n * @param {object} [options.shape.options={}]\n * @param {object} [options.sgOptions] - Options object for Savitzky-Golay filter. See https://github.com/mljs/savitzky-golay-generalized#options\n * @param {number} [options.sgOptions.windowSize = 9] - points to use in the approximations\n * @param {number} [options.sgOptions.polynomial = 3] - degree of the polynomial to use in the approximations\n * @param {number} [options.minMaxRatio = 0.00025] - Threshold to determine if a given peak should be considered as a noise\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n * @param {number} [options.noiseLevel = 0] - Noise threshold in spectrum units\n * @param {boolean} [options.maxCriteria = true] - Peaks are local maximum(true) or minimum(false)\n * @param {boolean} [options.smoothY = true] - Select the peak intensities from a smoothed version of the independent variables\n * @param {boolean} [options.realTopDetection = false] - Use a quadratic optimizations with the peak and its 3 closest neighbors\n * to determine the true x,y values of the peak?\n * @param {number} [options.heightFactor = 0] - Factor to multiply the calculated height (usually 2)\n * @param {number} [options.derivativeThreshold = -1] - Filters based on the amplitude of the first derivative\n * @return {Array<object>}\n */\nexport function gsd(data, options = {}) {\n  let {\n    noiseLevel,\n    sgOptions = {\n      windowSize: 9,\n      polynomial: 3,\n    },\n    shape = {},\n    smoothY = true,\n    heightFactor = 0,\n    broadRatio = 0.0,\n    maxCriteria = true,\n    minMaxRatio = 0.00025,\n    derivativeThreshold = -1,\n    realTopDetection = false,\n  } = options;\n\n  let { y: yIn, x } = data;\n\n  const y = yIn.slice();\n  let equalSpaced = isEqualSpaced(x);\n\n  if (maxCriteria === false) {\n    for (let i = 0; i < y.length; i++) {\n      y[i] *= -1;\n    }\n  }\n\n  if (noiseLevel === undefined) {\n    noiseLevel = equalSpaced ? getNoiseLevel(y) : 0;\n  }\n  for (let i = 0; i < y.length; i++) {\n    y[i] -= noiseLevel;\n  }\n  for (let i = 0; i < y.length; i++) {\n    if (y[i] < 0) {\n      y[i] = 0;\n    }\n  }\n  // If the max difference between delta x is less than 5%, then,\n  // we can assume it to be equally spaced variable\n  let yData = y;\n  let dY, ddY;\n  const { windowSize, polynomial } = sgOptions;\n\n  if (equalSpaced) {\n    if (smoothY) {\n      yData = SG(y, x[1] - x[0], {\n        windowSize,\n        polynomial,\n        derivative: 0,\n      });\n    }\n    dY = SG(y, x[1] - x[0], {\n      windowSize,\n      polynomial,\n      derivative: 1,\n    });\n    ddY = SG(y, x[1] - x[0], {\n      windowSize,\n      polynomial,\n      derivative: 2,\n    });\n  } else {\n    if (smoothY) {\n      yData = SG(y, x, {\n        windowSize,\n        polynomial,\n        derivative: 0,\n      });\n    }\n    dY = SG(y, x, {\n      windowSize,\n      polynomial,\n      derivative: 1,\n    });\n    ddY = SG(y, x, {\n      windowSize,\n      polynomial,\n      derivative: 2,\n    });\n  }\n\n  const xData = x;\n  const dX = x[1] - x[0];\n  let maxDdy = 0;\n  let maxY = 0;\n  for (let i = 0; i < yData.length; i++) {\n    if (Math.abs(ddY[i]) > maxDdy) {\n      maxDdy = Math.abs(ddY[i]);\n    }\n    if (Math.abs(yData[i]) > maxY) {\n      maxY = Math.abs(yData[i]);\n    }\n  }\n\n  let lastMax = null;\n  let lastMin = null;\n  let minddY = [];\n  let intervalL = [];\n  let intervalR = [];\n  let broadMask = [];\n\n  // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n  for (let i = 1; i < yData.length - 1; ++i) {\n    // filter based on derivativeThreshold\n    // console.log('pasa', y[i], dY[i], ddY[i]);\n    if (Math.abs(dY[i]) > derivativeThreshold) {\n      // Minimum in first derivative\n      if (\n        (dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n        (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])\n      ) {\n        lastMin = {\n          x: xData[i],\n          index: i,\n        };\n        if (dX > 0 && lastMax !== null) {\n          intervalL.push(lastMax);\n          intervalR.push(lastMin);\n        }\n      }\n\n      // Maximum in first derivative\n      if (\n        (dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n        (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])\n      ) {\n        lastMax = {\n          x: xData[i],\n          index: i,\n        };\n        if (dX < 0 && lastMin !== null) {\n          intervalL.push(lastMax);\n          intervalR.push(lastMin);\n        }\n      }\n    }\n\n    // Minimum in second derivative\n    if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n      minddY.push(i);\n      broadMask.push(Math.abs(ddY[i]) <= broadRatio * maxDdy);\n    }\n  }\n\n  let widthProcessor = shape.kind\n    ? getShape1D(shape.kind, shape.options).widthToFWHM\n    : (x) => x;\n\n  let signals = [];\n  let lastK = -1;\n  let possible, frequency, distanceJ, minDistance, gettingCloser;\n  for (let j = 0; j < minddY.length; ++j) {\n    frequency = xData[minddY[j]];\n    possible = -1;\n    let k = lastK + 1;\n    minDistance = Number.MAX_VALUE;\n    distanceJ = 0;\n    gettingCloser = true;\n    while (possible === -1 && k < intervalL.length && gettingCloser) {\n      distanceJ = Math.abs(frequency - (intervalL[k].x + intervalR[k].x) / 2);\n\n      // Still getting closer?\n      if (distanceJ < minDistance) {\n        minDistance = distanceJ;\n      } else {\n        gettingCloser = false;\n      }\n      if (distanceJ < Math.abs(intervalL[k].x - intervalR[k].x) / 2) {\n        possible = k;\n        lastK = k;\n      }\n      ++k;\n    }\n\n    if (possible !== -1) {\n      if (Math.abs(yData[minddY[j]]) > minMaxRatio * maxY) {\n        let width = Math.abs(intervalR[possible].x - intervalL[possible].x);\n        signals.push({\n          index: minddY[j],\n          x: frequency,\n          y: maxCriteria\n            ? yData[minddY[j]] + noiseLevel\n            : -yData[minddY[j]] - noiseLevel,\n          width: widthProcessor(width),\n          soft: broadMask[j],\n        });\n\n        signals[signals.length - 1].left = intervalL[possible];\n        signals[signals.length - 1].right = intervalR[possible];\n\n        if (heightFactor) {\n          let yLeft = yData[intervalL[possible].index];\n          let yRight = yData[intervalR[possible].index];\n          signals[signals.length - 1].height =\n            heightFactor *\n            (signals[signals.length - 1].y - (yLeft + yRight) / 2);\n        }\n      }\n    }\n  }\n\n  if (realTopDetection) {\n    determineRealTop(signals, xData, yData);\n  }\n\n  // Correct the values to fit the original spectra data\n  for (let j = 0; j < signals.length; j++) {\n    signals[j].base = noiseLevel;\n  }\n\n  signals.sort(function (a, b) {\n    return a.x - b.x;\n  });\n\n  return signals;\n}\n\nconst isEqualSpaced = (x) => {\n  let tmp;\n  let maxDx = 0;\n  let minDx = Number.MAX_SAFE_INTEGER;\n  for (let i = 0; i < x.length - 1; ++i) {\n    tmp = Math.abs(x[i + 1] - x[i]);\n    if (tmp < minDx) {\n      minDx = tmp;\n    }\n    if (tmp > maxDx) {\n      maxDx = tmp;\n    }\n  }\n  return (maxDx - minDx) / maxDx < 0.05;\n};\n\nconst getNoiseLevel = (y) => {\n  let mean = 0;\n\n  let stddev = 0;\n  let length = y.length;\n  for (let i = 0; i < length; ++i) {\n    mean += y[i];\n  }\n  mean /= length;\n  let averageDeviations = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    averageDeviations[i] = Math.abs(y[i] - mean);\n  }\n  averageDeviations.sort((a, b) => a - b);\n  if (length % 2 === 1) {\n    stddev = averageDeviations[(length - 1) / 2] / 0.6745;\n  } else {\n    stddev =\n      (0.5 *\n        (averageDeviations[length / 2] + averageDeviations[length / 2 - 1])) /\n      0.6745;\n  }\n\n  return stddev;\n};\n\nconst determineRealTop = (peakList, x, y) => {\n  let alpha, beta, gamma, p, currentPoint;\n  for (let j = 0; j < peakList.length; j++) {\n    currentPoint = peakList[j].index; // peakList[j][2];\n    // The detected peak could be moved 1 or 2 units to left or right.\n    if (\n      y[currentPoint - 1] >= y[currentPoint - 2] &&\n      y[currentPoint - 1] >= y[currentPoint]\n    ) {\n      currentPoint--;\n    } else {\n      if (\n        y[currentPoint + 1] >= y[currentPoint] &&\n        y[currentPoint + 1] >= y[currentPoint + 2]\n      ) {\n        currentPoint++;\n      } else {\n        if (\n          y[currentPoint - 2] >= y[currentPoint - 3] &&\n          y[currentPoint - 2] >= y[currentPoint - 1]\n        ) {\n          currentPoint -= 2;\n        } else {\n          if (\n            y[currentPoint + 2] >= y[currentPoint + 1] &&\n            y[currentPoint + 2] >= y[currentPoint + 3]\n          ) {\n            currentPoint += 2;\n          }\n        }\n      }\n    }\n    // interpolation to a sin() function\n    if (\n      y[currentPoint - 1] > 0 &&\n      y[currentPoint + 1] > 0 &&\n      y[currentPoint] >= y[currentPoint - 1] &&\n      y[currentPoint] >= y[currentPoint + 1] &&\n      (y[currentPoint] !== y[currentPoint - 1] ||\n        y[currentPoint] !== y[currentPoint + 1])\n    ) {\n      alpha = 20 * Math.log10(y[currentPoint - 1]);\n      beta = 20 * Math.log10(y[currentPoint]);\n      gamma = 20 * Math.log10(y[currentPoint + 1]);\n      p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n      // console.log(alpha, beta, gamma, `p: ${p}`);\n      // console.log(x[currentPoint]+\" \"+tmp+\" \"+currentPoint);\n      peakList[j].x =\n        x[currentPoint] + (x[currentPoint] - x[currentPoint - 1]) * p;\n      peakList[j].y =\n        y[currentPoint] -\n        0.25 * (y[currentPoint - 1] - y[currentPoint + 1]) * p;\n    }\n  }\n};\n","/*!\n * assign-symbols <https://github.com/jonschlinkert/assign-symbols>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst isEnumerable = Object.prototype.propertyIsEnumerable;\nconst getSymbols = Object.getOwnPropertySymbols;\n\nmodule.exports = (target, ...args) => {\n  if (!isObject(target)) {\n    throw new TypeError('expected the first argument to be an object');\n  }\n\n  if (args.length === 0 || typeof Symbol !== 'function' || typeof getSymbols !== 'function') {\n    return target;\n  }\n\n  for (let arg of args) {\n    let names = getSymbols(arg);\n\n    for (let key of names) {\n      if (isEnumerable.call(arg, key)) {\n        target[key] = arg[key];\n      }\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]' || Array.isArray(val);\n}\n","/*!\n * assign-deep <https://github.com/jonschlinkert/assign-deep>\n *\n * Copyright (c) 2017-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst toString = Object.prototype.toString;\nconst assignSymbols = require('assign-symbols');\n\nconst isValidKey = key => {\n  return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n};\n\nconst assign = module.exports = (target, ...args) => {\n  let i = 0;\n  if (isPrimitive(target)) target = args[i++];\n  if (!target) target = {};\n  for (; i < args.length; i++) {\n    if (isObject(args[i])) {\n      for (const key of Object.keys(args[i])) {\n        if (isValidKey(key)) {\n          if (isObject(target[key]) && isObject(args[i][key])) {\n            assign(target[key], args[i][key]);\n          } else {\n            target[key] = args[i][key];\n          }\n        }\n      }\n      assignSymbols(target, args[i]);\n    }\n  }\n  return target;\n};\n\nfunction isObject(val) {\n  return typeof val === 'function' || toString.call(val) === '[object Object]';\n}\n\nfunction isPrimitive(val) {\n  return typeof val === 'object' ? val === null : typeof val !== 'function';\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","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=4*LN2/(PI*FWHM)] 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","// 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 { ROOT_THREE } from '../util/constants';\n\nexport class Lorentzian {\n  /**\n   * @param {object} [options = {}]\n   * @param {number} [options.height=2/(PI*FWHM)] 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=1/(mu*FWHM/sqrt(4*LN2/PI)+(1-mu)*fwhm*PI*0.5)] 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","/**\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';\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 { rescale as default };\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","/**\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 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  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    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 { 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","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","import { AbstractMatrix } from '../matrix';\n\nexport default class BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n","import BaseView from './base';\n\nexport default class MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n","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 { 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 { 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 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 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","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","import { checkInput } from './checkInput';\nimport { selectMethod } from './selectMethod';\n\n// const STATE_INIT = 0;\n// const STATE_MIN = 1;\n// const STATE_MAX = 2;\n// const STATE_GRADIENT_DIFFERENCE = 3;\n\n// const X = 0;\n// const Y = 1;\n// const WIDTH = 2;\n// const MU = 3;\n\n// const 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.parameters] - options of each parameter to be optimized e.g. For a gaussian shape\n *  it could have x, y and with properties, each of which could contain init, min, max and gradientDifference, those options will define the guess,\n *  the min and max value of the parameter (search space) and the step size to approximate the jacobian matrix respectively. Those options could be a number,\n *  array of numbers, callback, or array of callbacks. Each kind of shape has default parameters so it could be undefined.\n * @param {object} [options.optimization.parameters.x] - options for x parameter.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.init] - definition of the starting point of the parameter (the guess),\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the guess of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.min] - definition of the lower limit of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the min of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.max] - definition of the upper limit of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the max of the first peak and so on.\n * @param {number|callback|array<number|callback>} [options.optimization.parameters.x.gradientDifference] - definition of  the step size to approximate the jacobian matrix of the parameter,\n *  if it is a callback the method pass the peak as the unique input, if it is an array the first element define the gradientDifference of the first peak and so on.\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, peakList, options = {}) {\n  const { y, x, maxY, peaks, paramsFunc, optimization } = checkInput(\n    data,\n    peakList,\n    options,\n  );\n\n  let parameters = optimization.parameters;\n\n  let nbShapes = peaks.length;\n  let parameterKey = Object.keys(parameters);\n  let nbParams = nbShapes * parameterKey.length;\n  let pMin = new Float64Array(nbParams);\n  let pMax = new Float64Array(nbParams);\n  let pInit = new Float64Array(nbParams);\n  let gradientDifference = new Float64Array(nbParams);\n\n  for (let i = 0; i < nbShapes; i++) {\n    let peak = peaks[i];\n    for (let k = 0; k < parameterKey.length; k++) {\n      let key = parameterKey[k];\n      let init = parameters[key].init;\n      let min = parameters[key].min;\n      let max = parameters[key].max;\n      let gradientDifferenceValue = parameters[key].gradientDifference;\n      pInit[i + k * nbShapes] = init[i % init.length](peak);\n      pMin[i + k * nbShapes] = min[i % min.length](peak);\n      pMax[i + k * nbShapes] = max[i % max.length](peak);\n      gradientDifference[i + k * nbShapes] = gradientDifferenceValue[\n        i % gradientDifferenceValue.length\n      ](peak);\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 < nbShapes; i++) {\n    pFit.parameterValues[i + nbShapes] *= maxY;\n    for (let k = 0; k < parameterKey.length; k++) {\n      // we modify the optimized parameters\n      peaks[i][parameterKey[k]] = pFit.parameterValues[i + k * nbShapes];\n    }\n  }\n\n  return result;\n}\n","import assignDeep from 'assign-deep';\nimport getMaxValue from 'ml-array-max';\n\nimport { sumOfGaussianLorentzians } from './shapes/sumOfGaussianLorentzians';\nimport { sumOfGaussians } from './shapes/sumOfGaussians';\nimport { sumOfLorentzians } from './shapes/sumOfLorentzians';\n\nexport function checkInput(data, peaks, options) {\n  let {\n    shape = { kind: 'gaussian' },\n    optimization = {\n      kind: 'lm',\n    },\n  } = options;\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 paramsFunc;\n  let defaultParameters;\n  switch (kind) {\n    case 'gaussian':\n      paramsFunc = sumOfGaussians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.width * 2,\n          min: (peak) => peak.x - peak.width * 2,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        width: {\n          init: (peak) => peak.width,\n          max: (peak) => peak.width * 4,\n          min: (peak) => peak.width * 0.25,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n      };\n      break;\n    case 'lorentzian':\n      paramsFunc = sumOfLorentzians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.width * 2,\n          min: (peak) => peak.x - peak.width * 2,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        width: {\n          init: (peak) => peak.width,\n          max: (peak) => peak.width * 4,\n          min: (peak) => peak.width * 0.25,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n      };\n      break;\n    case 'pseudovoigt':\n      paramsFunc = sumOfGaussianLorentzians;\n      defaultParameters = {\n        x: {\n          init: (peak) => peak.x,\n          max: (peak) => peak.x + peak.width * 2,\n          min: (peak) => peak.x - peak.width * 2,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        y: {\n          init: (peak) => peak.y,\n          max: () => 1.5,\n          min: () => 0,\n          gradientDifference: () => 1e-3,\n        },\n        width: {\n          init: (peak) => peak.width,\n          max: (peak) => peak.width * 4,\n          min: (peak) => peak.width * 0.25,\n          gradientDifference: (peak) => peak.width * 2e-3,\n        },\n        mu: {\n          init: (peak) => (peak.mu !== undefined ? peak.mu : 0.5),\n          min: () => 0,\n          max: () => 1,\n          gradientDifference: () => 0.01,\n        },\n      };\n      break;\n    default:\n      throw new Error('kind of shape is not supported');\n  }\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  for (let i = 0; i < peaks.length; i++) {\n    peaks[i].y /= maxY;\n  }\n\n  let parameters = assignDeep({}, optimization.parameters, defaultParameters);\n\n  for (let key in parameters) {\n    for (let par in parameters[key]) {\n      if (!Array.isArray(parameters[key][par])) {\n        parameters[key][par] = [parameters[key][par]];\n      }\n      if (\n        parameters[key][par].length !== 1 &&\n        parameters[key][par].length !== peaks.length\n      ) {\n        throw new Error(`The length of ${key}-${par} is not correct`);\n      }\n      for (let index = 0; index < parameters[key][par].length; index++) {\n        if (typeof parameters[key][par][index] === 'number') {\n          let value = parameters[key][par][index];\n          parameters[key][par][index] = () => value;\n        }\n      }\n    }\n  }\n\n  optimization.parameters = parameters;\n\n  return {\n    y,\n    x,\n    maxY,\n    peaks,\n    paramsFunc,\n    optimization,\n  };\n}\n","export function addStyle(serie, spectrum, options = {}) {\n    let { color = '#A9A9A9', opacity = 1, lineWidth = 1 } = options;\n    // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n    if (color.match(/#[0-9A-F]{6}$/i)) {\n        color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n    }\n    else {\n        color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n    }\n    serie.style = [\n        {\n            name: 'unselected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth,\n                    dash: 1,\n                },\n            },\n        },\n        {\n            name: 'selected',\n            style: {\n                line: {\n                    color,\n                    width: lineWidth + 2,\n                    dash: 1,\n                },\n            },\n        },\n    ];\n    serie.name = spectrum.label || spectrum.id;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkU3R5bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvanNncmFwaC9hZGRTdHlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLFVBQVUsUUFBUSxDQUN0QixLQUE4QixFQUM5QixRQUFrQixFQUNsQixVQUF3QixFQUFFO0lBRTFCLElBQUksRUFBRSxLQUFLLEdBQUcsU0FBUyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNoRSxpRUFBaUU7SUFDakUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDakMsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDckU7U0FBTTtRQUNMLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxXQUFXLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxLQUFLLENBQUMsS0FBSyxHQUFHO1FBQ1o7WUFDRSxJQUFJLEVBQUUsWUFBWTtZQUNsQixLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFO29CQUNKLEtBQUs7b0JBQ0wsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLElBQUksRUFBRSxDQUFDO2lCQUNSO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRTtvQkFDSixLQUFLO29CQUNMLEtBQUssRUFBRSxTQUFTLEdBQUcsQ0FBQztvQkFDcEIsSUFBSSxFQUFFLENBQUM7aUJBQ1I7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUNGLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUMifQ==","export const COLORS = [\n    '#FFB300',\n    '#803E75',\n    '#FF6800',\n    '#A6BDD7',\n    '#C10020',\n    '#CEA262',\n    '#817066',\n    '#007D34',\n    '#F6768E',\n    '#00538A',\n    '#FF7A5C',\n    '#53377A',\n    '#FF8E00',\n    '#B32851',\n    '#F4C800',\n    '#7F180D',\n    '#93AA00',\n    '#593315',\n    '#F13A13',\n    '#232C16',\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzZ3JhcGgvY29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUMifQ==","export function appendDistinctParameter(values, key, value) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            values: [],\n            count: 0,\n        };\n    }\n    if (!values[key].values.includes(value)) {\n        values[key].values.push(value);\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kRGlzdGluY3RQYXJhbWV0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9hcHBlbmREaXN0aW5jdFBhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQXFDLEVBQ3JDLEdBQVcsRUFDWCxLQUFhO0lBRWIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDWixHQUFHO1lBQ0gsTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7S0FDSDtJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoQztJQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixDQUFDIn0=","export function appendDistinctValue(values, key) {\n    if (!values[key]) {\n        values[key] = {\n            key,\n            count: 0,\n        };\n    }\n    values[key].count++;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwZW5kRGlzdGluY3RWYWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FwcGVuZERpc3RpbmN0VmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFtQyxFQUNuQyxHQUFXO0lBRVgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDWixHQUFHO1lBQ0gsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO0tBQ0g7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEIsQ0FBQyJ9","// Based on https://github.com/scijs/cholesky-solve\r\n\r\n/*\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2013 Eric Arnebäck\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n*/\r\n\r\nfunction ldlSymbolic(\r\n  n /* A and L are n-by-n, where n >= 0 */,\r\n  Ap /* input of size n + 1, not modified */,\r\n  Ai /* input of size nz=Ap[n], not modified */,\r\n  Lp /* output of size n + 1, not defined on input */,\r\n  Parent /* output of size n, not defined on input */,\r\n  Lnz /* output of size n, not defined on input */,\r\n  Flag /* workspace of size n, not defn. on input or output */,\r\n) {\r\n  let i, k, p, kk, p2;\r\n\r\n  for (k = 0; k < n; k++) {\r\n    /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\r\n    Parent[k] = -1; /* parent of k is not yet known */\r\n    Flag[k] = k; /* mark node k as visited */\r\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\r\n    kk = k; /* kth original, or permuted, column */\r\n    p2 = Ap[kk + 1];\r\n    for (p = Ap[kk]; p < p2; p++) {\r\n      /* A (i,k) is nonzero (original or permuted A) */\r\n      i = Ai[p];\r\n\r\n      if (i < k) {\r\n        /* follow path from i to root of etree, stop at flagged node */\r\n        for (; Flag[i] !== k; i = Parent[i]) {\r\n          /* find parent of i if not yet determined */\r\n          if (Parent[i] === -1) Parent[i] = k;\r\n          Lnz[i]++; /* L (k,i) is nonzero */\r\n          Flag[i] = k; /* mark i as visited */\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /* construct Lp index array from Lnz column counts */\r\n  Lp[0] = 0;\r\n  for (k = 0; k < n; k++) {\r\n    Lp[k + 1] = Lp[k] + Lnz[k];\r\n  }\r\n}\r\n\r\nfunction ldlNumeric(\r\n  n /* A and L are n-by-n, where n >= 0 */,\r\n  Ap /* input of size n+1, not modified */,\r\n  Ai /* input of size nz=Ap[n], not modified */,\r\n  Ax /* input of size nz=Ap[n], not modified */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Parent /* input of size n, not modified */,\r\n  Lnz /* output of size n, not defn. on input */,\r\n  Li /* output of size lnz=Lp[n], not defined on input */,\r\n  Lx /* output of size lnz=Lp[n], not defined on input */,\r\n  D /* output of size n, not defined on input */,\r\n  Y /* workspace of size n, not defn. on input or output */,\r\n  Pattern /* workspace of size n, not defn. on input or output */,\r\n  Flag /* workspace of size n, not defn. on input or output */,\r\n) {\r\n  let yi, lKi;\r\n  let i, k, p, kk, p2, len, top;\r\n  for (k = 0; k < n; k++) {\r\n    /* compute nonzero Pattern of kth row of L, in topological order */\r\n    Y[k] = 0.0; /* Y(0:k) is now all zero */\r\n    top = n; /* stack for pattern is empty */\r\n    Flag[k] = k; /* mark node k as visited */\r\n    Lnz[k] = 0; /* count of nonzeros in column k of L */\r\n    kk = k; /* kth original, or permuted, column */\r\n    p2 = Ap[kk + 1];\r\n    for (p = Ap[kk]; p < p2; p++) {\r\n      i = Ai[p]; /* get A(i,k) */\r\n      if (i <= k) {\r\n        Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\r\n        for (len = 0; Flag[i] !== k; i = Parent[i]) {\r\n          Pattern[len++] = i; /* L(k,i) is nonzero */\r\n          Flag[i] = k; /* mark i as visited */\r\n        }\r\n        while (len > 0) Pattern[--top] = Pattern[--len];\r\n      }\r\n    }\r\n    /* compute numerical values kth row of L (a sparse triangular solve) */\r\n    D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\r\n    Y[k] = 0.0;\r\n    for (; top < n; top++) {\r\n      i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\r\n      yi = Y[i]; /* get and clear Y(i) */\r\n      Y[i] = 0.0;\r\n      p2 = Lp[i] + Lnz[i];\r\n      for (p = Lp[i]; p < p2; p++) {\r\n        Y[Li[p]] -= Lx[p] * yi;\r\n      }\r\n      lKi = yi / D[i]; /* the nonzero entry L(k,i) */\r\n      D[k] -= lKi * yi;\r\n      Li[p] = k; /* store L(k,i) in column form of L */\r\n      Lx[p] = lKi;\r\n      Lnz[i]++; /* increment count of nonzeros in col i */\r\n    }\r\n\r\n    if (D[k] === 0.0) return k; /* failure, D(k,k) is zero */\r\n  }\r\n\r\n  return n; /* success, diagonal of D is all nonzero */\r\n}\r\n\r\nfunction ldlLsolve(\r\n  n /* L is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Li /* input of size lnz=Lp[n], not modified */,\r\n  Lx /* input of size lnz=Lp[n], not modified */,\r\n) {\r\n  let j, p, p2;\r\n  for (j = 0; j < n; j++) {\r\n    p2 = Lp[j + 1];\r\n    for (p = Lp[j]; p < p2; p++) {\r\n      X[Li[p]] -= Lx[p] * X[j];\r\n    }\r\n  }\r\n}\r\nfunction ldlDsolve(\r\n  n /* D is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  D /* input of size n, not modified */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[j] /= D[j];\r\n  }\r\n}\r\nfunction ldlLTsolve(\r\n  n /* L is n-by-n, where n >= 0 */,\r\n  X /* size n. right-hand-side on input, soln. on output */,\r\n  Lp /* input of size n+1, not modified */,\r\n  Li /* input of size lnz=Lp[n], not modified */,\r\n  Lx /* input of size lnz=Lp[n], not modified */,\r\n) {\r\n  let j, p, p2;\r\n  for (j = n - 1; j >= 0; j--) {\r\n    p2 = Lp[j + 1];\r\n    for (p = Lp[j]; p < p2; p++) {\r\n      X[j] -= Lx[p] * X[Li[p]];\r\n    }\r\n  }\r\n}\r\n\r\nfunction ldlPerm(\r\n  n /* size of X, B, and P */,\r\n  X /* output of size n. */,\r\n  B /* input of size n. */,\r\n  P /* input permutation array of size n. */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[j] = B[P[j]];\r\n  }\r\n}\r\n\r\nfunction ldlPermt(\r\n  n /* size of X, B, and P */,\r\n  X /* output of size n. */,\r\n  B /* input of size n. */,\r\n  P /* input permutation array of size n. */,\r\n) {\r\n  let j;\r\n  for (j = 0; j < n; j++) {\r\n    X[P[j]] = B[j];\r\n  }\r\n}\r\n\r\nfunction prepare(M, n, P) {\r\n  // if a permutation was specified, apply it.\r\n  if (P) {\r\n    let Pinv = new Array(n);\r\n\r\n    for (let k = 0; k < n; k++) {\r\n      Pinv[P[k]] = k;\r\n    }\r\n\r\n    let Mt = []; // scratch memory\r\n    // Apply permutation. We make M into P*M*P^T\r\n    for (let a = 0; a < M.length; ++a) {\r\n      let ar = Pinv[M[a][0]];\r\n      let ac = Pinv[M[a][1]];\r\n\r\n      // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\r\n      // if permuted element is below diagonal, we simply transpose it.\r\n      if (ac < ar) {\r\n        let t = ac;\r\n        ac = ar;\r\n        ar = t;\r\n      }\r\n\r\n      Mt[a] = [];\r\n      Mt[a][0] = ar;\r\n      Mt[a][1] = ac;\r\n      Mt[a][2] = M[a][2];\r\n    }\r\n\r\n    M = Mt; // copy scratch memory.\r\n  } else {\r\n    // if P argument is null, we just use an identity permutation.\r\n    P = [];\r\n    for (let i = 0; i < n; ++i) {\r\n      P[i] = i;\r\n    }\r\n  }\r\n\r\n  // The sparse matrix we are decomposing is A.\r\n  // Now we shall create A from M.\r\n  let Ap = new Array(n + 1);\r\n  let Ai = new Array(M.length);\r\n  let Ax = new Array(M.length);\r\n\r\n  // count number of non-zero elements in columns.\r\n  let LNZ = [];\r\n  for (let i = 0; i < n; ++i) {\r\n    LNZ[i] = 0;\r\n  }\r\n  for (let a = 0; a < M.length; ++a) {\r\n    LNZ[M[a][1]]++;\r\n  }\r\n\r\n  Ap[0] = 0;\r\n  for (let i = 0; i < n; ++i) {\r\n    Ap[i + 1] = Ap[i] + LNZ[i];\r\n  }\r\n\r\n  let coloffset = [];\r\n  for (let a = 0; a < n; ++a) {\r\n    coloffset[a] = 0;\r\n  }\r\n\r\n  // go through all elements in M, and add them to sparse matrix A.\r\n  for (let i = 0; i < M.length; ++i) {\r\n    let e = M[i];\r\n    let col = e[1];\r\n\r\n    let adr = Ap[col] + coloffset[col];\r\n    Ai[adr] = e[0];\r\n    Ax[adr] = e[2];\r\n\r\n    coloffset[col]++;\r\n  }\r\n\r\n  let D = new Array(n);\r\n  let Y = new Array(n);\r\n  let Lp = new Array(n + 1);\r\n  let Parent = new Array(n);\r\n  let Lnz = new Array(n);\r\n  let Flag = new Array(n);\r\n  let Pattern = new Array(n);\r\n  let bp1 = new Array(n);\r\n  let x = new Array(n);\r\n  let d;\r\n\r\n  ldlSymbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\r\n\r\n  let Lx = new Array(Lp[n]);\r\n  let Li = new Array(Lp[n]);\r\n\r\n  d = ldlNumeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\r\n\r\n  if (d === n) {\r\n    return function (b) {\r\n      ldlPerm(n, bp1, b, P);\r\n      ldlLsolve(n, bp1, Lp, Li, Lx);\r\n      ldlDsolve(n, bp1, D);\r\n      ldlLTsolve(n, bp1, Lp, Li, Lx);\r\n      ldlPermt(n, x, bp1, P);\r\n\r\n      return x;\r\n    };\r\n  } else {\r\n    return null;\r\n  }\r\n}\r\n\r\nexport { prepare as default };\r\n","'use strict'\n\nmodule.exports = cuthillMckee\n\nfunction compareNum(a, b) { return a - b }\n\nfunction cuthillMckee(list, n) {\n  var adj = new Array(n)\n  var visited = new Array(n)\n  for(var i=0; i<n; ++i) {\n    adj[i]     = []\n    visited[i] = false\n  }\n\n  for(var i=0; i<list.length; ++i) {\n    var l = list[i]\n    adj[l[0]].push(l[1])\n  }\n\n  var toVisit = new Array(n)\n  var eol = 0\n  var ptr = 0\n  for(var i=0; i<n; ++i) {\n    if(visited[i]) {\n      continue\n    }\n    toVisit[eol++] = i\n    visited[i] = true\n    while(ptr < eol) {\n      var v = toVisit[ptr++]\n      var nbhd = adj[v]\n      nbhd.sort(compareNum)\n      for(var j=0; j<nbhd.length; ++j) {\n        var u = nbhd[j]\n        if(visited[u]) {\n          continue\n        }\n        visited[u] = true\n        toVisit[eol++] = u\n      }\n    }\n  }\n\n  var result = new Array(n)\n  for(var i=0; i<n; ++i) {\n    result[toVisit[i]] = i\n  }\n\n  return result\n}\n","import cuthillMckee from 'cuthill-mckee';\r\n\r\nconst getClosestNumber = (array = [], goal = 0) => {\r\n  const closest = array.reduce((prev, curr) => {\r\n    return Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev;\r\n  });\r\n  return closest;\r\n};\r\n\r\nconst getCloseIndex = (array = [], goal = 0) => {\r\n  const closest = getClosestNumber(array, goal);\r\n  return array.indexOf(closest);\r\n};\r\n\r\nconst updateSystem = (matrix, y, weights) => {\r\n  let nbPoints = y.length;\r\n  let l = nbPoints - 1;\r\n  let newMatrix = new Array(matrix.length);\r\n  let newVector = new Float64Array(nbPoints);\r\n  for (let i = 0; i < l; i++) {\r\n    let w = weights[i];\r\n    let diag = i * 2;\r\n    let next = diag + 1;\r\n    newMatrix[diag] = matrix[diag].slice();\r\n    newMatrix[next] = matrix[next].slice();\r\n    if (w === 0) {\r\n      newVector[i] = 0;\r\n    } else {\r\n      newVector[i] = y[i] * w;\r\n      newMatrix[diag][2] += w;\r\n    }\r\n  }\r\n  newVector[l] = y[l] * weights[l];\r\n  newMatrix[l * 2] = matrix[l * 2].slice();\r\n  newMatrix[l * 2][2] += weights[l];\r\n\r\n  return [newMatrix, newVector];\r\n};\r\n\r\nconst getDeltaMatrix = (nbPoints, lambda) => {\r\n  let matrix = [];\r\n  let last = nbPoints - 1;\r\n  for (let i = 0; i < last; i++) {\r\n    matrix.push([i, i, lambda * 2]);\r\n    matrix.push([i + 1, i, -1 * lambda]);\r\n  }\r\n  matrix[0][2] = lambda;\r\n  matrix.push([last, last, lambda]);\r\n  return {\r\n    lowerTriangularNonZeros: matrix,\r\n    permutationEncodedArray: cuthillMckee(matrix, nbPoints),\r\n  };\r\n};\r\n\r\nexport { updateSystem, getDeltaMatrix, getCloseIndex, getClosestNumber };\r\n","import Cholesky from './choleskySolver';\r\nimport { updateSystem, getDeltaMatrix, getCloseIndex } from './utils';\r\n\r\n/**\r\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\r\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/master/airPLS_manuscript.pdf)\r\n * @param {Array<number>} x - x axis data useful when control points or zones are submitted\r\n * @param {Array<number>} y - Original data\r\n * @param {object} [options={}] - Options object\r\n * @param {number} [options.maxIterations = 100] - Maximal number of iterations if the method does not reach the stop criterion\r\n * @param {number} [options.factorCriterion = 0.001] - Factor of the sum of absolute value of original data, to compute stop criterion\r\n * @param {Array<number>} [options.weights = [1,1,...]] - Initial weights vector, default each point has the same weight\r\n * @param {number} [options.lambda = 100] - Factor of weights matrix in -> [I + lambda D'D]z = x\r\n * @param {Array<number>} [options.controlPoints = []] - Array of x axis values to force that baseline cross those points.\r\n * @param {Array<number>} [options.baseLineZones = []] - Array of x axis values (as from - to), to force that baseline cross those zones.\r\n * @returns {{corrected: Array<number>, error: number, iteration: number, baseline: Array<number>}}\r\n */\r\nfunction airPLS(x, y, options = {}) {\r\n  let {\r\n    maxIterations = 100,\r\n    lambda = 100,\r\n    factorCriterion = 0.001,\r\n    weights = new Array(y.length).fill(1),\r\n    controlPoints = [],\r\n    baseLineZones = [],\r\n  } = options;\r\n\r\n  if (controlPoints.length > 0) {\r\n    controlPoints.forEach((e, i, arr) => (arr[i] = getCloseIndex(x, e)));\r\n  }\r\n  if (baseLineZones.length > 0) {\r\n    baseLineZones.forEach((range) => {\r\n      let indexFrom = getCloseIndex(x, range.from);\r\n      let indexTo = getCloseIndex(x, range.to);\r\n      if (indexFrom > indexTo) [indexFrom, indexTo] = [indexTo, indexFrom];\r\n      for (let i = indexFrom; i < indexTo; i++) {\r\n        controlPoints.push(i);\r\n      }\r\n    });\r\n  }\r\n\r\n  let baseline, iteration;\r\n  let nbPoints = y.length;\r\n  let l = nbPoints - 1;\r\n  let sumNegDifferences = Number.MAX_SAFE_INTEGER;\r\n  let stopCriterion =\r\n    factorCriterion * y.reduce((sum, e) => Math.abs(e) + sum, 0);\r\n\r\n  let { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(\r\n    nbPoints,\r\n    lambda,\r\n  );\r\n\r\n  for (\r\n    iteration = 0;\r\n    iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion;\r\n    iteration++\r\n  ) {\r\n    let [leftHandSide, rightHandSide] = updateSystem(\r\n      lowerTriangularNonZeros,\r\n      y,\r\n      weights,\r\n    );\r\n\r\n    let cho = Cholesky(leftHandSide, nbPoints, permutationEncodedArray);\r\n\r\n    baseline = cho(rightHandSide);\r\n\r\n    sumNegDifferences = 0;\r\n\r\n    let difference = y.map(calculateError);\r\n\r\n    let maxNegativeDiff = -1 * Number.MAX_SAFE_INTEGER;\r\n    for (let i = 1; i < l; i++) {\r\n      let diff = difference[i];\r\n      if (diff >= 0) {\r\n        weights[i] = 0;\r\n      } else {\r\n        weights[i] = Math.exp((iteration * diff) / sumNegDifferences);\r\n        if (maxNegativeDiff < diff) maxNegativeDiff = diff;\r\n      }\r\n    }\r\n\r\n    let value = Math.exp((iteration * maxNegativeDiff) / sumNegDifferences);\r\n    weights[0] = value;\r\n    weights[l] = value;\r\n    controlPoints.forEach((i) => (weights[i] = value));\r\n  }\r\n\r\n  return {\r\n    corrected: y.map((e, i) => e - baseline[i]),\r\n    baseline,\r\n    iteration,\r\n    error: sumNegDifferences,\r\n  };\r\n\r\n  function calculateError(e, i) {\r\n    let diff = e - baseline[i];\r\n    if (diff < 0) sumNegDifferences += diff;\r\n    return diff;\r\n  }\r\n}\r\n\r\nexport { airPLS as default };\r\n","import airpls from 'ml-airpls';\nimport sequentialFill from 'ml-array-sequential-fill';\n/**\n * Adaptive iteratively reweighted penalized least squares [1]\n *\n * This function calls ml-airpls\n *\n * References:\n * [1] Zhang, Z.-M.; Chen, S.; Liang, Y.-Z.\n * Baseline Correction Using Adaptive Iteratively Reweighted Penalized Least Squares.\n * Analyst 2010, 135 (5), 1138–1146. https://doi.org/10.1039/B922045C.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {object} [options.regression] - Options for the regression\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.regression.§Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function airPLSBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n  let output = airpls(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","export default function maybeToPrecision(value, digits) {\n  if (value < 0) {\n    value = 0 - value;\n    if (typeof digits === 'number') {\n      return `- ${value.toPrecision(digits)}`;\n    } else {\n      return `- ${value.toString()}`;\n    }\n  } else {\n    if (typeof digits === 'number') {\n      return value.toPrecision(digits);\n    } else {\n      return value.toString();\n    }\n  }\n}\n","import isAnyArray from 'is-any-array';\n\nexport { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\nexport default class BaseRegression {\n  constructor() {\n    if (new.target === BaseRegression) {\n      throw new Error('BaseRegression must be subclassed');\n    }\n  }\n\n  predict(x) {\n    if (typeof x === 'number') {\n      return this._predict(x);\n    } else if (isAnyArray(x)) {\n      const y = [];\n      for (let i = 0; i < x.length; i++) {\n        y.push(this._predict(x[i]));\n      }\n      return y;\n    } else {\n      throw new TypeError('x must be a number or array');\n    }\n  }\n\n  _predict() {\n    throw new Error('_predict must be implemented');\n  }\n\n  train() {\n    // Do nothing for this package\n  }\n\n  toString() {\n    return '';\n  }\n\n  toLaTeX() {\n    return '';\n  }\n\n  /**\n   * Return the correlation coefficient of determination (r) and chi-square.\n   * @param {Array<number>} x\n   * @param {Array<number>} y\n   * @return {object}\n   */\n  score(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y) || x.length !== y.length) {\n      throw new Error('x and y must be arrays of the same length');\n    }\n\n    const n = x.length;\n    const y2 = new Array(n);\n    for (let i = 0; i < n; i++) {\n      y2[i] = this._predict(x[i]);\n    }\n\n    let xSum = 0;\n    let ySum = 0;\n    let chi2 = 0;\n    let rmsd = 0;\n    let xSquared = 0;\n    let ySquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n      xSum += y2[i];\n      ySum += y[i];\n      xSquared += y2[i] * y2[i];\n      ySquared += y[i] * y[i];\n      xY += y2[i] * y[i];\n      if (y[i] !== 0) {\n        chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n      }\n      rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n    }\n\n    const r =\n      (n * xY - xSum * ySum) /\n      Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n    return {\n      r: r,\n      r2: r * r,\n      chi2: chi2,\n      rmsd: Math.sqrt(rmsd / n),\n    };\n  }\n}\n","import { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\nimport BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\n\nexport default class PolynomialRegression extends BaseRegression {\n  constructor(x, y, degree) {\n    super();\n    if (x === true) {\n      this.degree = y.degree;\n      this.powers = y.powers;\n      this.coefficients = y.coefficients;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y, degree);\n    }\n  }\n\n  _predict(x) {\n    let y = 0;\n    for (let k = 0; k < this.powers.length; k++) {\n      y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n    }\n    return y;\n  }\n\n  toJSON() {\n    return {\n      name: 'polynomialRegression',\n      degree: this.degree,\n      powers: this.powers,\n      coefficients: this.coefficients,\n    };\n  }\n\n  toString(precision) {\n    return this._toFormula(precision, false);\n  }\n\n  toLaTeX(precision) {\n    return this._toFormula(precision, true);\n  }\n\n  _toFormula(precision, isLaTeX) {\n    let sup = '^';\n    let closeSup = '';\n    let times = ' * ';\n    if (isLaTeX) {\n      sup = '^{';\n      closeSup = '}';\n      times = '';\n    }\n\n    let fn = '';\n    let str = '';\n    for (let k = 0; k < this.coefficients.length; k++) {\n      str = '';\n      if (this.coefficients[k] !== 0) {\n        if (this.powers[k] === 0) {\n          str = maybeToPrecision(this.coefficients[k], precision);\n        } else {\n          if (this.powers[k] === 1) {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x`;\n          } else {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x${sup}${this.powers[k]}${closeSup}`;\n          }\n        }\n\n        if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n          str = ` + ${str}`;\n        } else if (k !== this.coefficients.length - 1) {\n          str = ` ${str}`;\n        }\n      }\n      fn = str + fn;\n    }\n    if (fn.charAt(0) === '+') {\n      fn = fn.slice(1);\n    }\n\n    return `f(x) = ${fn}`;\n  }\n\n  static load(json) {\n    if (json.name !== 'polynomialRegression') {\n      throw new TypeError('not a polynomial regression model');\n    }\n    return new PolynomialRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y, degree) {\n  const n = x.length;\n  let powers;\n  if (Array.isArray(degree)) {\n    powers = degree;\n    degree = powers.length;\n  } else {\n    degree++;\n    powers = new Array(degree);\n    for (let k = 0; k < degree; k++) {\n      powers[k] = k;\n    }\n  }\n  const F = new Matrix(n, degree);\n  const Y = new Matrix([y]);\n  for (let k = 0; k < degree; k++) {\n    for (let i = 0; i < n; i++) {\n      if (powers[k] === 0) {\n        F.set(i, k, 1);\n      } else {\n        F.set(i, k, Math.pow(x[i], powers[k]));\n      }\n    }\n  }\n\n  const FT = new MatrixTransposeView(F);\n  const A = FT.mmul(F);\n  const B = FT.mmul(new MatrixTransposeView(Y));\n\n  pr.degree = degree - 1;\n  pr.powers = powers;\n  pr.coefficients = solve(A, B).to1DArray();\n}\n","import isAnyArray from 'is-any-array';\n\nexport default function checkArraySize(x, y) {\n  if (!isAnyArray(x) || !isAnyArray(y)) {\n    throw new TypeError('x and y must be arrays');\n  }\n  if (x.length !== y.length) {\n    throw new RangeError('x and y arrays must have the same length');\n  }\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport baselineCorrection from 'ml-baseline-correction-regression';\n\n/**\n * Iterative polynomial fitting [1]\n *\n * Implementation based on ml-baseline-correction-regression\n *\n * References:\n * [1] Gan, F.; Ruan, G.; Mo, J.\n * Baseline Correction by Improved Iterative Polynomial Fitting with Automatic Threshold.\n *  Chemometrics and Intelligent Laboratory Systems 2006, 82 (1), 59–65.\n * https://doi.org/10.1016/j.chemolab.2005.08.009.\n * @export\n * @param {Array<number>} ys\n * @param {object} [options] - Options object\n * @param {Array<number>} [options.x] Optional, Independent axis variable. If not specified, we use a linear grid\n * @param {Object} [options.regression]\n * @param {number} [options.regression.maxIterations = 100] - Maximum number of allowed iterations\n * @param {Object} [options.regression]\n * @param {function} [options.regression.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {Object} [options.regression.regressionOptions] - Options for regressionFunction\n * @param {number} [options.regression.tolerance = 0.001] - Convergence error tolerance\n * @returns {BaselineOutput}\n */\nexport function iterativePolynomialBaseline(ys, options = {}) {\n  const numberPoints = ys.length;\n  let { x, regressionOptions } = options;\n  if (!x) {\n    x = sequentialFill({ from: 0, to: numberPoints - 1, size: numberPoints });\n  }\n\n  let output = baselineCorrection(x, ys, regressionOptions);\n\n  return { baseline: output.baseline, correctedSpectrum: output.corrected };\n}\n","import PolynomialRegression from 'ml-regression-polynomial';\r\n\r\n/**\r\n * Iterative regression-based baseline correction\r\n * @param {Array<number>} x - Independent axis variable\r\n * @param {Array<number>} y - Dependent axis variable\r\n * @param {object} [options] - Options object\r\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\r\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\r\n * @param {*} [options.regressionOptions] - Options for regressionFunction\r\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\r\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\r\n */\r\nexport default function baselineCorrectionRegression(x, y, options = {}) {\r\n  let {\r\n    maxIterations = 100,\r\n    Regression = PolynomialRegression,\r\n    regressionOptions,\r\n    tolerance = 0.001,\r\n  } = options;\r\n\r\n  if (!regressionOptions && Regression === PolynomialRegression) {\r\n    regressionOptions = 3;\r\n  }\r\n\r\n  let baseline = y.slice();\r\n  let fitting = y.slice();\r\n  let oldFitting = y;\r\n  let iteration = 0;\r\n  let delta;\r\n  let regression;\r\n  while (iteration < maxIterations) {\r\n    // Calculate the fitting result\r\n    regression = new Regression(x, baseline, regressionOptions);\r\n\r\n    delta = 0;\r\n    for (let i = 0; i < baseline.length; i++) {\r\n      fitting[i] = regression.predict(x[i]);\r\n      if (baseline[i] > fitting[i]) {\r\n        baseline[i] = fitting[i];\r\n      }\r\n\r\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\r\n    }\r\n\r\n    // Stop criterion\r\n    if (delta < tolerance) {\r\n      break;\r\n    } else {\r\n      oldFitting = fitting.slice();\r\n      iteration++;\r\n    }\r\n  }\r\n\r\n  // removes baseline\r\n  let corrected = new Array(baseline.length);\r\n  for (let j = 0; j < baseline.length; j++) {\r\n    corrected[j] = y[j] - baseline[j];\r\n  }\r\n\r\n  return {\r\n    corrected,\r\n    delta,\r\n    iteration,\r\n    baseline,\r\n    regression: regression,\r\n  };\r\n}\r\n","import isArray from 'is-any-array';\n\n/**\n * Checks if input is valdi\n * @param {Array<number>} input\n\n */\nexport function xCheck(input) {\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\nexport function xCheckLengths(array1, array2) {\n  if (array1.length !== array2.length) {\n    throw new TypeError('Length of array1 and array2 must be identical');\n  }\n}\n","import { xCheck } from './xCheck';\nimport { xPadding } from './xPadding';\n/**\n * This function calculates a rolling average\n * @param {Array<Number>} array - the array that will be rotated\n * @param {function} fct callback function that from an array returns a value.\n * @param {object} [options={}]\n * @param {number} [options.window=5] rolling window\n * @param {string} [options.padding.size=0] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='value'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @return {Array<Number>}\n */\nexport function xRolling(array, fct, options = {}) {\n  xCheck(array);\n  if (typeof fct !== 'function') throw Error('fct has to be a function');\n\n  const { window = 5, padding = {} } = options;\n  const { size = window - 1, algorithm, value } = padding;\n\n  array = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n\n  const newArray = [];\n  for (let i = 0; i < array.length - window + 1; i++) {\n    let subArray = new Float64Array(array.buffer, i * 8, window);\n    // we will send a view to the original buffer\n    newArray.push(fct(subArray));\n  }\n\n  return newArray;\n}\n","import { xCheck } from './xCheck';\n\n/**\n * This function pads an array\n * @param {Array} array - the array that will be padded\n * @param {object} [options={}]\n * @param {string} [options.algorithm=''] '', value, circular, duplicate\n * @param {number} [options.size=0] padding size before first element and after last element\n * @param {number} [options.value=0] value to use for padding (if algorithm='value')\n * @return {Array}\n */\nexport function xPadding(array, options = {}) {\n  const { size = 0, value = 0, algorithm = '' } = options;\n  xCheck(array);\n\n  if (!algorithm) {\n    if (array instanceof Float64Array) {\n      return array.slice();\n    } else {\n      return Float64Array.from(array);\n    }\n  }\n\n  let result = new Float64Array(array.length + size * 2);\n\n  for (let i = 0; i < array.length; i++) {\n    result[i + size] = array[i];\n  }\n\n  let fromEnd = size + array.length;\n  let toEnd = 2 * size + array.length;\n\n  switch (algorithm.toLowerCase()) {\n    case 'value':\n      for (let i = 0; i < size; i++) {\n        result[i] = value;\n      }\n      for (let i = fromEnd; i < toEnd; i++) {\n        result[i] = value;\n      }\n      break;\n    case 'duplicate':\n      for (let i = 0; i < size; i++) {\n        result[i] = array[0];\n      }\n      for (let i = fromEnd; i < toEnd; i++) {\n        result[i] = array[array.length - 1];\n      }\n      break;\n    case 'circular':\n      for (let i = 0; i < size; i++) {\n        result[i] =\n          array[(array.length - (size % array.length) + i) % array.length];\n      }\n      for (let i = 0; i < size; i++) {\n        result[i + fromEnd] = array[i % array.length];\n      }\n      break;\n    default:\n      throw Error('xPadding: unknown algorithm');\n  }\n\n  return result;\n}\n","import { xRollingAverage } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingAverageBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window: window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = Object.assign({}, defaults, options);\n  let baseline = xRollingAverage(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline: baseline, correctedSpectrum: corrected };\n}\n","import mean from 'ml-array-mean';\n\nimport { xRolling } from './xRolling';\n\n/**\n * This function calculates a rolling average\n * @param {Array<Number>} array - the array that will be rotated\n * @param {object} [options={}]\n * @param {number} [options.window=5] rolling window\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm=''] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @return {Array<Number>}\n */\nexport function xRollingAverage(array, options = {}) {\n  return xRolling(array, mean, options);\n}\n","import { rollingBall } from 'ml-rolling-ball-baseline';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Algorithm described in (1), but in the implementation here the window width does not change.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n * @returns {BaselineOutput}\n */\nexport function rollingBallBaseline(ys, options = {}) {\n  const baseline = rollingBall(ys, options);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline: baseline, correctedSpectrum: corrected };\n}\n","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport mean from 'ml-array-mean';\nimport min from 'ml-array-min';\n\n/**\n * Rolling ball baseline correction algorithm.\n * From the abstract of (1):\n * \"This algorithm behaves equivalently to traditional polynomial backgrounds in simple spectra,\n * [...] and is considerably more robust for multiple overlapping peaks, rapidly varying background [...]\n *\n * The baseline is the trace one gets by rolling a ball below a spectrum. Algorithm has three steps:\n * Finding the minima in each window, find maxima among minima and then smooth over them by averaging.\n *\n * Reference:\n * (1) Kneen, M. A.; Annegarn, H. J.\n *     Algorithm for Fitting XRF, SEM and PIXE X-Ray Spectra Backgrounds.\n *     Nuclear Instruments and Methods in Physics Research Section B: Beam Interactions with Materials and Atoms 1996, 109–110, 209–213.\n *     https://doi.org/10.1016/0168-583X(95)00908-6.\n * (2) Kristian Hovde Liland, Bjørn-Helge Mevik, Roberto Canteri: baseline.\n *     https://cran.r-project.org/web/packages/baseline/index.html\n * @export\n * @param {Array} spectrum\n * @param {Object} [options={}]\n * @param {Number} [options.windowM] - width of local window for minimization/maximization, defaults to 4% of the spectrum length\n * @param {Number} [options.windowS] - width of local window for smoothing, defaults to 8% of the specturm length\n */\nexport function rollingBall(spectrum, options = {}) {\n  if (!isAnyArray(spectrum)) {\n    throw new Error('Spectrum must be an array');\n  }\n\n  if (spectrum.length === 0) {\n    throw new TypeError('Spectrum must not be empty');\n  }\n\n  const numberPoints = spectrum.length;\n  const maxima = new Float64Array(numberPoints);\n  const minima = new Float64Array(numberPoints);\n  const baseline = new Float64Array(numberPoints);\n\n  // windowM 4 percent of spectrum length\n  // windowS 8 percent of spectrum length\n  const {\n    windowM = Math.round(numberPoints * 0.04),\n    windowS = Math.round(numberPoints * 0.08),\n  } = options;\n\n  // fi(1) in original paper\n  for (let i = 0; i < spectrum.length; i++) {\n    let windowLeft = max([0, i - windowM]);\n    let windowRight = min([i + windowM + 1, spectrum.length]);\n    minima[i] = min(spectrum.slice(windowLeft, windowRight));\n  }\n\n  // fi in original paper\n  for (let i = 0; i < minima.length; i++) {\n    let windowLeft = max([0, i - windowM]);\n    let windowRight = min([i + windowM + 1, minima.length]);\n    maxima[i] = max(minima.slice(windowLeft, windowRight));\n  }\n\n  for (let i = 0; i < minima.length; i++) {\n    let windowLeft = max([0, i - windowS]);\n    let windowRight = min([i + windowS + 1, maxima.length]);\n    baseline[i] = mean(maxima.slice(windowLeft, windowRight));\n  }\n\n  return baseline;\n}\n","import { xRollingMedian } from 'ml-spectra-processing';\n\n/**\n\n *\n * @export\n * @param {Array<number>} ys\n * @param {Object} [options={}]\n * @param {number} [options.window] rolling window size, defaults to 10% of the length of the spectrum\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm='duplicate'] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @returns {BaselineOutput}\n */\nexport function rollingMedianBaseline(ys, options = {}) {\n  let window = Math.max(Math.round(ys.length * 0.1), 2);\n  let defaults = {\n    window: window,\n    padding: {\n      size: window - 1,\n      algorithm: 'duplicate',\n      value: 0,\n    },\n  };\n  let actualOptions = Object.assign({}, defaults, options);\n  let baseline = xRollingMedian(ys, actualOptions);\n  let corrected = new Float64Array(ys.length);\n  for (let i = 0; i < corrected.length; i++) {\n    corrected[i] = ys[i] - baseline[i];\n  }\n\n  return { baseline: baseline, correctedSpectrum: corrected };\n}\n","import median from 'ml-array-median';\n\nimport { xRolling } from './xRolling';\n\n/**\n * This function calculates a rolling average\n * @param {Array<Number>} array - the array that will be rotated\n * @param {object} [options={}]\n * @param {number} [options.window=5] rolling window\n * @param {string} [options.padding.size=window-1] none, value, circular, duplicate\n * @param {string} [options.padding.algorithm=''] none, value, circular, duplicate\n * @param {number} [options.padding.value=0] value to use for padding (if algorithm='value')\n * @return {Array<Number>}\n */\nexport function xRollingMedian(array, options = {}) {\n  return xRolling(array, median, options);\n}\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport sum from 'ml-array-sum';\n\nfunction norm(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _options$algorithm = options.algorithm,\n      algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm,\n      _options$sumValue = options.sumValue,\n      sumValue = _options$sumValue === void 0 ? 1 : _options$sumValue,\n      _options$maxValue = options.maxValue,\n      maxValue = _options$maxValue === void 0 ? 1 : _options$maxValue;\n\n  if (!isArray(input)) {\n    throw new Error('input must be an array');\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  if (input.length === 0) {\n    throw new Error('input must not be empty');\n  }\n\n  switch (algorithm.toLowerCase()) {\n    case 'absolute':\n      {\n        var absoluteSumValue = absoluteSum(input) / sumValue;\n        if (absoluteSumValue === 0) return input.slice(0);\n\n        for (var i = 0; i < input.length; i++) {\n          output[i] = input[i] / absoluteSumValue;\n        }\n\n        return output;\n      }\n\n    case 'max':\n      {\n        var currentMaxValue = max(input);\n        if (currentMaxValue === 0) return input.slice(0);\n        var factor = maxValue / currentMaxValue;\n\n        for (var _i = 0; _i < input.length; _i++) {\n          output[_i] = input[_i] * factor;\n        }\n\n        return output;\n      }\n\n    case 'sum':\n      {\n        var sumFactor = sum(input) / sumValue;\n        if (sumFactor === 0) return input.slice(0);\n\n        for (var _i2 = 0; _i2 < input.length; _i2++) {\n          output[_i2] = input[_i2] / sumFactor;\n        }\n\n        return output;\n      }\n\n    default:\n      throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n  }\n}\n\nfunction absoluteSum(input) {\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += Math.abs(input[i]);\n  }\n\n  return sumValue;\n}\n\nexport default norm;\n","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [zones=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function normalize(zones = [], options = {}) {\n  if (zones.length === 0) return [];\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  zones = JSON.parse(JSON.stringify(zones)).map((zone) =>\n    zone.from > zone.to ? { from: zone.to, to: zone.from } : zone,\n  );\n  zones = zones.sort((a, b) => {\n    if (a.from !== b.from) return a.from - b.from;\n    return a.to - b.to;\n  });\n\n  zones.forEach((zone) => {\n    if (from > zone.from) zone.from = from;\n    if (to < zone.to) zone.to = to;\n  });\n\n  zones = zones.filter((zone) => zone.from <= zone.to);\n  if (zones.length === 0) return [];\n\n  let currentZone = zones[0];\n  let result = [currentZone];\n  for (let i = 1; i < zones.length; i++) {\n    let zone = zones[i];\n    if (zone.from <= currentZone.to) {\n      currentZone.to = zone.to;\n    } else {\n      currentZone = zone;\n      result.push(currentZone);\n    }\n  }\n  return result;\n}\n","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n  return (\n    0.5 * slope * x1 * x1 +\n    intercept * x1 -\n    (0.5 * slope * x0 * x0 + intercept * x0)\n  );\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport { zonesWithPoints, invert } from 'ml-zones';\n\nimport equallySpacedSlot from './equallySpacedSlot';\nimport equallySpacedSmooth from './equallySpacedSmooth';\n\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in the new array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in the new array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @param {Array} [options.zones=[]] array of from / to that should be kept\n * @return {object<x: Array, y:Array>} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n  let { x, y } = arrayXY;\n  let xLength = x.length;\n  let reverse = false;\n  if (x.length > 1 && x[0] > x[1]) {\n    x = x.slice().reverse();\n    y = y.slice().reverse();\n    reverse = true;\n  }\n\n  let {\n    from = x[0],\n    to = x[xLength - 1],\n    variant = 'smooth',\n    numberOfPoints = 100,\n    exclusions = [],\n    zones = [],\n  } = options;\n\n  if (xLength !== y.length) {\n    throw new RangeError(\"the x and y vector doesn't have the same size.\");\n  }\n\n  if (typeof from !== 'number' || isNaN(from)) {\n    throw new RangeError(\"'from' option must be a number\");\n  }\n\n  if (typeof to !== 'number' || isNaN(to)) {\n    throw new RangeError(\"'to' option must be a number\");\n  }\n\n  if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n    throw new RangeError(\"'numberOfPoints' option must be a number\");\n  }\n\n  if (numberOfPoints < 2) {\n    throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n  }\n\n  if (zones.length === 0) {\n    zones = invert(exclusions, { from, to });\n  }\n\n  zones = zonesWithPoints(zones, numberOfPoints, { from, to });\n\n  let xResult = [];\n  let yResult = [];\n  for (let zone of zones) {\n    let zoneResult = processZone(\n      x,\n      y,\n      zone.from,\n      zone.to,\n      zone.numberOfPoints,\n      variant,\n      reverse,\n    );\n\n    xResult = xResult.concat(zoneResult.x);\n    yResult = yResult.concat(zoneResult.y);\n  }\n  if (reverse) {\n    if (from < to) {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    } else {\n      return { x: xResult, y: yResult };\n    }\n  } else {\n    if (from < to) {\n      return { x: xResult, y: yResult };\n    } else {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    }\n  }\n}\n\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n  if (numberOfPoints < 1) {\n    throw new RangeError('the number of points must be at least 1');\n  }\n  let output =\n    variant === 'slot'\n      ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n      : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n  return {\n    x: sequentialFill({\n      from,\n      to,\n      size: numberOfPoints,\n    }),\n    y: output,\n  };\n}\n","import { normalize } from './normalize';\n\n/**\n * Convert an array of exclusions and keep only from / to\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [exclusions=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of zones (after inversion)\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of zones (after inversion)\n */\n\nexport function invert(exclusions = [], options = {}) {\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  exclusions = normalize(exclusions, { from, to });\n  if (exclusions.length === 0) return [{ from, to }];\n\n  let zones = [];\n  for (let i = 0; i < exclusions.length; i++) {\n    let exclusion = exclusions[i];\n    let nextExclusion = exclusions[i + 1];\n    if (i === 0) {\n      if (exclusion.from > from) {\n        zones.push({ from, to: exclusion.from });\n      }\n    }\n    if (i === exclusions.length - 1) {\n      if (exclusion.to < to) {\n        zones.push({ from: exclusion.to, to });\n      }\n    } else {\n      zones.push({ from: exclusion.to, to: nextExclusion.from });\n    }\n  }\n\n  return zones;\n}\n","import { normalize } from './normalize';\n\n/**\n * Add the number of points per zone to reach a specified total\n * @param {Array} [zones=[]]\n * @param {number} [numberOfPoints] Total number of points to distribute between zones\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function zonesWithPoints(zones, numberOfPoints, options = {}) {\n  if (zones.length === 0) return zones;\n  zones = normalize(zones, options);\n\n  const totalSize = zones.reduce((previous, current) => {\n    return previous + (current.to - current.from);\n  }, 0);\n\n  let unitsPerPoint = totalSize / numberOfPoints;\n  let currentTotal = 0;\n  for (let i = 0; i < zones.length - 1; i++) {\n    let zone = zones[i];\n    zone.numberOfPoints = Math.min(\n      Math.round((zone.to - zone.from) / unitsPerPoint),\n      numberOfPoints - currentTotal,\n    );\n    currentTotal += zone.numberOfPoints;\n  }\n\n  zones[zones.length - 1].numberOfPoints = numberOfPoints - currentTotal;\n\n  return zones;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n  let halfStep = step / 2;\n  let lastStep = x[x.length - 1] - x[x.length - 2];\n\n  let start = from - halfStep;\n  let output = new Array(numberOfPoints);\n\n  // Init main variables\n  let min = start;\n  let max = start + step;\n\n  let previousX = -Number.MAX_VALUE;\n  let previousY = 0;\n  let nextX = x[0];\n  let nextY = y[0];\n  let frontOutsideSpectra = 0;\n  let backOutsideSpectra = true;\n\n  let currentValue = 0;\n\n  // for slot algorithm\n  let currentPoints = 0;\n\n  let i = 1; // index of input\n  let j = 0; // index of output\n\n  main: while (true) {\n    if (previousX >= nextX) throw new Error('x must be an increasing serie');\n    while (previousX - max > 0) {\n      // no overlap with original point, just consume current value\n      if (backOutsideSpectra) {\n        currentPoints++;\n        backOutsideSpectra = false;\n      }\n\n      output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n      j++;\n\n      if (j === numberOfPoints) {\n        break main;\n      }\n\n      min = max;\n      max += step;\n      currentValue = 0;\n      currentPoints = 0;\n    }\n\n    if (previousX > min) {\n      currentValue += previousY;\n      currentPoints++;\n    }\n\n    if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n      currentPoints--;\n    }\n\n    previousX = nextX;\n    previousY = nextY;\n\n    if (i < xLength) {\n      nextX = x[i];\n      nextY = y[i];\n      i++;\n    } else {\n      nextX += lastStep;\n      nextY = 0;\n      frontOutsideSpectra++;\n    }\n  }\n\n  return output;\n}\n","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n  let halfStep = step / 2;\n\n  let output = new Array(numberOfPoints);\n\n  let initialOriginalStep = x[1] - x[0];\n  let lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n  // Init main variables\n  let min = from - halfStep;\n  let max = from + halfStep;\n\n  let previousX = Number.MIN_VALUE;\n  let previousY = 0;\n  let nextX = x[0] - initialOriginalStep;\n  let nextY = 0;\n\n  let currentValue = 0;\n  let slope = 0;\n  let intercept = 0;\n  let sumAtMin = 0;\n  let sumAtMax = 0;\n\n  let i = 0; // index of input\n  let j = 0; // index of output\n\n  function getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n  }\n\n  let add = 0;\n  main: while (true) {\n    if (previousX <= min && min <= nextX) {\n      add = integral(0, min - previousX, slope, previousY);\n      sumAtMin = currentValue + add;\n    }\n\n    while (nextX - max >= 0) {\n      // no overlap with original point, just consume current value\n      add = integral(0, max - previousX, slope, previousY);\n      sumAtMax = currentValue + add;\n\n      output[j++] = (sumAtMax - sumAtMin) / step;\n\n      if (j === numberOfPoints) {\n        break main;\n      }\n\n      min = max;\n      max += step;\n      sumAtMin = sumAtMax;\n    }\n\n    currentValue += integral(previousX, nextX, slope, intercept);\n\n    previousX = nextX;\n    previousY = nextY;\n\n    if (i < xLength) {\n      nextX = x[i];\n      nextY = y[i];\n      i++;\n    } else if (i === xLength) {\n      nextX += lastOriginalStep;\n      nextY = 0;\n    }\n\n    slope = getSlope(previousX, previousY, nextX, nextY);\n    intercept = -slope * previousX + previousY;\n  }\n\n  return output;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array<number>, y: Array<number>}}\n */\n\nexport default function filterX(points, options = {}) {\n  const { x, y } = points;\n  const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n  let zones = getZones(from, to, exclusions);\n\n  let currentZoneIndex = 0;\n  let newX = [];\n  let newY = [];\n  let position = 0;\n  while (position < x.length) {\n    if (\n      x[position] <= zones[currentZoneIndex].to &&\n      x[position] >= zones[currentZoneIndex].from\n    ) {\n      newX.push(x[position]);\n      newY.push(y[position]);\n    } else {\n      if (x[position] > zones[currentZoneIndex].to) {\n        currentZoneIndex++;\n        if (!zones[currentZoneIndex]) break;\n      }\n    }\n    position++;\n  }\n\n  return {\n    x: newX,\n    y: newY,\n  };\n}\n","export default function getZones(from, to, exclusions = []) {\n  if (from > to) {\n    [from, to] = [to, from];\n  }\n\n  // in exclusions from and to have to be defined\n  exclusions = exclusions.filter(\n    (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined,\n  );\n\n  exclusions = JSON.parse(JSON.stringify(exclusions));\n  // we ensure that from before to\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from > exclusion.to) {\n      [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n    }\n  });\n\n  exclusions.sort((a, b) => a.from - b.from);\n\n  // we will rework the exclusions in order to remove overlap and outside range (from / to)\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from < from) exclusion.from = from;\n    if (exclusion.to > to) exclusion.to = to;\n  });\n  for (let i = 0; i < exclusions.length - 1; i++) {\n    if (exclusions[i].to > exclusions[i + 1].from) {\n      exclusions[i].to = exclusions[i + 1].from;\n    }\n  }\n  exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n  if (!exclusions || exclusions.length === 0) {\n    return [{ from, to }];\n  }\n\n  let zones = [];\n  let currentFrom = from;\n  for (let exclusion of exclusions) {\n    if (currentFrom < exclusion.from) {\n      zones.push({\n        from: currentFrom,\n        to: exclusion.from,\n      });\n    }\n\n    currentFrom = exclusion.to;\n  }\n  if (currentFrom < to) {\n    zones.push({\n      from: currentFrom,\n      to: to,\n    });\n  }\n\n  return zones;\n}\n","'use strict';\n\nvar defaultOptions = {\n  size: 1,\n  value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n  var len = data.length;\n  if (typeof options.size === 'number') {\n    options.size = [options.size, options.size];\n  }\n\n  var cond = len + options.size[0] + options.size[1];\n\n  var output;\n  if (options.output) {\n    if (options.output.length !== cond) {\n      throw new RangeError('Wrong output size');\n    }\n    output = options.output;\n  } else {\n    output = new Array(cond);\n  }\n\n  var i;\n  if (options.value === 'circular') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) {\n        output[i] = data[(len - (options.size[0] % len) + i) % len];\n      } else if (i < options.size[0] + len) {\n        output[i] = data[i - options.size[0]];\n      } else {\n        output[i] = data[(i - options.size[0]) % len];\n      }\n    }\n  } else if (options.value === 'replicate') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[0];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[len - 1];\n    }\n  } else if (options.value === 'symmetric') {\n    if (options.size[0] > len || options.size[1] > len) {\n      throw new RangeError(\n        'expanded value should not be bigger than the data length'\n      );\n    }\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[2 * len + options.size[0] - i - 1];\n    }\n  } else {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = options.value;\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = options.value;\n    }\n  }\n\n  return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n  // var row = data.length;\n  // var col = data[0].length;\n  if (options.size[0] === undefined) {\n    options.size = [options.size, options.size, options.size, options.size];\n  }\n  throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array <number>} data\n * @param {object} options\n */\nfunction padArray(data, options) {\n  options = Object.assign({}, defaultOptions, options);\n  if (Array.isArray(data)) {\n    if (Array.isArray(data[0])) return matrixCase(data, options);\n    else return arrayCase(data, options);\n  } else {\n    throw new TypeError('data should be an array');\n  }\n}\n\nmodule.exports = padArray;\n","import { Matrix, MatrixTransposeView, inverse } from 'ml-matrix';\nimport padArray from 'ml-pad-array';\nfunction factorial(n) {\n    let r = 1;\n    while (n > 0)\n        r *= n--;\n    return r;\n}\nexport default function savitzkyGolay(data, h, options = {}) {\n    const { windowSize = 5, derivative = 1, polynomial = 2, pad = 'none', padValue = 'replicate', } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    let C, norm;\n    let step = Math.floor(windowSize / 2);\n    if (pad === 'pre') {\n        data = padArray(data, { size: step, value: padValue });\n    }\n    let ans = new Array(data.length - 2 * step);\n    if (windowSize === 5 &&\n        polynomial === 2 &&\n        (derivative === 1 || derivative === 2)) {\n        if (derivative === 1) {\n            C = [-2, -1, 0, 1, 2];\n            norm = 10;\n        }\n        else {\n            C = [2, -1, -2, -1, 2];\n            norm = 7;\n        }\n    }\n    else {\n        let J = Matrix.ones(windowSize, polynomial + 1);\n        let inic = -(windowSize - 1) / 2;\n        for (let i = 0; i < J.rows; i++) {\n            for (let j = 0; j < J.columns; j++) {\n                if (inic + 1 !== 0 || j !== 0)\n                    J.set(i, j, Math.pow(inic + i, j));\n            }\n        }\n        let Jtranspose = new MatrixTransposeView(J);\n        let Jinv = inverse(Jtranspose.mmul(J));\n        C = Jinv.mmul(Jtranspose);\n        C = C.getRow(derivative);\n        norm = 1 / factorial(derivative);\n    }\n    let det = norm * Math.pow(h, derivative);\n    for (let k = 0; k < data.length - 2 * step; k++) {\n        let d = 0;\n        for (let l = 0; l < C.length; l++)\n            d += (C[l] * data[l + k]) / det;\n        ans[k] = d;\n    }\n    if (pad === 'post') {\n        ans = padArray(ans, { size: step, value: padValue });\n    }\n    return ans;\n}\n//# sourceMappingURL=index.js.map","'use strict';\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\n/**\n * Computes the sum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.sum = function sum(values) {\n    var sum = 0;\n    for (var i = 0; i < values.length; i++) {\n        sum += values[i];\n    }\n    return sum;\n};\n\n/**\n * Computes the maximum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.max = function max(values) {\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] > max) max = values[i];\n    }\n    return max;\n};\n\n/**\n * Computes the minimum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.min = function min(values) {\n    var min = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n    }\n    return min;\n};\n\n/**\n * Computes the min and max of the given values\n * @param {Array} values\n * @returns {{min: number, max: number}}\n */\nexports.minMax = function minMax(values) {\n    var min = values[0];\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n        if (values[i] > max) max = values[i];\n    }\n    return {\n        min: min,\n        max: max\n    };\n};\n\n/**\n * Computes the arithmetic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.arithmeticMean = function arithmeticMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        sum += values[i];\n    }\n    return sum / l;\n};\n\n/**\n * {@link arithmeticMean}\n */\nexports.mean = exports.arithmeticMean;\n\n/**\n * Computes the geometric mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.geometricMean = function geometricMean(values) {\n    var mul = 1;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        mul *= values[i];\n    }\n    return Math.pow(mul, 1 / l);\n};\n\n/**\n * Computes the mean of the log of the given values\n * If the return value is exponentiated, it gives the same result as the\n * geometric mean.\n * @param {Array} values\n * @returns {number}\n */\nexports.logMean = function logMean(values) {\n    var lnsum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        lnsum += Math.log(values[i]);\n    }\n    return lnsum / l;\n};\n\n/**\n * Computes the weighted grand mean for a list of means and sample sizes\n * @param {Array} means - Mean values for each set of samples\n * @param {Array} samples - Number of original values for each set of samples\n * @returns {number}\n */\nexports.grandMean = function grandMean(means, samples) {\n    var sum = 0;\n    var n = 0;\n    var l = means.length;\n    for (var i = 0; i < l; i++) {\n        sum += samples[i] * means[i];\n        n += samples[i];\n    }\n    return sum / n;\n};\n\n/**\n * Computes the truncated mean of the given values using a given percentage\n * @param {Array} values\n * @param {number} percent - The percentage of values to keep (range: [0,1])\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.truncatedMean = function truncatedMean(values, percent, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var k = Math.floor(l * percent);\n    var sum = 0;\n    for (var i = k; i < (l - k); i++) {\n        sum += values[i];\n    }\n    return sum / (l - 2 * k);\n};\n\n/**\n * Computes the harmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.harmonicMean = function harmonicMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        if (values[i] === 0) {\n            throw new RangeError('value at index ' + i + 'is zero');\n        }\n        sum += 1 / values[i];\n    }\n    return l / sum;\n};\n\n/**\n * Computes the contraharmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.contraHarmonicMean = function contraHarmonicMean(values) {\n    var r1 = 0;\n    var r2 = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        r1 += values[i] * values[i];\n        r2 += values[i];\n    }\n    if (r2 < 0) {\n        throw new RangeError('sum of values is negative');\n    }\n    return r1 / r2;\n};\n\n/**\n * Computes the median of the given values\n * @param {Array} values\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.median = function median(values, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var half = Math.floor(l / 2);\n    if (l % 2 === 0) {\n        return (values[half - 1] + values[half]) * 0.5;\n    } else {\n        return values[half];\n    }\n};\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.variance = function variance(values, unbiased) {\n    if (unbiased === undefined) unbiased = true;\n    var theMean = exports.mean(values);\n    var theVariance = 0;\n    var l = values.length;\n\n    for (var i = 0; i < l; i++) {\n        var x = values[i] - theMean;\n        theVariance += x * x;\n    }\n\n    if (unbiased) {\n        return theVariance / (l - 1);\n    } else {\n        return theVariance / l;\n    }\n};\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.standardDeviation = function standardDeviation(values, unbiased) {\n    return Math.sqrt(exports.variance(values, unbiased));\n};\n\nexports.standardError = function standardError(values) {\n    return exports.standardDeviation(values) / Math.sqrt(values.length);\n};\n\n/**\n * IEEE Transactions on biomedical engineering, vol. 52, no. 1, january 2005, p. 76-\n * Calculate the standard deviation via the Median of the absolute deviation\n *  The formula for the standard deviation only holds for Gaussian random variables.\n * @returns {{mean: number, stdev: number}}\n */\nexports.robustMeanAndStdev = function robustMeanAndStdev(y) {\n    var mean = 0, stdev = 0;\n    var length = y.length, i = 0;\n    for (i = 0; i < length; i++) {\n        mean += y[i];\n    }\n    mean /= length;\n    var averageDeviations = new Array(length);\n    for (i = 0; i < length; i++)\n        averageDeviations[i] = Math.abs(y[i] - mean);\n    averageDeviations.sort(compareNumbers);\n    if (length % 2 === 1) {\n        stdev = averageDeviations[(length - 1) / 2] / 0.6745;\n    } else {\n        stdev = 0.5 * (averageDeviations[length / 2] + averageDeviations[length / 2 - 1]) / 0.6745;\n    }\n\n    return {\n        mean: mean,\n        stdev: stdev\n    };\n};\n\nexports.quartiles = function quartiles(values, alreadySorted) {\n    if (typeof (alreadySorted) === 'undefined') alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n\n    var quart = values.length / 4;\n    var q1 = values[Math.ceil(quart) - 1];\n    var q2 = exports.median(values, true);\n    var q3 = values[Math.ceil(quart * 3) - 1];\n\n    return {q1: q1, q2: q2, q3: q3};\n};\n\nexports.pooledStandardDeviation = function pooledStandardDeviation(samples, unbiased) {\n    return Math.sqrt(exports.pooledVariance(samples, unbiased));\n};\n\nexports.pooledVariance = function pooledVariance(samples, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var sum = 0;\n    var length = 0, l = samples.length;\n    for (var i = 0; i < l; i++) {\n        var values = samples[i];\n        var vari = exports.variance(values);\n\n        sum += (values.length - 1) * vari;\n\n        if (unbiased)\n            length += values.length - 1;\n        else\n            length += values.length;\n    }\n    return sum / length;\n};\n\nexports.mode = function mode(values) {\n    var l = values.length,\n        itemCount = new Array(l),\n        i;\n    for (i = 0; i < l; i++) {\n        itemCount[i] = 0;\n    }\n    var itemArray = new Array(l);\n    var count = 0;\n\n    for (i = 0; i < l; i++) {\n        var index = itemArray.indexOf(values[i]);\n        if (index >= 0)\n            itemCount[index]++;\n        else {\n            itemArray[count] = values[i];\n            itemCount[count] = 1;\n            count++;\n        }\n    }\n\n    var maxValue = 0, maxIndex = 0;\n    for (i = 0; i < count; i++) {\n        if (itemCount[i] > maxValue) {\n            maxValue = itemCount[i];\n            maxIndex = i;\n        }\n    }\n\n    return itemArray[maxIndex];\n};\n\nexports.covariance = function covariance(vector1, vector2, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var mean1 = exports.mean(vector1);\n    var mean2 = exports.mean(vector2);\n\n    if (vector1.length !== vector2.length)\n        throw 'Vectors do not have the same dimensions';\n\n    var cov = 0, l = vector1.length;\n    for (var i = 0; i < l; i++) {\n        var x = vector1[i] - mean1;\n        var y = vector2[i] - mean2;\n        cov += x * y;\n    }\n\n    if (unbiased)\n        return cov / (l - 1);\n    else\n        return cov / l;\n};\n\nexports.skewness = function skewness(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n\n    var s2 = 0, s3 = 0, l = values.length;\n    for (var i = 0; i < l; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s3 += dev * dev * dev;\n    }\n    var m2 = s2 / l;\n    var m3 = s3 / l;\n\n    var g = m3 / (Math.pow(m2, 3 / 2.0));\n    if (unbiased) {\n        var a = Math.sqrt(l * (l - 1));\n        var b = l - 2;\n        return (a / b) * g;\n    } else {\n        return g;\n    }\n};\n\nexports.kurtosis = function kurtosis(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n    var n = values.length, s2 = 0, s4 = 0;\n\n    for (var i = 0; i < n; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s4 += dev * dev * dev * dev;\n    }\n    var m2 = s2 / n;\n    var m4 = s4 / n;\n\n    if (unbiased) {\n        var v = s2 / (n - 1);\n        var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3));\n        var b = s4 / (v * v);\n        var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n\n        return a * b - 3 * c;\n    } else {\n        return m4 / (m2 * m2) - 3;\n    }\n};\n\nexports.entropy = function entropy(values, eps) {\n    if (typeof (eps) === 'undefined') eps = 0;\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * Math.log(values[i] + eps);\n    return -sum;\n};\n\nexports.weightedMean = function weightedMean(values, weights) {\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * weights[i];\n    return sum;\n};\n\nexports.weightedStandardDeviation = function weightedStandardDeviation(values, weights) {\n    return Math.sqrt(exports.weightedVariance(values, weights));\n};\n\nexports.weightedVariance = function weightedVariance(values, weights) {\n    var theMean = exports.weightedMean(values, weights);\n    var vari = 0, l = values.length;\n    var a = 0, b = 0;\n\n    for (var i = 0; i < l; i++) {\n        var z = values[i] - theMean;\n        var w = weights[i];\n\n        vari += w * (z * z);\n        b += w;\n        a += w * w;\n    }\n\n    return vari * (b / (b * b - a));\n};\n\nexports.center = function center(values, inPlace) {\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n\n    var result = values;\n    if (!inPlace)\n        result = [].concat(values);\n\n    var theMean = exports.mean(result), l = result.length;\n    for (var i = 0; i < l; i++)\n        result[i] -= theMean;\n};\n\nexports.standardize = function standardize(values, standardDev, inPlace) {\n    if (typeof (standardDev) === 'undefined') standardDev = exports.standardDeviation(values);\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n    var l = values.length;\n    var result = inPlace ? values : new Array(l);\n    for (var i = 0; i < l; i++)\n        result[i] = values[i] / standardDev;\n    return result;\n};\n\nexports.cumulativeSum = function cumulativeSum(array) {\n    var l = array.length;\n    var result = new Array(l);\n    result[0] = array[0];\n    for (var i = 1; i < l; i++)\n        result[i] = result[i - 1] + array[i];\n    return result;\n};\n","import { airPLSBaseline, rollingAverageBaseline, iterativePolynomialBaseline, rollingBallBaseline, rollingMedianBaseline, } from 'baselines';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nimport savitzkyGolay from 'ml-savitzky-golay';\nimport { xDivide, xSubtract, xMultiply, xAdd, xIsMonotone, xyEnsureGrowingX, } from 'ml-spectra-processing';\nimport Stat from 'ml-stat/array';\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n    var _a;\n    let data = {\n        x: spectrum.variables.x.data,\n        y: spectrum.variables.y.data,\n    };\n    let newSpectrum = {\n        variables: {\n            x: {\n                data: spectrum.variables.x.data,\n                units: spectrum.variables.x.units,\n                label: spectrum.variables.x.label,\n            },\n            y: {\n                data: spectrum.variables.y.data,\n                units: spectrum.variables.y.units,\n                label: spectrum.variables.y.label,\n            },\n        },\n    };\n    if (spectrum.title)\n        newSpectrum.title = spectrum.title;\n    if (spectrum.dataType)\n        newSpectrum.dataType = spectrum.dataType;\n    if (spectrum.meta)\n        newSpectrum.meta = spectrum.meta;\n    let { from = spectrum.variables.x.min, to = spectrum.variables.x.max, numberOfPoints, filters = [], exclusions = [], processing = '', keepYUnits = false, } = options;\n    let { x, y } = filterX(data, { from, to });\n    switch (processing) {\n        case 'firstDerivative':\n            if (options.processing) {\n                newSpectrum.variables.y.units = '';\n                newSpectrum.variables.y.label =\n                    newSpectrum.variables.y.label &&\n                        `1st derivative of ${newSpectrum.variables.y.label.replace(/\\s*\\[.*\\]/, '')}`;\n                y = savitzkyGolay(y, 1, {\n                    derivative: 1,\n                    polynomial: 2,\n                    windowSize: 5,\n                });\n                x = x.slice(2, x.length - 2);\n            }\n            break;\n        case 'secondDerivative':\n            if (options.processing) {\n                newSpectrum.variables.y.units = '';\n                newSpectrum.variables.y.label =\n                    newSpectrum.variables.y.label &&\n                        `2nd derivative of ${newSpectrum.variables.y.label.replace(/\\s*\\[.*\\]/, '')}`;\n                y = savitzkyGolay(y, 1, {\n                    derivative: 2,\n                    polynomial: 2,\n                    windowSize: 5,\n                });\n                x = x.slice(2, x.length - 2);\n            }\n            break;\n        case 'thirdDerivative':\n            if (options.processing) {\n                newSpectrum.variables.y.units = '';\n                newSpectrum.variables.y.label =\n                    newSpectrum.variables.y.label &&\n                        `3rd derivative of ${newSpectrum.variables.y.label.replace(/\\s*\\[.*\\]/, '')}`;\n                y = savitzkyGolay(y, 1, {\n                    derivative: 3,\n                    polynomial: 2,\n                    windowSize: 5,\n                });\n                x = x.slice(2, x.length - 2);\n            }\n            break;\n        default:\n    }\n    if (!keepYUnits && filters.length) {\n        // filters change the y axis, we get rid of the units\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label = (_a = newSpectrum.variables.y.label) === null || _a === void 0 ? void 0 : _a.replace(/\\s*\\[.*\\]/, '');\n    }\n    for (let filter of filters) {\n        let filterOptions = filter.options || {};\n        switch (filter.name.toLowerCase()) {\n            case 'centermean': {\n                let mean = Stat.mean(y);\n                y = xSubtract(y, mean);\n                break;\n            }\n            case 'dividebysd': {\n                let std = Stat.standardDeviation(y);\n                y = xDivide(y, std);\n                break;\n            }\n            case 'normalize': {\n                y = normed(y, {\n                    sumValue: filterOptions.value ? Number(filterOptions.value) : 1,\n                    algorithm: 'absolute',\n                });\n                break;\n            }\n            case 'rescale': {\n                y = rescale(y, {\n                    min: filterOptions.min ? Number(filterOptions.min) : 0,\n                    max: filterOptions.max ? Number(filterOptions.max) : 1,\n                });\n                break;\n            }\n            case 'dividebymax': {\n                let maxValue = max(y);\n                y = xDivide(y, maxValue);\n                break;\n            }\n            case 'multiply': {\n                y = xMultiply(y, filterOptions.value ? Number(filterOptions.value) : 1);\n                break;\n            }\n            case 'add': {\n                y = xAdd(y, filterOptions.value ? Number(filterOptions.value) : 0);\n                break;\n            }\n            case 'airplsbaseline': {\n                y = airPLSBaseline(y, filterOptions).correctedSpectrum;\n                break;\n            }\n            case 'rollingaveragebaseline': {\n                y = rollingAverageBaseline(y, filterOptions).correctedSpectrum;\n                break;\n            }\n            case 'iterativepolynomialbaseline': {\n                y = iterativePolynomialBaseline(y, undefined, filterOptions).correctedSpectrum;\n                break;\n            }\n            case 'rollingballbaseline': {\n                y = rollingBallBaseline(y, filterOptions).correctedSpectrum;\n                break;\n            }\n            case 'rollingmedianbaseline': {\n                y = rollingMedianBaseline(y, filterOptions).correctedSpectrum;\n                break;\n            }\n            case 'ensuregrowing': {\n                const ans = xyEnsureGrowingX({ x, y });\n                x = ans.x;\n                y = ans.y;\n                break;\n            }\n            case '':\n            case undefined:\n                break;\n            default:\n                throw new Error(`Unknown process kind: ${filter.name}`);\n        }\n    }\n    if (!numberOfPoints) {\n        data = filterX({ x, y }, { from, to, exclusions });\n    }\n    else {\n        data = equallySpaced({ x, y }, { from, to, numberOfPoints, exclusions });\n    }\n    newSpectrum.variables.x.data = x;\n    newSpectrum.variables.x.min = min(x);\n    newSpectrum.variables.x.max = max(x);\n    newSpectrum.variables.x.isMonotone = xIsMonotone(x);\n    newSpectrum.variables.y.data = y;\n    newSpectrum.variables.y.min = min(y);\n    newSpectrum.variables.y.max = max(y);\n    newSpectrum.variables.y.isMonotone = xIsMonotone(y);\n    return newSpectrum;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tm9ybWFsaXplZFNwZWN0cnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZ2V0Tm9ybWFsaXplZFNwZWN0cnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIscUJBQXFCLEdBQ3RCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxPQUFPLE1BQU0sc0JBQXNCLENBQUM7QUFDM0MsT0FBTyxhQUFhLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixXQUFXLEVBQ1gsZ0JBQWdCLEdBQ2pCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBSWpDLE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsUUFBc0IsRUFDdEIsVUFBcUMsRUFBRTs7SUFFdkMsSUFBSSxJQUFJLEdBQUc7UUFDVCxDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUM1QixDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUM3QixDQUFDO0lBQ0YsSUFBSSxXQUFXLEdBQWlCO1FBQzlCLFNBQVMsRUFBRTtZQUNULENBQUMsRUFBRTtnQkFDRCxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDL0IsS0FBSyxFQUFFLFFBQVEsQ0FB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","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.7.6\";\n\n  return Qty;\n\n})));\n","import Qty from 'js-quantities';\nexport function convertUnit(array, fromUnit, toUnit) {\n    fromUnit = normalize(fromUnit);\n    toUnit = normalize(toUnit);\n    if (fromUnit === toUnit)\n        return array;\n    try {\n        const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n        return convert(array);\n    }\n    catch (e) {\n        return undefined;\n    }\n}\nfunction normalize(unit) {\n    unit = unit.replace(/°C/g, 'tempC');\n    unit = unit.replace(/°F/g, 'tempF');\n    unit = unit.replace(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n    return unit;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydFVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jb252ZXJ0VW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFjaEMsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBVSxFQUNWLFFBQWdCLEVBQ2hCLE1BQWM7SUFFZCxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsSUFBSSxRQUFRLEtBQUssTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXRDLElBQUk7UUFDRixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLHVCQUF1QjtRQUM3RSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN2QjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxTQUFTLENBQUM7S0FDbEI7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBWTtJQUM3QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9","const testRegExp = /^\\/((?:\\\\\\/|[^/])+)\\/([migyu]{0,5})?$/;\nexport function ensureRegexp(string) {\n    const parts = testRegExp.exec(string);\n    if (parts) {\n        try {\n            return new RegExp(parts[1], parts[2]);\n        }\n        catch (err) {\n            return stringToRegexp(string);\n        }\n    }\n    else {\n        return stringToRegexp(string);\n    }\n}\nfunction stringToRegexp(string, flags = 'i') {\n    return new RegExp(string.replace(/[[\\]\\\\{}()+*?.$^|]/g, function (match) {\n        return `\\\\${match}`;\n    }), flags);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlUmVnZXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZW5zdXJlUmVnZXhwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxHQUFHLHVDQUF1QyxDQUFDO0FBRTNELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBVztJQUN0QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksS0FBSyxFQUFFO1FBQ1QsSUFBSTtZQUNGLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtLQUNGO1NBQU07UUFDTCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMvQjtBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxNQUFXLEVBQUUsS0FBSyxHQUFHLEdBQUc7SUFDOUMsT0FBTyxJQUFJLE1BQU0sQ0FDZixNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsS0FBYTtRQUMzRCxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUNOLENBQUM7QUFDSixDQUFDIn0=","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\nimport { convertUnit } from './convertUnit';\nexport function getConvertedVariable(variable, newUnits) {\n    const data = variable.units !== undefined && variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n        ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n        : variable.data;\n    return {\n        units: newUnits,\n        label: variable.label.replace(`[${variable.units || ''}]`, `[${newUnits}]`),\n        data: data || [],\n        min: data ? min(data) : undefined,\n        max: data ? max(data) : undefined,\n        isMonotone: xIsMonotone(data),\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29udmVydGVkVmFyaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9nZXRDb252ZXJ0ZWRWYXJpYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUlwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsUUFBc0IsRUFDdEIsUUFBZ0I7SUFFaEIsTUFBTSxJQUFJLEdBQ1IsUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsc0RBQXNEO1FBQ2hILENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7UUFDbEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDcEIsT0FBTztRQUNMLEtBQUssRUFBRSxRQUFRO1FBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQzNFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtRQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDakMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2pDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO0tBQzlCLENBQUM7QUFDSixDQUFDIn0=","import { convertUnit } from './convertUnit';\nimport { ensureRegexp } from './ensureRegexp';\nimport { getConvertedVariable } from './getConvertedVariable';\n/**\n * Retrieve the spectrum with only X/Y data that match all the selectors\n * If more than one variable match the selector the 'x' or 'y' variable will be\n * taken\n */\nexport function getXYSpectrum(spectra = [], selector = {}) {\n    if (spectra.length < 1)\n        return;\n    for (let spectrum of spectra) {\n        let variableNames = Object.keys(spectrum.variables);\n        if (!(variableNames.length > 1))\n            continue;\n        let { dataType, title, xUnits, yUnits, variables, xVariable = 'x', yVariable = 'y', units, labels, xLabel, yLabel, meta, } = selector;\n        // we filter on general spectrum information\n        if (dataType) {\n            dataType = ensureRegexp(dataType);\n            if (!spectrum.dataType || !spectrum.dataType.match(dataType))\n                continue;\n        }\n        if (title) {\n            title = ensureRegexp(title);\n            if (!spectrum.title || !spectrum.title.match(title))\n                continue;\n        }\n        if (meta && typeof meta === 'object') {\n            if (!spectrum.meta)\n                continue;\n            for (let key in spectrum.meta) {\n                if (!spectrum.meta[key])\n                    continue;\n                let value = ensureRegexp(spectrum.meta[key]);\n                if (!spectrum.meta[key].match(value))\n                    continue;\n            }\n        }\n        if (units && !xUnits && !yUnits)\n            [yUnits, xUnits] = units.split(/\\s*vs\\s*/);\n        if (labels && !xLabel && !yLabel) {\n            [yLabel, xLabel] = labels.split(/\\s*vs\\s*/);\n        }\n        if (variables)\n            [yVariable, xVariable] = variables.split(/\\s*vs\\s*/);\n        if (xLabel)\n            xLabel = ensureRegexp(xLabel);\n        if (yLabel)\n            yLabel = ensureRegexp(yLabel);\n        let x = getPossibleVariable(spectrum.variables, {\n            units: xUnits,\n            label: xLabel,\n            variableName: xVariable,\n        });\n        let y = getPossibleVariable(spectrum.variables, {\n            units: yUnits,\n            label: yLabel,\n            variableName: yVariable,\n        });\n        if (x && y) {\n            return {\n                title: spectrum.title,\n                dataType: spectrum.dataType,\n                meta: spectrum.meta,\n                variables: { x, y },\n            };\n        }\n    }\n    return;\n}\nfunction getPossibleVariable(variables, selector = {}) {\n    const { units, label, variableName } = selector;\n    let possible = { ...variables };\n    if (units !== undefined) {\n        for (let key in possible) {\n            let converted = convertUnit(1, variables[key].units || '', units);\n            if (converted) {\n                possible[key] = getConvertedVariable(variables[key], units);\n            }\n            else {\n                possible[key] = undefined;\n            }\n        }\n    }\n    if (label !== undefined) {\n        for (let key in possible) {\n            if (!variables[key].label.match(label)) {\n                possible[key] = undefined;\n            }\n        }\n    }\n    if (variableName !== undefined) {\n        if (possible[variableName])\n            return possible[variableName];\n        if (possible[variableName.toUpperCase()]) {\n            return possible[variableName.toUpperCase()];\n        }\n        if (possible[variableName.toLowerCase()]) {\n            return possible[variableName.toLowerCase()];\n        }\n    }\n    const possibleFiltered = Object.values(possible).filter((val) => val !== undefined);\n    if (possibleFiltered.length > 0) {\n        return possibleFiltered[0];\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0WFlTcGVjdHJ1bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2dldFhZU3BlY3RydW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLFVBQStCLEVBQUUsRUFDakMsV0FBeUIsRUFBRTtJQUUzQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU87SUFFL0IsS0FBSyxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7UUFDNUIsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFBRSxTQUFTO1FBQzFDLElBQUksRUFDRixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FBRyxHQUFHLEVBQ2YsU0FBUyxHQUFHLEdBQUcsRUFDZixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxHQUNMLEdBQUcsUUFBUSxDQUFDO1FBRWIsNENBQTRDO1FBQzVDLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFBRSxTQUFTO1NBQ3hFO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFL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","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum';\nimport { getXYSpectrum } from './util/getXYSpectrum';\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n */\nexport class Analysis {\n    constructor(options = {}) {\n        this.id = options.id || Math.random().toString(36).substring(2, 10);\n        this.label = options.label || this.id;\n        this.spectrumCallback = options.spectrumCallback;\n        this.spectra = [];\n        this.cache = {};\n    }\n    /**\n     * Add a spectrum in the internal spectra variable\n     */\n    pushSpectrum(variables, options = {}) {\n        this.spectra.push(standardizeData(variables, options, {\n            spectrumCallback: this.spectrumCallback,\n        }));\n        this.cache = {};\n    }\n    /**\n     * Retrieve a Spectrum based on x/y units\n     * @param selector.units Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits if undefined takes the first variable\n     * @param selector.yUnits if undefined takes the second variable\n     */\n    getXYSpectrum(selector = {}) {\n        let id = JSON.stringify(selector);\n        if (!this.cache[id]) {\n            this.cache[id] = getXYSpectrum(this.spectra, selector);\n        }\n        return this.cache[id];\n    }\n    /**\n     * Retrieve a xy object\n     * @param selector.units Units separated by vs like for example \"g vs °C\"\n     * @param selector.xUnits if undefined takes the first variable\n     * @param selector.yUnits if undefined takes the second variable\n     */\n    getXY(selector = {}) {\n        let spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return {\n            x: spectrum.variables.x.data,\n            y: spectrum.variables.y.data,\n        };\n    }\n    /**\n     * Return the data object for specific x/y units with possibly some\n     * normalization options\n     * @param options.selector.xUnits // if undefined takes the first variable\n     * @param options.selector.yUnits // if undefined takes the second variable\n     */\n    getNormalizedSpectrum(options = {}) {\n        const { normalization, selector } = options;\n        const spectrum = this.getXYSpectrum(selector);\n        if (!spectrum)\n            return undefined;\n        return getNormalizedSpectrum(spectrum, normalization);\n    }\n    /**\n     * Returns the first spectrum. This method could be improved in the future\n     * @returns\n     */\n    getSpectrum() {\n        return this.spectra[0];\n    }\n    /**\n     * Returns the xLabel\n     * @param selector.xUnits // if undefined takes the first variable\n     * @param selector.yUnits // if undefined takes the second variable\n     */\n    getXLabel(selector) {\n        var _a;\n        return (_a = this.getXYSpectrum(selector)) === null || _a === void 0 ? void 0 : _a.variables.x.label;\n    }\n    /**\n     * Returns the yLabel\n     * @param selector.xUnits // if undefined takes the first variable\n     * @param selector.yUnits // if undefined takes the second variable\n     */\n    getYLabel(selector) {\n        var _a;\n        return (_a = this.getXYSpectrum(selector)) === null || _a === void 0 ? void 0 : _a.variables.y.label;\n    }\n}\n/**\n * Internal function that ensure the order of x / y array\n */\nfunction standardizeData(variables, options, analysisOptions) {\n    let { meta = {}, tmp = {}, dataType = '', title = '' } = options;\n    const { spectrumCallback } = analysisOptions;\n    if (spectrumCallback) {\n        spectrumCallback(variables);\n    }\n    let xVariable = variables.x;\n    let yVariable = variables.y;\n    if (!xVariable || !yVariable) {\n        throw Error('A spectrum must contain at least x and y variables');\n    }\n    if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n        throw Error('x and y variables must contain an array data');\n    }\n    let x = xVariable.data;\n    let reverse = x && x.length > 1 && x[0] > x[x.length - 1];\n    for (let key in variables) {\n        let variable = variables[key];\n        if (reverse)\n            variable.data = variable.data.reverse();\n        variable.label = variable.label || key;\n        if (!variable.units && variable.label.includes('[')) {\n            variable.units = variable.label.replace(/^.*[([](?<units>.*)[)\\]].*$/, '$<units>');\n        }\n        variable.min = min(variable.data);\n        variable.max = max(variable.data);\n        variable.isMonotone = xIsMonotone(variable.data);\n    }\n    return {\n        variables,\n        title,\n        dataType,\n        meta,\n        tmp,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQW5hbHlzaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXBELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdCckQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBT25CLFlBQW1CLFVBQTJCLEVBQUU7UUFDOUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FDakIsU0FBdUMsRUFDdkMsVUFBMkMsRUFBRTtRQUU3QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDZixlQUFlLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQ3hDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxD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","/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param {string|ArrayBuffer|ArrayBufferView} blob\n * @param {object} [options={}]\n * @param {string} [options.encoding] - Defaults to `utf-8` or automatic detection of `utf-16`.\n * @returns {string}\n */\n\nexport function ensureString(blob, options = {}) {\n  if (typeof blob === 'string') {\n    return blob;\n  }\n  if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n    const { encoding = guessEncoding(blob) } = options;\n    const decoder = new TextDecoder(encoding);\n    return decoder.decode(blob);\n  }\n  throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\n\nfunction guessEncoding(blob) {\n  const uint8 = ArrayBuffer.isView(blob)\n    ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n    : new Uint8Array(blob);\n  if (uint8.length >= 2) {\n    if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n      return 'utf-16be';\n    }\n    if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n      return 'utf-16le';\n    }\n  }\n  return 'utf-8';\n}\n","/**\n * Dynamically type a string\n * @param {string} value String to dynamically type\n * @returns {boolean|string|number}\n */\nexport function parseString(value) {\n  if (value.length === 4 || value.length === 5) {\n    let lowercase = value.toLowerCase();\n\n    if (lowercase === 'true') return true;\n    if (lowercase === 'false') return false;\n  }\n  let number = Number(value);\n  if (number === 0 && !value.includes('0')) {\n    return value;\n  }\n  if (!Number.isNaN(number)) return number;\n  return value;\n}\n","const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\n\nexport function complexChromatogram(result) {\n  let spectra = result.spectra;\n  let length = spectra.length;\n  let chromatogram = {\n    times: new Array(length),\n    series: {\n      ms: {\n        dimension: 2,\n        data: new Array(length),\n      },\n    },\n  };\n\n  let existingGCMSFields = [];\n  for (let i = 0; i < GC_MS_FIELDS.length; i++) {\n    let label = convertMSFieldToLabel(GC_MS_FIELDS[i]);\n    if (spectra[0][label]) {\n      existingGCMSFields.push(label);\n      chromatogram.series[label] = {\n        dimension: 1,\n        data: new Array(length),\n      };\n    }\n  }\n\n  for (let i = 0; i < length; i++) {\n    let spectrum = spectra[i];\n    chromatogram.times[i] = spectrum.pageValue;\n    for (let j = 0; j < existingGCMSFields.length; j++) {\n      chromatogram.series[existingGCMSFields[j]].data[i] = parseFloat(\n        spectrum[existingGCMSFields[j]],\n      );\n    }\n    if (spectrum.data) {\n      chromatogram.series.ms.data[i] = [spectrum.data.x, spectrum.data.y];\n    }\n  }\n  result.chromatogram = chromatogram;\n}\n\nexport function isMSField(canonicDataLabel) {\n  return GC_MS_FIELDS.indexOf(canonicDataLabel) !== -1;\n}\n\nexport function convertMSFieldToLabel(value) {\n  return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n}\n","export default function convertToFloatArray(stringArray) {\n  let floatArray = [];\n  for (let i = 0; i < stringArray.length; i++) {\n    floatArray.push(parseFloat(stringArray[i]));\n  }\n  return floatArray;\n}\n","export default function fastParseXYData(spectrum, value) {\n  // TODO need to deal with result\n  //  console.log(value);\n  // we check if deltaX is defined otherwise we calculate it\n\n  let yFactor = spectrum.yFactor;\n  let deltaX = spectrum.deltaX;\n\n  spectrum.isXYdata = true;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let currentX = spectrum.firstX;\n  let currentY = spectrum.firstY;\n\n  // we skip the first line\n  //\n  let endLine = false;\n  let ascii;\n  let i = 0;\n  for (; i < value.length; i++) {\n    ascii = value.charCodeAt(i);\n    if (ascii === 13 || ascii === 10) {\n      endLine = true;\n    } else {\n      if (endLine) break;\n    }\n  }\n\n  // we proceed taking the i after the first line\n  let newLine = true;\n  let isDifference = false;\n  let isLastDifference = false;\n  let lastDifference = 0;\n  let isDuplicate = false;\n  let inComment = false;\n  let currentValue = 0; // can be a difference or a duplicate\n  let lastValue = 0; // must be the real last value\n  let isNegative = false;\n  let inValue = false;\n  let skipFirstValue = false;\n  let decimalPosition = 0;\n  for (; i <= value.length; i++) {\n    if (i === value.length) ascii = 13;\n    else ascii = value.charCodeAt(i);\n    if (inComment) {\n      // we should ignore the text if we are after $$\n      if (ascii === 13 || ascii === 10) {\n        newLine = true;\n        inComment = false;\n      }\n    } else {\n      // when is it a new value ?\n      // when it is not a digit, . or comma\n      // it is a number that is either new or we continue\n      if (ascii <= 57 && ascii >= 48) {\n        // a number\n        inValue = true;\n        if (decimalPosition > 0) {\n          currentValue += (ascii - 48) / Math.pow(10, decimalPosition++);\n        } else {\n          currentValue *= 10;\n          currentValue += ascii - 48;\n        }\n      } else if (ascii === 44 || ascii === 46) {\n        // a \",\" or \".\"\n        inValue = true;\n        decimalPosition++;\n      } else {\n        if (inValue) {\n          // need to process the previous value\n          if (newLine) {\n            newLine = false; // we don't check the X value\n            // console.log(\"NEW LINE\",isDifference, lastDifference);\n            // if new line and lastDifference, the first value is just a check !\n            // that we don't check ...\n            if (isLastDifference) skipFirstValue = true;\n          } else {\n            // need to deal with duplicate and differences\n            if (skipFirstValue) {\n              skipFirstValue = false;\n            } else {\n              if (isDifference) {\n                lastDifference = isNegative ? 0 - currentValue : currentValue;\n                isLastDifference = true;\n                isDifference = false;\n              } else if (!isDuplicate) {\n                lastValue = isNegative ? 0 - currentValue : currentValue;\n              }\n              let duplicate = isDuplicate ? currentValue - 1 : 1;\n              for (let j = 0; j < duplicate; j++) {\n                if (isLastDifference) {\n                  currentY += lastDifference;\n                } else {\n                  currentY = lastValue;\n                }\n                currentData.x.push(currentX);\n                currentData.y.push(currentY * yFactor);\n                currentX += deltaX;\n              }\n            }\n          }\n          isNegative = false;\n          currentValue = 0;\n          decimalPosition = 0;\n          inValue = false;\n          isDuplicate = false;\n        }\n\n        // positive SQZ digits @ A B C D E F G H I (ascii 64-73)\n        if (ascii < 74 && ascii > 63) {\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 64;\n        } else if (ascii > 96 && ascii < 106) {\n          // negative SQZ digits a b c d e f g h i (ascii 97-105)\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 96;\n          isNegative = true;\n        } else if (ascii === 115) {\n          // DUP digits S T U V W X Y Z s (ascii 83-90, 115)\n          inValue = true;\n          isDuplicate = true;\n          currentValue = 9;\n        } else if (ascii > 82 && ascii < 91) {\n          inValue = true;\n          isDuplicate = true;\n          currentValue = ascii - 82;\n        } else if (ascii > 73 && ascii < 83) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 73;\n        } else if (ascii > 105 && ascii < 115) {\n          // negative DIF digits j k l m n o p q r (ascii 106-114)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 105;\n          isNegative = true;\n        } else if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n          // $ sign, we need to check the next one\n          inValue = true;\n          inComment = true;\n        } else if (ascii === 37) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = 0;\n          isNegative = false;\n        } else if (ascii === 45) {\n          // a \"-\"\n          // check if after there is a number, decimal or comma\n          let ascii2 = value.charCodeAt(i + 1);\n          if (\n            (ascii2 >= 48 && ascii2 <= 57) ||\n            ascii2 === 44 ||\n            ascii2 === 46\n          ) {\n            inValue = true;\n            if (!newLine) isLastDifference = false;\n            isNegative = true;\n          }\n        } else if (ascii === 13 || ascii === 10) {\n          newLine = true;\n          inComment = false;\n        }\n        // and now analyse the details ... space or tabulation\n        // if \"+\" we just don't care\n      }\n    }\n  }\n}\n","const removeCommentRegExp = /\\$\\$.*/;\nconst peakTableSplitRegExp = /[,\\t ]+/;\n\nexport default function parsePeakTable(spectrum, value, result) {\n  spectrum.isPeaktable = true;\n\n  if (!spectrum.variables || Object.keys(spectrum.variables) === 2) {\n    parseXY(spectrum, value, result);\n  } else {\n    parseXYZ(spectrum, value, result);\n  }\n\n  // we will add the data in the variables\n  if (spectrum.variables) {\n    for (let key in spectrum.variables) {\n      spectrum.variables[key].data = spectrum.data[key];\n    }\n  }\n}\n\nfunction parseXY(spectrum, value, result) {\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % 2 === 0) {\n      for (let j = 0; j < values.length; j = j + 2) {\n        // takes around 40% of the time to add and parse the 2 values nearly exclusively because of parseFloat\n        currentData.x.push(parseFloat(values[j]) * spectrum.xFactor);\n        currentData.y.push(parseFloat(values[j + 1]) * spectrum.yFactor);\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n\nfunction parseXYZ(spectrum, value, result) {\n  let currentData = {};\n  let variables = Object.keys(spectrum.variables);\n  let numberOfVariables = variables.length;\n  variables.forEach((variable) => (currentData[variable] = []));\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % numberOfVariables === 0) {\n      for (let j = 0; j < values.length; j++) {\n        // todo should try to find a xFactor (y, ...)\n        currentData[variables[j % numberOfVariables]].push(\n          parseFloat(values[j]),\n        );\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n","export default function parseXYA(spectrum, value) {\n  let removeSymbolRegExp = /(\\(+|\\)+|<+|>+|\\s+)/g;\n\n  spectrum.isXYAdata = true;\n  let values;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    values = lines[i].trim().replace(removeSymbolRegExp, '').split(',');\n    currentData.x.push(parseFloat(values[0]));\n    currentData.y.push(parseFloat(values[1]));\n  }\n}\n","import convertTo3DZ from './convertTo3DZ';\nimport generateContourLines from './generateContourLines';\n\nexport default function add2D(result, options) {\n  let zData = convertTo3DZ(result.spectra);\n  if (!options.noContour) {\n    result.contourLines = generateContourLines(zData, options);\n    delete zData.z;\n  }\n  result.minMax = zData;\n}\n","import getMedian from 'ml-array-median';\n\nexport default function convertTo3DZ(spectra) {\n  let minZ = spectra[0].data.y[0];\n  let maxZ = minZ;\n  let ySize = spectra.length;\n  let xSize = spectra[0].data.x.length;\n\n  let z = new Array(ySize);\n  for (let i = 0; i < ySize; i++) {\n    z[i] = spectra[i].data.y;\n    for (let j = 0; j < xSize; j++) {\n      let value = z[i][j];\n      if (value < minZ) minZ = value;\n      if (value > maxZ) maxZ = value;\n    }\n  }\n\n  const firstX = spectra[0].data.x[0];\n  const lastX = spectra[0].data.x[spectra[0].data.x.length - 1]; // has to be -2 because it is a 1D array [x,y,x,y,...]\n  const firstY = spectra[0].pageValue;\n  const lastY = spectra[ySize - 1].pageValue;\n\n  // Because the min / max value are the only information about the matrix if we invert\n  // min and max we need to invert the array\n  if (firstX > lastX) {\n    for (let spectrum of z) {\n      spectrum.reverse();\n    }\n  }\n  if (firstY > lastY) {\n    z.reverse();\n  }\n\n  const medians = [];\n  for (let i = 0; i < z.length; i++) {\n    const row = Float64Array.from(z[i]);\n    for (let i = 0; i < row.length; i++) {\n      if (row[i] < 0) row[i] = -row[i];\n    }\n    medians.push(getMedian(row));\n  }\n  const median = getMedian(medians);\n\n  return {\n    z: z,\n    minX: Math.min(firstX, lastX),\n    maxX: Math.max(firstX, lastX),\n    minY: Math.min(firstY, lastY),\n    maxY: Math.max(firstY, lastY),\n    minZ: minZ,\n    maxZ: maxZ,\n    noise: median,\n  };\n}\n","export default function generateContourLines(zData, options) {\n  let noise = zData.noise;\n  let z = zData.z;\n  let povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n  let isOver0, isOver1, isOver2, isOver3;\n  let nbSubSpectra = z.length;\n  let nbPovars = z[0].length;\n  let pAx, pAy, pBx, pBy;\n\n  let x0 = zData.minX;\n  let xN = zData.maxX;\n  let dx = (xN - x0) / (nbPovars - 1);\n  let y0 = zData.minY;\n  let yN = zData.maxY;\n  let dy = (yN - y0) / (nbSubSpectra - 1);\n  let minZ = zData.minZ;\n  let maxZ = zData.maxZ;\n\n  // System.out.prvarln('y0 '+y0+' yN '+yN);\n  // -------------------------\n  // Povars attribution\n  //\n  // 0----1\n  // |  / |\n  // | /  |\n  // 2----3\n  //\n  // ---------------------d------\n\n  let iter = options.nbContourLevels * 2;\n  let contourLevels = new Array(iter);\n  let lineZValue;\n  for (let level = 0; level < iter; level++) {\n    // multiply by 2 for positif and negatif\n    let contourLevel = {};\n    contourLevels[level] = contourLevel;\n    let side = level % 2;\n    let factor =\n      (maxZ - options.noiseMultiplier * noise) *\n      Math.exp((level >> 1) - options.nbContourLevels);\n    if (side === 0) {\n      lineZValue = factor + options.noiseMultiplier * noise;\n    } else {\n      lineZValue = 0 - factor - options.noiseMultiplier * noise;\n    }\n    let lines = [];\n    contourLevel.zValue = lineZValue;\n    contourLevel.lines = lines;\n\n    if (lineZValue <= minZ || lineZValue >= maxZ) continue;\n\n    for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n      let subSpectra = z[iSubSpectra];\n      let subSpectraAfter = z[iSubSpectra + 1];\n      for (let povar = 0; povar < nbPovars - 1; povar++) {\n        povarHeight0 = subSpectra[povar];\n        povarHeight1 = subSpectra[povar + 1];\n        povarHeight2 = subSpectraAfter[povar];\n        povarHeight3 = subSpectraAfter[povar + 1];\n\n        isOver0 = povarHeight0 > lineZValue;\n        isOver1 = povarHeight1 > lineZValue;\n        isOver2 = povarHeight2 > lineZValue;\n        isOver3 = povarHeight3 > lineZValue;\n\n        // Example povar0 is over the plane and povar1 and\n        // povar2 are below, we find the varersections and add\n        // the segment\n        if (isOver0 !== isOver1 && isOver0 !== isOver2) {\n          pAx =\n            povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n          pAy = iSubSpectra;\n          pBx = povar;\n          pBy =\n            iSubSpectra +\n            (lineZValue - povarHeight0) / (povarHeight2 - povarHeight0);\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // remove push does not help !!!!\n        if (isOver3 !== isOver1 && isOver3 !== isOver2) {\n          pAx = povar + 1;\n          pAy =\n            iSubSpectra +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n          pBx =\n            povar +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight2 - povarHeight3);\n          pBy = iSubSpectra + 1;\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // test around the diagonal\n        if (isOver1 !== isOver2) {\n          pAx =\n            (povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dx +\n            x0;\n          pAy =\n            (iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dy +\n            y0;\n          if (isOver1 !== isOver0) {\n            pBx =\n              povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight0 - povarHeight1);\n            pBy = iSubSpectra;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver0) {\n            pBx = povar;\n            pBy =\n              iSubSpectra +\n              1 -\n              (lineZValue - povarHeight2) / (povarHeight0 - povarHeight2);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver1 !== isOver3) {\n            pBx = povar + 1;\n            pBy =\n              iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight3 - povarHeight1);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver3) {\n            pBx =\n              povar +\n              (lineZValue - povarHeight2) / (povarHeight3 - povarHeight2);\n            pBy = iSubSpectra + 1;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n        }\n      }\n    }\n  }\n\n  return {\n    minX: zData.minX,\n    maxX: zData.maxX,\n    minY: zData.minY,\n    maxY: zData.maxY,\n    segments: contourLevels,\n  };\n}\n","export default Math.random;\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource);\n","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiply_uint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport default class XSadd {\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError('seed must be an integer');\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiply_uint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n","import { randomUniform, randomNormal } from 'd3-random';\nimport XSAdd from 'ml-xsadd';\nexport default function addNoise(data, percent = 0, options = {}) {\n    const { seed } = options;\n    const distribution = options.distribution || 'uniform';\n    let generateRandomNumber;\n    switch (distribution) {\n        case 'uniform': {\n            generateRandomNumber = getRandom(randomUniform, seed, -0.5, 0.5);\n            break;\n        }\n        case 'normal': {\n            generateRandomNumber = getRandom(randomNormal, seed);\n            break;\n        }\n        default: {\n            const unHandled = distribution;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n    if (!percent)\n        return data;\n    let ys = data.y;\n    let factor = (percent * findMax(ys)) / 100;\n    for (let i = 0; i < ys.length; i++) {\n        ys[i] += generateRandomNumber() * factor;\n    }\n    return data;\n}\nfunction getRandom(func, seed, ...args) {\n    return typeof seed === 'number'\n        ? func.source(new XSAdd(seed).random)(...args)\n        : func(...args);\n}\nfunction findMax(array) {\n    let max = Number.MIN_VALUE;\n    for (let item of array) {\n        if (item > max)\n            max = item;\n    }\n    return max;\n}\n//# sourceMappingURL=addNoise.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport addBaseline from './util/addBaseline';\nimport addNoise from './util/addNoise';\nexport class SpectrumGenerator {\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct = () => 5, shape = { kind: 'gaussian' }, } = options;\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = (this.to - this.from) / (this.nbPoints - 1);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        this.data = {\n            x: new Float64Array(this.nbPoints),\n            y: new Float64Array(this.nbPoints),\n        };\n        const kind = shape.kind;\n        const { options: shapeOptions = {} } = shape;\n        let shapeGenerator = getShape1D(kind, shapeOptions);\n        this.shape = shapeGenerator;\n        assertNumber(this.from, 'from');\n        assertNumber(this.to, 'to');\n        assertInteger(this.nbPoints, 'nbPoints');\n        if (this.to <= this.from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    /**\n     * Add a series of peaks to the spectrum.\n     * @param peaks - Peaks to add.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Add a single peak to the spectrum.\n     * @param peak\n     * @param options\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 2) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            (peak.x === undefined || peak.y === undefined)) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        let xPosition;\n        let intensity;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, intensity, peakWidth, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            intensity = peak.y;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        let { width = peakWidth === undefined\n            ? this.peakWidthFct(xPosition)\n            : peakWidth, widthLeft, widthRight, shape: shapeOptions, } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        if (shapeOptions) {\n            const kind = shapeOptions.kind;\n            const { options: shapeParameters = {} } = shapeOptions;\n            this.shape = getShape1D(kind, shapeParameters);\n        }\n        if (!widthLeft)\n            widthLeft = width;\n        if (!widthRight)\n            widthRight = width;\n        let factor = options.factor === undefined ? this.shape.getFactor() : options.factor;\n        const firstValue = xPosition - (widthLeft / 2) * factor;\n        const lastValue = xPosition + (widthRight / 2) * factor;\n        const firstPoint = Math.max(0, Math.floor((firstValue - this.from) / this.interval));\n        const lastPoint = Math.min(this.nbPoints - 1, Math.ceil((lastValue - this.from) / this.interval));\n        const middlePoint = Math.round((xPosition - this.from) / this.interval);\n        // PEAK SHAPE MAY BE ASYMMETRC (widthLeft and widthRight) !\n        // we calculate the left part of the shape\n        this.shape.fwhm = widthLeft;\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] +=\n                intensity * this.shape.fct(this.data.x[index] - xPosition);\n        }\n        // we calculate the right part of the gaussian\n        this.shape.fwhm = widthRight;\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] +=\n                intensity * this.shape.fct(this.data.x[index] - xPosition);\n        }\n        return this;\n    }\n    /**\n     * Add a baseline to the spectrum.\n     * @param baselineFct - Mathematical function producing the baseline you want.\n     */\n    addBaseline(baselineFct) {\n        addBaseline(this.data, baselineFct);\n        return this;\n    }\n    /**\n     * Add noise to the spectrum.\n     * @param percent - Noise's amplitude in percents of the spectrum max value. Default: 0.\n     */\n    addNoise(percent, options) {\n        addNoise(this.data, percent, options);\n        return this;\n    }\n    /**\n     * Get the generated spectrum.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true, threshold = 0 } = options;\n        if (threshold) {\n            let minPeakHeight = this.maxPeakHeight * threshold;\n            let x = [];\n            let y = [];\n            for (let i = 0; i < this.data.x.length; i++) {\n                if (this.data.y[i] >= minPeakHeight) {\n                    x.push(this.data.x[i]);\n                    y.push(this.data.y[i]);\n                }\n            }\n            return { x, y };\n        }\n        if (copy) {\n            return {\n                x: this.data.x.slice(),\n                y: this.data.y.slice(),\n            };\n        }\n        else {\n            return this.data;\n        }\n    }\n    /**\n     * Resets the generator with an empty spectrum.\n     */\n    reset() {\n        const spectrum = this.data;\n        for (let i = 0; i < this.nbPoints; i++) {\n            spectrum.x[i] = this.from + i * this.interval;\n        }\n        return this;\n    }\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n/**\n * Generates a spectrum and returns it.\n * @param peaks - List of peaks to put in the spectrum.\n * @param options\n */\nexport function generateSpectrum(peaks, options = {}) {\n    const { generator: generatorOptions, noise, baseline, threshold, peaks: addPeaksOptions, } = options;\n    const generator = new SpectrumGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    if (baseline)\n        generator.addBaseline(baseline);\n    if (noise) {\n        const { percent, options: addNoiseOptions } = noise;\n        generator.addNoise(percent, addNoiseOptions);\n    }\n    return generator.getSpectrum({\n        threshold,\n    });\n}\n//# sourceMappingURL=SpectrumGenerator.js.map","export default function addBaseline(data, baselineFct) {\n    if (!baselineFct)\n        return data;\n    let xs = data.x;\n    let ys = data.y;\n    for (let i = 0; i < xs.length; i++) {\n        ys[i] += baselineFct(xs[i]);\n    }\n    return data;\n}\n//# sourceMappingURL=addBaseline.js.map","// sources:\n// https://en.wikipedia.org/wiki/Gyromagnetic_ratio\n\n// TODO: #13 can we have a better source and more digits ? @jwist\n\nexport const gyromagneticRatio = {\n  '1H': 267.52218744e6,\n  '2H': 41.065e6,\n  '3H': 285.3508e6,\n  '3He': -203.789e6,\n  '7Li': 103.962e6,\n  '13C': 67.28284e6,\n  '14N': 19.331e6,\n  '15N': -27.116e6,\n  '17O': -36.264e6,\n  '19F': 251.662e6,\n  '23Na': 70.761e6,\n  '27Al': 69.763e6,\n  '29Si': -53.19e6,\n  '31P': 108.291e6,\n  '57Fe': 8.681e6,\n  '63Cu': 71.118e6,\n  '67Zn': 16.767e6,\n  '129Xe': -73.997e6,\n};\n","export default function profiling(result, action, options) {\n  if (result.profiling) {\n    result.profiling.push({\n      action,\n      time: Date.now() - options.start,\n    });\n  }\n}\n","export default function simpleChromatogram(result) {\n  let data = result.spectra[0].data;\n  result.chromatogram = {\n    times: data.x.slice(),\n    series: {\n      intensity: {\n        dimension: 1,\n        data: data.y.slice(),\n      },\n    },\n  };\n}\n","import add2D from './2d/add2D';\nimport { complexChromatogram } from './complexChromatogram';\nimport postProcessingNMR from './postProcessingNMR';\nimport profiling from './profiling';\nimport simpleChromatogram from './simpleChromatogram';\n\nexport default function postProcessing(entriesFlat, result, options) {\n  // converting Hz to ppm\n  postProcessingNMR(entriesFlat);\n\n  for (let entry of entriesFlat) {\n    if (Object.keys(entry.ntuples).length > 0) {\n      let newNtuples = [];\n      let keys = Object.keys(entry.ntuples);\n      for (let i = 0; i < keys.length; i++) {\n        let key = keys[i];\n        let values = entry.ntuples[key];\n        for (let j = 0; j < values.length; j++) {\n          if (!newNtuples[j]) newNtuples[j] = {};\n          newNtuples[j][key] = values[j];\n        }\n      }\n      entry.ntuples = newNtuples;\n    }\n\n    if (entry.twoD && options.wantXY) {\n      add2D(entry, options);\n\n      profiling(result, 'Finished countour plot calculation', options);\n\n      if (!options.keepSpectra) {\n        delete entry.spectra;\n      }\n    }\n\n    // maybe it is a GC (HPLC) / MS. In this case we add a new format\n    if (options.chromatogram) {\n      if (entry.spectra.length > 1) {\n        complexChromatogram(entry);\n      } else {\n        simpleChromatogram(entry);\n      }\n      profiling(result, 'Finished chromatogram calculation', options);\n    }\n\n    delete entry.tmp;\n  }\n}\n","import { gyromagneticRatio } from 'nmr-processing';\n\nexport default function postProcessingNMR(entriesFlat) {\n  // specific NMR functions\n\n  for (let entry of entriesFlat) {\n    let observeFrequency = 0;\n    let shiftOffsetVal = 0;\n    for (let spectrum of entry.spectra) {\n      if (entry.ntuples && entry.ntuples.symbol) {\n        if (!observeFrequency && spectrum.observeFrequency) {\n          observeFrequency = spectrum.observeFrequency;\n        }\n        if (!shiftOffsetVal && spectrum.shiftOffsetVal) {\n          shiftOffsetVal = spectrum.shiftOffsetVal;\n        }\n      } else {\n        observeFrequency = spectrum.observeFrequency;\n        shiftOffsetVal = spectrum.shiftOffsetVal;\n      }\n\n      if (observeFrequency) {\n        if (spectrum.xUnits && spectrum.xUnits.toUpperCase().includes('HZ')) {\n          spectrum.xUnits = 'PPM';\n          spectrum.xFactor = spectrum.xFactor / observeFrequency;\n          spectrum.firstX = spectrum.firstX / observeFrequency;\n          spectrum.lastX = spectrum.lastX / observeFrequency;\n          spectrum.deltaX = spectrum.deltaX / observeFrequency;\n          for (let i = 0; i < spectrum.data.x.length; i++) {\n            spectrum.data.x[i] /= observeFrequency;\n          }\n        }\n      }\n      if (shiftOffsetVal) {\n        let shift = spectrum.firstX - shiftOffsetVal;\n        spectrum.firstX = spectrum.firstX - shift;\n        spectrum.lastX = spectrum.lastX - shift;\n        for (let i = 0; i < spectrum.data.x.length; i++) {\n          spectrum.data.x[i] -= shift;\n        }\n      }\n\n      // we will check if some nucleus are missing ...\n      if (entry.ntuples && entry.ntuples.nucleus && entry.ntuples.symbol) {\n        for (let i = 0; i < entry.ntuples.nucleus.length; i++) {\n          let symbol = entry.ntuples.symbol[i];\n          let nucleus = entry.ntuples.nucleus[i];\n          if (symbol.startsWith('F') && !nucleus) {\n            if (symbol === 'F1') {\n              // if F1 is defined we will use F2\n              if (entry.tmp.$NUC2) {\n                entry.ntuples.nucleus[i] = entry.tmp.$NUC2;\n              } else {\n                let f2index = entry.ntuples.symbol.indexOf('F2');\n                if (f2index && entry.ntuples.nucleus[f2index]) {\n                  entry.ntuples.nucleus[i] = entry.ntuples.nucleus[f2index];\n                }\n              }\n            }\n            if (symbol === 'F2') entry.ntuples.nucleus[i] = entry.tmp.$NUC1;\n          }\n          if (symbol === 'F2') {\n            entry.yType = entry.ntuples.nucleus[0];\n          }\n        }\n      }\n\n      if (\n        observeFrequency &&\n        entry.ntuples &&\n        entry.ntuples.symbol &&\n        entry.ntuples.nucleus\n      ) {\n        let unit = '';\n        let pageSymbolIndex = entry.ntuples.symbol.indexOf(spectrum.pageSymbol);\n        if (entry.ntuples.units && entry.ntuples.units[pageSymbolIndex]) {\n          unit = entry.ntuples.units[pageSymbolIndex];\n        }\n        if (unit !== 'PPM') {\n          if (pageSymbolIndex !== 0) {\n            throw Error('Not sure about this ntuples format');\n          }\n\n          let ratio0 = gyromagneticRatio[entry.ntuples.nucleus[0]];\n          let ratio1 = gyromagneticRatio[entry.ntuples.nucleus[1]];\n          if (!ratio0 || !ratio1) {\n            throw Error('Problem with determination of gyromagnetic ratio');\n          }\n          let ratio = (ratio0 / ratio1) * observeFrequency;\n          spectrum.pageValue /= ratio;\n        }\n      }\n    }\n  }\n}\n","export default function prepareNtuplesDatatable(currentEntry, spectrum, kind) {\n  let xIndex = -1;\n  let yIndex = -1;\n  let firstVariable = '';\n  let secondVariable = '';\n  if (kind.indexOf('++') > 0) {\n    firstVariable = kind.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n    secondVariable = kind.replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n  } else {\n    kind = kind.replace(/[^a-zA-Z]/g, '');\n    firstVariable = kind.charAt(0);\n    secondVariable = kind.charAt(1);\n    spectrum.variables = {};\n    for (let symbol of kind) {\n      let lowerCaseSymbol = symbol.toLowerCase();\n      let index = currentEntry.ntuples.symbol.indexOf(symbol);\n      if (index === -1) throw Error(`Symbol undefined: ${symbol}`);\n      spectrum.variables[lowerCaseSymbol] = {};\n      for (let key in currentEntry.ntuples) {\n        if (currentEntry.ntuples[key][index]) {\n          spectrum.variables[lowerCaseSymbol][key.replace(/^var/, '')] =\n            currentEntry.ntuples[key][index];\n        }\n      }\n    }\n  }\n  xIndex = currentEntry.ntuples.symbol.indexOf(firstVariable);\n  yIndex = currentEntry.ntuples.symbol.indexOf(secondVariable);\n\n  if (xIndex === -1) xIndex = 0;\n  if (yIndex === -1) yIndex = 0;\n\n  if (currentEntry.ntuples.first) {\n    if (currentEntry.ntuples.first.length > xIndex) {\n      spectrum.firstX = currentEntry.ntuples.first[xIndex];\n    }\n    if (currentEntry.ntuples.first.length > yIndex) {\n      spectrum.firstY = currentEntry.ntuples.first[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.last) {\n    if (currentEntry.ntuples.last.length > xIndex) {\n      spectrum.lastX = currentEntry.ntuples.last[xIndex];\n    }\n    if (currentEntry.ntuples.last.length > yIndex) {\n      spectrum.lastY = currentEntry.ntuples.last[yIndex];\n    }\n  }\n  if (\n    currentEntry.ntuples.vardim &&\n    currentEntry.ntuples.vardim.length > xIndex\n  ) {\n    spectrum.nbPoints = currentEntry.ntuples.vardim[xIndex];\n  }\n  if (currentEntry.ntuples.factor) {\n    if (currentEntry.ntuples.factor.length > xIndex) {\n      spectrum.xFactor = currentEntry.ntuples.factor[xIndex];\n    }\n    if (currentEntry.ntuples.factor.length > yIndex) {\n      spectrum.yFactor = currentEntry.ntuples.factor[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.units) {\n    if (currentEntry.ntuples.units.length > xIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[xIndex]\n      ) {\n        spectrum.xUnits = `${currentEntry.ntuples.varname[xIndex]} [${currentEntry.ntuples.units[xIndex]}]`;\n      } else {\n        spectrum.xUnits = currentEntry.ntuples.units[xIndex];\n      }\n    }\n    if (currentEntry.ntuples.units.length > yIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[yIndex]\n      ) {\n        spectrum.yUnits = `${currentEntry.ntuples.varname[yIndex]} [${currentEntry.ntuples.units[yIndex]}]`;\n      } else {\n        spectrum.yUnits = currentEntry.ntuples.units[yIndex];\n      }\n    }\n  }\n}\n","export default function prepareSpectrum(spectrum) {\n  if (!spectrum.xFactor) spectrum.xFactor = 1;\n  if (!spectrum.yFactor) spectrum.yFactor = 1;\n}\n","import { parseString } from 'dynamic-typing';\nimport { ensureString } from 'ensure-string';\n\nimport { isMSField, convertMSFieldToLabel } from './complexChromatogram';\nimport convertToFloatArray from './convertToFloatArray';\nimport fastParseXYData from './parse/fastParseXYData';\nimport parsePeakTable from './parse/parsePeakTable';\nimport parseXYA from './parse/parseXYA';\nimport postProcessing from './postProcessing';\nimport prepareNtuplesDatatable from './prepareNtuplesDatatable';\nimport prepareSpectrum from './prepareSpectrum';\nimport profiling from './profiling';\n\n// the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\nconst ntuplesSeparatorRegExp = /[ \\t]*,[ \\t]*/;\n\nclass Spectrum {}\n\nconst defaultOptions = {\n  keepRecordsRegExp: /^$/,\n  canonicDataLabels: true,\n  canonicMetadataLabels: false,\n  dynamicTyping: true,\n  withoutXY: false,\n  chromatogram: false,\n  keepSpectra: false,\n  noContour: false,\n  nbContourLevels: 7,\n  noiseMultiplier: 5,\n  profiling: false,\n};\n\n/**\n *\n * @param {string|ArrayBuffer} jcamp\n * @param {object} [options]\n * @param {number} [options.keepRecordsRegExp=/^$/] By default we don't keep meta information\n * @param {number} [options.canonicDataLabels=true] Canonize the Labels (uppercase without symbol)\n * @param {number} [options.canonicMetadataLabels=false] Canonize the metadata Labels (uppercase without symbol)\n * @param {number} [options.dynamicTyping=false] Convert numbers to Number\n * @param {number} [options.withoutXY=false] Remove the XY data\n * @param {number} [options.chromatogram=false] Special post-processing for GC / HPLC / MS\n * @param {number} [options.keepSpectra=false] Force to keep the spectra in case of 2D\n * @param {number} [options.noContour=false] Don't calculate countour in case of 2D\n * @param {number} [options.nbContourLevels=7] Number of positive / negative contour levels to calculate\n * @param {number} [options.noiseMultiplier=5] Define for 2D the level as 5 times the median as default\n * @param {number} [options.profiling=false] Add profiling information\n */\n\nexport default function convert(jcamp, options = {}) {\n  jcamp = ensureString(jcamp);\n  options = { ...defaultOptions, ...options };\n  options.wantXY = !options.withoutXY;\n  options.start = Date.now();\n\n  let entriesFlat = [];\n\n  let result = {\n    profiling: options.profiling ? [] : false,\n    logs: [],\n    entries: [],\n  };\n\n  let tmpResult = { children: [] };\n  let currentEntry = tmpResult;\n  let parentsStack = [];\n\n  let spectrum = new Spectrum();\n\n  if (typeof jcamp !== 'string') {\n    throw new TypeError('the JCAMP should be a string');\n  }\n\n  profiling(result, 'Before split to LDRS', options);\n\n  let ldrs = jcamp.replace(/[\\r\\n]+##/g, '\\n##').split('\\n##');\n\n  profiling(result, 'Split to LDRS', options);\n\n  if (ldrs[0]) ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n\n  for (let ldr of ldrs) {\n    // This is a new LDR\n    let position = ldr.indexOf('=');\n    let dataLabel = position > 0 ? ldr.substring(0, position) : ldr;\n    let dataValue = position > 0 ? ldr.substring(position + 1).trim() : '';\n\n    let canonicDataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n\n    if (canonicDataLabel === 'DATATABLE') {\n      let endLine = dataValue.indexOf('\\n');\n      if (endLine === -1) endLine = dataValue.indexOf('\\r');\n      if (endLine > 0) {\n        // ##DATA TABLE= (X++(I..I)), XYDATA\n        // We need to find the variables\n\n        let infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n        prepareNtuplesDatatable(currentEntry, spectrum, infos[0]);\n\n        spectrum.datatable = infos[0];\n        if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n          canonicDataLabel = 'PEAKTABLE';\n        } else if (\n          infos[1] &&\n          (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)\n        ) {\n          canonicDataLabel = 'XYDATA';\n          spectrum.deltaX =\n            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n        }\n      }\n    }\n\n    if (canonicDataLabel === 'XYDATA') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n        if (dataValue.match(/.*\\+\\+.*/)) {\n          // ex: (X++(Y..Y))\n          spectrum.deltaX =\n            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n\n          fastParseXYData(spectrum, dataValue, result);\n        } else {\n          parsePeakTable(spectrum, dataValue, result);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    } else if (canonicDataLabel === 'PEAKTABLE') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        parsePeakTable(spectrum, dataValue, result);\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n    if (canonicDataLabel === 'PEAKASSIGNMENTS') {\n      if (options.wantXY) {\n        if (dataValue.match(/.*(XYA).*/)) {\n          // ex: (XYA)\n          parseXYA(spectrum, dataValue);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n\n    if (canonicDataLabel === 'TITLE') {\n      let parentEntry = currentEntry;\n      if (!parentEntry.children) {\n        parentEntry.children = [];\n      }\n      currentEntry = {\n        spectra: [],\n        ntuples: {},\n        info: {},\n        meta: {},\n        tmp: {}, // tmp information we need to keep for postprocessing\n      };\n      parentEntry.children.push(currentEntry);\n      parentsStack.push(parentEntry);\n      entriesFlat.push(currentEntry);\n      currentEntry.title = dataValue;\n    } else if (canonicDataLabel === 'DATATYPE') {\n      currentEntry.dataType = dataValue;\n      if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'NTUPLES') {\n      if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'DATACLASS') {\n      currentEntry.dataClass = dataValue;\n    } else if (canonicDataLabel === 'XUNITS') {\n      spectrum.xUnits = dataValue;\n    } else if (canonicDataLabel === 'YUNITS') {\n      spectrum.yUnits = dataValue;\n    } else if (canonicDataLabel === 'FIRSTX') {\n      spectrum.firstX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTX') {\n      spectrum.lastX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'FIRSTY') {\n      spectrum.firstY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTY') {\n      spectrum.lastY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'NPOINTS') {\n      spectrum.nbPoints = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'XFACTOR') {\n      spectrum.xFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'YFACTOR') {\n      spectrum.yFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXX') {\n      spectrum.maxX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINX') {\n      spectrum.minX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXY') {\n      spectrum.maxY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINY') {\n      spectrum.minY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'DELTAX') {\n      spectrum.deltaX = parseFloat(dataValue);\n    } else if (\n      canonicDataLabel === '.OBSERVEFREQUENCY' ||\n      canonicDataLabel === '$SFO1'\n    ) {\n      if (!spectrum.observeFrequency) {\n        spectrum.observeFrequency = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '.OBSERVENUCLEUS') {\n      if (!spectrum.xType) {\n        currentEntry.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n      }\n    } else if (canonicDataLabel === '$OFFSET') {\n      // OFFSET for Bruker spectra\n      currentEntry.shiftOffsetNum = 0;\n      if (!spectrum.shiftOffsetVal) {\n        spectrum.shiftOffsetVal = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '$REFERENCEPOINT') {\n      // OFFSET for Varian spectra\n      // if we activate this part it does not work for ACD specmanager\n      //         } else if (canonicDataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n      //                 var parts = dataValue.split(/ *, */);\n      //                 currentEntry.shiftOffsetNum = parseInt(parts[2].trim());\n      //                 spectrum.shiftOffsetVal = parseFloat(parts[3].trim());\n    } else if (canonicDataLabel === 'VARNAME') {\n      currentEntry.ntuples.varname = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'SYMBOL') {\n      currentEntry.ntuples.symbol = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARTYPE') {\n      currentEntry.ntuples.vartype = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARFORM') {\n      currentEntry.ntuples.varform = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARDIM') {\n      currentEntry.ntuples.vardim = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'UNITS') {\n      currentEntry.ntuples.units = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'FACTOR') {\n      currentEntry.ntuples.factor = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'FIRST') {\n      currentEntry.ntuples.first = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'LAST') {\n      currentEntry.ntuples.last = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MIN') {\n      currentEntry.ntuples.min = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MAX') {\n      currentEntry.ntuples.max = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === '.NUCLEUS') {\n      if (currentEntry.ntuples) {\n        currentEntry.ntuples.nucleus = dataValue.split(ntuplesSeparatorRegExp);\n      }\n    } else if (canonicDataLabel === 'PAGE') {\n      spectrum.page = dataValue.trim();\n      spectrum.pageValue = parseFloat(dataValue.replace(/^.*=/, ''));\n      spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n    } else if (canonicDataLabel === 'RETENTIONTIME') {\n      spectrum.pageValue = parseFloat(dataValue);\n    } else if (isMSField(canonicDataLabel)) {\n      spectrum[convertMSFieldToLabel(canonicDataLabel)] = dataValue;\n    } else if (canonicDataLabel === 'SAMPLEDESCRIPTION') {\n      spectrum.sampleDescription = dataValue;\n    } else if (canonicDataLabel.startsWith('$NUC')) {\n      if (!currentEntry.tmp[canonicDataLabel] && !dataValue.includes('off')) {\n        currentEntry.tmp[canonicDataLabel] = dataValue.replace(/[<>]/g, '');\n      }\n    } else if (canonicDataLabel === 'END') {\n      currentEntry = parentsStack.pop();\n    }\n\n    if (\n      currentEntry &&\n      currentEntry.info &&\n      currentEntry.meta &&\n      canonicDataLabel.match(options.keepRecordsRegExp)\n    ) {\n      let value = dataValue.trim();\n      let target, label;\n      if (dataLabel.startsWith('$')) {\n        label = options.canonicMetadataLabels\n          ? canonicDataLabel.substring(1)\n          : dataLabel.substring(1);\n        target = currentEntry.meta;\n      } else {\n        label = options.canonicDataLabels ? canonicDataLabel : dataLabel;\n        target = currentEntry.info;\n      }\n\n      if (options.dynamicTyping) {\n        value = parseString(value);\n      }\n      if (target[label]) {\n        if (!Array.isArray(target[label])) {\n          target[label] = [target[label]];\n        }\n        target[label].push(value);\n      } else {\n        target[label] = value;\n      }\n    }\n  }\n\n  profiling(result, 'Finished parsing', options);\n\n  postProcessing(entriesFlat, result, options);\n\n  profiling(result, 'Total time', options);\n\n  /*\n  if (result.children && result.children.length>0) {\n    result = { ...result, ...result.children[0] };\n  }\n  */\n  result.entries = tmpResult.children;\n  result.flatten = entriesFlat;\n\n  return result;\n}\n","export function getNumber(number, factor) {\n  if (factor !== 1) number /= factor;\n  const rounded = Math.round(number);\n  if (rounded !== number && Math.abs(rounded - number) <= Number.EPSILON) {\n    return rounded;\n  }\n  return number;\n}\n","import { peakTableCreator } from './utils/peakTableCreator';\nimport { xyDataCreator } from './utils/xyDataCreator';\n/**\n * Create a jcamp\n * @param {object} data object of array\n * @param {object} [options={}] metadata object\n * @param {string} [options.info={}] metadata of the file\n * @param {string} [options.info.title=''] title of the file\n * @param {string} [options.info.owner=''] owner of the file\n * @param {string} [options.info.origin=''] origin of the file\n * @param {string} [options.info.dataType=''] type of data\n * @param {string} [options.info.xUnits=''] units for the x axis for variables===undefined\n * @param {string} [options.info.yUnits=''] units for the y axis for variables===undefined\n * @param {number} [options.info.xFactor=1] factor to multiply X values\n * @param {number} [options.info.yFactor=1] factor to multiply Y values\n * @param {object} [options.meta={}] comments to add to the file\n * @param {boolean} [options.xydata=false] Use XYDATA format. Will use first / last X and equidistant Xs values if true\n * @return {string} JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n  const { meta = {}, info = {}, xydata = false } = options;\n\n  const {\n    title = '',\n    owner = '',\n    origin = '',\n    dataType = '',\n    xUnits = '',\n    yUnits = '',\n    xFactor = 1,\n    yFactor = 1,\n  } = info;\n\n  data = { x: data.x, y: data.y };\n\n  let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\\n`;\n\n  for (const key in meta) {\n    header +=\n      key.toLowerCase() === 'cheminfo'\n        ? `##$${key}=${JSON.stringify(meta[key])}\\n`\n        : `##$${key}=${meta[key]}\\n`;\n  }\n\n  // we leave the header and utf8 fonts ${header.replace(/[^\\t\\r\\n\\x20-\\x7F]/g, '')\n\n  return `${header}##NPOINTS=${data.x.length}\n${(xydata\n  ? xyDataCreator(data, { xFactor, yFactor })\n  : peakTableCreator(data, { xFactor, yFactor })\n).join('\\n')}\n##END`;\n}\n","import { getNumber } from './getNumber.js';\n\nexport function xyDataCreator(data, options = {}) {\n  const { xFactor = 1, yFactor = 1 } = options;\n  let firstX = data.x[0];\n  let lastX = data.x[data.x.length - 1];\n  let firstY = data.y[0];\n  let lastY = data.y[data.y.length - 1];\n  let nbPoints = data.x.length;\n  let deltaX = (lastX - firstX) / (nbPoints - 1);\n  let lines = [];\n\n  lines.push(`##FIRSTX=${firstX}`);\n  lines.push(`##LASTX=${lastX}`);\n  lines.push(`##FIRSTY=${firstY}`);\n  lines.push(`##LASTY=${lastY}`);\n  lines.push(`##DELTAX=${deltaX}`);\n  lines.push(`##XFACTOR=${xFactor}`);\n  lines.push(`##YFACTOR=${yFactor}`);\n  lines.push(`##DELTAX=${xFactor}`);\n  lines.push('##XYDATA=(X++(Y..Y))');\n\n  let line = data.x[0];\n  for (let i = 0; i < data.x.length; i++) {\n    line += ` ${getNumber(data.y[i], yFactor)}`;\n    if (line.length > 70) {\n      lines.push(line);\n      if (i < data.x.length - 1) {\n        line = getNumber(data.x[0] + i * deltaX, xFactor);\n      } else {\n        line = '';\n      }\n    }\n  }\n  if (line) lines.push(line);\n  return lines;\n}\n","import { getNumber } from './getNumber.js';\n\nexport function peakTableCreator(data, options = {}) {\n  const { xFactor = 1, yFactor = 1 } = options;\n  let firstX = Number.POSITIVE_INFINITY;\n  let lastX = Number.NEGATIVE_INFINITY;\n  let firstY = Number.POSITIVE_INFINITY;\n  let lastY = Number.NEGATIVE_INFINITY;\n\n  let lines = [];\n\n  for (let i = 0; i < data.x.length; i++) {\n    let x = data.x[i];\n    let y = data.y[i];\n    if (firstX > x) {\n      firstX = x;\n    }\n    if (lastX < x) {\n      lastX = x;\n    }\n    if (firstY > y) {\n      firstY = y;\n    }\n    if (lastY < y) {\n      lastY = y;\n    }\n  }\n  lines.push(`##FIRSTX=${firstX}`);\n  lines.push(`##LASTX=${lastX}`);\n  lines.push(`##FIRSTY=${firstY}`);\n  lines.push(`##LASTY=${lastY}`);\n  lines.push(`##XFACTOR=${xFactor}`);\n  lines.push(`##YFACTOR=${yFactor}`);\n  lines.push('##PEAK TABLE=(XY..XY)');\n\n  for (let i = 0; i < data.x.length; i++) {\n    lines.push(\n      `${getNumber(data.x[i], xFactor)} ${getNumber(data.y[i], yFactor)}`,\n    );\n  }\n  return lines;\n}\n","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\n\n/**\n * Create a jcamp from variables\n * @param {Array<Variable} [variables={}] - object of variables\n * @param {string} [options.info={}] - metadata of the file\n * @param {string} [options.info.title = ''] - title of the file\n * @param {string} [options.info.owner = ''] - owner of the file\n * @param {string} [options.info.origin = ''] - origin of the file\n * @param {string} [options.info.dataType = ''] - type of data\n * @param {object} [options.meta = {}] - comments to add to the file\n * @param {object} [options.forceNtuples = false] - force the ntuples format even if there is only x and y variables\n */\nexport function fromVariables(variables = {}, options = {}) {\n  const { info, meta, forceNtuples } = options;\n\n  let jcampOptions = {\n    info,\n    meta,\n  };\n\n  let keys = Object.keys(variables).map((key) => key.toLowerCase());\n  if (\n    keys.length === 2 &&\n    keys.includes('x') &&\n    keys.includes('y') &&\n    !forceNtuples\n  ) {\n    let x = variables.x;\n    let xLabel = x.label || x.name || 'x';\n\n    jcampOptions.info.xUnits = xLabel.includes(variables.x.units)\n      ? xLabel\n      : `${xLabel} [${variables.x.units}]`;\n\n    let y = variables.y;\n    let yLabel = y.label || y.name || 'y';\n\n    jcampOptions.info.yUnits = yLabel.includes(variables.y.units)\n      ? yLabel\n      : `${yLabel} [${variables.y.units}]`;\n    return fromJSON({ x: variables.x.data, y: variables.y.data }, jcampOptions);\n  } else {\n    return creatorNtuples(variables, options);\n  }\n}\n","import maxFct from 'ml-array-max';\nimport minFct from 'ml-array-min';\n\n/**\n * Parse from a xyxy data array\n * @param {Array<Array<number>>} variables\n * @param {object} [meta] - same metadata object format that the fromText\n * @return {string} JCAMP of the input\n */\nexport default function creatorNtuples(variables, options) {\n  const { meta = {}, info = {} } = options;\n\n  const { title = '', owner = '', origin = '', dataType = '' } = info;\n\n  const symbol = [];\n  const varName = [];\n  const varType = [];\n  const varDim = [];\n  const units = [];\n  const first = [];\n  const last = [];\n  const min = [];\n  const max = [];\n  const factor = [];\n\n  const keys = Object.keys(variables);\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    let variable = variables[key];\n\n    let name = variable.label && variable.label.replace(/ *\\[.*/, '');\n    let unit = variable.label && variable.label.replace(/.*\\[(.*)\\].*/, '$1');\n\n    symbol.push(variable.symbol || key);\n    varName.push(variable.name || name || key);\n    varDim.push(variables[key].data.length);\n\n    varType.push(\n      variable.type\n        ? variable.type.toUpperCase()\n        : i === 0\n        ? 'INDEPENDENT'\n        : 'DEPENDENT',\n    );\n    units.push(variable.units || unit || '');\n    first.push(variables[key][0]);\n    last.push(variables[key][variables[key].length - 1]);\n    min.push(minFct(variables[key].data));\n    max.push(maxFct(variables[key].data));\n    factor.push(1);\n  }\n\n  let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n\n  for (const key in meta) {\n    header +=\n      typeof meta[key] === 'object'\n        ? `##$${key}=${JSON.stringify(meta[key])}\\n`\n        : `##$${key}=${meta[key]}\\n`;\n  }\n\n  header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##PAGE= N=1\\n`;\n\n  header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n\n  for (let i = 0; i < variables[keys[0]].data.length; i++) {\n    let point = [];\n    for (let key of keys) {\n      point.push(variables[key].data[i]);\n    }\n    header += `${point.join('\\t')}\\n`;\n  }\n\n  header += '##END';\n  return header;\n}\n","import { fromVariables } from 'convert-to-jcamp';\nexport function toJcamps(analysis, options = {}) {\n    let jcamps = [];\n    for (let spectrum of analysis.spectra) {\n        jcamps.push(getJcamp(spectrum, options));\n    }\n    return jcamps;\n}\nfunction getJcamp(spectrum, options) {\n    const { info = {}, meta = {} } = options;\n    let jcampOptions = {\n        options: {},\n        info: {\n            title: spectrum.title,\n            dataType: spectrum.dataType,\n            ...info,\n        },\n        meta: { ...spectrum.meta, ...meta },\n    };\n    return fromVariables(spectrum.variables, jcampOptions);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9KY2FtcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG8vdG9KY2FtcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBU2pELE1BQU0sVUFBVSxRQUFRLENBQUMsUUFBa0IsRUFBRSxVQUEyQixFQUFFO0lBQ3hFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsUUFBc0IsRUFBRSxPQUF3QjtJQUNoRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXpDLElBQUksWUFBWSxHQUFHO1FBQ2pCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsSUFBSSxFQUFFO1lBQ0osS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixHQUFHLElBQUk7U0FDUjtRQUNELElBQUksRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtLQUNwQyxDQUFDO0lBRUYsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN6RCxDQUFDIn0=","import { getJSGraph } from './jsgraph/getJSGraph';\nimport { getNormalizationAnnotations } from './jsgraph/getNormalizationAnnotations';\nexport * from './AnalysesManager';\nexport * from './Analysis';\nexport * from './from/fromJcamp';\nexport * from './from/fromText';\nexport * from './to/toJcamp';\nexport * from './to/toJcamps';\nexport * from './to/toText';\nexport * from './util/getNormalizedSpectrum';\nexport * from './util/peakPicking';\nexport * from './util/autoPeakPicking';\nexport { getReactPlotJSON } from './reactPlot/getReactPlotJSON';\nexport const JSGraph = {\n    getJSGraph,\n    getNormalizationAnnotations,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXBGLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixVQUFVO0lBQ1YsMkJBQTJCO0NBQzVCLENBQUMifQ==","import { xyFilterXPositive } from 'ml-spectra-processing';\nimport { addStyle } from './addStyle';\nimport { COLORS } from './colors';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n */\nexport function getJSGraph(analyses, options = {}) {\n    const { colors = COLORS, opacities = [1], linesWidth = [1], selector = {}, normalization, xAxis = {}, yAxis = {}, } = options;\n    let series = [];\n    let xLabel = '';\n    let yLabel = '';\n    for (let i = 0; i < analyses.length; i++) {\n        const analysis = analyses[i];\n        let serie = {};\n        let currentData = analysis.getNormalizedSpectrum({\n            selector,\n            normalization,\n        });\n        if (!currentData)\n            continue;\n        if (!xLabel)\n            xLabel = currentData.variables.x.label;\n        if (!yLabel)\n            yLabel = currentData.variables.y.label;\n        addStyle(serie, analysis, {\n            color: colors[i % colors.length],\n            opacity: opacities[i % opacities.length],\n            lineWidth: linesWidth[i % linesWidth.length],\n        });\n        serie.data = {\n            x: currentData.variables.x.data,\n            y: currentData.variables.y.data,\n        };\n        if (xAxis.logScale) {\n            serie.data = xyFilterXPositive(serie.data);\n        }\n        series.push(serie);\n    }\n    return {\n        axes: {\n            x: {\n                label: xLabel,\n                unit: '',\n                flipped: false,\n                display: true,\n                ...xAxis,\n            },\n            y: {\n                label: yLabel,\n                unit: '',\n                flipped: false,\n                display: true,\n                ...yAxis,\n            },\n        },\n        series,\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0SlNHcmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc2dyYXBoL2dldEpTR3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBdUJsQzs7R0FFRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBb0IsRUFBRSxVQUEwQixFQUFFO0lBQzNFLE1BQU0sRUFDSixNQUFNLEdBQUcsTUFBTSxFQUNmLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNmLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNoQixRQUFRLEdBQUcsRUFBRSxFQUNiLGFBQWEsRUFDYixLQUFLLEdBQUcsRUFBRSxFQUNWLEtBQUssR0FBRyxFQUFFLEdBQ1gsR0FBRyxPQUFPLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLEdBQTRCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7WUFDL0MsUUFBUTtZQUNSLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVztZQUFFLFNBQVM7UUFDM0IsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNwRCxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUN4QixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsSUFBSSxHQUFHO1lBQ1gsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDL0IsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDaEMsQ0FBQztRQUVGLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNsQixLQUFLLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEI7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFO1lBQ0osQ0FBQyxFQUFFO2dCQUNELEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEdBQUcsS0FBSzthQUNUO1lBQ0QsQ0FBQyxFQUFFO2dCQUNELEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEdBQUcsS0FBSzthQUNUO1NBQ0Y7UUFDRCxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUMifQ==","export function getNormalizationAnnotations(filter = {}, boundary = { y: { min: '0px', max: '2000px' } }) {\n    let { exclusions = [] } = filter;\n    let annotations = [];\n    exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n    annotations = exclusions.map((exclusion) => {\n        let annotation = {\n            type: 'rect',\n            position: [\n                { x: exclusion.from, y: boundary.y.min },\n                { x: exclusion.to, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        };\n        return annotation;\n    });\n    if (filter.from !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n                { x: filter.from, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    if (filter.to !== undefined) {\n        annotations.push({\n            type: 'rect',\n            position: [\n                { x: filter.to, y: boundary.y.min },\n                { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n            ],\n            strokeWidth: 0,\n            fillColor: 'rgba(255,255,224,1)',\n        });\n    }\n    return annotations;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Tm9ybWFsaXphdGlvbkFubm90YXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzZ3JhcGgvZ2V0Tm9ybWFsaXphdGlvbkFubm90YXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsU0FBNEIsRUFBRSxFQUM5QixRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtJQUUvQyxJQUFJLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUVqQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDckIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDekMsSUFBSSxVQUFVLEdBQUc7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRTtnQkFDUixFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7YUFDdkM7WUFDRCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUM3QixXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLE1BQU07WUFDWixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDakQsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7YUFDdEM7WUFDRCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFO1FBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRTtnQkFDUixFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDbkMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTthQUNsRDtZQUNELFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMifQ==","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n  const matches = [];\n  let match = regex.exec(string);\n  while (match) {\n    const allmatches = [];\n    const len = match.length;\n    for (let index = 0; index < len; index++) {\n      allmatches.push(match[index]);\n    }\n    matches.push(allmatches);\n    match = regex.exec(string);\n  }\n  return matches;\n};\n\nconst isName = function(string) {\n  const match = regexName.exec(string);\n  return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function(v) {\n  return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function(obj) {\n  return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function(target, a, arrayMode) {\n  if (a) {\n    const keys = Object.keys(a); // will return an array of own properties\n    const len = keys.length; //don't make it inline\n    for (let i = 0; i < len; i++) {\n      if (arrayMode === 'strict') {\n        target[keys[i]] = [ a[keys[i]] ];\n      } else {\n        target[keys[i]] = a[keys[i]];\n      }\n    }\n  }\n};\n/* exports.merge =function (b,a){\n  return Object.assign(b,a);\n} */\n\nexports.getValue = function(v) {\n  if (exports.isExist(v)) {\n    return v;\n  } else {\n    return '';\n  }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function(options, defaultOptions, props) {\n  var newOptions = {};\n  if (!options) {\n    return defaultOptions; //if there are not options\n  }\n\n  for (let i = 0; i < props.length; i++) {\n    if (options[props[i]] !== undefined) {\n      newOptions[props[i]] = options[props[i]];\n    } else {\n      newOptions[props[i]] = defaultOptions[props[i]];\n    }\n  }\n  return newOptions;\n};\n\n/**\n * Check if a tag name should be treated as array\n *\n * @param tagName the node tagname\n * @param arrayMode the array mode option\n * @param parentTagName the parent tag name\n * @returns {boolean} true if node should be parsed as array\n */\nexports.isTagNameInArrayMode = function (tagName, arrayMode, parentTagName) {\n  if (arrayMode === false) {\n    return false;\n  } else if (arrayMode instanceof RegExp) {\n    return arrayMode.test(tagName);\n  } else if (typeof arrayMode === 'function') {\n    return !!arrayMode(tagName, parentTagName);\n  }\n\n  return arrayMode === \"strict\";\n}\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\n","'use strict';\n\nconst util = require('./util');\n\nconst convertToJson = function(node, options, parentTagName) {\n  const jObj = {};\n\n  // when no child node or attr is present\n  if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n    return util.isExist(node.val) ? node.val : '';\n  }\n\n  // otherwise create a textnode if node has some text\n  if (util.isExist(node.val) && !(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n    const asArray = util.isTagNameInArrayMode(node.tagname, options.arrayMode, parentTagName)\n    jObj[options.textNodeName] = asArray ? [node.val] : node.val;\n  }\n\n  util.merge(jObj, node.attrsMap, options.arrayMode);\n\n  const keys = Object.keys(node.child);\n  for (let index = 0; index < keys.length; index++) {\n    const tagName = keys[index];\n    if (node.child[tagName] && node.child[tagName].length > 1) {\n      jObj[tagName] = [];\n      for (let tag in node.child[tagName]) {\n        if (node.child[tagName].hasOwnProperty(tag)) {\n          jObj[tagName].push(convertToJson(node.child[tagName][tag], options, tagName));\n        }\n      }\n    } else {\n      const result = convertToJson(node.child[tagName][0], options, tagName);\n      const asArray = (options.arrayMode === true && typeof result === 'object') || util.isTagNameInArrayMode(tagName, options.arrayMode, parentTagName);\n      jObj[tagName] = asArray ? [result] : result;\n    }\n  }\n\n  //add value\n  return jObj;\n};\n\nexports.convertToJson = convertToJson;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst xmlNode = require('./xmlNode');\nconst regx =\n  '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n  .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n  Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n  Number.parseFloat = window.parseFloat;\n}\n\nconst defaultOptions = {\n  attributeNamePrefix: '@_',\n  attrNodeName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  ignoreNameSpace: false,\n  allowBooleanAttributes: false, //a tag can have attributes without any value\n  //ignoreRootElement : false,\n  parseNodeValue: true,\n  parseAttributeValue: false,\n  arrayMode: false,\n  trimValues: true, //Trim string values of tag and attributes\n  cdataTagName: false,\n  cdataPositionChar: '\\\\c',\n  tagValueProcessor: function(a, tagName) {\n    return a;\n  },\n  attrValueProcessor: function(a, attrName) {\n    return a;\n  },\n  stopNodes: []\n  //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\n\nconst props = [\n  'attributeNamePrefix',\n  'attrNodeName',\n  'textNodeName',\n  'ignoreAttributes',\n  'ignoreNameSpace',\n  'allowBooleanAttributes',\n  'parseNodeValue',\n  'parseAttributeValue',\n  'arrayMode',\n  'trimValues',\n  'cdataTagName',\n  'cdataPositionChar',\n  'tagValueProcessor',\n  'attrValueProcessor',\n  'parseTrueNumberOnly',\n  'stopNodes'\n];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n  if (val) {\n    if (options.trimValues) {\n      val = val.trim();\n    }\n    val = options.tagValueProcessor(val, tagName);\n    val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n  }\n\n  return val;\n}\n\nfunction resolveNameSpace(tagname, options) {\n  if (options.ignoreNameSpace) {\n    const tags = tagname.split(':');\n    const prefix = tagname.charAt(0) === '/' ? '/' : '';\n    if (tags[0] === 'xmlns') {\n      return '';\n    }\n    if (tags.length === 2) {\n      tagname = prefix + tags[1];\n    }\n  }\n  return tagname;\n}\n\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n  if (shouldParse && typeof val === 'string') {\n    let parsed;\n    if (val.trim() === '' || isNaN(val)) {\n      parsed = val === 'true' ? true : val === 'false' ? false : val;\n    } else {\n      if (val.indexOf('0x') !== -1) {\n        //support hexa decimal\n        parsed = Number.parseInt(val, 16);\n      } else if (val.indexOf('.') !== -1) {\n        parsed = Number.parseFloat(val);\n        val = val.replace(/\\.?0+$/, \"\");\n      } else {\n        parsed = Number.parseInt(val, 10);\n      }\n      if (parseTrueNumberOnly) {\n        parsed = String(parsed) === val ? parsed : val;\n      }\n    }\n    return parsed;\n  } else {\n    if (util.isExist(val)) {\n      return val;\n    } else {\n      return '';\n    }\n  }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\n\nfunction buildAttributesMap(attrStr, options) {\n  if (!options.ignoreAttributes && typeof attrStr === 'string') {\n    attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n    //attrStr = attrStr || attrStr.trim();\n\n    const matches = util.getAllMatches(attrStr, attrsRegx);\n    const len = matches.length; //don't make it inline\n    const attrs = {};\n    for (let i = 0; i < len; i++) {\n      const attrName = resolveNameSpace(matches[i][1], options);\n      if (attrName.length) {\n        if (matches[i][4] !== undefined) {\n          if (options.trimValues) {\n            matches[i][4] = matches[i][4].trim();\n          }\n          matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n          attrs[options.attributeNamePrefix + attrName] = parseValue(\n            matches[i][4],\n            options.parseAttributeValue,\n            options.parseTrueNumberOnly\n          );\n        } else if (options.allowBooleanAttributes) {\n          attrs[options.attributeNamePrefix + attrName] = true;\n        }\n      }\n    }\n    if (!Object.keys(attrs).length) {\n      return;\n    }\n    if (options.attrNodeName) {\n      const attrCollection = {};\n      attrCollection[options.attrNodeName] = attrs;\n      return attrCollection;\n    }\n    return attrs;\n  }\n}\n\nconst getTraversalObj = function(xmlData, options) {\n  xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\");\n  options = buildOptions(options, defaultOptions, props);\n  const xmlObj = new xmlNode('!xml');\n  let currentNode = xmlObj;\n  let textData = \"\";\n\n//function match(xmlData){\n  for(let i=0; i< xmlData.length; i++){\n    const ch = xmlData[i];\n    if(ch === '<'){\n      if( xmlData[i+1] === '/') {//Closing Tag\n        const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n        let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n        if(options.ignoreNameSpace){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n          }\n        }\n\n        /* if (currentNode.parent) {\n          currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n        } */\n        if(currentNode){\n          if(currentNode.val){\n            currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options);\n          }else{\n            currentNode.val = processTagValue(tagName, textData , options);\n          }\n        }\n\n        if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n          currentNode.child = []\n          if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}}\n          currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1)\n        }\n        currentNode = currentNode.parent;\n        textData = \"\";\n        i = closeIndex;\n      } else if( xmlData[i+1] === '?') {\n        i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\")\n      } else if(xmlData.substr(i + 1, 3) === '!--') {\n        i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\")\n      } else if( xmlData.substr(i + 1, 2) === '!D') {\n        const closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\")\n        const tagExp = xmlData.substring(i, closeIndex);\n        if(tagExp.indexOf(\"[\") >= 0){\n          i = xmlData.indexOf(\"]>\", i) + 1;\n        }else{\n          i = closeIndex;\n        }\n      }else if(xmlData.substr(i + 1, 2) === '![') {\n        const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2\n        const tagExp = xmlData.substring(i + 9,closeIndex);\n\n        //considerations\n        //1. CDATA will always have parent node\n        //2. A tag with CDATA is not a leaf node so it's value would be string type.\n        if(textData){\n          currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options);\n          textData = \"\";\n        }\n\n        if (options.cdataTagName) {\n          //add cdata node\n          const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp);\n          currentNode.addChild(childNode);\n          //for backtracking\n          currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n          //add rest value to parent node\n          if (tagExp) {\n            childNode.val = tagExp;\n          }\n        } else {\n          currentNode.val = (currentNode.val || '') + (tagExp || '');\n        }\n\n        i = closeIndex + 2;\n      }else {//Opening tag\n        const result = closingIndexForOpeningTag(xmlData, i+1)\n        let tagExp = result.data;\n        const closeIndex = result.index;\n        const separatorIndex = tagExp.indexOf(\" \");\n        let tagName = tagExp;\n        let shouldBuildAttributesMap = true;\n        if(separatorIndex !== -1){\n          tagName = tagExp.substr(0, separatorIndex).replace(/\\s\\s*$/, '');\n          tagExp = tagExp.substr(separatorIndex + 1);\n        }\n\n        if(options.ignoreNameSpace){\n          const colonIndex = tagName.indexOf(\":\");\n          if(colonIndex !== -1){\n            tagName = tagName.substr(colonIndex+1);\n            shouldBuildAttributesMap = tagName !== result.data.substr(colonIndex + 1);\n          }\n        }\n\n        //save text to parent node\n        if (currentNode && textData) {\n          if(currentNode.tagname !== '!xml'){\n            currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options);\n          }\n        }\n\n        if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){//selfClosing tag\n\n          if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n            tagName = tagName.substr(0, tagName.length - 1);\n            tagExp = tagName;\n          }else{\n            tagExp = tagExp.substr(0, tagExp.length - 1);\n          }\n\n          const childNode = new xmlNode(tagName, currentNode, '');\n          if(tagName !== tagExp){\n            childNode.attrsMap = buildAttributesMap(tagExp, options);\n          }\n          currentNode.addChild(childNode);\n        }else{//opening tag\n\n          const childNode = new xmlNode( tagName, currentNode );\n          if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {\n            childNode.startIndex=closeIndex;\n          }\n          if(tagName !== tagExp && shouldBuildAttributesMap){\n            childNode.attrsMap = buildAttributesMap(tagExp, options);\n          }\n          currentNode.addChild(childNode);\n          currentNode = childNode;\n        }\n        textData = \"\";\n        i = closeIndex;\n      }\n    }else{\n      textData += xmlData[i];\n    }\n  }\n  return xmlObj;\n}\n\nfunction closingIndexForOpeningTag(data, i){\n  let attrBoundary;\n  let tagExp = \"\";\n  for (let index = i; index < data.length; index++) {\n    let ch = data[index];\n    if (attrBoundary) {\n        if (ch === attrBoundary) attrBoundary = \"\";//reset\n    } else if (ch === '\"' || ch === \"'\") {\n        attrBoundary = ch;\n    } else if (ch === '>') {\n        return {\n          data: tagExp,\n          index: index\n        }\n    } else if (ch === '\\t') {\n      ch = \" \"\n    }\n    tagExp += ch;\n  }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n  const closingIndex = xmlData.indexOf(str, i);\n  if(closingIndex === -1){\n    throw new Error(errMsg)\n  }else{\n    return closingIndex + str.length - 1;\n  }\n}\n\nexports.getTraversalObj = getTraversalObj;\n","'use strict';\n\nmodule.exports = function(tagname, parent, val) {\n  this.tagname = tagname;\n  this.parent = parent;\n  this.child = {}; //child tags\n  this.attrsMap = {}; //attributes map\n  this.val = val; //text only\n  this.addChild = function(child) {\n    if (Array.isArray(this.child[child.tagname])) {\n      //already presents\n      this.child[child.tagname].push(child);\n    } else {\n      this.child[child.tagname] = [child];\n    }\n  };\n};\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n  allowBooleanAttributes: false, //A tag can have attributes without any value\n};\n\nconst props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n  options = util.buildOptions(options, defaultOptions, props);\n\n  //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n  //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n  //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n  const tags = [];\n  let tagFound = false;\n\n  //indicates that the root tag has been closed (aka. depth 0 has been reached)\n  let reachedRoot = false;\n\n  if (xmlData[0] === '\\ufeff') {\n    // check for byte order mark (BOM)\n    xmlData = xmlData.substr(1);\n  }\n\n  for (let i = 0; i < xmlData.length; i++) {\n\n    if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n      i+=2;\n      i = readPI(xmlData,i);\n      if (i.err) return i;\n    }else if (xmlData[i] === '<') {\n      //starting of tag\n      //read until you reach to '>' avoiding any '>' in attribute value\n\n      i++;\n      \n      if (xmlData[i] === '!') {\n        i = readCommentAndCDATA(xmlData, i);\n        continue;\n      } else {\n        let closingTag = false;\n        if (xmlData[i] === '/') {\n          //closing tag\n          closingTag = true;\n          i++;\n        }\n        //read tagname\n        let tagName = '';\n        for (; i < xmlData.length &&\n          xmlData[i] !== '>' &&\n          xmlData[i] !== ' ' &&\n          xmlData[i] !== '\\t' &&\n          xmlData[i] !== '\\n' &&\n          xmlData[i] !== '\\r'; i++\n        ) {\n          tagName += xmlData[i];\n        }\n        tagName = tagName.trim();\n        //console.log(tagName);\n\n        if (tagName[tagName.length - 1] === '/') {\n          //self closing tag without attributes\n          tagName = tagName.substring(0, tagName.length - 1);\n          //continue;\n          i--;\n        }\n        if (!validateTagName(tagName)) {\n          let msg;\n          if (tagName.trim().length === 0) {\n            msg = \"There is an unnecessary space between tag name and backward slash '</ ..'.\";\n          } else {\n            msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n          }\n          return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n        }\n\n        const result = readAttributeStr(xmlData, i);\n        if (result === false) {\n          return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n        }\n        let attrStr = result.value;\n        i = result.index;\n\n        if (attrStr[attrStr.length - 1] === '/') {\n          //self closing tag\n          attrStr = attrStr.substring(0, attrStr.length - 1);\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid === true) {\n            tagFound = true;\n            //continue; //text may presents after self closing tag\n          } else {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n          }\n        } else if (closingTag) {\n          if (!result.tagClosed) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n          } else if (attrStr.trim().length > 0) {\n            return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, i));\n          } else {\n            const otg = tags.pop();\n            if (tagName !== otg) {\n              return getErrorObject('InvalidTag', \"Closing tag '\"+otg+\"' is expected inplace of '\"+tagName+\"'.\", getLineNumberForPosition(xmlData, i));\n            }\n\n            //when there are no more tags, we reached the root level.\n            if (tags.length == 0) {\n              reachedRoot = true;\n            }\n          }\n        } else {\n          const isValid = validateAttributeString(attrStr, options);\n          if (isValid !== true) {\n            //the result from the nested function returns the position of the error within the attribute\n            //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n            //this gives us the absolute index in the entire xml, which we can use to find the line at last\n            return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n          }\n\n          //if the root level has been reached before ...\n          if (reachedRoot === true) {\n            return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n          } else {\n            tags.push(tagName);\n          }\n          tagFound = true;\n        }\n\n        //skip tag text value\n        //It may include comments and CDATA value\n        for (i++; i < xmlData.length; i++) {\n          if (xmlData[i] === '<') {\n            if (xmlData[i + 1] === '!') {\n              //comment or CADATA\n              i++;\n              i = readCommentAndCDATA(xmlData, i);\n              continue;\n            } else if (xmlData[i+1] === '?') {\n              i = readPI(xmlData, ++i);\n              if (i.err) return i;\n            } else{\n              break;\n            }\n          } else if (xmlData[i] === '&') {\n            const afterAmp = validateAmpersand(xmlData, i);\n            if (afterAmp == -1)\n              return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n            i = afterAmp;\n          }\n        } //end of reading tag text value\n        if (xmlData[i] === '<') {\n          i--;\n        }\n      }\n    } else {\n      if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n        continue;\n      }\n      return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n    }\n  }\n\n  if (!tagFound) {\n    return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n  } else if (tags.length > 0) {\n    return getErrorObject('InvalidXml', \"Invalid '\"+JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '')+\"' found.\", 1);\n  }\n\n  return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n  var start = i;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] == '?' || xmlData[i] == ' ') {\n      //tagname\n      var tagname = xmlData.substr(start, i - start);\n      if (i > 5 && tagname === 'xml') {\n        return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n      } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n        //check if valid attribut string\n        i++;\n        break;\n      } else {\n        continue;\n      }\n    }\n  }\n  return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n  if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n    //comment\n    for (i += 3; i < xmlData.length; i++) {\n      if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  } else if (\n    xmlData.length > i + 8 &&\n    xmlData[i + 1] === 'D' &&\n    xmlData[i + 2] === 'O' &&\n    xmlData[i + 3] === 'C' &&\n    xmlData[i + 4] === 'T' &&\n    xmlData[i + 5] === 'Y' &&\n    xmlData[i + 6] === 'P' &&\n    xmlData[i + 7] === 'E'\n  ) {\n    let angleBracketsCount = 1;\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === '<') {\n        angleBracketsCount++;\n      } else if (xmlData[i] === '>') {\n        angleBracketsCount--;\n        if (angleBracketsCount === 0) {\n          break;\n        }\n      }\n    }\n  } else if (\n    xmlData.length > i + 9 &&\n    xmlData[i + 1] === '[' &&\n    xmlData[i + 2] === 'C' &&\n    xmlData[i + 3] === 'D' &&\n    xmlData[i + 4] === 'A' &&\n    xmlData[i + 5] === 'T' &&\n    xmlData[i + 6] === 'A' &&\n    xmlData[i + 7] === '['\n  ) {\n    for (i += 8; i < xmlData.length; i++) {\n      if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n        i += 2;\n        break;\n      }\n    }\n  }\n\n  return i;\n}\n\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n  let attrStr = '';\n  let startChar = '';\n  let tagClosed = false;\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n      if (startChar === '') {\n        startChar = xmlData[i];\n      } else if (startChar !== xmlData[i]) {\n        //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n        continue;\n      } else {\n        startChar = '';\n      }\n    } else if (xmlData[i] === '>') {\n      if (startChar === '') {\n        tagClosed = true;\n        break;\n      }\n    }\n    attrStr += xmlData[i];\n  }\n  if (startChar !== '') {\n    return false;\n  }\n\n  return {\n    value: attrStr,\n    index: i,\n    tagClosed: tagClosed\n  };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab  cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n  //console.log(\"start:\"+attrStr+\":end\");\n\n  //if(attrStr.trim().length === 0) return true; //empty string\n\n  const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n  const attrNames = {};\n\n  for (let i = 0; i < matches.length; i++) {\n    if (matches[i][1].length === 0) {\n      //nospace before attribute name: a=\"sd\"b=\"saf\"\n      return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(attrStr, matches[i][0]))\n    } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n      //independent attribute: ab\n      return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(attrStr, matches[i][0]));\n    }\n    /* else if(matches[i][6] === undefined){//attribute without value: ab=\n                    return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n                } */\n    const attrName = matches[i][2];\n    if (!validateAttrName(attrName)) {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(attrStr, matches[i][0]));\n    }\n    if (!attrNames.hasOwnProperty(attrName)) {\n      //check for duplicate attribute.\n      attrNames[attrName] = 1;\n    } else {\n      return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(attrStr, matches[i][0]));\n    }\n  }\n\n  return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n  let re = /\\d/;\n  if (xmlData[i] === 'x') {\n    i++;\n    re = /[\\da-fA-F]/;\n  }\n  for (; i < xmlData.length; i++) {\n    if (xmlData[i] === ';')\n      return i;\n    if (!xmlData[i].match(re))\n      break;\n  }\n  return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n  // https://www.w3.org/TR/xml/#dt-charref\n  i++;\n  if (xmlData[i] === ';')\n    return -1;\n  if (xmlData[i] === '#') {\n    i++;\n    return validateNumberAmpersand(xmlData, i);\n  }\n  let count = 0;\n  for (; i < xmlData.length; i++, count++) {\n    if (xmlData[i].match(/\\w/) && count < 20)\n      continue;\n    if (xmlData[i] === ';')\n      break;\n    return -1;\n  }\n  return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n  return {\n    err: {\n      code: code,\n      msg: message,\n      line: lineNumber,\n    },\n  };\n}\n\nfunction validateAttrName(attrName) {\n  return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n  return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n  var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n  return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n  return attrStr.indexOf(match) + match.length;\n}\n","'use strict';\nconst char = function(a) {\n  return String.fromCharCode(a);\n};\n\nconst chars = {\n  nilChar: char(176),\n  missingChar: char(201),\n  nilPremitive: char(175),\n  missingPremitive: char(200),\n\n  emptyChar: char(178),\n  emptyValue: char(177), //empty Premitive\n\n  boundryChar: char(179),\n\n  objStart: char(198),\n  arrStart: char(204),\n  arrayEnd: char(185),\n};\n\nconst charsArr = [\n  chars.nilChar,\n  chars.nilPremitive,\n  chars.missingChar,\n  chars.missingPremitive,\n  chars.boundryChar,\n  chars.emptyChar,\n  chars.emptyValue,\n  chars.arrayEnd,\n  chars.objStart,\n  chars.arrStart,\n];\n\nconst _e = function(node, e_schema, options) {\n  if (typeof e_schema === 'string') {\n    //premitive\n    if (node && node[0] && node[0].val !== undefined) {\n      return getValue(node[0].val, e_schema);\n    } else {\n      return getValue(node, e_schema);\n    }\n  } else {\n    const hasValidData = hasData(node);\n    if (hasValidData === true) {\n      let str = '';\n      if (Array.isArray(e_schema)) {\n        //attributes can't be repeated. hence check in children tags only\n        str += chars.arrStart;\n        const itemSchema = e_schema[0];\n        //var itemSchemaType = itemSchema;\n        const arr_len = node.length;\n\n        if (typeof itemSchema === 'string') {\n          for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n            const r = getValue(node[arr_i].val, itemSchema);\n            str = processValue(str, r);\n          }\n        } else {\n          for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n            const r = _e(node[arr_i], itemSchema, options);\n            str = processValue(str, r);\n          }\n        }\n        str += chars.arrayEnd; //indicates that next item is not array item\n      } else {\n        //object\n        str += chars.objStart;\n        const keys = Object.keys(e_schema);\n        if (Array.isArray(node)) {\n          node = node[0];\n        }\n        for (let i in keys) {\n          const key = keys[i];\n          //a property defined in schema can be present either in attrsMap or children tags\n          //options.textNodeName will not present in both maps, take it's value from val\n          //options.attrNodeName will be present in attrsMap\n          let r;\n          if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n            r = _e(node.attrsMap[key], e_schema[key], options);\n          } else if (key === options.textNodeName) {\n            r = _e(node.val, e_schema[key], options);\n          } else {\n            r = _e(node.child[key], e_schema[key], options);\n          }\n          str = processValue(str, r);\n        }\n      }\n      return str;\n    } else {\n      return hasValidData;\n    }\n  }\n};\n\nconst getValue = function(a /*, type*/) {\n  switch (a) {\n    case undefined:\n      return chars.missingPremitive;\n    case null:\n      return chars.nilPremitive;\n    case '':\n      return chars.emptyValue;\n    default:\n      return a;\n  }\n};\n\nconst processValue = function(str, r) {\n  if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n    str += chars.boundryChar;\n  }\n  return str + r;\n};\n\nconst isAppChar = function(ch) {\n  return charsArr.indexOf(ch) !== -1;\n};\n\nfunction hasData(jObj) {\n  if (jObj === undefined) {\n    return chars.missingChar;\n  } else if (jObj === null) {\n    return chars.nilChar;\n  } else if (\n    jObj.child &&\n    Object.keys(jObj.child).length === 0 &&\n    (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)\n  ) {\n    return chars.emptyChar;\n  } else {\n    return true;\n  }\n}\n\nconst x2j = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\n\nconst convert2nimn = function(node, e_schema, options) {\n  options = buildOptions(options, x2j.defaultOptions, x2j.props);\n  return _e(node, e_schema, options);\n};\n\nexports.convert2nimn = convert2nimn;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst x2j = require('./xmlstr2xmlnode');\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n  options = buildOptions(options, x2j.defaultOptions, x2j.props);\n\n  options.indentBy = options.indentBy || '';\n  return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n  let jObj = '{';\n\n  //traver through all the children\n  const keys = Object.keys(node.child);\n\n  for (let index = 0; index < keys.length; index++) {\n    var tagname = keys[index];\n    if (node.child[tagname] && node.child[tagname].length > 1) {\n      jObj += '\"' + tagname + '\" : [ ';\n      for (var tag in node.child[tagname]) {\n        jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n      }\n      jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n    } else {\n      jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n    }\n  }\n  util.merge(jObj, node.attrsMap);\n  //add attrsMap as new children\n  if (util.isEmptyObject(jObj)) {\n    return util.isExist(node.val) ? node.val : '';\n  } else {\n    if (util.isExist(node.val)) {\n      if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n        jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n      }\n    }\n  }\n  //add value\n  if (jObj[jObj.length - 1] === ',') {\n    jObj = jObj.substr(0, jObj.length - 2);\n  }\n  return jObj + '}';\n};\n\nfunction stringval(v) {\n  if (v === true || v === false || !isNaN(v)) {\n    return v;\n  } else {\n    return '\"' + v + '\"';\n  }\n}\n\nfunction indentate(options, level) {\n  return options.indentBy.repeat(level);\n}\n\nexports.convertToJsonString = convertToJsonString;\n","'use strict';\n//parse Empty Node as self closing node\nconst buildOptions = require('./util').buildOptions;\n\nconst defaultOptions = {\n  attributeNamePrefix: '@_',\n  attrNodeName: false,\n  textNodeName: '#text',\n  ignoreAttributes: true,\n  cdataTagName: false,\n  cdataPositionChar: '\\\\c',\n  format: false,\n  indentBy: '  ',\n  supressEmptyNode: false,\n  tagValueProcessor: function(a) {\n    return a;\n  },\n  attrValueProcessor: function(a) {\n    return a;\n  },\n};\n\nconst props = [\n  'attributeNamePrefix',\n  'attrNodeName',\n  'textNodeName',\n  'ignoreAttributes',\n  'cdataTagName',\n  'cdataPositionChar',\n  'format',\n  'indentBy',\n  'supressEmptyNode',\n  'tagValueProcessor',\n  'attrValueProcessor',\n];\n\nfunction Parser(options) {\n  this.options = buildOptions(options, defaultOptions, props);\n  if (this.options.ignoreAttributes || this.options.attrNodeName) {\n    this.isAttribute = function(/*a*/) {\n      return false;\n    };\n  } else {\n    this.attrPrefixLen = this.options.attributeNamePrefix.length;\n    this.isAttribute = isAttribute;\n  }\n  if (this.options.cdataTagName) {\n    this.isCDATA = isCDATA;\n  } else {\n    this.isCDATA = function(/*a*/) {\n      return false;\n    };\n  }\n  this.replaceCDATAstr = replaceCDATAstr;\n  this.replaceCDATAarr = replaceCDATAarr;\n\n  if (this.options.format) {\n    this.indentate = indentate;\n    this.tagEndChar = '>\\n';\n    this.newLine = '\\n';\n  } else {\n    this.indentate = function() {\n      return '';\n    };\n    this.tagEndChar = '>';\n    this.newLine = '';\n  }\n\n  if (this.options.supressEmptyNode) {\n    this.buildTextNode = buildEmptyTextNode;\n    this.buildObjNode = buildEmptyObjNode;\n  } else {\n    this.buildTextNode = buildTextValNode;\n    this.buildObjNode = buildObjectNode;\n  }\n\n  this.buildTextValNode = buildTextValNode;\n  this.buildObjectNode = buildObjectNode;\n}\n\nParser.prototype.parse = function(jObj) {\n  return this.j2x(jObj, 0).val;\n};\n\nParser.prototype.j2x = function(jObj, level) {\n  let attrStr = '';\n  let val = '';\n  const keys = Object.keys(jObj);\n  const len = keys.length;\n  for (let i = 0; i < len; i++) {\n    const key = keys[i];\n    if (typeof jObj[key] === 'undefined') {\n      // supress undefined node\n    } else if (jObj[key] === null) {\n      val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n    } else if (jObj[key] instanceof Date) {\n      val += this.buildTextNode(jObj[key], key, '', level);\n    } else if (typeof jObj[key] !== 'object') {\n      //premitive type\n      const attr = this.isAttribute(key);\n      if (attr) {\n        attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n      } else if (this.isCDATA(key)) {\n        if (jObj[this.options.textNodeName]) {\n          val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n        } else {\n          val += this.replaceCDATAstr('', jObj[key]);\n        }\n      } else {\n        //tag value\n        if (key === this.options.textNodeName) {\n          if (jObj[this.options.cdataTagName]) {\n            //value will added while processing cdata\n          } else {\n            val += this.options.tagValueProcessor('' + jObj[key]);\n          }\n        } else {\n          val += this.buildTextNode(jObj[key], key, '', level);\n        }\n      }\n    } else if (Array.isArray(jObj[key])) {\n      //repeated nodes\n      if (this.isCDATA(key)) {\n        val += this.indentate(level);\n        if (jObj[this.options.textNodeName]) {\n          val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n        } else {\n          val += this.replaceCDATAarr('', jObj[key]);\n        }\n      } else {\n        //nested nodes\n        const arrLen = jObj[key].length;\n        for (let j = 0; j < arrLen; j++) {\n          const item = jObj[key][j];\n          if (typeof item === 'undefined') {\n            // supress undefined node\n          } else if (item === null) {\n            val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n          } else if (typeof item === 'object') {\n            const result = this.j2x(item, level + 1);\n            val += this.buildObjNode(result.val, key, result.attrStr, level);\n          } else {\n            val += this.buildTextNode(item, key, '', level);\n          }\n        }\n      }\n    } else {\n      //nested node\n      if (this.options.attrNodeName && key === this.options.attrNodeName) {\n        const Ks = Object.keys(jObj[key]);\n        const L = Ks.length;\n        for (let j = 0; j < L; j++) {\n          attrStr += ' ' + Ks[j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '\"';\n        }\n      } else {\n        const result = this.j2x(jObj[key], level + 1);\n        val += this.buildObjNode(result.val, key, result.attrStr, level);\n      }\n    }\n  }\n  return {attrStr: attrStr, val: val};\n};\n\nfunction replaceCDATAstr(str, cdata) {\n  str = this.options.tagValueProcessor('' + str);\n  if (this.options.cdataPositionChar === '' || str === '') {\n    return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;\n  } else {\n    return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);\n  }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n  str = this.options.tagValueProcessor('' + str);\n  if (this.options.cdataPositionChar === '' || str === '') {\n    return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;\n  } else {\n    for (let v in cdata) {\n      str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');\n    }\n    return str + this.newLine;\n  }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n  if (attrStr && !val.includes('<')) {\n    return (\n      this.indentate(level) +\n      '<' +\n      key +\n      attrStr +\n      '>' +\n      val +\n      //+ this.newLine\n      // + this.indentate(level)\n      '</' +\n      key +\n      this.tagEndChar\n    );\n  } else {\n    return (\n      this.indentate(level) +\n      '<' +\n      key +\n      attrStr +\n      this.tagEndChar +\n      val +\n      //+ this.newLine\n      this.indentate(level) +\n      '</' +\n      key +\n      this.tagEndChar\n    );\n  }\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n  if (val !== '') {\n    return this.buildObjectNode(val, key, attrStr, level);\n  } else {\n    return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n    //+ this.newLine\n  }\n}\n\nfunction buildTextValNode(val, key, attrStr, level) {\n  return (\n    this.indentate(level) +\n    '<' +\n    key +\n    attrStr +\n    '>' +\n    this.options.tagValueProcessor(val) +\n    '</' +\n    key +\n    this.tagEndChar\n  );\n}\n\nfunction buildEmptyTextNode(val, key, attrStr, level) {\n  if (val !== '') {\n    return this.buildTextValNode(val, key, attrStr, level);\n  } else {\n    return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n  }\n}\n\nfunction indentate(level) {\n  return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n  if (name.startsWith(this.options.attributeNamePrefix)) {\n    return name.substr(this.attrPrefixLen);\n  } else {\n    return false;\n  }\n}\n\nfunction isCDATA(name) {\n  return name === this.options.cdataTagName;\n}\n\n//formatting\n//indentation\n//\\n after each closing or self closing tag\n\nmodule.exports = Parser;\n","'use strict';\n\nconst nodeToJson = require('./node2json');\nconst xmlToNodeobj = require('./xmlstr2xmlnode');\nconst x2xmlnode = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\nconst validator = require('./validator');\n\nexports.parse = function(xmlData, options, validationOption) {\n  if( validationOption){\n    if(validationOption === true) validationOption = {}\n    \n    const result = validator.validate(xmlData, validationOption);\n    if (result !== true) {\n      throw Error( result.err.msg)\n    }\n  }\n  options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n  const traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options)\n  //print(traversableObj, \"  \");\n  return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = require('./nimndata').convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = require('./node2json_str').convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = require('./json2xml');\nexports.parseToNimn = function(xmlData, schema, options) {\n  return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\n\n\nfunction print(xmlNode, indentation){\n  if(xmlNode){\n    console.log(indentation + \"{\")\n    console.log(indentation + \"  \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \");\n    if(xmlNode.parent){\n      console.log(indentation + \"  \\\"parent\\\": \\\"\" + xmlNode.parent.tagname  + \"\\\", \");\n    }\n    console.log(indentation + \"  \\\"val\\\": \\\"\" + xmlNode.val  + \"\\\", \");\n    console.log(indentation + \"  \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap,null,4)  + \", \");\n\n    if(xmlNode.child){\n      console.log(indentation + \"\\\"child\\\": {\")\n      const indentation2 = indentation + indentation;\n      Object.keys(xmlNode.child).forEach( function(key) {\n        const node = xmlNode.child[key];\n\n        if(Array.isArray(node)){\n          console.log(indentation +  \"\\\"\"+key+\"\\\" :[\")\n          node.forEach( function(item,index) {\n            //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n            print(item, indentation2);\n          })\n          console.log(indentation + \"],\")  \n        }else{\n          console.log(indentation + \" \\\"\"+key+\"\\\" : {\")\n          print(node, indentation2);\n          console.log(indentation + \"},\")  \n        }\n      });\n      console.log(indentation + \"},\")\n    }\n    console.log(indentation + \"},\")\n  }\n}\n","/*!\n\nJSZip v3.7.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n*/\n\n!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=t()}}(function(){return function s(a,o,h){function u(r,t){if(!o[r]){if(!a[r]){var e=\"function\"==typeof require&&require;if(!t&&e)return e(r,!0);if(l)return l(r,!0);var i=new Error(\"Cannot find module '\"+r+\"'\");throw i.code=\"MODULE_NOT_FOUND\",i}var n=o[r]={exports:{}};a[r][0].call(n.exports,function(t){var e=a[r][1][t];return u(e||t)},n,n.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,t=0;t<h.length;t++)u(h[t]);return u}({1:[function(t,e,r){\"use strict\";var c=t(\"./utils\"),d=t(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(t){for(var e,r,i,n,s,a,o,h=[],u=0,l=t.length,f=l,d=\"string\"!==c.getTypeOf(t);u<t.length;)f=l-u,i=d?(e=t[u++],r=u<l?t[u++]:0,u<l?t[u++]:0):(e=t.charCodeAt(u++),r=u<l?t.charCodeAt(u++):0,u<l?t.charCodeAt(u++):0),n=e>>2,s=(3&e)<<4|r>>4,a=1<f?(15&r)<<2|i>>6:64,o=2<f?63&i:64,h.push(p.charAt(n)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(t){var e,r,i,n,s,a,o=0,h=0,u=\"data:\";if(t.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(t=t.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\")).length/4;if(t.charAt(t.length-1)===p.charAt(64)&&f--,t.charAt(t.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=d.uint8array?new Uint8Array(0|f):new Array(0|f);o<t.length;)e=p.indexOf(t.charAt(o++))<<2|(n=p.indexOf(t.charAt(o++)))>>4,r=(15&n)<<4|(s=p.indexOf(t.charAt(o++)))>>2,i=(3&s)<<6|(a=p.indexOf(t.charAt(o++))),l[h++]=e,64!==s&&(l[h++]=r),64!==a&&(l[h++]=i);return l}},{\"./support\":30,\"./utils\":32}],2:[function(t,e,r){\"use strict\";var i=t(\"./external\"),n=t(\"./stream/DataWorker\"),s=t(\"./stream/Crc32Probe\"),a=t(\"./stream/DataLengthProbe\");function o(t,e,r,i,n){this.compressedSize=t,this.uncompressedSize=e,this.crc32=r,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var t=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),e=this;return t.on(\"end\",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),t},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(t,e,r){return t.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(e.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",e)},e.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(t,e,r){\"use strict\";var i=t(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(t){return new i(\"STORE compression\")},uncompressWorker:function(){return new i(\"STORE decompression\")}},r.DEFLATE=t(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(t,e,r){\"use strict\";var i=t(\"./utils\");var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e){return void 0!==t&&t.length?\"string\"!==i.getTypeOf(t)?function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}(0|e,t,t.length,0):function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e.charCodeAt(a))];return-1^t}(0|e,t,t.length,0):0}},{\"./utils\":32}],5:[function(t,e,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(t,e,r){\"use strict\";var i=null;i=\"undefined\"!=typeof Promise?Promise:t(\"lie\"),e.exports={Promise:i}},{lie:37}],7:[function(t,e,r){\"use strict\";var i=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,n=t(\"pako\"),s=t(\"./utils\"),a=t(\"./stream/GenericWorker\"),o=i?\"uint8array\":\"array\";function h(t,e){a.call(this,\"FlateWorker/\"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=e,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(t){this.meta=t.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,t.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(t){return new h(\"Deflate\",t)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(t,e,r){\"use strict\";function A(t,e){var r,i=\"\";for(r=0;r<e;r++)i+=String.fromCharCode(255&t),t>>>=8;return i}function i(t,e,r,i,n,s){var a,o,h=t.file,u=t.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),d=I.transformTo(\"string\",O.utf8encode(h.name)),c=h.comment,p=I.transformTo(\"string\",s(c)),m=I.transformTo(\"string\",O.utf8encode(c)),_=d.length!==h.name.length,g=m.length!==c.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};e&&!r||(x.crc32=t.crc32,x.compressedSize=t.compressedSize,x.uncompressedSize=t.uncompressedSize);var S=0;e&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===n?(C=798,z|=function(t,e){var r=t;return t||(r=e?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(t){return 63&(t||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+d,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(i,4)+f+b+p}}var I=t(\"../utils\"),n=t(\"../stream/GenericWorker\"),O=t(\"../utf8\"),B=t(\"../crc32\"),R=t(\"../signature\");function s(t,e,r,i){n.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=r,this.encodeFileName=i,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,n),s.prototype.push=function(t){var e=t.meta.percent||0,r=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,n.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:r?(e+100*(r-i-1))/r:100}}))},s.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var e=this.streamFiles&&!t.file.dir;if(e){var r=i(t,e,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(t){this.accumulate=!1;var e=this.streamFiles&&!t.file.dir,r=i(t,e,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),e)this.push({data:function(t){return R.DATA_DESCRIPTOR+A(t.crc32,4)+A(t.compressedSize,4)+A(t.uncompressedSize,4)}(t),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e<this.dirRecords.length;e++)this.push({data:this.dirRecords[e],meta:{percent:100}});var r=this.bytesWritten-t,i=function(t,e,r,i,n){var s=I.transformTo(\"string\",n(i));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(t,2)+A(t,2)+A(e,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,t,this.zipComment,this.encodeFileName);this.push({data:i,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(t){this._sources.push(t);var e=this;return t.on(\"data\",function(t){e.processChunk(t)}),t.on(\"end\",function(){e.closedSource(e.previous.streamInfo),e._sources.length?e.prepareNextSource():e.end()}),t.on(\"error\",function(t){e.error(t)}),this},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(t){var e=this._sources;if(!n.prototype.error.call(this,t))return!1;for(var r=0;r<e.length;r++)try{e[r].error(t)}catch(t){}return!0},s.prototype.lock=function(){n.prototype.lock.call(this);for(var t=this._sources,e=0;e<t.length;e++)t[e].lock()},e.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(t,e,r){\"use strict\";var u=t(\"../compressions\"),i=t(\"./ZipFileWorker\");r.generateWorker=function(t,a,e){var o=new i(a.streamFiles,e,a.platform,a.encodeFileName),h=0;try{t.forEach(function(t,e){h++;var r=function(t,e){var r=t||e,i=u[r];if(!i)throw new Error(r+\" is not a valid compression method !\");return i}(e.options.compression,a.compression),i=e.options.compressionOptions||a.compressionOptions||{},n=e.dir,s=e.date;e._compressWorker(r,i).withStreamInfo(\"file\",{name:t,dir:n,date:s,comment:e.comment||\"\",unixPermissions:e.unixPermissions,dosPermissions:e.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(t){o.error(t)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(t,e,r){\"use strict\";function i(){if(!(this instanceof i))return new i;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var t=new i;for(var e in this)\"function\"!=typeof this[e]&&(t[e]=this[e]);return t}}(i.prototype=t(\"./object\")).loadAsync=t(\"./load\"),i.support=t(\"./support\"),i.defaults=t(\"./defaults\"),i.version=\"3.7.1\",i.loadAsync=function(t,e){return(new i).loadAsync(t,e)},i.external=t(\"./external\"),e.exports=i},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(t,e,r){\"use strict\";var i=t(\"./utils\"),n=t(\"./external\"),o=t(\"./utf8\"),h=t(\"./zipEntries\"),s=t(\"./stream/Crc32Probe\"),u=t(\"./nodejsUtils\");function l(i){return new n.Promise(function(t,e){var r=i.decompressed.getContentWorker().pipe(new s);r.on(\"error\",function(t){e(t)}).on(\"end\",function(){r.streamInfo.crc32!==i.decompressed.crc32?e(new Error(\"Corrupted zip : CRC32 mismatch\")):t()}).resume()})}e.exports=function(t,s){var a=this;return s=i.extend(s||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:o.utf8decode}),u.isNode&&u.isStream(t)?n.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):i.prepareContent(\"the loaded zip file\",t,!0,s.optimizedBinaryString,s.base64).then(function(t){var e=new h(s);return e.load(t),e}).then(function(t){var e=[n.Promise.resolve(t)],r=t.files;if(s.checkCRC32)for(var i=0;i<r.length;i++)e.push(l(r[i]));return n.Promise.all(e)}).then(function(t){for(var e=t.shift(),r=e.files,i=0;i<r.length;i++){var n=r[i];a.file(n.fileNameStr,n.decompressed,{binary:!0,optimizedBinaryString:!0,date:n.date,dir:n.dir,comment:n.fileCommentStr.length?n.fileCommentStr:null,unixPermissions:n.unixPermissions,dosPermissions:n.dosPermissions,createFolders:s.createFolders})}return e.zipComment.length&&(a.comment=e.zipComment),a})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"../stream/GenericWorker\");function s(t,e){n.call(this,\"Nodejs stream input adapter for \"+t),this._upstreamEnded=!1,this._bindStream(e)}i.inherits(s,n),s.prototype._bindStream=function(t){var e=this;(this._stream=t).pause(),t.on(\"data\",function(t){e.push({data:t,meta:{percent:0}})}).on(\"error\",function(t){e.isPaused?this.generatedError=t:e.error(t)}).on(\"end\",function(){e.isPaused?e._upstreamEnded=!0:e.end()})},s.prototype.pause=function(){return!!n.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},e.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(t,e,r){\"use strict\";var n=t(\"readable-stream\").Readable;function i(t,e,r){n.call(this,e),this._helper=t;var i=this;t.on(\"data\",function(t,e){i.push(t)||i._helper.pause(),r&&r(e)}).on(\"error\",function(t){i.emit(\"error\",t)}).on(\"end\",function(){i.push(null)})}t(\"../utils\").inherits(i,n),i.prototype._read=function(){this._helper.resume()},e.exports=i},{\"../utils\":32,\"readable-stream\":16}],14:[function(t,e,r){\"use strict\";e.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(t,e){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(t,e);if(\"number\"==typeof t)throw new Error('The \"data\" argument must not be a number');return new Buffer(t,e)},allocBuffer:function(t){if(Buffer.alloc)return Buffer.alloc(t);var e=new Buffer(t);return e.fill(0),e},isBuffer:function(t){return Buffer.isBuffer(t)},isStream:function(t){return t&&\"function\"==typeof t.on&&\"function\"==typeof t.pause&&\"function\"==typeof t.resume}}},{}],15:[function(t,e,r){\"use strict\";function s(t,e,r){var i,n=u.getTypeOf(e),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(t=g(t)),s.createFolders&&(i=_(t))&&b.call(this,i,!0);var a=\"string\"===n&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(e instanceof d&&0===e.uncompressedSize||s.dir||!e||0===e.length)&&(s.base64=!1,s.binary=!0,e=\"\",s.compression=\"STORE\",n=\"string\");var o=null;o=e instanceof d||e instanceof l?e:p.isNode&&p.isStream(e)?new m(t,e):u.prepareContent(t,e,s.binary,s.optimizedBinaryString,s.base64);var h=new c(t,o,s);this.files[t]=h}var n=t(\"./utf8\"),u=t(\"./utils\"),l=t(\"./stream/GenericWorker\"),a=t(\"./stream/StreamHelper\"),f=t(\"./defaults\"),d=t(\"./compressedObject\"),c=t(\"./zipObject\"),o=t(\"./generate\"),p=t(\"./nodejsUtils\"),m=t(\"./nodejs/NodejsStreamInputAdapter\"),_=function(t){\"/\"===t.slice(-1)&&(t=t.substring(0,t.length-1));var e=t.lastIndexOf(\"/\");return 0<e?t.substring(0,e):\"\"},g=function(t){return\"/\"!==t.slice(-1)&&(t+=\"/\"),t},b=function(t,e){return e=void 0!==e?e:f.createFolders,t=g(t),this.files[t]||s.call(this,t,null,{dir:!0,createFolders:e}),this.files[t]};function h(t){return\"[object RegExp]\"===Object.prototype.toString.call(t)}var i={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(t){var e,r,i;for(e in this.files)i=this.files[e],(r=e.slice(this.root.length,e.length))&&e.slice(0,this.root.length)===this.root&&t(r,i)},filter:function(r){var i=[];return this.forEach(function(t,e){r(t,e)&&i.push(e)}),i},file:function(t,e,r){if(1!==arguments.length)return t=this.root+t,s.call(this,t,e,r),this;if(h(t)){var i=t;return this.filter(function(t,e){return!e.dir&&i.test(t)})}var n=this.files[this.root+t];return n&&!n.dir?n:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(t,e){return e.dir&&r.test(t)});var t=this.root+r,e=b.call(this,t),i=this.clone();return i.root=e.name,i},remove:function(r){r=this.root+r;var t=this.files[r];if(t||(\"/\"!==r.slice(-1)&&(r+=\"/\"),t=this.files[r]),t&&!t.dir)delete this.files[r];else for(var e=this.filter(function(t,e){return e.name.slice(0,r.length)===r}),i=0;i<e.length;i++)delete this.files[e[i].name];return this},generate:function(t){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(t){var e,r={};try{if((r=u.extend(t||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:n.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var i=r.comment||this.comment||\"\";e=o.generateWorker(this,r,i)}catch(t){(e=new l(\"error\")).error(t)}return new a(e,r.type||\"string\",r.mimeType)},generateAsync:function(t,e){return this.generateInternalStream(t).accumulate(e)},generateNodeStream:function(t,e){return(t=t||{}).type||(t.type=\"nodebuffer\"),this.generateInternalStream(t).toNodejsStream(e)}};e.exports=i},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(t,e,r){e.exports=t(\"stream\")},{stream:void 0}],17:[function(t,e,r){\"use strict\";var i=t(\"./DataReader\");function n(t){i.call(this,t);for(var e=0;e<this.data.length;e++)t[e]=255&t[e]}t(\"../utils\").inherits(n,i),n.prototype.byteAt=function(t){return this.data[this.zero+t]},n.prototype.lastIndexOfSignature=function(t){for(var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===e&&this.data[s+1]===r&&this.data[s+2]===i&&this.data[s+3]===n)return s-this.zero;return-1},n.prototype.readAndCheckSignature=function(t){var e=t.charCodeAt(0),r=t.charCodeAt(1),i=t.charCodeAt(2),n=t.charCodeAt(3),s=this.readData(4);return e===s[0]&&r===s[1]&&i===s[2]&&n===s[3]},n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return[];var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./DataReader\":18}],18:[function(t,e,r){\"use strict\";var i=t(\"../utils\");function n(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}n.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||t<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+t+\"). Corrupted zip ?\")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(t){},readInt:function(t){var e,r=0;for(this.checkOffset(t),e=this.index+t-1;e>=this.index;e--)r=(r<<8)+this.byteAt(e);return this.index+=t,r},readString:function(t){return i.transformTo(\"string\",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=n},{\"../utils\":32}],19:[function(t,e,r){\"use strict\";var i=t(\"./Uint8ArrayReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(t,e,r){\"use strict\";var i=t(\"./DataReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},n.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},n.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./DataReader\":18}],21:[function(t,e,r){\"use strict\";var i=t(\"./ArrayReader\");function n(t){i.call(this,t)}t(\"../utils\").inherits(n,i),n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"../support\"),s=t(\"./ArrayReader\"),a=t(\"./StringReader\"),o=t(\"./NodeBufferReader\"),h=t(\"./Uint8ArrayReader\");e.exports=function(t){var e=i.getTypeOf(t);return i.checkSupport(e),\"string\"!==e||n.uint8array?\"nodebuffer\"===e?new o(t):n.uint8array?new h(i.transformTo(\"uint8array\",t)):new s(i.transformTo(\"array\",t)):new a(t)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(t,e,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(t,e,r){\"use strict\";var i=t(\"./GenericWorker\"),n=t(\"../utils\");function s(t){i.call(this,\"ConvertWorker to \"+t),this.destType=t}n.inherits(s,i),s.prototype.processChunk=function(t){this.push({data:n.transformTo(this.destType,t.data),meta:t.meta})},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(t,e,r){\"use strict\";var i=t(\"./GenericWorker\"),n=t(\"../crc32\");function s(){i.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}t(\"../utils\").inherits(s,i),s.prototype.processChunk=function(t){this.streamInfo.crc32=n(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"./GenericWorker\");function s(t){n.call(this,\"DataLengthProbe for \"+t),this.propName=t,this.withStreamInfo(t,0)}i.inherits(s,n),s.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}n.prototype.processChunk.call(this,t)},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(t,e,r){\"use strict\";var i=t(\"../utils\"),n=t(\"./GenericWorker\");function s(t){n.call(this,\"DataWorker\");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":t=this.data.substring(this.index,e);break;case\"uint8array\":t=this.data.subarray(this.index,e);break;case\"array\":case\"nodebuffer\":t=this.data.slice(this.index,e)}return this.index=e,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(t,e,r){\"use strict\";function i(t){this.name=t||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(t){this.emit(\"data\",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit(\"error\",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit(\"error\",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var r=0;r<this._listeners[t].length;r++)this._listeners[t][r].call(this,e)},pipe:function(t){return t.registerPrevious(this)},registerPrevious:function(t){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=t.streamInfo,this.mergeStreamInfo(),this.previous=t;var e=this;return t.on(\"data\",function(t){e.processChunk(t)}),t.on(\"end\",function(){e.end()}),t.on(\"error\",function(t){e.error(t)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var t=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),t=!0),this.previous&&this.previous.resume(),!t},flush:function(){},processChunk:function(t){this.push(t)},withStreamInfo:function(t,e){return this.extraStreamInfo[t]=e,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var t in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(t)&&(this.streamInfo[t]=this.extraStreamInfo[t])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var t=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+t:t}},e.exports=i},{}],29:[function(t,e,r){\"use strict\";var h=t(\"../utils\"),n=t(\"./ConvertWorker\"),s=t(\"./GenericWorker\"),u=t(\"../base64\"),i=t(\"../support\"),a=t(\"../external\"),o=null;if(i.nodestream)try{o=t(\"../nodejs/NodejsStreamOutputAdapter\")}catch(t){}function l(t,o){return new a.Promise(function(e,r){var i=[],n=t._internalType,s=t._outputType,a=t._mimeType;t.on(\"data\",function(t,e){i.push(t),o&&o(e)}).on(\"error\",function(t){i=[],r(t)}).on(\"end\",function(){try{var t=function(t,e,r){switch(t){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",e),r);case\"base64\":return u.encode(e);default:return h.transformTo(t,e)}}(s,function(t,e){var r,i=0,n=null,s=0;for(r=0;r<e.length;r++)s+=e[r].length;switch(t){case\"string\":return e.join(\"\");case\"array\":return Array.prototype.concat.apply([],e);case\"uint8array\":for(n=new Uint8Array(s),r=0;r<e.length;r++)n.set(e[r],i),i+=e[r].length;return n;case\"nodebuffer\":return Buffer.concat(e);default:throw new Error(\"concat : unsupported type '\"+t+\"'\")}}(n,i),a);e(t)}catch(t){r(t)}i=[]}).resume()})}function f(t,e,r){var i=e;switch(e){case\"blob\":case\"arraybuffer\":i=\"uint8array\";break;case\"base64\":i=\"string\"}try{this._internalType=i,this._outputType=e,this._mimeType=r,h.checkSupport(i),this._worker=t.pipe(new n(i)),t.lock()}catch(t){this._worker=new s(\"error\"),this._worker.error(t)}}f.prototype={accumulate:function(t){return l(this,t)},on:function(t,e){var r=this;return\"data\"===t?this._worker.on(t,function(t){e.call(r,t.data,t.meta)}):this._worker.on(t,function(){h.delay(e,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(t){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},t)}},e.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(t,e,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var i=new ArrayBuffer(0);try{r.blob=0===new Blob([i],{type:\"application/zip\"}).size}catch(t){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);n.append(i),r.blob=0===n.getBlob(\"application/zip\").size}catch(t){r.blob=!1}}}try{r.nodestream=!!t(\"readable-stream\").Readable}catch(t){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(t,e,s){\"use strict\";for(var o=t(\"./utils\"),h=t(\"./support\"),r=t(\"./nodejsUtils\"),i=t(\"./stream/GenericWorker\"),u=new Array(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;u[254]=u[254]=1;function a(){i.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){i.call(this,\"utf-8 encode\")}s.utf8encode=function(t){return h.nodebuffer?r.newBufferFrom(t,\"utf-8\"):function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=h.uint8array?new Uint8Array(o):new Array(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e}(t)},s.utf8decode=function(t){return h.nodebuffer?o.transformTo(\"nodebuffer\",t).toString(\"utf-8\"):function(t){var e,r,i,n,s=t.length,a=new Array(2*s);for(e=r=0;e<s;)if((i=t[e++])<128)a[r++]=i;else if(4<(n=u[i]))a[r++]=65533,e+=n-1;else{for(i&=2===n?31:3===n?15:7;1<n&&e<s;)i=i<<6|63&t[e++],n--;1<n?a[r++]=65533:i<65536?a[r++]=i:(i-=65536,a[r++]=55296|i>>10&1023,a[r++]=56320|1023&i)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(t=o.transformTo(h.uint8array?\"uint8array\":\"array\",t))},o.inherits(a,i),a.prototype.processChunk=function(t){var e=o.transformTo(h.uint8array?\"uint8array\":\"array\",t.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=e;(e=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),e.set(r,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var i=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}(e),n=e;i!==e.length&&(h.uint8array?(n=e.subarray(0,i),this.leftOver=e.subarray(i,e.length)):(n=e.slice(0,i),this.leftOver=e.slice(i,e.length))),this.push({data:s.utf8decode(n),meta:t.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,i),l.prototype.processChunk=function(t){this.push({data:s.utf8encode(t.data),meta:t.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(t,e,a){\"use strict\";var o=t(\"./support\"),h=t(\"./base64\"),r=t(\"./nodejsUtils\"),i=t(\"set-immediate-shim\"),u=t(\"./external\");function n(t){return t}function l(t,e){for(var r=0;r<t.length;++r)e[r]=255&t.charCodeAt(r);return e}a.newBlob=function(e,r){a.checkSupport(\"blob\");try{return new Blob([e],{type:r})}catch(t){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return i.append(e),i.getBlob(r)}catch(t){throw new Error(\"Bug : can't construct the Blob.\")}}};var s={stringifyByChunk:function(t,e,r){var i=[],n=0,s=t.length;if(s<=r)return String.fromCharCode.apply(null,t);for(;n<s;)\"array\"===e||\"nodebuffer\"===e?i.push(String.fromCharCode.apply(null,t.slice(n,Math.min(n+r,s)))):i.push(String.fromCharCode.apply(null,t.subarray(n,Math.min(n+r,s)))),n+=r;return i.join(\"\")},stringifyByChar:function(t){for(var e=\"\",r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(t){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(t){return!1}}()}};function f(t){var e=65536,r=a.getTypeOf(t),i=!0;if(\"uint8array\"===r?i=s.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(i=s.applyCanBeUsed.nodebuffer),i)for(;1<e;)try{return s.stringifyByChunk(t,r,e)}catch(t){e=Math.floor(e/2)}return s.stringifyByChar(t)}function d(t,e){for(var r=0;r<t.length;r++)e[r]=t[r];return e}a.applyFromCharCode=f;var c={};c.string={string:n,array:function(t){return l(t,new Array(t.length))},arraybuffer:function(t){return c.string.uint8array(t).buffer},uint8array:function(t){return l(t,new Uint8Array(t.length))},nodebuffer:function(t){return l(t,r.allocBuffer(t.length))}},c.array={string:f,array:n,arraybuffer:function(t){return new Uint8Array(t).buffer},uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(t)}},c.arraybuffer={string:function(t){return f(new Uint8Array(t))},array:function(t){return d(new Uint8Array(t),new Array(t.byteLength))},arraybuffer:n,uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return r.newBufferFrom(new Uint8Array(t))}},c.uint8array={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return t.buffer},uint8array:n,nodebuffer:function(t){return r.newBufferFrom(t)}},c.nodebuffer={string:f,array:function(t){return d(t,new Array(t.length))},arraybuffer:function(t){return c.nodebuffer.uint8array(t).buffer},uint8array:function(t){return d(t,new Uint8Array(t.length))},nodebuffer:n},a.transformTo=function(t,e){if(e=e||\"\",!t)return e;a.checkSupport(t);var r=a.getTypeOf(e);return c[r][t](e)},a.getTypeOf=function(t){return\"string\"==typeof t?\"string\":\"[object Array]\"===Object.prototype.toString.call(t)?\"array\":o.nodebuffer&&r.isBuffer(t)?\"nodebuffer\":o.uint8array&&t instanceof Uint8Array?\"uint8array\":o.arraybuffer&&t instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(t){if(!o[t.toLowerCase()])throw new Error(t+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(t){var e,r,i=\"\";for(r=0;r<(t||\"\").length;r++)i+=\"\\\\x\"+((e=t.charCodeAt(r))<16?\"0\":\"\")+e.toString(16).toUpperCase();return i},a.delay=function(t,e,r){i(function(){t.apply(r||null,e||[])})},a.inherits=function(t,e){function r(){}r.prototype=e.prototype,t.prototype=new r},a.extend=function(){var t,e,r={};for(t=0;t<arguments.length;t++)for(e in arguments[t])arguments[t].hasOwnProperty(e)&&void 0===r[e]&&(r[e]=arguments[t][e]);return r},a.prepareContent=function(r,t,i,n,s){return u.Promise.resolve(t).then(function(i){return o.blob&&(i instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(i)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(e,r){var t=new FileReader;t.onload=function(t){e(t.target.result)},t.onerror=function(t){r(t.target.error)},t.readAsArrayBuffer(i)}):i}).then(function(t){var e=a.getTypeOf(t);return e?(\"arraybuffer\"===e?t=a.transformTo(\"uint8array\",t):\"string\"===e&&(s?t=h.decode(t):i&&!0!==n&&(t=function(t){return l(t,o.uint8array?new Uint8Array(t.length):new Array(t.length))}(t))),t):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,\"set-immediate-shim\":54}],33:[function(t,e,r){\"use strict\";var i=t(\"./reader/readerFor\"),n=t(\"./utils\"),s=t(\"./signature\"),a=t(\"./zipEntry\"),o=(t(\"./utf8\"),t(\"./support\"));function h(t){this.files=[],this.loadOptions=t}h.prototype={checkSignature:function(t){if(!this.reader.readAndCheckSignature(t)){this.reader.index-=4;var e=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+n.pretty(e)+\", expected \"+n.pretty(t)+\")\")}},isSignature:function(t,e){var r=this.reader.index;this.reader.setIndex(t);var i=this.reader.readString(4)===e;return this.reader.setIndex(r),i},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var t=this.reader.readData(this.zipCommentLength),e=o.uint8array?\"uint8array\":\"array\",r=n.transformTo(e,t);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var t,e,r,i=this.zip64EndOfCentralSize-44;0<i;)t=this.reader.readInt(2),e=this.reader.readInt(4),r=this.reader.readData(e),this.zip64ExtensibleData[t]={id:t,length:e,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var t,e;for(t=0;t<this.files.length;t++)e=this.files[t],this.reader.setIndex(e.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),e.readLocalPart(this.reader),e.handleUTF8(),e.processAttributes()},readCentralDir:function(){var t;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(t=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(t);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var t=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(t<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(t);var e=t;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===n.MAX_VALUE_16BITS||this.diskWithCentralDirStart===n.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===n.MAX_VALUE_16BITS||this.centralDirRecords===n.MAX_VALUE_16BITS||this.centralDirSize===n.MAX_VALUE_32BITS||this.centralDirOffset===n.MAX_VALUE_32BITS){if(this.zip64=!0,(t=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(t),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var i=e-r;if(0<i)this.isSignature(e,s.CENTRAL_FILE_HEADER)||(this.reader.zero=i);else if(i<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(i)+\" bytes.\")},prepareReader:function(t){this.reader=i(t)},load:function(t){this.prepareReader(t),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},e.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utf8\":31,\"./utils\":32,\"./zipEntry\":34}],34:[function(t,e,r){\"use strict\";var i=t(\"./reader/readerFor\"),s=t(\"./utils\"),n=t(\"./compressedObject\"),a=t(\"./crc32\"),o=t(\"./utf8\"),h=t(\"./compressions\"),u=t(\"./support\");function l(t,e){this.options=t,this.loadOptions=e}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(t){var e,r;if(t.skip(22),this.fileNameLength=t.readInt(2),r=t.readInt(2),this.fileName=t.readData(this.fileNameLength),t.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(e=function(t){for(var e in h)if(h.hasOwnProperty(e)&&h[e].magic===t)return h[e];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new n(this.compressedSize,this.uncompressedSize,this.crc32,e,t.readData(this.compressedSize))},readCentralPart:function(t){this.versionMadeBy=t.readInt(2),t.skip(2),this.bitFlag=t.readInt(2),this.compressionMethod=t.readString(2),this.date=t.readDate(),this.crc32=t.readInt(4),this.compressedSize=t.readInt(4),this.uncompressedSize=t.readInt(4);var e=t.readInt(2);if(this.extraFieldsLength=t.readInt(2),this.fileCommentLength=t.readInt(2),this.diskNumberStart=t.readInt(2),this.internalFileAttributes=t.readInt(2),this.externalFileAttributes=t.readInt(4),this.localHeaderOffset=t.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");t.skip(e),this.readExtraFields(t),this.parseZIP64ExtraField(t),this.fileComment=t.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var t=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==t&&(this.dosPermissions=63&this.externalFileAttributes),3==t&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,r,i,n=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index+4<n;)e=t.readInt(2),r=t.readInt(2),i=t.readData(r),this.extraFields[e]={id:e,length:r,value:i};t.setIndex(n)},handleUTF8:function(){var t=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var e=this.findExtraFieldUnicodePath();if(null!==e)this.fileNameStr=e;else{var r=s.transformTo(t,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var i=this.findExtraFieldUnicodeComment();if(null!==i)this.fileCommentStr=i;else{var n=s.transformTo(t,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(n)}}},findExtraFieldUnicodePath:function(){var t=this.extraFields[28789];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileName)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null},findExtraFieldUnicodeComment:function(){var t=this.extraFields[25461];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:a(this.fileComment)!==e.readInt(4)?null:o.utf8decode(e.readData(t.length-5))}return null}},e.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(t,e,r){\"use strict\";function i(t,e,r){this.name=t,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=e,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=t(\"./stream/StreamHelper\"),n=t(\"./stream/DataWorker\"),a=t(\"./utf8\"),o=t(\"./compressedObject\"),h=t(\"./stream/GenericWorker\");i.prototype={internalStream:function(t){var e=null,r=\"string\";try{if(!t)throw new Error(\"No output type specified.\");var i=\"string\"===(r=t.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),e=this._decompressWorker();var n=!this._dataBinary;n&&!i&&(e=e.pipe(new a.Utf8EncodeWorker)),!n&&i&&(e=e.pipe(new a.Utf8DecodeWorker))}catch(t){(e=new h(\"error\")).error(t)}return new s(e,r,\"\")},async:function(t,e){return this.internalStream(t).accumulate(e)},nodeStream:function(t,e){return this.internalStream(t||\"nodebuffer\").toNodejsStream(e)},_compressWorker:function(t,e){if(this._data instanceof o&&this._data.compression.magic===t.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,t,e)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new n(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)i.prototype[u[f]]=l;e.exports=i},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(t,l,e){(function(e){\"use strict\";var r,i,t=e.MutationObserver||e.WebKitMutationObserver;if(t){var n=0,s=new t(u),a=e.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=n=++n%2}}else if(e.setImmediate||void 0===e.MessageChannel)r=\"document\"in e&&\"onreadystatechange\"in e.document.createElement(\"script\")?function(){var t=e.document.createElement(\"script\");t.onreadystatechange=function(){u(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(u,0)};else{var o=new e.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var t,e;i=!0;for(var r=h.length;r;){for(e=h,h=[],t=-1;++t<r;)e[t]();r=h.length}i=!1}l.exports=function(t){1!==h.push(t)||i||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(t,e,r){\"use strict\";var n=t(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],i=[\"PENDING\"];function o(t){if(\"function\"!=typeof t)throw new TypeError(\"resolver must be a function\");this.state=i,this.queue=[],this.outcome=void 0,t!==u&&c(this,t)}function h(t,e,r){this.promise=t,\"function\"==typeof e&&(this.onFulfilled=e,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(e,r,i){n(function(){var t;try{t=r(i)}catch(t){return l.reject(e,t)}t===e?l.reject(e,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(e,t)})}function d(t){var e=t&&t.then;if(t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof e)return function(){e.apply(t,arguments)}}function c(e,t){var r=!1;function i(t){r||(r=!0,l.reject(e,t))}function n(t){r||(r=!0,l.resolve(e,t))}var s=p(function(){t(n,i)});\"error\"===s.status&&i(s.value)}function p(t,e){var r={};try{r.value=t(e),r.status=\"success\"}catch(t){r.status=\"error\",r.value=t}return r}(e.exports=o).prototype.finally=function(e){if(\"function\"!=typeof e)return this;var r=this.constructor;return this.then(function(t){return r.resolve(e()).then(function(){return t})},function(t){return r.resolve(e()).then(function(){throw t})})},o.prototype.catch=function(t){return this.then(null,t)},o.prototype.then=function(t,e){if(\"function\"!=typeof t&&this.state===a||\"function\"!=typeof e&&this.state===s)return this;var r=new this.constructor(u);this.state!==i?f(r,this.state===a?t:e,this.outcome):this.queue.push(new h(r,t,e));return r},h.prototype.callFulfilled=function(t){l.resolve(this.promise,t)},h.prototype.otherCallFulfilled=function(t){f(this.promise,this.onFulfilled,t)},h.prototype.callRejected=function(t){l.reject(this.promise,t)},h.prototype.otherCallRejected=function(t){f(this.promise,this.onRejected,t)},l.resolve=function(t,e){var r=p(d,e);if(\"error\"===r.status)return l.reject(t,r.value);var i=r.value;if(i)c(t,i);else{t.state=a,t.outcome=e;for(var n=-1,s=t.queue.length;++n<s;)t.queue[n].callFulfilled(e)}return t},l.reject=function(t,e){t.state=s,t.outcome=e;for(var r=-1,i=t.queue.length;++r<i;)t.queue[r].callRejected(e);return t},o.resolve=function(t){if(t instanceof this)return t;return l.resolve(new this(u),t)},o.reject=function(t){var e=new this(u);return l.reject(e,t)},o.all=function(t){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(t))return this.reject(new TypeError(\"must be an array\"));var i=t.length,n=!1;if(!i)return this.resolve([]);var s=new Array(i),a=0,e=-1,o=new this(u);for(;++e<i;)h(t[e],e);return o;function h(t,e){r.resolve(t).then(function(t){s[e]=t,++a!==i||n||(n=!0,l.resolve(o,s))},function(t){n||(n=!0,l.reject(o,t))})}},o.race=function(t){var e=this;if(\"[object Array]\"!==Object.prototype.toString.call(t))return this.reject(new TypeError(\"must be an array\"));var r=t.length,i=!1;if(!r)return this.resolve([]);var n=-1,s=new this(u);for(;++n<r;)a=t[n],e.resolve(a).then(function(t){i||(i=!0,l.resolve(s,t))},function(t){i||(i=!0,l.reject(s,t))});var a;return s}},{immediate:36}],38:[function(t,e,r){\"use strict\";var i={};(0,t(\"./lib/utils/common\").assign)(i,t(\"./lib/deflate\"),t(\"./lib/inflate\"),t(\"./lib/zlib/constants\")),e.exports=i},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(t,e,r){\"use strict\";var a=t(\"./zlib/deflate\"),o=t(\"./utils/common\"),h=t(\"./utils/strings\"),n=t(\"./zlib/messages\"),s=t(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,d=0,c=8;function p(t){if(!(this instanceof p))return new p(t);this.options=o.assign({level:f,method:c,chunkSize:16384,windowBits:15,memLevel:8,strategy:d,to:\"\"},t||{});var e=this.options;e.raw&&0<e.windowBits?e.windowBits=-e.windowBits:e.gzip&&0<e.windowBits&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==l)throw new Error(n[r]);if(e.header&&a.deflateSetHeader(this.strm,e.header),e.dictionary){var i;if(i=\"string\"==typeof e.dictionary?h.string2buf(e.dictionary):\"[object ArrayBuffer]\"===u.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(r=a.deflateSetDictionary(this.strm,i))!==l)throw new Error(n[r]);this._dict_set=!0}}function i(t,e){var r=new p(e);if(r.push(t,!0),r.err)throw r.msg||n[r.err];return r.result}p.prototype.push=function(t,e){var r,i,n=this.strm,s=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:!0===e?4:0,\"string\"==typeof t?n.input=h.string2buf(t):\"[object ArrayBuffer]\"===u.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new o.Buf8(s),n.next_out=0,n.avail_out=s),1!==(r=a.deflate(n,i))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==n.avail_out&&(0!==n.avail_in||4!==i&&2!==i)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(n.output,n.next_out))):this.onData(o.shrinkBuf(n.output,n.next_out)))}while((0<n.avail_in||0===n.avail_out)&&1!==r);return 4===i?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==i||(this.onEnd(l),!(n.avail_out=0))},p.prototype.onData=function(t){this.chunks.push(t)},p.prototype.onEnd=function(t){t===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Deflate=p,r.deflate=i,r.deflateRaw=function(t,e){return(e=e||{}).raw=!0,i(t,e)},r.gzip=function(t,e){return(e=e||{}).gzip=!0,i(t,e)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(t,e,r){\"use strict\";var d=t(\"./zlib/inflate\"),c=t(\"./utils/common\"),p=t(\"./utils/strings\"),m=t(\"./zlib/constants\"),i=t(\"./zlib/messages\"),n=t(\"./zlib/zstream\"),s=t(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(t){if(!(this instanceof a))return new a(t);this.options=c.assign({chunkSize:16384,windowBits:0,to:\"\"},t||{});var e=this.options;e.raw&&0<=e.windowBits&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(0<=e.windowBits&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),15<e.windowBits&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new n,this.strm.avail_out=0;var r=d.inflateInit2(this.strm,e.windowBits);if(r!==m.Z_OK)throw new Error(i[r]);this.header=new s,d.inflateGetHeader(this.strm,this.header)}function o(t,e){var r=new a(e);if(r.push(t,!0),r.err)throw r.msg||i[r.err];return r.result}a.prototype.push=function(t,e){var r,i,n,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;i=e===~~e?e:!0===e?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof t?h.input=p.binstring2buf(t):\"[object ArrayBuffer]\"===_.call(t)?h.input=new Uint8Array(t):h.input=t,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new c.Buf8(u),h.next_out=0,h.avail_out=u),(r=d.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=d.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||i!==m.Z_FINISH&&i!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(n=p.utf8border(h.output,h.next_out),s=h.next_out-n,a=p.buf2string(h.output,n),h.next_out=s,h.avail_out=u-s,s&&c.arraySet(h.output,h.output,n,s,0),this.onData(a)):this.onData(c.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(i=m.Z_FINISH),i===m.Z_FINISH?(r=d.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):i!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(t){this.chunks.push(t)},a.prototype.onEnd=function(t){t===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=c.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(t,e){return(e=e||{}).raw=!0,o(t,e)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(t,e,r){\"use strict\";var i=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var i in r)r.hasOwnProperty(i)&&(t[i]=r[i])}}return t},r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,r,i,n){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+i),n);else for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){var e,r,i,n,s,a;for(e=i=0,r=t.length;e<r;e++)i+=t[e].length;for(a=new Uint8Array(i),e=n=0,r=t.length;e<r;e++)s=t[e],a.set(s,n),n+=s.length;return a}},s={arraySet:function(t,e,r,i,n){for(var s=0;s<i;s++)t[n+s]=e[r+s]},flattenChunks:function(t){return[].concat.apply([],t)}};r.setTyped=function(t){t?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,n)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(i)},{}],42:[function(t,e,r){\"use strict\";var h=t(\"./common\"),n=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(t){n=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){s=!1}for(var u=new h.Buf8(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;function l(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&n))return String.fromCharCode.apply(null,h.shrinkBuf(t,e));for(var r=\"\",i=0;i<e;i++)r+=String.fromCharCode(t[i]);return r}u[254]=u[254]=1,r.string2buf=function(t){var e,r,i,n,s,a=t.length,o=0;for(n=0;n<a;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=new h.Buf8(o),n=s=0;s<o;n++)55296==(64512&(r=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(i=t.charCodeAt(n+1)))&&(r=65536+(r-55296<<10)+(i-56320),n++),r<128?e[s++]=r:(r<2048?e[s++]=192|r>>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e},r.buf2binstring=function(t){return l(t,t.length)},r.binstring2buf=function(t){for(var e=new h.Buf8(t.length),r=0,i=e.length;r<i;r++)e[r]=t.charCodeAt(r);return e},r.buf2string=function(t,e){var r,i,n,s,a=e||t.length,o=new Array(2*a);for(r=i=0;r<a;)if((n=t[r++])<128)o[i++]=n;else if(4<(s=u[n]))o[i++]=65533,r+=s-1;else{for(n&=2===s?31:3===s?15:7;1<s&&r<a;)n=n<<6|63&t[r++],s--;1<s?o[i++]=65533:n<65536?o[i++]=n:(n-=65536,o[i++]=55296|n>>10&1023,o[i++]=56320|1023&n)}return l(o,i)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+u[t[r]]>e?r:e}},{\"./common\":41}],43:[function(t,e,r){\"use strict\";e.exports=function(t,e,r,i){for(var n=65535&t|0,s=t>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(n=n+e[i++]|0)|0,--a;);n%=65521,s%=65521}return n|s<<16|0}},{}],44:[function(t,e,r){\"use strict\";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,e,r){\"use strict\";var o=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var n=o,s=i+r;t^=-1;for(var a=i;a<s;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}},{}],46:[function(t,e,r){\"use strict\";var h,d=t(\"../utils/common\"),u=t(\"./trees\"),c=t(\"./adler32\"),p=t(\"./crc32\"),i=t(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,n=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(t,e){return t.msg=i[e],e}function T(t){return(t<<1)-(4<t?9:0)}function D(t){for(var e=t.length;0<=--e;)t[e]=0}function F(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(d.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function N(t,e){u._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,F(t.strm)}function U(t,e){t.pending_buf[t.pending++]=e}function P(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function L(t,e){var r,i,n=t.max_chain_length,s=t.strstart,a=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-z?t.strstart-(t.w_size-z):0,u=t.window,l=t.w_mask,f=t.prev,d=t.strstart+S,c=u[s+a-1],p=u[s+a];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(u[(r=e)+a]===p&&u[r+a-1]===c&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<d);if(i=S-(d-s),s=d-S,a<i){if(t.match_start=e,o<=(a=i))break;c=u[s+a-1],p=u[s+a]}}}while((e=f[e&l])>h&&0!=--n);return a<=t.lookahead?a:t.lookahead}function j(t){var e,r,i,n,s,a,o,h,u,l,f=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=f+(f-z)){for(d.arraySet(t.window,t.window,f,f,0),t.match_start-=f,t.strstart-=f,t.block_start-=f,e=r=t.hash_size;i=t.head[--e],t.head[e]=f<=i?i-f:0,--r;);for(e=r=f;i=t.prev[--e],t.prev[e]=f<=i?i-f:0,--r;);n+=f}if(0===t.strm.avail_in)break;if(a=t.strm,o=t.window,h=t.strstart+t.lookahead,u=n,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,d.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=c(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),t.lookahead+=r,t.lookahead+t.insert>=x)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[s+x-1])&t.hash_mask,t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<x)););}while(t.lookahead<z&&0!==t.strm.avail_in)}function Z(t,e){for(var r,i;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==r&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r)),t.match_length>=x)if(i=u._tr_tally(t,t.strstart-t.match_start,t.match_length-x),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=x){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart,0!=--t.match_length;);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else i=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function W(t,e){for(var r,i,n;;){if(t.lookahead<z){if(j(t),t.lookahead<z&&e===l)return A;if(0===t.lookahead)break}if(r=0,t.lookahead>=x&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=x-1,0!==r&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-z&&(t.match_length=L(t,r),t.match_length<=5&&(1===t.strategy||t.match_length===x&&4096<t.strstart-t.match_start)&&(t.match_length=x-1)),t.prev_length>=x&&t.match_length<=t.prev_length){for(n=t.strstart+t.lookahead-x,i=u._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-x),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=n&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+x-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!=--t.prev_length;);if(t.match_available=0,t.match_length=x-1,t.strstart++,i&&(N(t,!1),0===t.strm.avail_out))return A}else if(t.match_available){if((i=u._tr_tally(t,0,t.window[t.strstart-1]))&&N(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return A}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=u._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<x-1?t.strstart:x-1,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}function M(t,e,r,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=i,this.func=n}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new d.Buf16(2*w),this.dyn_dtree=new d.Buf16(2*(2*a+1)),this.bl_tree=new d.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new d.Buf16(k+1),this.heap=new d.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new d.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=n,(e=t.state).pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?C:E,t.adler=2===e.wrap?0:1,e.last_flush=l,u._tr_init(e),m):R(t,_)}function K(t){var e=G(t);return e===m&&function(t){t.window_size=2*t.w_size,D(t.head),t.max_lazy_match=h[t.level].max_lazy,t.good_match=h[t.level].good_length,t.nice_match=h[t.level].nice_length,t.max_chain_length=h[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=x-1,t.match_available=0,t.ins_h=0}(t.state),e}function Y(t,e,r,i,n,s){if(!t)return _;var a=1;if(e===g&&(e=6),i<0?(a=0,i=-i):15<i&&(a=2,i-=16),n<1||y<n||r!==v||i<8||15<i||e<0||9<e||s<0||b<s)return R(t,_);8===i&&(i=9);var o=new H;return(t.state=o).strm=t,o.wrap=a,o.gzhead=null,o.w_bits=i,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=n+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new d.Buf8(2*o.w_size),o.head=new d.Buf16(o.hash_size),o.prev=new d.Buf16(o.w_size),o.lit_bufsize=1<<n+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new d.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=e,o.strategy=s,o.method=r,K(t)}h=[new M(0,0,0,0,function(t,e){var r=65535;for(r>t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(j(t),0===t.lookahead&&e===l)return A;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,N(t,!1),0===t.strm.avail_out))return A;if(t.strstart-t.block_start>=t.w_size-z&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):(t.strstart>t.block_start&&(N(t,!1),t.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(t,e){return Y(t,e,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?_:(t.state.gzhead=e,m):_},r.deflate=function(t,e){var r,i,n,s;if(!t||!t.state||5<e||e<0)return t?R(t,_):_;if(i=t.state,!t.output||!t.input&&0!==t.avail_in||666===i.status&&e!==f)return R(t,0===t.avail_out?-5:_);if(i.strm=t,r=i.last_flush,i.last_flush=e,i.status===C)if(2===i.wrap)t.adler=0,U(i,31),U(i,139),U(i,8),i.gzhead?(U(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),U(i,255&i.gzhead.time),U(i,i.gzhead.time>>8&255),U(i,i.gzhead.time>>16&255),U(i,i.gzhead.time>>24&255),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(U(i,255&i.gzhead.extra.length),U(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=p(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(U(i,0),U(i,0),U(i,0),U(i,0),U(i,0),U(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),U(i,3),i.status=E);else{var a=v+(i.w_bits-8<<4)<<8;a|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(a|=32),a+=31-a%31,i.status=E,P(i,a),0!==i.strstart&&(P(i,t.adler>>>16),P(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending!==i.pending_buf_size));)U(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),F(t),n=i.pending,i.pending===i.pending_buf_size)){s=1;break}s=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,U(i,s)}while(0!==s);i.gzhead.hcrc&&i.pending>n&&(t.adler=p(t.adler,i.pending_buf,i.pending-n,n)),0===s&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&F(t),i.pending+2<=i.pending_buf_size&&(U(i,255&t.adler),U(i,t.adler>>8&255),t.adler=0,i.status=E)):i.status=E),0!==i.pending){if(F(t),0===t.avail_out)return i.last_flush=-1,m}else if(0===t.avail_in&&T(e)<=T(r)&&e!==f)return R(t,-5);if(666===i.status&&0!==t.avail_in)return R(t,-5);if(0!==t.avail_in||0!==i.lookahead||e!==l&&666!==i.status){var o=2===i.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(j(t),0===t.lookahead)){if(e===l)return A;break}if(t.match_length=0,r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):3===i.strategy?function(t,e){for(var r,i,n,s,a=t.window;;){if(t.lookahead<=S){if(j(t),t.lookahead<=S&&e===l)return A;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=x&&0<t.strstart&&(i=a[n=t.strstart-1])===a[++n]&&i===a[++n]&&i===a[++n]){s=t.strstart+S;do{}while(i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&i===a[++n]&&n<s);t.match_length=S-(s-n),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=x?(r=u._tr_tally(t,1,t.match_length-x),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=u._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(N(t,!1),0===t.strm.avail_out))return A}return t.insert=0,e===f?(N(t,!0),0===t.strm.avail_out?O:B):t.last_lit&&(N(t,!1),0===t.strm.avail_out)?A:I}(i,e):h[i.level].func(i,e);if(o!==O&&o!==B||(i.status=666),o===A||o===O)return 0===t.avail_out&&(i.last_flush=-1),m;if(o===I&&(1===e?u._tr_align(i):5!==e&&(u._tr_stored_block(i,0,0,!1),3===e&&(D(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),F(t),0===t.avail_out))return i.last_flush=-1,m}return e!==f?m:i.wrap<=0?1:(2===i.wrap?(U(i,255&t.adler),U(i,t.adler>>8&255),U(i,t.adler>>16&255),U(i,t.adler>>24&255),U(i,255&t.total_in),U(i,t.total_in>>8&255),U(i,t.total_in>>16&255),U(i,t.total_in>>24&255)):(P(i,t.adler>>>16),P(i,65535&t.adler)),F(t),0<i.wrap&&(i.wrap=-i.wrap),0!==i.pending?m:1)},r.deflateEnd=function(t){var e;return t&&t.state?(e=t.state.status)!==C&&69!==e&&73!==e&&91!==e&&103!==e&&e!==E&&666!==e?R(t,_):(t.state=null,e===E?R(t,-3):m):_},r.deflateSetDictionary=function(t,e){var r,i,n,s,a,o,h,u,l=e.length;if(!t||!t.state)return _;if(2===(s=(r=t.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(t.adler=c(t.adler,e,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new d.Buf8(r.w_size),d.arraySet(u,e,l-r.w_size,r.w_size,0),e=u,l=r.w_size),a=t.avail_in,o=t.next_in,h=t.input,t.avail_in=l,t.next_in=0,t.input=e,j(r);r.lookahead>=x;){for(i=r.strstart,n=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[i+x-1])&r.hash_mask,r.prev[i&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=i,i++,--n;);r.strstart=i,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,t.next_in=o,t.input=h,t.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(t,e,r){\"use strict\";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(t,e,r){\"use strict\";e.exports=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C;r=t.state,i=t.next_in,z=t.input,n=i+(t.avail_in-5),s=t.next_out,C=t.output,a=s-(e-t.avail_out),o=s+(t.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,d=r.window,c=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;t:do{p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=m[c&g];e:for(;;){if(c>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(c&(1<<y)-1)];continue e}if(32&y){r.mode=12;break t}t.msg=\"invalid literal/length code\",r.mode=30;break t}w=65535&v,(y&=15)&&(p<y&&(c+=z[i++]<<p,p+=8),w+=c&(1<<y)-1,c>>>=y,p-=y),p<15&&(c+=z[i++]<<p,p+=8,c+=z[i++]<<p,p+=8),v=_[c&b];r:for(;;){if(c>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(c&(1<<y)-1)];continue r}t.msg=\"invalid distance code\",r.mode=30;break t}if(k=65535&v,p<(y&=15)&&(c+=z[i++]<<p,(p+=8)<y&&(c+=z[i++]<<p,p+=8)),h<(k+=c&(1<<y)-1)){t.msg=\"invalid distance too far back\",r.mode=30;break t}if(c>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){t.msg=\"invalid distance too far back\",r.mode=30;break t}if(S=d,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=d[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=d[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=d[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(i<n&&s<o);i-=w=p>>3,c&=(1<<(p-=w<<3))-1,t.next_in=i,t.next_out=s,t.avail_in=i<n?n-i+5:5-(i-n),t.avail_out=s<o?o-s+257:257-(s-o),r.hold=c,r.bits=p}},{}],49:[function(t,e,r){\"use strict\";var I=t(\"../utils/common\"),O=t(\"./adler32\"),B=t(\"./crc32\"),R=t(\"./inffast\"),T=t(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,i=852,n=592;function L(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg=\"\",e.wrap&&(t.adler=1&e.wrap),e.mode=P,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new I.Buf32(i),e.distcode=e.distdyn=new I.Buf32(n),e.sane=1,e.back=-1,N):U}function o(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,a(t)):U}function h(t,e){var r,i;return t&&t.state?(i=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15<e)?U:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=r,i.wbits=e,o(t))):U}function u(t,e){var r,i;return t?(i=new s,(t.state=i).window=null,(r=h(t,e))!==N&&(t.state=null),r):U}var l,f,d=!0;function j(t){if(d){var e;for(l=new I.Buf32(512),f=new I.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(T(D,t.lens,0,288,l,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;T(F,t.lens,0,32,f,0,t.work,{bits:5}),d=!1}t.lencode=l,t.lenbits=9,t.distcode=f,t.distbits=5}function Z(t,e,r,i){var n,s=t.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),i>=s.wsize?(I.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(n=s.wsize-s.wnext)&&(n=i),I.arraySet(s.window,e,r-i,n,s.wnext),(i-=n)?(I.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=n))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(t){return u(t,15)},r.inflateInit2=u,r.inflate=function(t,e){var r,i,n,s,a,o,h,u,l,f,d,c,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return U;12===(r=t.state).mode&&(r.mode=13),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,f=o,d=h,x=N;t:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){t.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){t.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){t.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,t.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){t.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){t.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(c=r.length)&&(c=o),c&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,i,s,c,k)),512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,r.length-=c),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break t;for(c=0;k=i[s+c++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&c<o;);if(512&r.flags&&(r.check=B(r.check,i,c,s)),o-=c,s+=c,k)break t}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(65535&r.check)){t.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}t.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,2;t.adler=r.check=1,r.mode=12;case 12:if(5===e||6===e)break t;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==e)break;u>>>=2,l-=2;break t;case 2:r.mode=17;break;case 3:t.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){t.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(c=r.length){if(o<c&&(c=o),h<c&&(c=h),0===c)break t;I.arraySet(n,i,s,c,a),o-=c,s+=c,h-=c,a+=c,r.length-=c;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){t.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){t.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],c=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}l-=_,k=0,c=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+c>r.nlen+r.ndist){t.msg=\"invalid bit length repeat\",r.mode=30;break}for(;c--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){t.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){t.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){t.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=o&&258<=h){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,R(t,d),a=t.next_out,n=t.output,h=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){t.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){t.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break t;if(c=d-h,r.offset>c){if((c=r.offset-c)>r.whave&&r.sane){t.msg=\"invalid distance too far back\",r.mode=30;break}p=c>r.wnext?(c-=r.wnext,r.wsize-c):r.wnext-c,c>r.length&&(c=r.length),m=r.window}else m=n,p=a-r.offset,c=r.length;for(h<c&&(c=h),h-=c,r.length-=c;n[a++]=m[p++],--c;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break t;n[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break t;o--,u|=i[s++]<<l,l+=8}if(d-=h,t.total_out+=d,r.total+=d,d&&(t.adler=r.check=r.flags?B(r.check,n,d,a-d):O(r.check,n,d,a-d)),d=h,(r.flags?u:L(u))!==r.check){t.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break t;o--,u+=i[s++]<<l,l+=8}if(u!==(4294967295&r.total)){t.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break t;case 30:x=-3;break t;case 31:return-4;case 32:default:return U}return t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,r.hold=u,r.bits=l,(r.wsize||d!==t.avail_out&&r.mode<30&&(r.mode<27||4!==e))&&Z(t,t.output,t.next_out,d-t.avail_out)?(r.mode=31,-4):(f-=t.avail_in,d-=t.avail_out,t.total_in+=f,t.total_out+=d,r.total+=d,r.wrap&&d&&(t.adler=r.check=r.flags?B(r.check,n,d,t.next_out-d):O(r.check,n,d,t.next_out-d)),t.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===d||4===e)&&x===N&&(x=-5),x)},r.inflateEnd=function(t){if(!t||!t.state)return U;var e=t.state;return e.window&&(e.window=null),t.state=null,N},r.inflateGetHeader=function(t,e){var r;return t&&t.state?0==(2&(r=t.state).wrap)?U:((r.head=e).done=!1,N):U},r.inflateSetDictionary=function(t,e){var r,i=e.length;return t&&t.state?0!==(r=t.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,e,i,0)!==r.check?-3:Z(t,e,i,i)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(t,e,r){\"use strict\";var D=t(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,r,i,n,s,a,o){var h,u,l,f,d,c,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<i;v++)O[e[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return n[s++]=20971520,n[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===t||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<i;v++)0!==e[r+v]&&(a[B[e[r+v]]++]=v);if(c=0===t?(A=R=a,19):1===t?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,d=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===t&&852<C||2===t&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<c?(m=0,a[v]):a[v]>c?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;n[d+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=e[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),d+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===t&&852<C||2===t&&592<C)return 1;n[l=E&f]=k<<24|x<<16|d-s|0}}return 0!==E&&(n[d+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(t,e,r){\"use strict\";e.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(t,e,r){\"use strict\";var n=t(\"../utils/common\"),o=0,h=1;function i(t){for(var e=t.length;0<=--e;)t[e]=0}var s=0,a=29,u=256,l=u+1+a,f=30,d=19,_=2*l+1,g=15,c=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));i(z);var C=new Array(2*f);i(C);var E=new Array(512);i(E);var A=new Array(256);i(A);var I=new Array(a);i(I);var O,B,R,T=new Array(f);function D(t,e,r,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function F(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function N(t){return t<256?E[t]:E[256+(t>>>7)]}function U(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function P(t,e,r){t.bi_valid>c-r?(t.bi_buf|=e<<t.bi_valid&65535,U(t,t.bi_buf),t.bi_buf=e>>c-t.bi_valid,t.bi_valid+=r-c):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)}function L(t,e,r){P(t,r[2*e],r[2*e+1])}function j(t,e){for(var r=0;r|=1&t,t>>>=1,r<<=1,0<--e;);return r>>>1}function Z(t,e,r){var i,n,s=new Array(g+1),a=0;for(i=1;i<=g;i++)s[i]=a=a+r[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=j(s[o]++,o))}}function W(t){var e;for(e=0;e<l;e++)t.dyn_ltree[2*e]=0;for(e=0;e<f;e++)t.dyn_dtree[2*e]=0;for(e=0;e<d;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*m]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function M(t){8<t.bi_valid?U(t,t.bi_buf):0<t.bi_valid&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function H(t,e,r,i){var n=2*e,s=2*r;return t[n]<t[s]||t[n]===t[s]&&i[e]<=i[r]}function G(t,e,r){for(var i=t.heap[r],n=r<<1;n<=t.heap_len&&(n<t.heap_len&&H(e,t.heap[n+1],t.heap[n],t.depth)&&n++,!H(e,i,t.heap[n],t.depth));)t.heap[r]=t.heap[n],r=n,n<<=1;t.heap[r]=i}function K(t,e,r){var i,n,s,a,o=0;if(0!==t.last_lit)for(;i=t.pending_buf[t.d_buf+2*o]<<8|t.pending_buf[t.d_buf+2*o+1],n=t.pending_buf[t.l_buf+o],o++,0===i?L(t,n,e):(L(t,(s=A[n])+u+1,e),0!==(a=w[s])&&P(t,n-=I[s],a),L(t,s=N(--i),r),0!==(a=k[s])&&P(t,i-=T[s],a)),o<t.last_lit;);L(t,m,e)}function Y(t,e){var r,i,n,s=e.dyn_tree,a=e.stat_desc.static_tree,o=e.stat_desc.has_stree,h=e.stat_desc.elems,u=-1;for(t.heap_len=0,t.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(t.heap[++t.heap_len]=u=r,t.depth[r]=0):s[2*r+1]=0;for(;t.heap_len<2;)s[2*(n=t.heap[++t.heap_len]=u<2?++u:0)]=1,t.depth[n]=0,t.opt_len--,o&&(t.static_len-=a[2*n+1]);for(e.max_code=u,r=t.heap_len>>1;1<=r;r--)G(t,s,r);for(n=h;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],G(t,s,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,s[2*n]=s[2*r]+s[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,s[2*r+1]=s[2*i+1]=n,t.heap[1]=n++,G(t,s,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,i,n,s,a,o,h=e.dyn_tree,u=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(s=0;s<=g;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r<_;r++)p<(s=h[2*h[2*(i=t.heap[r])+1]+1]+1)&&(s=p,m++),h[2*i+1]=s,u<i||(t.bl_count[s]++,a=0,c<=i&&(a=d[i-c]),o=h[2*i],t.opt_len+=o*(s+a),f&&(t.static_len+=o*(l[2*i+1]+a)));if(0!==m){do{for(s=p-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(i=t.bl_count[s];0!==i;)u<(n=t.heap[--r])||(h[2*n+1]!==s&&(t.opt_len+=(s-h[2*n+1])*h[2*n],h[2*n+1]=s),i--)}}(t,e),Z(s,u,t.bl_count)}function X(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),e[2*(r+1)+1]=65535,i=0;i<=r;i++)n=a,a=e[2*(i+1)+1],++o<h&&n===a||(o<u?t.bl_tree[2*n]+=o:0!==n?(n!==s&&t.bl_tree[2*n]++,t.bl_tree[2*b]++):o<=10?t.bl_tree[2*v]++:t.bl_tree[2*y]++,s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4))}function V(t,e,r){var i,n,s=-1,a=e[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),i=0;i<=r;i++)if(n=a,a=e[2*(i+1)+1],!(++o<h&&n===a)){if(o<u)for(;L(t,n,t.bl_tree),0!=--o;);else 0!==n?(n!==s&&(L(t,n,t.bl_tree),o--),L(t,b,t.bl_tree),P(t,o-3,2)):o<=10?(L(t,v,t.bl_tree),P(t,o-3,3)):(L(t,y,t.bl_tree),P(t,o-11,7));s=n,u=(o=0)===a?(h=138,3):n===a?(h=6,3):(h=7,4)}}i(T);var q=!1;function J(t,e,r,i){P(t,(s<<1)+(i?1:0),3),function(t,e,r,i){M(t),i&&(U(t,r),U(t,~r)),n.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r}(t,e,r,!0)}r._tr_init=function(t){q||(function(){var t,e,r,i,n,s=new Array(g+1);for(i=r=0;i<a-1;i++)for(I[i]=r,t=0;t<1<<w[i];t++)A[r++]=i;for(A[r-1]=i,i=n=0;i<16;i++)for(T[i]=n,t=0;t<1<<k[i];t++)E[n++]=i;for(n>>=7;i<f;i++)for(T[i]=n<<7,t=0;t<1<<k[i]-7;t++)E[256+n++]=i;for(e=0;e<=g;e++)s[e]=0;for(t=0;t<=143;)z[2*t+1]=8,t++,s[8]++;for(;t<=255;)z[2*t+1]=9,t++,s[9]++;for(;t<=279;)z[2*t+1]=7,t++,s[7]++;for(;t<=287;)z[2*t+1]=8,t++,s[8]++;for(Z(z,l+1,s),t=0;t<f;t++)C[2*t+1]=5,C[2*t]=j(t,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,d,p)}(),q=!0),t.l_desc=new F(t.dyn_ltree,O),t.d_desc=new F(t.dyn_dtree,B),t.bl_desc=new F(t.bl_tree,R),t.bi_buf=0,t.bi_valid=0,W(t)},r._tr_stored_block=J,r._tr_flush_block=function(t,e,r,i){var n,s,a=0;0<t.level?(2===t.strm.data_type&&(t.strm.data_type=function(t){var e,r=4093624447;for(e=0;e<=31;e++,r>>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return o;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return h;for(e=32;e<u;e++)if(0!==t.dyn_ltree[2*e])return h;return o}(t)),Y(t,t.l_desc),Y(t,t.d_desc),a=function(t){var e;for(X(t,t.dyn_ltree,t.l_desc.max_code),X(t,t.dyn_dtree,t.d_desc.max_code),Y(t,t.bl_desc),e=d-1;3<=e&&0===t.bl_tree[2*S[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}(t),n=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=n&&(n=s)):n=s=r+5,r+4<=n&&-1!==e?J(t,e,r,i):4===t.strategy||s===n?(P(t,2+(i?1:0),3),K(t,z,C)):(P(t,4+(i?1:0),3),function(t,e,r,i){var n;for(P(t,e-257,5),P(t,r-1,5),P(t,i-4,4),n=0;n<i;n++)P(t,t.bl_tree[2*S[n]+1],3);V(t,t.dyn_ltree,e-1),V(t,t.dyn_dtree,r-1)}(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),K(t,t.dyn_ltree,t.dyn_dtree)),W(t),i&&M(t)},r._tr_tally=function(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(A[r]+u+1)]++,t.dyn_dtree[2*N(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){P(t,2,3),L(t,m,z),function(t){16===t.bi_valid?(U(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{\"../utils/common\":41}],53:[function(t,e,r){\"use strict\";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(t,e,r){\"use strict\";e.exports=\"function\"==typeof setImmediate?setImmediate:function(){var t=[].slice.apply(arguments);t.splice(1,0,0),setTimeout.apply(null,t)}},{}]},{},[10])(10)});","/* eslint-disable no-unused-vars */\nimport parser from 'fast-xml-parser';\nimport JSZip from 'jszip/dist/jszip.min.js';\n\n/**\n * Parse metadata from xml file that is contained in BRML\n * @export\n * @param {String} file\n * @returns {Object} containing data (x: 2theta, y: counts), info and metadata\n */\nexport function parseDiffractogram(file) {\n  let json = parser.parse(file, {\n    ignoreAttributes: false,\n    attributeNamePrefix: '__',\n  });\n  const data = json.RawData;\n\n  let axes =\n    data.DataRoutes.DataRoute.ScanInformation.ScanAxes.ScanAxisInfo.map(\n      (element) => ({\n        id: element.__AxisId,\n        name: element.__AxisName,\n        unitBase: element.Unit.__Base,\n        unitPrefix: element.Unit.__Prefix,\n        reference: element.reference,\n        start: element.start,\n        stop: element.stop,\n        increment: element.increment,\n      }),\n    );\n\n  let adddata = {\n    startTime: data.TimeStampStarted,\n    endTime: data.TimeStampFinished,\n    measurmentPoints:\n      data.DataRoutes.DataRoute.ScanInformation.MeasurementPoints,\n    timePerStep: data.DataRoutes.DataRoute.ScanInformation.TimePerStep,\n    timePerStepEffective:\n      data.DataRoutes.DataRoute.ScanInformation.TimePerStepEffective,\n    scanMode: data.DataRoutes.DataRoute.ScanInformation.ScanMode,\n    scanModeVisibleName:\n      data.DataRoutes.DataRoute.ScanInformation.ScanModeVisibleName,\n    userName: data.Identifier.__UserName,\n    machineName: data.Identifier.__MachineName,\n    guid: data.Identifier.Guid,\n    axes: axes,\n    goniometerType: data.FixedInformation.Instrument.GoniometerType,\n\n    anode:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.TubeMaterial,\n    anodeVoltage:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.Generator.Voltage.__Value,\n    anodeVoltageUnit:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.Generator.Voltage.__Unit,\n    anodeSerialNumber:\n      data.FixedInformation.Instrument.PrimaryTracks.TrackInfoData.MountedOptics\n        .InfoData[0].Tube.SerialNumber.__Value,\n  };\n\n  const diffractogram = getXYDiffractogram(data.DataRoutes.DataRoute.Datum);\n\n  diffractogram.meta = { ...adddata, ...diffractogram.meta };\n\n  let label = adddata.axes[0].name.replace(/two/i, '2').replace(/theta/i, 'ϴ');\n  let unit = adddata.axes[0].unitBase.replace(/degree/i, '°');\n\n  diffractogram.info.xUnits = `${label} [${unit}]`;\n\n  return diffractogram;\n}\n\n/**\n * @param  {array} data array of strings of the measured points\n */\nfunction getXYDiffractogram(data) {\n  let axis1 = [];\n  let axis2 = [];\n  let measuredTimePerStep = [];\n  let plannedTimePerStep = [];\n  let counts = [];\n\n  data.forEach((element) => {\n    const factors = element.split(',');\n    measuredTimePerStep.push(parseFloat(factors[0]));\n    plannedTimePerStep.push(parseFloat(factors[1]));\n    axis1.push(parseFloat(factors[2]));\n    axis2.push(parseFloat(factors[3]));\n    counts.push(parseFloat(factors[4]));\n  });\n\n  const diffractogram = {\n    data: { x: axis1, y: counts },\n    info: {\n      xUnits: '2ϴ [°]',\n      yUnits: 'counts',\n      dataType: 'XRD pattern',\n      origin: 'Data converted from BRML using convert-to-jcamp',\n    },\n    meta: {\n      axis2: axis2,\n      measuredTimePerStep: measuredTimePerStep,\n      plannedTimePerStep: plannedTimePerStep,\n    },\n  };\n\n  return diffractogram;\n}\n/**\n * Read a BRML file (produced by Bruker instruments, a zip file that contains XMLs)\n * @export\n * @param {String/Array of bytes/ArrayBuffer/Uint8Array/Buffer/Blob/Promise} binary BRML file\n * @returns {Object} containing data (x: 2theta, y: counts), info and metadata\n */\nexport async function readBRML(binary) {\n  let zip = new JSZip();\n  const txt = await zip.loadAsync(binary).then((zipFiles) => {\n    return zipFiles.file('Experiment0/RawData0.xml').async('text');\n  });\n\n  const diffractogram = parseDiffractogram(txt);\n\n  return diffractogram;\n}\n","/**\n * Parse diffractograms saved in xy files that are generated with PowDLL\n * @export\n * @param {String} [text] Text containing the data\n * @returns {Object} containing data (x: 2theta, y: counts), info and metadata\n */\nexport function parsePowDLLXY(text) {\n  let lines = text.split(/\\r?\\n/).filter((line) => !line.match(/^\\s*$/));\n  const header = lines[0];\n  lines.splice(0, 1); // remove header line\n  let data = {\n    x: [],\n    y: [],\n  };\n  for (const line of lines) {\n    let tmp = line.split(/\\s+/);\n    data.x.push(parseFloat(tmp[0].trim()));\n    data.y.push(parseFloat(tmp[1].trim()));\n  }\n  let headerLines = header.split('\" ');\n\n  // try to make metadata consistent with Bruker\n  let meta = {};\n  meta.id = trimReplace(headerLines[0]);\n  meta.comment = trimReplace(headerLines[1]);\n  meta.userName = trimReplace(headerLines[2]);\n  meta.anode = trimReplace(headerLines[3]);\n  meta.scanType = trimReplace(headerLines[4]);\n  // eslint-disable-next-line radix\n  meta.timePerStep = parseInt(trimReplace(headerLines[5]));\n\n  const diffractogram = {\n    data: { x: data.x, y: data.y },\n    info: {\n      xUnits: '2ϴ [°]',\n      yUnits: 'counts',\n      dataType: 'XRD pattern',\n      origin: 'Data converted from xy using convert-to-jcamp',\n    },\n    meta: meta,\n  };\n\n  return diffractogram;\n}\n\nfunction trimReplace(string) {\n  return string.split(':')[1].replace('\"', '').replace(\"'\", '').trim();\n}\n","// source: http://gisaxs.com/index.php/X-ray_energy\n\nexport const kAlpha1Angstrom = {\n  CuKa: 1.54184,\n  CuKa2: 1.54439,\n  CuKa1: 1.54056,\n  CuKb1: 1.39222,\n  MoKa: 0.71073,\n  MoKa2: 0.71359,\n  MoKa1: 0.7093,\n  MoKb1: 0.63229,\n  CrKa: 2.291,\n  CrKa2: 2.29361,\n  CrKa1: 2.2897,\n  CrKb1: 2.08487,\n  FeKa: 1.93735,\n  FeKa2: 1.93998,\n  FeKa1: 1.93604,\n  FeKb1: 1.75661,\n  CoKa: 1.79026,\n  CoKa2: 1.79285,\n  CoKa1: 1.78896,\n  CoKb1: 1.63079,\n  AgKa: 0.560885,\n  AgKa2: 0.563813,\n  AgKa1: 0.559421,\n  AgKb1: 0.497082,\n};\n","import { kAlpha1Angstrom } from '../constants/wavelengths';\n\nexport function toRadians(angle) {\n  return angle * (Math.PI / 180);\n}\n\nexport function toDegrees(radians) {\n  return (radians * 180) / Math.PI;\n}\n\nexport function getLamba(anode) {\n  if (!(anode in kAlpha1Angstrom)) {\n    throw new Error(\n      'The wavelength for the anode metal in the metadata is not defined',\n    );\n  }\n\n  return kAlpha1Angstrom[anode];\n}\n","import { toRadians, getLamba } from './utils';\n/* eslint-disable no-empty-function */\n/**\n * Calculate the crystallite size according to the Scherrer equation.\n * Please check the strong assumptions (e.g., grains smaller than 0.1 to 0.2 μm)\n * for this analysis (https://en.wikipedia.org/wiki/Scherrer_equation).\n * The Scherrer equation only provides a lower bound, there also might be instrument broadening\n * (http://prism.mit.edu/XRAY/oldsite/CrystalSizeAnalysis.pdf)\n * @export\n * @param {Number} k  shape factor. The shape factor has a typical value of about 0.9, but varies with the actual shape of the crystallite. For a discussion see J. Appl. Cryst. 11 (1978) p102-113\n * @param {Number} lambda X-ray wavelength (output will be of the same unit)\n * @param {Number} beta FWHM line broadening in degree\n * @param {Number} theta  Bragg angle in degree, i.e. theta and not 2 theta\n * @returns mean size of the ordered (crystalline) domains in the unit of lambda\n */\nexport function scherrer(k, lambda, beta, theta) {\n  return (k * lambda) / (toRadians(beta) * Math.cos(toRadians(theta)));\n}\n\n/**\n * Computes the broadening accoding to the Scherrer equation for every reflex\n * in the diffractogram. Uses the anode metal deposited in the metadata to\n * get the wavelength and the peaks previosuly picked\n * @export\n * @param {*} spectrum -with anode metal as metadata and picked peaks with FWHM, all in 2 theta units\n * @param {Number} k shape factor\n * @returns {Array<Object>} peaks with crystalliteSize attribute\n */\nexport function scherrerForSpectrum(spectrum, k = 0.94) {\n  let newPeaks = spectrum.peaks;\n  if (!('peaks' in spectrum)) {\n    throw new Error('There must be peaks to calculate the scherrer broadening');\n  }\n\n  if (!('anode' in spectrum.meta)) {\n    throw new Error(\n      'The anode metal must be available in the metadata of the spectrum',\n    );\n  }\n\n  const lambda = getLamba(spectrum.meta.anode);\n\n  for (let peak of newPeaks) {\n    peak.crystalliteSize = scherrer(k, lambda, peak.width, peak.x / 2) / 100;\n  }\n\n  return newPeaks;\n}\n","import { JSGraph as OriginalJSGraph } from 'common-spectrum';\n\nimport { getAnnotations } from './jsgraph/getAnnotations';\n\nexport {\n  Analysis,\n  AnalysesManager,\n  fromJcamp,\n  toJcamp,\n  peakPicking,\n  autoPeakPicking,\n} from 'common-spectrum';\n\nexport { fromBRML } from './from/fromBRML';\nexport { fromPowDLLXY } from './from/fromPowDLLXY';\nexport { kAlpha1Angstrom } from './constants/wavelengths';\n\nexport {\n  calculateInterplanarSpacing,\n  calculateReflexes,\n} from './analysis/convert';\nexport { scherrerForSpectrum } from './analysis/scherrerForSpectrum';\nexport { computeCrystallinity } from './analysis/computeCrystallinity';\nexport { generatePattern } from './analysis/generatePattern';\n\nexport const JSGraph = { ...OriginalJSGraph, getAnnotations };\n","export function getAnnotations(peaks, options = {}) {\n  const { fillColor = 'green', strokeColor = 'red', creationFct } = options;\n\n  if (!peaks) return [];\n  let annotations = peaks.map((peak) => {\n    let annotation = {\n      line: 1,\n      type: 'rect',\n      strokeColor: strokeColor,\n      strokeWidth: 0,\n      fillColor: fillColor,\n    };\n    if (creationFct) {\n      creationFct(annotation, peak);\n    }\n    createAnnotation(annotation, peak, options);\n    return annotation;\n  });\n\n  return annotations;\n}\n\nfunction createAnnotation(annotation, peak, options = {}) {\n  const { showAssignment = true, assignmentAngle = -45 } = options;\n  let labels = [];\n  let line = 0;\n\n  if (showAssignment) {\n    labels.push({\n      text: peak.assignment,\n      size: '18px',\n      angle: assignmentAngle,\n      anchor: 'left',\n      color: 'darkred',\n      position: {\n        x: peak.x,\n        y: peak.y,\n        dy: `${-15 - line * 14}px`,\n      },\n    });\n    line++;\n  }\n\n  annotation.labels = labels;\n\n  annotation.position = [\n    {\n      x: peak.x,\n      y: peak.y,\n      dy: '-10px',\n      dx: '-1px',\n    },\n    {\n      x: peak.x,\n      y: peak.y,\n      dy: '-5px',\n      dx: '1px',\n    },\n  ];\n}\n","import { appendDistinctParameter } from './util/appendDistinctParameter';\nimport { appendDistinctValue } from './util/appendDistinctValue';\nexport class AnalysesManager {\n    constructor() {\n        this.analyses = [];\n    }\n    addAnalysis(analysis) {\n        let index = this.getAnalysisIndex(analysis.id);\n        if (index === undefined) {\n            this.analyses.push(analysis);\n        }\n        else {\n            this.analyses[index] = analysis;\n        }\n    }\n    getAnalyses(options = {}) {\n        const { ids } = options;\n        let analyses = [];\n        for (const analysis of this.analyses) {\n            if (!ids || ids.includes(analysis.id)) {\n                analyses.push(analysis);\n            }\n        }\n        return analyses;\n    }\n    getSpectra() {\n        const spectra = [];\n        for (const analysis of this.analyses) {\n            spectra.push(...analysis.spectra);\n        }\n        return spectra;\n    }\n    /**\n     * Get an array of objects (key + count) of all the titles\n     */\n    getDistinctTitles() {\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.title) {\n                appendDistinctValue(values, spectrum.title);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the units\n     */\n    getDistinctUnits() {\n        var _a;\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (let key in spectrum.variables) {\n                    const units = (_a = spectrum.variables[key].units) === null || _a === void 0 ? void 0 : _a.replace(/\\s+\\[.*/, '');\n                    if (units) {\n                        appendDistinctValue(values, units);\n                    }\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the labels\n     */\n    getDistinctLabels() {\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.variables) {\n                for (let key in spectrum.variables) {\n                    appendDistinctValue(values, spectrum.variables[key].label.replace(/\\s+\\[.*/, ''));\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the dataTypes\n     */\n    getDistinctDataTypes() {\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.dataType) {\n                appendDistinctValue(values, spectrum.dataType);\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    /**\n     * Get an array of objects (key + count) of all the meta\n     */\n    getDistinctMeta() {\n        let values = {};\n        for (let spectrum of this.getSpectra()) {\n            if (spectrum.meta) {\n                for (let key in spectrum.meta) {\n                    appendDistinctParameter(values, key, spectrum.meta[key]);\n                }\n            }\n        }\n        return Object.keys(values).map((key) => values[key]);\n    }\n    removeAllAnalyses() {\n        this.analyses.splice(0);\n    }\n    /**\n     * Remove the analysis from the AnalysesManager for the specified id\n     */\n    removeAnalysis(id) {\n        let index = this.getAnalysisIndex(id);\n        if (index === undefined)\n            return undefined;\n        return this.analyses.splice(index, 1);\n    }\n    /**\n     * Returns the index of the analysis in the analyses array\n     */\n    getAnalysisIndex(id) {\n        if (!id)\n            return undefined;\n        for (let i = 0; i < this.analyses.length; i++) {\n            let analysis = this.analyses[i];\n            if (analysis.id === id)\n                return i;\n        }\n        return undefined;\n    }\n    /**\n     * Checks if the ID of an analysis exists in the AnalysesManager\n     */\n    includes(id) {\n        const index = this.getAnalysisIndex(id);\n        return index === undefined ? false : !isNaN(index);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5hbHlzZXNNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0FuYWx5c2VzTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU1qRSxNQUFNLE9BQU8sZUFBZTtJQUcxQjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBa0I7UUFDbkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxVQUE4QixFQUFFO1FBQ2pELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxRQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3pCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU0sVUFBVTtRQUNmLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUks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","// @ts-ignore\nimport { gsd } from 'ml-gsd';\nimport { xyMaxClosestYPoint, xyMinClosestYPoint } from 'ml-spectra-processing';\nimport { getNormalizedSpectrum } from './getNormalizedSpectrum';\n/** Based on a x value we will return a peak*/\nexport function autoPeakPicking(spectrum, options = {}) {\n    var _a, _b;\n    const { xVariable = 'x', yVariable = 'y', normalizationOptions, minPeakWidth, } = options;\n    let x = (_a = spectrum.variables[xVariable]) === null || _a === void 0 ? void 0 : _a.data;\n    let y = (_b = spectrum.variables[yVariable]) === null || _b === void 0 ? void 0 : _b.data;\n    if (normalizationOptions) {\n        const tempSpectrum = {\n            variables: {\n                x: { data: x, label: '' },\n                y: { data: y, label: '' },\n            },\n        };\n        const normalizedSpectrum = getNormalizedSpectrum(tempSpectrum, normalizationOptions);\n        x = normalizedSpectrum.variables.x.data;\n        y = normalizedSpectrum.variables.y.data;\n    }\n    if (!x || !y)\n        return;\n    let { from, to } = options;\n    let peaks = gsd({ x, y }, options);\n    if (normalizationOptions) {\n        // we need to recalculate the real count\n        const xyClosestYPoint = options.maxCriteria === undefined || options.maxCriteria\n            ? xyMaxClosestYPoint\n            : xyMinClosestYPoint;\n        for (let peak of peaks) {\n            const closest = xyClosestYPoint({ x: spectrum.variables.x.data, y: spectrum.variables.y.data }, { target: peak.x });\n            peak.x = closest.x;\n            peak.y = closest.y;\n        }\n    }\n    if (from !== undefined) {\n        peaks = peaks.filter((peak) => peak.x >= from);\n    }\n    if (to !== undefined) {\n        peaks = peaks.filter((peak) => peak.x <= to);\n    }\n    if (minPeakWidth) {\n        peaks = peaks.filter((peak) => peak.width >= minPeakWidth);\n    }\n    return peaks.map((peak) => {\n        const result = {};\n        for (let key in spectrum.variables) {\n            result[key] = spectrum.variables[key].data[peak.index];\n        }\n        result.width = peak.width;\n        return result;\n    });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b1BlYWtQaWNraW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvYXV0b1BlYWtQaWNraW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWE7QUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLDhDQUE4QztBQUM5QyxNQUFNLFVBQVUsZUFBZSxDQUM3QixRQUFzQixFQUN0QixVQUFrQyxFQUFFOztJQUVwQyxNQUFNLEVBQ0osU0FBUyxHQUFHLEdBQUcsRUFDZixTQUFTLEdBQUcsR0FBRyxFQUNmLG9CQUFvQixFQUNwQixZQUFZLEdBQ2IsR0FBRyxPQUFPLENBQUM7SUFFWixJQUFJLENBQUMsR0FBRyxNQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLDBDQUFFLElBQUksQ0FBQztJQUM1QyxJQUFJLENBQUMsR0FBRyxNQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLDBDQUFFLElBQUksQ0FBQztJQUU1QyxJQUFJLG9CQUFvQixFQUFFO1FBQ3hCLE1BQU0sWUFBWSxHQUFpQjtZQUNqQyxTQUFTLEVBQUU7Z0JBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7YUFDMUI7U0FDRixDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FDOUMsWUFBWSxFQUNaLG9CQUFvQixDQUNyQixDQUFDO1FBQ0YsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztLQUN6QztJQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTztJQUNyQixJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUUzQixJQUFJLEtBQUssR0FDUCxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFekIsSUFBSSxvQkFBb0IsRUFBRTtRQUN4Qix3Q0FBd0M7UUFDeEMsTUFBTSxlQUFlLEdBQ25CLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxXQUFXO1lBQ3RELENBQUMsQ0FBQyxrQkFBa0I7WUFDcEIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ3pCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FDN0IsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFDOUQsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUNuQixDQUFDO1lBQ0YsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNwQjtLQUNGO0lBRUQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ3RCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFLLElBQWUsQ0FBQyxDQUFDO0tBQzVEO0lBQ0QsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFO1FBQ3BCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFLLEVBQWEsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxZQUFZLEVBQUU7UUFDaEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLENBQUM7S0FDNUQ7SUFFRCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN4QixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBQzFDLEtBQUssSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRTtZQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9","import { toRadians, getLamba, toDegrees } from './utils';\n\n/**\n * d = Order of Reflection (n) × Wavelength (λ) / 2 × Sinθ\n *\n */\n\n/**\n * Calculates the interplanar spacing d according to Bragg's equation\n *\n * @export\n * @param {Array<number>} twoThetas. Note that this is 2θ *not* θ.\n * @param {Object} options.\n * @param {Number} options.orderOfReflection. Order of relection n. Defaults to 1.\n * @param {String} options.anode. Anode type. Defaults to \"CuKa\" Available options in constants.wavelengths.kAlpha1Angstrom\n * @returns {Array<number>} Interplanar spacings in Angstrom.\n */\nexport function calculateInterplanarSpacing(twoThetas, options = {}) {\n  let { orderOfReflection = 1, anode = 'CuKa' } = options;\n  const wavelength = getLamba(anode);\n  return twoThetas.map((theta) => {\n    return (orderOfReflection * wavelength) / (2 * Math.sin(toRadians(theta)));\n  });\n}\n\n/**\n * Calculates the reflex angles based on the interplanar spacings.\n *\n * @export\n * @param {Array<number>} ds spacings. In Angstrom.\n * @param {Object} options.\n * @param {Number} options.orderOfReflection. Order of relection n. Defaults to 1.\n * @param {String} options.anode. Anode type. Defaults to \"CuKa\" Available options in constants.wavelengths.kAlpha1Angstrom\n * @returns {Array<number>} twoThetas.\n */\nexport function calculateReflexes(ds, options = {}) {\n  let { orderOfReflection = 1, anode = 'CuKa' } = options;\n  const wavelength = getLamba(anode);\n  return ds.map((d) => {\n    return toDegrees(Math.asin((orderOfReflection * wavelength) / (2 * d)));\n  });\n}\n","import { getShape1D } from 'ml-peak-shape-generator';\nimport { xyIntegration } from 'ml-spectra-processing';\n\nexport function computeCrystallinity(spectrum, options = {}) {\n  let { shape = { kind: 'gaussian' }} = options;\n\n  const totalArea = xyIntegration({\n    x: spectrum.variables.x.data,\n    y: spectrum.variables.y.data,\n  });\n  let peakArea = 0;\n\n  spectrum.peaks.forEach((peak) => {\n    peakArea += getShape1D(shape.kind, {fwhm: peak.width, height: peak.y}).getArea();\n  });\n\n  return peakArea / totalArea;\n}\n","import { Analysis } from '..';\n\nimport { readBRML } from './parseBRML';\n\n/**\n * Creates a new Chromatogram element based in a JCAMP string\n * @param {UInt8Array} blob - String containing the JCAMP data\n * @return {Analysis} - New class element with the given data\n */\nexport async function fromBRML(blob) {\n  let parsed = await readBRML(blob);\n  let analysis = new Analysis();\n\n  const variables = {\n    x: {\n      data: parsed.data.x,\n      label: parsed.info.xUnits,\n    },\n    y: {\n      data: parsed.data.y,\n      label: parsed.info.yUnits,\n    },\n  };\n\n  analysis.pushSpectrum(variables, {\n    title: parsed.info.title,\n    meta: parsed.meta,\n    dataType: 'XRD pattern',\n  });\n  return analysis;\n}\n","import { convert } from 'jcampconverter';\nimport { Analysis } from '../Analysis';\n/**\n * Creates a new Analysis from a JCAMP string\n * @param {string} jcamp - String containing the JCAMP data\n * @param {object} [options={}]\n * @param {object} [options.id=Math.random()]\n * @param {string} [options.label=options.id] human redeable label\n * @param {string} [options.spectrumCallback] a callback to apply on variables when creating spectrum\n * @return {Analysis} - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n    let analysis = new Analysis(options);\n    addJcamp(analysis, jcamp);\n    return analysis;\n}\nfunction addJcamp(analysis, jcamp) {\n    let converted = convert(jcamp, {\n        keepRecordsRegExp: /.*/,\n    });\n    for (let entry of converted.flatten) {\n        if (!entry.spectra || !entry.spectra[0])\n            continue;\n        let currentSpectrum = entry.spectra[0];\n        // we ensure variables\n        if (!currentSpectrum.variables) {\n            const variables = {};\n            currentSpectrum.variables = variables;\n            variables.x = {\n                label: currentSpectrum.xUnits,\n                symbol: 'X',\n                data: currentSpectrum.data.x || currentSpectrum.data.X,\n            };\n            variables.y = {\n                label: currentSpectrum.yUnits,\n                symbol: 'Y',\n                data: currentSpectrum.data.y || currentSpectrum.data.Y,\n            };\n        }\n        else {\n            for (let key in currentSpectrum.variables) {\n                const variable = currentSpectrum.variables[key];\n                if (variable.label)\n                    continue;\n                variable.label = variable.name || variable.symbol || key;\n                if (variable.units && !variable.label.includes(variable.units)) {\n                    variable.label += ` [${variable.units}]`;\n                }\n            }\n        }\n        analysis.pushSpectrum(currentSpectrum.variables, {\n            dataType: entry.dataType,\n            title: entry.title,\n            meta: entry.meta,\n        });\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUpjYW1wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zyb20vZnJvbUpjYW1wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3ZDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUEyQixFQUFFLE9BQU8sR0FBRyxFQUFFO0lBQ2pFLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLFFBQWtCLEVBQUUsS0FBMkI7SUFDL0QsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUM3QixpQkFBaUIsRUFBRSxJQUFJO0tBQ3hCLENBQUMsQ0FBQztJQUVILEtBQUssSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQUUsU0FBUztRQUNsRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUM5QixNQUFNLFNBQVMsR0FBaUMsRUFBRSxDQUFDO1lBQ25ELGVBQWUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxDQUFDLEdBQUc7Z0JBQ1osS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNO2dCQUM3QixNQUFNLEVBQUUsR0FBRztnQkFDWCxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZELENBQUM7WUFDRixTQUFTLENBQUMsQ0FBQyxHQUFHO2dCQUNaLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTTtnQkFDN0IsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2RCxDQUFDO1NBQ0g7YUFBTTtZQUNMLEtBQUssSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRTtnQkFDekMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxRQUFRLENBQUMsS0FBSztvQkFBRSxTQUFTO2dCQUM3QixRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUM7Z0JBQ3pELElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDOUQsUUFBUSxDQUFDLEtBQUssSUFBSSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQztpQkFDMUM7YUFDRjtTQUNGO1FBRUQsUUFBUSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQy9DLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQyJ9","import { Analysis } from '..';\n\nimport { parsePowDLLXY } from './parsePowDLLXY';\n\n/**\n * Creates a new Chromatogram element based in a JCAMP string\n * @param {UInt8Array} blob - String containing the JCAMP data\n * @return {Analysis} - New class element with the given data\n */\nexport function fromPowDLLXY(blob) {\n  let parsed = parsePowDLLXY(blob);\n  let analysis = new Analysis();\n  const variables = {\n    x: {\n      data: parsed.data.x,\n      label: parsed.info.xUnits,\n    },\n    y: {\n      data: parsed.data.y,\n      label: parsed.info.yUnits,\n    },\n  };\n\n  analysis.pushSpectrum(variables, {\n    title: parsed.info.title,\n    meta: parsed.meta,\n    dataType: 'XRD pattern',\n  });\n\n  return analysis;\n}\n","import { SpectrumGenerator } from 'spectrum-generator';\n\nexport function generatePattern(spectrum, options = {}) {\n  let {\n    from = Math.min(...spectrum.variables.x.data),\n    to = Math.max(...spectrum.variables.x.data),\n    nbPoints = 999,\n  } = options;\n  const generator = new SpectrumGenerator({\n    from: from,\n    to: to,\n    nbPoints: nbPoints,\n  });\n  generator.addPeaks(spectrum.peaks);\n  return generator.getSpectrum();\n}\n","import max from 'ml-array-max';\nimport { optimize as optimizePeak } from 'ml-spectra-fitting';\nimport { xFindClosestIndex } from 'ml-spectra-processing';\n/** Based on a x value we will return a peak\n * if you set optimize=True the returned positions will be\n * the closest actual datapoints to the fitted peak location.\n * the x/y of the fitted peak will be in xOptimized and yOptimized\n */\nexport function peakPicking(spectrum, \n/** value to search (on x axis) */\ntarget, options = {}) {\n    var _a, _b, _c;\n    const { xVariable = 'x', yVariable = 'y', optimize = false, expectedWidth = 1, max: isMax = true, shapeOptions = {}, } = options;\n    const x = (_a = spectrum.variables[xVariable]) === null || _a === void 0 ? void 0 : _a.data;\n    let y;\n    if (!isMax) {\n        y = (_b = spectrum.variables[yVariable]) === null || _b === void 0 ? void 0 : _b.data.slice(); // do deep copy as we maybe need to flip sign\n    }\n    else {\n        y = (_c = spectrum.variables[yVariable]) === null || _c === void 0 ? void 0 : _c.data;\n    }\n    if (!x || !y)\n        return;\n    let targetIndex;\n    targetIndex = xFindClosestIndex(x, target);\n    let optimizedPeak;\n    let optimizedIndex;\n    const result = {};\n    if (optimize) {\n        if (isMax === false) {\n            let maximumY = max(y);\n            for (let i = 0; i < y.length; i++) {\n                y[i] *= -1;\n                y[i] += maximumY; // This makes it somewhat more robust\n            }\n        }\n        optimizedPeak = optimizePeak({ x, y }, [{ x: x[targetIndex], y: y[targetIndex], width: expectedWidth }], shapeOptions);\n        optimizedIndex = xFindClosestIndex(x, optimizedPeak.peaks[0].x);\n        for (let key in spectrum.variables) {\n            result[key] = spectrum.variables[key].data[optimizedIndex];\n        }\n        result.optimized = optimizedPeak.peaks[0];\n    }\n    else {\n        for (let key in spectrum.variables) {\n            result[key] = spectrum.variables[key].data[targetIndex];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVha1BpY2tpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9wZWFrUGlja2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsSUFBSSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUkxRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsUUFBc0I7QUFDdEIsa0NBQWtDO0FBQ2xDLE1BQWMsRUFDZCxVQUE4QixFQUFFOztJQUVoQyxNQUFNLEVBQ0osU0FBUyxHQUFHLEdBQUcsRUFDZixTQUFTLEdBQUcsR0FBRyxFQUNmLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLGFBQWEsR0FBRyxDQUFDLEVBQ2pCLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUNqQixZQUFZLEdBQUcsRUFBRSxHQUNsQixHQUFHLE9BQU8sQ0FBQztJQUVaLE1BQU0sQ0FBQyxHQUFHLE1BQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsMENBQUUsSUFBSSxDQUFDO0lBQzlDLElBQUksQ0FBQyxDQUFDO0lBQ04sSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLENBQUMsR0FBRyxNQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLDBDQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLDZDQUE2QztLQUMvRjtTQUFNO1FBQ0wsQ0FBQyxHQUFHLE1BQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsMENBQUUsSUFBSSxDQUFDO0tBQ3pDO0lBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFBRSxPQUFPO0lBQ3JCLElBQUksV0FBVyxDQUFDO0lBQ2hCLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0MsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxjQUFjLENBQUM7SUFDbkIsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztJQUMxQyxJQUFJLFFBQVEsRUFBRTtRQUNaLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNuQixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMscUNBQXFDO2FBQ3hEO1NBQ0Y7UUFFRCxhQUFhLEdBQUcsWUFBWSxDQUMxQixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDUixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUNoRSxZQUFZLENBQ2IsQ0FBQztRQUVGLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNDO1NBQU07UUFDTCxLQUFLLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pEO0tBQ0Y7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIn0=","import { toJcamps } from './toJcamps';\nexport function toJcamp(analysis, options = {}) {\n    return toJcamps(analysis, options).join('\\n');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9KY2FtcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90by90b0pjYW1wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNdEMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFrQixFQUFFLFVBQTJCLEVBQUU7SUFDdkUsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDIn0="],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","a","d","e","f","length","g","h","i","j","c","b","_ref","module","exports","window","median","input","isArray","TypeError","quickSelectMedian","slice","xAdd","array1","array2","constant","isConstant","Error","Number","array3","Array","xMultiply","Float64Array","xDivide","xFindClosestIndex","array","target","low","high","middle","Math","abs","_typeof","obj","Symbol","iterator","constructor","sequentialFill","arguments","undefined","options","_options","_options$from","from","_options$to","to","_options$size","size","step","floor","push","_i","xIsMonotone","sum","sumValue","mean","min","_options$fromIndex","fromIndex","_options$toIndex","toIndex","isInteger","minValue","max","maxValue","xSubtract","xyCheck","data","x","y","xyEnsureGrowingX","prevX","Infinity","ansX","ansY","index","xyFilterXPositive","newX","newY","xyIntegration","xGetFromToIndex","currentxyIntegration","xyMaxClosestYPoint","targetIndex","previousIndex","MIN_SAFE_INTEGER","currentIndex","xyMaxY","xyMinClosestYPoint","minY","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","sqrt","PI","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","Shape1D","Gaussian","fwhm","sd","height","widthToFWHM","this","fwhmToWidth","width","fct","getArea","getFactor","area","getData","factor","ceil","pow","center","exp","ln1MinusXSqrd","log","lnEtcBy2Plus2","firstSqrt","erfinv","Lorentzian","tan","PseudoVoigt","mu","lorentzian","gaussian","getFactorLorentzian","getFactorGaussian","getShape1D","kind","shapeOptions","SavitzkyGolay","ys","xs","windowSize","derivative","polynomial","RangeError","console","warn","half","np","ans","weights","m","n","s","t","Weight","fullWeights","hs","constantH","wg1","wg2","d1","d2","l","getHs","wg","count","GramPoly","k","Grampoly","GenFact","gf","isEqualSpaced","tmp","maxDx","minDx","MAX_SAFE_INTEGER","getNoiseLevel","stddev","averageDeviations","sort","determineRealTop","peakList","alpha","beta","gamma","p","currentPoint","log10","isEnumerable","propertyIsEnumerable","getSymbols","getOwnPropertySymbols","assignSymbols","args","val","arg","names","key","isValidKey","assign","assignDeepModule","isObject","keys","setFWHM","setHeight","squareFWHM","setMu","sumOfGaussianLorentzians","nL","result","sumOfGaussians","sumOfLorentzians","errorCalculation","parameters","parameterizedFunction","weightSquare","error","func","rescale","output","currentMin","currentMax","_options$min","autoMinMax","_options$max","indent","repeat","indentData","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","name","rows","columns","maxI","maxJ","line","formatNumber","get","join","inspectData","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","some","r","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","value","checkNonEmpty","isEmpty","AbstractMatrix","newRows","newColumns","newData","newMatrix","Matrix","row","column","set","fill","random","interval","round","zeros","matrix1","matrix2","checkMatrix","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","echelonForm","clone","iMax","swapRows","reducedEchelonForm","maxRow","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","rowVector","setRow","row1","row2","temp","getColumn","getColumnVector","columnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","NaN","v","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","diag","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","r1","c1","r2","c2","embed","mat","cols","resultat","blockMult","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","scaleColumns","flipRows","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","eye","IxB","transpose","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","checkIndices","rowIndex","columnIndex","trace","by","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","variance","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","for","rand","randomInt","randInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","fround","log1p","log2","sign","sin","sinh","tanh","trunc","arg0","powS","powM","installMathOperations","BaseView","MatrixTransposeView","WrapperMatrix2D","LuDecomposition","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","col","solve","X","determinant","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","MIN_VALUE","isNaN","ks","cs","sn","sp","spm1","epm1","sk","ek","shift","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","tol","ii","useSVD","leftHandSide","rightHandSide","params","damping","gradientDifference","centralDifference","evaluatedData","gradientFunc","paramFunction","nbParams","nbPoints","param","delta","auxParams","funcParam","funcParam2","point","gradientFunction","residualError","matrixFunction","inverseMatrix","jacobianWeigthResidualError","perturbations","levenbergMarquardt","checkTimeout","minValues","maxValues","dampingStepUp","dampingStepDown","maxIterations","errorTolerance","improvementThreshold","timeout","initialValues","filler","parLen","endTime","Date","now","checkOptions","converged","iteration","previousError","parameterValues","parameterError","iterations","selectMethod","optimizationOptions","toLowerCase","replace","getKind","algorithm","LM","lmOptions","optimize","maxY","peaks","paramsFunc","optimization","defaultParameters","shape","init","peak","getMaxValue","assignDeep","par","checkInput","nbShapes","parameterKey","pMin","pMax","pInit","gradientDifferenceValue","pFit","addStyle","serie","spectrum","color","opacity","lineWidth","match","toUpperCase","style","dash","label","id","COLORS","appendDistinctParameter","values","includes","appendDistinctValue","prepare","M","P","Pinv","Mt","ar","ac","Ap","Ai","Ax","LNZ","coloffset","adr","D","Lp","Parent","Lnz","Flag","Pattern","bp1","kk","p2","ldlSymbolic","Lx","Li","yi","lKi","len","top","ldlNumeric","B","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","compareNum","list","adj","visited","toVisit","eol","ptr","nbhd","u","getCloseIndex","goal","closest","reduce","prev","curr","getClosestNumber","updateSystem","newVector","w","next","airPLS","baseline","lambda","factorCriterion","controlPoints","baseLineZones","forEach","arr","range","indexFrom","indexTo","sumNegDifferences","stopCriterion","lowerTriangularNonZeros","permutationEncodedArray","cuthillMckee","getDeltaMatrix","cho","Cholesky","difference","map","calculateError","maxNegativeDiff","diff","corrected","airPLSBaseline","numberPoints","regressionOptions","airpls","correctedSpectrum","maybeToPrecision","digits","BaseRegression","predict","_predict","train","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","pr","F","FT","A","regress","precision","_toFormula","isLaTeX","sup","closeSup","times","fn","str","charAt","json","iterativePolynomialBaseline","Regression","tolerance","regression","fitting","oldFitting","baselineCorrection","xCheck","xRolling","padding","fromEnd","toEnd","xPadding","subArray","buffer","rollingAverageBaseline","defaults","xRollingAverage","rollingBallBaseline","maxima","minima","windowM","windowS","windowLeft","windowRight","rollingBall","rollingMedianBaseline","xRollingMedian","_options$algorithm","_options$sumValue","_options$maxValue","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","_i2","concat","normalize","zones","NEGATIVE_INFINITY","POSITIVE_INFINITY","JSON","parse","stringify","zone","filter","currentZone","integral","x0","x1","slope","intercept","equallySpaced","arrayXY","xLength","reverse","variant","numberOfPoints","exclusions","exclusion","nextExclusion","invert","unitsPerPoint","previous","current","currentTotal","zonesWithPoints","xResult","yResult","zoneResult","processZone","halfStep","lastStep","start","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","equallySpacedSlot","initialOriginalStep","lastOriginalStep","sumAtMin","sumAtMax","equallySpacedSmooth","filterX","points","currentFrom","getZones","currentZoneIndex","position","defaultOptions","matrixCase","cond","arrayCase","savitzkyGolay","pad","padValue","C","padArray","J","ones","inic","Jtranspose","factorial","det","arithmeticMean","lnsum","means","samples","percent","alreadySorted","theMean","theVariance","stdev","quart","q1","q2","q3","pooledVariance","vari","itemCount","itemArray","mean1","mean2","cov","s2","s3","dev","s4","weightedVariance","weightedMean","z","inPlace","standardDev","getNormalizedSpectrum","variables","newSpectrum","units","title","dataType","meta","filters","processing","keepYUnits","_a","filterOptions","Stat","normed","isMonotone","isString","isFiniteImpl","isNumber","uniq","strings","seen","item","hasOwnProperty","compareArray","properties","mulSafe","decimals","getFractional","divSafe","den","QtyError","err","create","message","stack","throwIncompatibleUnits","left","right","UNITS","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","unit","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","unitKeys","substr","getKinds","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","FRACTION","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","trim","exec","scalarMatch","parseFloat","nx","bottom","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","UNIT_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","globalParse","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","base","KINDS","knownSignature","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","dstDegrees","getDegreeUnits","subtractTempDegrees","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","dstScalar","srcDegK","toDegK","dstUnits","qty","toTemp","toTempK","swiftConverter","srcUnits","convert","srcQty","dstQty","eq","isDegrees","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","NestedMap","defaultFormatter","op1","op2","numdenscale","compareTo","lt","lte","gt","gte","same","every","_isBase","childMap","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","out","format","targetQty","stringifiedUnitsCache","stringified","simplify","getOutputNames","token","tokenNext","unitNames","acc","unitCounter","unitCount","version","factory","convertUnit","fromUnit","toUnit","testRegExp","ensureRegexp","string","parts","stringToRegexp","flags","getConvertedVariable","variable","newUnits","getPossibleVariable","selector","variableName","possible","converted","possibleFiltered","Analysis","substring","spectrumCallback","spectra","cache","pushSpectrum","analysisOptions","xVariable","yVariable","standardizeData","getXYSpectrum","xUnits","yUnits","labels","xLabel","yLabel","split","getXY","normalization","getSpectrum","getXLabel","getYLabel","guessEncoding","blob","uint8","ArrayBuffer","isView","Uint8Array","byteOffset","byteLength","parseString","lowercase","number","GC_MS_FIELDS","complexChromatogram","chromatogram","series","ms","dimension","existingGCMSFields","convertMSFieldToLabel","pageValue","isMSField","canonicDataLabel","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","deltaX","isXYdata","currentData","ascii","currentX","firstX","currentY","firstY","endLine","charCodeAt","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","numberOfVariables","lines","logs","parseXYZ","xFactor","parseXY","parseXYA","removeSymbolRegExp","isXYAdata","add2D","zData","minZ","maxZ","ySize","xSize","lastX","lastY","medians","getMedian","minX","maxX","noise","convertTo3DZ","noContour","contourLines","povarHeight0","povarHeight1","povarHeight2","povarHeight3","isOver0","isOver1","isOver2","isOver3","pAx","pAy","pBx","pBy","lineZValue","nbSubSpectra","nbPovars","dx","y0","dy","iter","nbContourLevels","contourLevels","level","contourLevel","side","noiseMultiplier","zValue","iSubSpectra","subSpectra","subSpectraAfter","povar","segments","generateContourLines","minMax","sourceRandomUniform","source","randomUniform","defaultSource","sourceRandomNormal","randomNormal","sigma","multiply_uint32","nlo","XSadd","seed","state","Uint32Array","getFloat","bind","getUint32","nextState","periodCertification","addNoise","distribution","generateRandomNumber","getRandom","findMax","XSAdd","SpectrumGenerator","peakWidthFct","maxPeakHeight","shapeGenerator","assertNumber","assertInteger","reset","addPeaks","addPeak","xPosition","intensity","peakWidth","peakShapeOptions","widthLeft","widthRight","shapeParameters","firstValue","firstPoint","lastPoint","middlePoint","addBaseline","baselineFct","minPeakHeight","gyromagneticRatio","profiling","action","time","simpleChromatogram","postProcessing","entriesFlat","entry","observeFrequency","shiftOffsetVal","ntuples","symbol","nucleus","startsWith","$NUC2","f2index","$NUC1","yType","pageSymbolIndex","pageSymbol","ratio0","ratio1","ratio","postProcessingNMR","newNtuples","twoD","wantXY","keepSpectra","prepareNtuplesDatatable","currentEntry","xIndex","yIndex","firstVariable","secondVariable","lowerCaseSymbol","vardim","varname","prepareSpectrum","ntuplesSeparatorRegExp","Spectrum","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","jcamp","encoding","TextDecoder","decode","ensureString","entries","tmpResult","children","parentsStack","ldrs","ldr","dataLabel","dataValue","infos","datatable","parentEntry","info","dataClass","xType","shiftOffsetNum","vartype","varform","page","sampleDescription","pop","flatten","getNumber","rounded","fromJSON","xydata","owner","origin","header","xyDataCreator","peakTableCreator","fromVariables","forceNtuples","jcampOptions","varName","varType","varDim","minFct","maxFct","creatorNtuples","getJcamp","JSGraph","getJSGraph","analyses","colors","opacities","linesWidth","xAxis","yAxis","analysis","logScale","axes","flipped","display","getNormalizationAnnotations","boundary","annotations","ignore","strokeWidth","fillColor","nameStartChar","nameRegexp","regexName","arrayMode","isExist","props","newOptions","tagName","parentTagName","regex","matches","allmatches","util","require$$0","convertToJson","node","jObj","child","isEmptyObject","attrsMap","cdataPositionChar","asArray","isTagNameInArrayMode","tagname","textNodeName","merge","tag","buildOptions","xmlNode","parent","addChild","attributeNamePrefix","attrNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","trimValues","cdataTagName","tagValueProcessor","attrValueProcessor","attrName","stopNodes","processTagValue","parseValue","parseTrueNumberOnly","resolveNameSpace","tags","shouldParse","parsed","attrsRegx","buildAttributesMap","attrStr","getAllMatches","attrs","attrCollection","closingIndexForOpeningTag","attrBoundary","tagExp","ch","findClosingIndex","xmlData","errMsg","closingIndex","xmlObj","currentNode","textData","closeIndex","colonIndex","getValue","startIndex","childNode","separatorIndex","shouldBuildAttributesMap","lastIndexOf","readPI","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","tagFound","reachedRoot","closingTag","isName","msg","readAttributeStr","isValid","validateAttributeString","code","tagClosed","otg","afterAmp","validateAmpersand","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","validateAttrName","re","validateNumberAmpersand","lineNumber","char","fromCharCode","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","charsArr","_e","e_schema","hasValidData","itemSchema","arr_len","arr_i","processValue","isAppChar","x2j","require$$1","_cToJsonStr","indentBy","supressEmptyNode","Parser","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","cdata","j2x","attr","arrLen","Ks","L","json2xml","nodeToJson","xmlToNodeobj","x2xmlnode","require$$2","validator","require$$3","validationOption","validate","traversableObj","getTraversalObj","require$$4","convert2nimn","require$$5","convertToJsonString","require$$6","schema","convertTonimn","o","require","encode","getTypeOf","uint8array","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","Promise","resolve","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","_pako","_pakoAction","_pakoOptions","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","onData","pako","file","O","utf8encode","I","_","S","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","openedSource","closedSource","DATA_DESCRIPTOR","CENTRAL_DIRECTORY_END","prepareNextSource","isPaused","pause","resume","registerPrevious","end","generatedError","lock","generateWorker","platform","_compressWorker","files","root","loadAsync","support","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","reject","prepareContent","then","load","all","fileNameStr","fileCommentStr","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","allocBuffer","alloc","isBuffer","folder","remove","generate","generateInternalStream","mimeType","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","newBlob","_worker","objectMode","arraybuffer","nodebuffer","Blob","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","FileReader","onload","onerror","readAsArrayBuffer","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","async","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","setImmediate","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","port1","onmessage","port2","postMessage","global","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","status","finally","catch","race","immediate","method","chunkSize","windowBits","memLevel","strategy","gzip","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","max_chain_length","prev_length","nice_match","w_size","w_mask","good_match","lookahead","match_start","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","G","data_type","_tr_init","K","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","havedict","check","total","wbits","offset","ncode","nlen","ndist","have","lens","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","parseDiffractogram","parser","RawData","DataRoutes","DataRoute","ScanInformation","ScanAxes","ScanAxisInfo","element","__AxisId","__AxisName","unitBase","Unit","__Base","unitPrefix","__Prefix","reference","stop","increment","adddata","startTime","TimeStampStarted","TimeStampFinished","measurmentPoints","MeasurementPoints","timePerStep","TimePerStep","timePerStepEffective","TimePerStepEffective","scanMode","ScanMode","scanModeVisibleName","ScanModeVisibleName","userName","Identifier","__UserName","machineName","__MachineName","guid","Guid","goniometerType","FixedInformation","Instrument","GoniometerType","anode","PrimaryTracks","TrackInfoData","MountedOptics","InfoData","Tube","TubeMaterial","anodeVoltage","Generator","Voltage","__Value","anodeVoltageUnit","__Unit","anodeSerialNumber","SerialNumber","diffractogram","axis1","axis2","measuredTimePerStep","plannedTimePerStep","counts","factors","getXYDiffractogram","Datum","trimReplace","kAlpha1Angstrom","CuKa","CuKa2","CuKa1","CuKb1","MoKa","MoKa2","MoKa1","MoKb1","CrKa","CrKa2","CrKa1","CrKb1","FeKa","FeKa2","FeKa1","FeKb1","CoKa","CoKa2","CoKa1","CoKb1","AgKa","AgKa2","AgKa1","AgKb1","toRadians","angle","getLamba","scherrer","theta","OriginalJSGraph","getAnnotations","strokeColor","creationFct","annotation","showAssignment","assignmentAngle","assignment","anchor","createAnnotation","addAnalysis","getAnalysisIndex","getAnalyses","ids","getSpectra","getDistinctTitles","getDistinctUnits","getDistinctLabels","getDistinctDataTypes","getDistinctMeta","removeAllAnalyses","removeAnalysis","normalizationOptions","minPeakWidth","_b","normalizedSpectrum","noiseLevel","sgOptions","smoothY","heightFactor","broadRatio","maxCriteria","minMaxRatio","derivativeThreshold","realTopDetection","yIn","equalSpaced","dY","ddY","yData","SG","xData","dX","maxDdy","lastMax","lastMin","minddY","intervalL","intervalR","broadMask","frequency","distanceJ","minDistance","gettingCloser","widthProcessor","signals","lastK","soft","yLeft","yRight","gsd","xyClosestYPoint","twoThetas","orderOfReflection","wavelength","ds","totalArea","peakArea","zip","JSZip","zipFiles","readBRML","currentSpectrum","addJcamp","headerLines","scanType","parsePowDLLXY","generator","expectedWidth","isMax","optimizedPeak","optimizedIndex","_c","maximumY","optimizePeak","optimized","newPeaks","crystalliteSize","jcamps","toJcamps"],"mappings":"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"}