{"version":3,"file":"mass-tools.esm.js","sources":["../packages/ms-spectrum/node_modules/is-any-array/lib/index.js","../node_modules/ml-spectra-processing/lib/reim/reimAbsolute.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-spectra-processing/lib/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib/x/xAbsolute.js","../node_modules/ml-spectra-processing/lib/x/xMedian.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib/x/xCheck.js","../node_modules/ml-spectra-processing/lib/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteSum.js","../node_modules/ml-spectra-processing/lib/x/xAdd.js","../node_modules/ml-spectra-processing/lib/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib/x/xMultiply.js","../node_modules/ml-spectra-processing/lib/x/xDotProduct.js","../node_modules/ml-spectra-processing/lib/x/xCrossCorrelation.js","../node_modules/ml-spectra-processing/lib/x/xAutoCorrelation.js","../node_modules/ml-spectra-processing/lib/x/xBoxPlot.js","../node_modules/ml-spectra-processing/lib/x/xBoxPlotWithOutliers.js","../node_modules/ml-spectra-processing/lib/x/xCheckLengths.js","../node_modules/ml-spectra-processing/lib/x/xCorrelation.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib/x/xCostMatrix.js","../node_modules/ml-spectra-processing/lib/x/xCumulative.js","../node_modules/ml-spectra-processing/lib/x/xMean.js","../node_modules/ml-spectra-processing/lib/x/xVariance.js","../node_modules/ml-spectra-processing/lib/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xDistributionStats.js","../node_modules/ml-spectra-processing/lib/x/xDivide.js","../node_modules/ml-spectra-processing/lib/x/xEnsureFloat64.js","../node_modules/ml-spectra-processing/lib/x/xGetTargetIndex.js","../node_modules/fft.js/lib/fft.js","../node_modules/ml-spectra-processing/lib/utils/createArray.js","../node_modules/ml-spectra-processing/lib/utils/createFromToArray.js","../node_modules/ml-xsadd/lib-esm/XSadd.js","../node_modules/ml-spectra-processing/lib/utils/createRandomArray.js","../node_modules/ml-spectra-processing/lib/utils/createStepArray.js","../node_modules/ml-spectra-processing/lib/utils/getRescaler.js","../node_modules/ml-spectra-processing/lib/utils/isPowerOfTwo.js","../node_modules/ml-spectra-processing/lib/utils/nextPowerOfTwo.js","../node_modules/ml-spectra-processing/lib/utils/recursiveResolve.js","../node_modules/ml-spectra-processing/lib/utils/recursiveUntypeArrays.js","../node_modules/ml-spectra-processing/lib/utils/stringify.js","../node_modules/ml-spectra-processing/lib/x/xSubtract.js","../node_modules/ml-spectra-processing/lib/utils/calculateAdaptiveWeights.js","../node_modules/ml-spectra-processing/lib/utils/recursiveRemoveEmptyAndNull.js","../node_modules/ml-spectra-processing/lib/x/xHilbertTransform.js","../node_modules/ml-spectra-processing/lib/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib/x/xMinValue.js","../node_modules/ml-spectra-processing/lib/x/xHistogram.js","../node_modules/ml-spectra-processing/lib/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib/x/xMassCenterVectorSimilarity.js","../node_modules/ml-spectra-processing/lib/x/xMaxAbsoluteValue.js","../node_modules/ml-spectra-processing/lib/x/xMaxIndex.js","../node_modules/ml-spectra-processing/lib/x/xMeanAbsoluteError.js","../node_modules/ml-spectra-processing/lib/x/xMeanSquaredError.js","../node_modules/ml-spectra-processing/lib/x/xMeanWeighted.js","../node_modules/ml-spectra-processing/lib/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib/x/xMinIndex.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxDelta.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib/x/xMode.js","../node_modules/ml-spectra-processing/lib/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInv.js","../node_modules/ml-spectra-processing/lib/x/xNoiseSanPlot.js","../node_modules/ml-spectra-processing/lib/x/xNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xNorm.js","../node_modules/ml-spectra-processing/lib/x/xSum.js","../node_modules/ml-spectra-processing/lib/x/xNormed.js","../node_modules/ml-spectra-processing/lib/x/xPadding.js","../node_modules/ml-spectra-processing/lib/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib/x/xRobustDistributionStats.js","../node_modules/ml-spectra-processing/lib/x/xRemoveOutliersIQR.js","../node_modules/ml-spectra-processing/lib/x/xRescale.js","../node_modules/ml-spectra-processing/lib/x/xRolling.js","../node_modules/ml-spectra-processing/lib/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib/x/xRollingMax.js","../node_modules/ml-spectra-processing/lib/x/xRollingMedian.js","../node_modules/ml-spectra-processing/lib/x/xRollingMin.js","../node_modules/ml-spectra-processing/lib/x/xRotate.js","../node_modules/ml-spectra-processing/lib/x/xSampling.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromStep.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromTo.js","../node_modules/ml-spectra-processing/lib/x/xSortAscending.js","../node_modules/ml-spectra-processing/lib/x/xSortDescending.js","../node_modules/ml-spectra-processing/lib/x/xUniqueSorted.js","../node_modules/ml-spectra-processing/lib/matrix/matrixAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCreateEmpty.js","../node_modules/ml-spectra-processing/lib/matrix/matrixApplyNumericalEncoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixAutoCorrelation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixBoxPlot.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCenterZMean.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCholeskySolver.js","../node_modules/ml-spectra-processing/lib/matrix/matrixClone.js","../node_modules/ml-spectra-processing/lib/matrix/matrixColumnsCorrelation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCuthillMckee.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheckRanges.js","../node_modules/ml-spectra-processing/lib/matrix/matrixGetSubMatrix.js","../node_modules/ml-spectra-processing/lib/matrix/matrixHilbertTransform.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixHistogram.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixToArray.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMedian.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNumericalDecoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNumericalEncoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixPQN.js","../node_modules/ml-spectra-processing/lib/matrix/matrixSetSubMatrix.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZPivotRescale.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZRescale.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZRescalePerColumn.js","../node_modules/ml-spectra-processing/lib/matrix/matrixTranspose.js","../node_modules/ml-spectra-processing/lib/utils/addWeights.js","../node_modules/ml-spectra-processing/lib/utils/createSystemMatrix.js","../node_modules/ml-spectra-processing/lib/x/xWhittakerSmoother.js","../node_modules/ml-spectra-processing/lib/reim/reimPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/reim/reimAutoPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/reim/zeroShift.js","../node_modules/ml-spectra-processing/lib/reim/reimFFT.js","../node_modules/ml-spectra-processing/lib/reim/reimZeroFilling.js","../node_modules/ml-spectra-processing/lib/reimArray/reimArrayFFT.js","../node_modules/ml-spectra-processing/lib/reimMatrix/reimMatrixFFT.js","../node_modules/ml-spectra-processing/lib/xy/xyAlign.js","../node_modules/ml-spectra-processing/lib/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyCovariance.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyCumulativeDistributionStatistics.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureFloat64.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib/xy/xyExtract.js","../node_modules/ml-spectra-processing/lib/xy/xyFilter.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterMinYValue.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterTopYValues.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib/xy/xyFindClosestPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyGetNMaxY.js","../node_modules/ml-spectra-processing/lib/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyIntegral.js","../node_modules/ml-spectra-processing/lib/xy/xyIntegration.js","../node_modules/ml-spectra-processing/lib/xy/xyJoinX.js","../node_modules/ml-spectra-processing/lib/xy/xyMassCenter.js","../node_modules/ml-spectra-processing/lib/xy/xyMassCenterVector.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMaximaY.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxMerge.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxY.js","../node_modules/ml-spectra-processing/lib/xy/xyMedian.js","../node_modules/ml-spectra-processing/lib/xy/xyMergeByCentroids.js","../node_modules/ml-spectra-processing/lib/xy/xyMinClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMinimaY.js","../node_modules/ml-spectra-processing/lib/xy/xyMinYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyPeakInfo.js","../node_modules/ml-spectra-processing/lib/xy/xyRealMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyRealMinYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyReduce.js","../node_modules/ml-spectra-processing/lib/xy/xyReduceNonContinuous.js","../node_modules/ml-spectra-processing/lib/xy/xyRolling.js","../node_modules/ml-spectra-processing/lib/xy/xyRollingCircleTransform.js","../node_modules/ml-spectra-processing/lib/xy/xySetYValue.js","../node_modules/ml-spectra-processing/lib/xy/xySortX.js","../node_modules/ml-spectra-processing/lib/xy/xyToXYArray.js","../node_modules/ml-spectra-processing/lib/xy/xyToXYObject.js","../node_modules/ml-spectra-processing/lib/xy/xyUniqueX.js","../node_modules/ml-spectra-processing/lib/xy/xyWeightedMerge.js","../node_modules/ml-spectra-processing/lib/xy2/xy2ToXY.js","../node_modules/ml-spectra-processing/lib/xreim/xreimSortX.js","../node_modules/ml-spectra-processing/lib/xreim/xreimZeroFilling.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlots.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlign.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayWeightedMerge.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlotsToFirst.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlignToFirst.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayMerge.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectCheck.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMaxXPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinXPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectBestPoints.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectJoinX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinMaxValues.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinYPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectNormedY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSlotX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSortX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSumY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectToXY.js","../node_modules/xy-parser/node_modules/ensure-string/lib/index.js","../node_modules/xy-parser/lib/parse.js","../node_modules/xy-parser/lib/index.js","../packages/ms-spectrum/lib/src/getBestPeaks.js","../packages/atom-sorter/lib/src/index.js","../packages/chemical-elements/lib/src/elementsAndIsotopes.js","../packages/chemical-elements/lib/src/elements.js","../packages/chemical-elements/lib/src/elementsAndIsotopesObject.js","../packages/chemical-elements/lib/src/elementsAndStableIsotopes.js","../packages/chemical-elements/lib/src/elementsAndStableIsotopesObject.js","../packages/chemical-elements/lib/src/elementsObject.js","../packages/chemical-elements/lib/src/isotopesObject.js","../packages/chemical-elements/lib/src/stableIsotopesObject.js","../packages/chemical-elements/lib/src/unsaturationsObject.js","../packages/chemical-groups/lib/src/groupsObject.js","../packages/chemical-groups/lib/src/groupsToSequence.js","../packages/mf-parser/lib/src/Kind.js","../packages/mf-parser/lib/src/util/parseCharge.js","../packages/mf-parser/lib/src/parse.js","../packages/mf-parser/lib/src/util/subSuperscript.js","../packages/mf-parser/lib/src/Format.js","../packages/mf-parser/lib/src/util/formatCharge.js","../packages/mf-parser/lib/src/util/improveLinesForDisplay.js","../packages/mf-parser/lib/src/util/toDisplay.js","../packages/mf-parser/lib/src/util/isMF.js","../packages/mf-parser/lib/src/Style.js","../packages/mf-parser/lib/src/util/toHtml.js","../packages/mf-parser/lib/src/ensureCase.js","../packages/mf-parser/lib/src/util/flatten.js","../packages/mf-parser/lib/src/util/getIsotopeRatioInfo.js","../packages/mf-parser/lib/src/util/getEA.js","../packages/mf-parser/lib/src/util/getElements.js","../packages/mf-parser/lib/src/util/getNumberOfIsotopologues.js","../packages/mf-parser/lib/src/util/partToAtoms.js","../packages/mf-parser/lib/src/util/partToMF.js","../packages/mf-parser/lib/src/util/getInfoInternal.js","../packages/mf-parser/lib/src/util/getIsotopesInfo.js","../packages/mf-parser/lib/src/util/partsToDisplay.js","../packages/mf-parser/lib/src/util/partsToMF.js","../packages/mf-parser/lib/src/util/toParts.js","../packages/mf-parser/lib/src/util/toText.js","../packages/mf-parser/lib/src/MFInternal.js","../packages/mf-parser/lib/src/MF.js","../packages/mf-parser/lib/src/parseToHtml.js","../packages/mf-matcher/lib/src/unsaturationMatcher.js","../packages/mf-matcher/lib/src/generalMatcher.js","../packages/mf-utilities/lib/src/ensureUppercaseSequence.js","../packages/mf-utilities/lib/src/getEutrophicationPotential.js","../packages/mf-utilities/lib/src/getMsem.js","../packages/mf-utilities/lib/src/getMsInfo.js","../packages/mf-utilities/lib/src/getRangesForFragment.js","../packages/mf-utilities/lib/src/MFRange.js","../packages/mf-utilities/lib/src/mfDiff.js","../packages/mf-utilities/lib/src/preprocessIonizations.js","../packages/mf-utilities/lib/src/preprocessRanges.js","../packages/mf-matcher/lib/src/msemMatcher.js","../packages/mf-finder/lib/src/TargetMassCache.js","../packages/mf-finder/lib/src/findMFsSync.js","../packages/mf-finder/lib/src/findMFs.js","../packages/mf-finder/lib/src/mfIncluded.js","../packages/ms-spectrum/lib/src/from/fromMonoisotopicMass.js","../packages/ms-spectrum/lib/src/getPeaks.js","../packages/ms-spectrum/lib/src/getFragmentPeaks.js","../packages/ms-spectrum/lib/src/getMassRemainder.js","../node_modules/peaks-similarity/lib-esm/calculateOverlapFromDiff.js","../node_modules/peaks-similarity/lib-esm/checkPeaks.js","../node_modules/peaks-similarity/lib-esm/extract.js","../node_modules/peaks-similarity/lib-esm/getCommonArray.js","../node_modules/ml-stat/array.js","../node_modules/ml-stat/matrix.js","../node_modules/ml-stat/index.js","../node_modules/peaks-similarity/lib-esm/normalize.js","../node_modules/peaks-similarity/lib-esm/commonExtractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/extractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/getIntersection.js","../node_modules/peaks-similarity/lib-esm/index.js","../packages/ms-spectrum/lib/src/getPeakChargeBySimilarity.js","../packages/ms-spectrum/lib/src/getPeaksWithCharge.js","../packages/ms-spectrum/lib/src/isContinuous.js","../node_modules/ml-savitzky-golay-generalized/lib-esm/index.js","../node_modules/ml-gsd/lib/algorithms/getMinMaxIntervals.js","../node_modules/ml-gsd/lib/algorithms/tryMatchOneIntervalWithMinData.js","../node_modules/ml-gsd/lib/algorithms/autoAlgorithm.js","../node_modules/ml-gsd/lib/algorithms/getPeaksFromIntervals.js","../node_modules/ml-gsd/lib/algorithms/xGetCrossZeroPoints.js","../node_modules/ml-gsd/lib/algorithms/firstDerivative.js","../node_modules/ml-gsd/lib/algorithms/secondDerivative.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/generalizedLorentzian/GeneralizedLorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/gaussian2D/Gaussian2D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/getShape2D.js","../node_modules/ml-spectra-fitting/lib/shapes/getSumOfShapes.js","../node_modules/ml-spectra-fitting/lib/util/assert.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-levenberg-marquardt/lib/check_options.js","../node_modules/ml-levenberg-marquardt/lib/error_calculation.js","../node_modules/ml-levenberg-marquardt/lib/gradient_function.js","../node_modules/ml-levenberg-marquardt/lib/step.js","../node_modules/ml-levenberg-marquardt/lib/levenberg_marquardt.js","../node_modules/ml-direct/src/util/antiLowerConvexHull.js","../node_modules/ml-direct/src/index.js","../node_modules/ml-spectra-fitting/lib/util/wrappers/directOptimization.js","../node_modules/ml-spectra-fitting/lib/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib/index.js","../node_modules/ml-gsd/lib/utils/addMissingShape.js","../node_modules/ml-gsd/lib/utils/groupPeaks.js","../node_modules/ml-gsd/lib/post/optimizePeaksWithLogs.js","../node_modules/ml-gsd/lib/post/optimizePeaks.js","../node_modules/ml-gsd/lib/utils/addMissingIDs.js","../node_modules/ml-gsd/lib/post/joinBroadPeaks.js","../node_modules/ml-gsd/lib/post/broadenPeaks.js","../node_modules/ml-gsd/lib/utils/setShape.js","../packages/ms-spectrum/lib/src/peakPicking.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-simple-linear/lib-esm/index.js","../node_modules/ml-regression-power/src/index.js","../packages/ms-spectrum/lib/src/peaksWidth.js","../packages/ms-spectrum/lib/src/Spectrum.js","../packages/ms-spectrum/lib/src/MSComparator.js","../packages/ms-spectrum/lib/src/jsgraph/getPeaksAnnotation.js","../packages/ms-spectrum/lib/src/jsgraph/index.js","../packages/emdb/lib/src/append/appendFragmentsInfo.js","../node_modules/sum-object-keys/lib/index.js","../packages/mf-generator/lib/src/generateMFs.js","../packages/emdb/lib/src/from/fromArray.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getXAtomicNumber.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/isCsp3.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/makeRacemic.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/tagAtom.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsFragments.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getAllAtomsPaths.js","../node_modules/ml-floyd-warshall/lib-esm/index.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getConnectivityMatrix.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getCompactCopyWithoutCustomLabels.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getCanonizedDiaIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsStrings.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodes.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodesForPaths.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getDiaIDsAndInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getHeterotopicSymmetryRanks.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getChiralOrHeterotopicCarbons.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/ensureHeterotopicChiralBonds.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getMoleculeWithH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getXMolecule.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/TopicMolecule.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getSymmetryRanks.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsAndH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/groupDiastereotopicAtomIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getGroupedDiastereotopicAtomIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsFromMolfile.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/toDiastereotopicSVG.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodes.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesAndInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtoms.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtom.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesFromDiastereotopicID.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForPath.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/polymer/createPolymer.js","../packages/mass-fragmentation/node_modules/openchemlib/dist/openchemlib.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/applyFragmentLabels.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/autoLabelDatabase.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/autoLabel.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/combineSmiles.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/node_modules/ensure-string/lib/index.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/getCamelCase.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/getParts.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/parseColumnbProperties.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/parseData.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/parseDwar.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getAtomsInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getImplicitHydrogensCount.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getMF.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getCharge.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getMolfilesMapping.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getUnsaturation.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getNMRHints.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getNextNMRHint.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getProperties.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getAtoms.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbOH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbCOOH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbCHO.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbNH2.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbCN.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbLabileH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/toggleHydrogens.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/toVisualizerMolfile.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getPathAndTorsion.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getPathsInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getShortestPaths.js","../node_modules/papaparse/papaparse.min.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/getMoleculeCreators.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendCSV.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendColor.js","../packages/mass-fragmentation/node_modules/get-value/dist/index.mjs","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendEntries.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../packages/mass-fragmentation/node_modules/sdf-parser/src/getEntriesBoundaries.js","../packages/mass-fragmentation/node_modules/sdf-parser/src/util/getMolecule.js","../packages/mass-fragmentation/node_modules/sdf-parser/src/parse.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendSDF.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendSmilesList.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/pushEntry.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/pushMoleculeInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/noWait.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/search.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/MoleculesDB.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/features/getAtomFeatures.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getRAtomicNumber.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/fragment/fragmentAcyclicSingleBonds.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/appendOCLReaction.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/checkIfExistsOrAddInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/applyOneReactantReactions.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/getFilteredTrees.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/getLeaves.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/getNodes.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/Reactions.js","../packages/mass-fragmentation/lib/src/fragmentAcyclicBonds.js","../packages/mass-fragmentation/lib/src/utils/getRingsInfo.js","../packages/mass-fragmentation/lib/src/utils/getFragmentableRings.js","../packages/mass-fragmentation/lib/src/fragmentRings.js","../packages/mass-fragmentation/lib/src/fragment.js","../packages/mass-fragmentation/lib/src/database/defaultDatabase.js","../packages/mass-fragmentation/lib/src/database/getDatabase.js","../packages/mass-fragmentation/lib/src/utils/getMasses.js","../packages/mass-fragmentation/lib/src/reactionFragmentation.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/jsx-runtime.js","../node_modules/react/cjs/react.production.js","../node_modules/react/index.js","../node_modules/react-dom/cjs/react-dom.production.js","../node_modules/react-dom/index.js","../node_modules/scheduler/cjs/scheduler.production.js","../node_modules/scheduler/index.js","../node_modules/react-dom/cjs/react-dom-client.production.js","../node_modules/react-dom/client.js","../node_modules/react-tree-svg/lib-esm/data/calculatePosition.js","../node_modules/react-tree-svg/lib-esm/components/MarkerDef.utils.js","../node_modules/react-tree-svg/lib-esm/components/MultilineText.js","../node_modules/react-tree-svg/lib-esm/components/Text.js","../node_modules/react-tree-svg/lib-esm/components/Arrow.js","../node_modules/react-tree-svg/lib-esm/data/getArrows.js","../node_modules/react-tree-svg/lib-esm/data/getBoxes.js","../node_modules/react-tree-svg/lib-esm/data/prepareTree.js","../node_modules/react-tree-svg/lib-esm/components/MarkerDef.js","../node_modules/react-tree-svg/lib-esm/components/SVGBoxesTree.js","../node_modules/react-tree-svg/lib-esm/render.js","../node_modules/react-tree-svg/lib-esm/components/Rectangle.js","../node_modules/react-tree-svg/lib-esm/components/SVG.js","../node_modules/react-tree-svg/lib-esm/nodeRenderer/moleculeRenderer.js","../node_modules/react-tree-svg/lib-esm/nodeRenderer/taxonomyRenderer.js","../packages/mass-fragmentation/lib/src/getFragmentationSVG.js","../packages/emdb/lib/src/from/fromMolecules.js","../packages/nucleotide/lib/src/sequenceToMF.js","../packages/nucleotide/lib/src/furanThreeTerm.js","../packages/nucleotide/lib/src/addFiveTerm.js","../packages/nucleotide/lib/src/baseLoss.js","../packages/nucleotide/lib/src/addFiveTermBaseLoss.js","../packages/nucleotide/lib/src/addInternalTerm.js","../packages/nucleotide/lib/src/addThreeTerm.js","../packages/nucleotide/lib/src/addThreeTermBaseLoss.js","../packages/nucleotide/lib/src/generateFragments.js","../packages/emdb/lib/src/from/fromNucleicSequence.js","../packages/peptide/lib/src/aminoAcids.js","../packages/peptide/lib/src/isoElectricPoint.js","../packages/peptide/lib/src/splitPeptide.js","../packages/peptide/lib/src/allowNeutralLoss.js","../packages/peptide/lib/src/getAA.js","../packages/peptide/lib/src/chargePeptide.js","../packages/peptide/lib/src/sequenceToMF.js","../packages/peptide/lib/src/generatePeptideFragments.js","../packages/peptide/lib/src/digestPeptide.js","../packages/peptide/lib/src/index.js","../packages/emdb/lib/src/from/util/fragmentPeptide.js","../packages/emdb/lib/src/from/fromPeptidicSequence.js","../packages/emdb/lib/src/from/fromRange.js","../node_modules/jszip/dist/jszip.min.js","../packages/emdb/lib/src/util/fetchArrayBuffer.js","../packages/emdb/lib/src/loadCommercials.js","../packages/mf-from-google-sheet/lib/src/util/fetchText.js","../packages/mf-from-google-sheet/lib/src/index.js","../packages/emdb/lib/src/loadGoogleSheet.js","../packages/emdb/lib/src/loadKnapSack.js","../packages/emdb/lib/src/search.js","../packages/emdb/lib/src/searchMSEM.js","../node_modules/spectrum-generator/lib/util/addBaseline.js","../node_modules/spectrum-generator/lib/util/addNoise.js","../node_modules/spectrum-generator/lib/SpectrumGenerator.js","../node_modules/spectrum-generator/lib/Spectrum2DGenerator.js","../packages/isotopic-distribution/lib/src/utils/closestPointX.js","../packages/isotopic-distribution/lib/src/utils/joinX.js","../packages/isotopic-distribution/lib/src/utils/multiply.js","../packages/isotopic-distribution/lib/src/utils/power.js","../packages/isotopic-distribution/lib/src/Distribution.js","../packages/isotopic-distribution/lib/src/utils/getDerivedCompositionInfo.js","../packages/isotopic-distribution/lib/src/IsotopicDistribution.js","../packages/emdb/lib/src/searchSimilarity.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-regression-theil-sen/src/index.js","../packages/emdb/lib/src/massShifts.js","../packages/emdb/lib/src/util/fetchJSON.js","../packages/emdb/lib/src/index.js","../packages/mf-from-ea/lib/src/preprocessEARanges.js","../packages/mf-from-ea/lib/src/index.js","../packages/mf-from-atomic-ratio/lib/src/mfFromAtomicRatio.js","../packages/octochemdb/lib/src/utils/appendAllDBRefs.js","../packages/octochemdb/lib/src/utils/appendURLs.js","../packages/octochemdb/lib/src/utils/fetchJSON.js","../packages/octochemdb/lib/src/utils/postFetchJSON.js","../packages/octochemdb/lib/src/utils/includeDBRefs.js","../packages/octochemdb/lib/src/utils/normalizeActivities.js","../packages/octochemdb/lib/src/activeOrNaturalDetails.js","../packages/octochemdb/lib/src/utils/parseMasses.js","../packages/octochemdb/lib/src/utils/getAllowedEMs.js","../packages/octochemdb/lib/src/utils/searchWithIonizations.js","../packages/octochemdb/lib/src/activesOrNaturals.js","../packages/octochemdb/lib/src/activesOrNaturalsByMF.js","../packages/octochemdb/lib/src/compoundsFromMF.js","../packages/octochemdb/lib/src/searchMasses.js","../packages/octochemdb/lib/src/massSpectra.js","../packages/octochemdb/lib/src/mfsFromEMs.js","../packages/octochemdb/lib/src/pubmedCompounds.js","../packages/octochemdb/lib/src/searchInSilicoSpectraByMF.js","../packages/octochemdb/lib/src/searchInSilicoSpectraByMasses.js","../packages/octochemdb/lib/src/OctoChemDB.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/languages.js","../node_modules/@orama/orama/dist/browser/utils.js","../node_modules/@orama/orama/dist/browser/errors.js","../node_modules/@orama/orama/dist/browser/components/defaults.js","../node_modules/@orama/orama/dist/browser/components/internal-document-id-store.js","../node_modules/@orama/orama/dist/browser/components/documents-store.js","../node_modules/@orama/orama/dist/browser/components/plugins.js","../node_modules/@orama/orama/dist/browser/components/hooks.js","../node_modules/@orama/orama/dist/browser/trees/avl.js","../node_modules/@orama/orama/dist/browser/trees/flat.js","../node_modules/@orama/orama/dist/browser/components/levenshtein.js","../node_modules/@orama/orama/dist/browser/trees/radix.js","../node_modules/@orama/orama/dist/browser/trees/bkd.js","../node_modules/@orama/orama/dist/browser/trees/bool.js","../node_modules/@orama/orama/dist/browser/components/algorithms.js","../node_modules/@orama/orama/dist/browser/trees/vector.js","../node_modules/@orama/orama/dist/browser/components/index.js","../node_modules/@orama/orama/dist/browser/components/sorter.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/diacritics.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/english-stemmer.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/index.js","../node_modules/@orama/orama/dist/browser/methods/create.js","../node_modules/@orama/orama/dist/browser/methods/docs.js","../node_modules/@orama/orama/dist/browser/constants.js","../node_modules/@orama/orama/dist/browser/types.js","../node_modules/@orama/orama/dist/browser/components/sync-blocking-checker.js","../node_modules/@orama/orama/dist/browser/methods/insert.js","../node_modules/@orama/orama/dist/browser/methods/remove.js","../node_modules/@orama/orama/dist/browser/components/facets.js","../node_modules/@orama/orama/dist/browser/components/groups.js","../node_modules/@orama/orama/dist/browser/methods/search-fulltext.js","../node_modules/@orama/orama/dist/browser/methods/search-vector.js","../node_modules/@orama/orama/dist/browser/methods/search-hybrid.js","../node_modules/@orama/orama/dist/browser/methods/search.js","../node_modules/@orama/orama/dist/browser/methods/serialization.js","../node_modules/@orama/orama/dist/browser/methods/update.js","../node_modules/@orama/orama/dist/browser/methods/answer-session.js","../packages/octochemdb/lib/src/summarizer/utils/getActivitiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/getPatentsDB.js","../packages/octochemdb/lib/src/summarizer/utils/getPubmedsDB.js","../packages/octochemdb/lib/src/summarizer/utils/getTaxonomiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchActivitiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchPatentsDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchPubmedsDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchTaxonomiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/summarizeEmptyTerms.js","../packages/octochemdb/lib/src/summarizer/ActiveOrNaturalSummarizer.js","../packages/octochemdb/lib/src/taxonomy/taxonomyRanks.js","../packages/octochemdb/lib/src/taxonomy/taxonomyComparator.js","../packages/octochemdb/lib/src/taxonomy/createTaxonomyTree.js","../packages/ms-report/lib/src/appendInternals.js","../packages/ms-report/lib/src/appendResidues.js","../node_modules/@svgdotjs/svg.js/dist/svg.node.cjs","../packages/ms-report/lib/src/getPaper.browser.js","../packages/ms-report/lib/src/appendResiduesPosition.js","../packages/ms-report/lib/src/appendResults.js","../packages/ms-report/lib/src/appendRows.js","../packages/ms-report/lib/src/appendRowsInformation.js","../packages/ms-report/lib/src/draw/addCSS.js","../packages/ms-report/lib/src/draw/addScript.js","../packages/ms-report/lib/src/draw/drawLabel.js","../packages/ms-report/lib/src/draw/drawInternals.js","../packages/ms-report/lib/src/draw/drawReplacements.js","../packages/ms-report/lib/src/draw/drawTerminals.js","../packages/ms-report/lib/src/draw/drawSequence.js","../packages/ms-report/lib/src/sequenceSVG.js","../node_modules/@lukeed/uuid/dist/index.js","../packages/mfs-deconvolution/lib/src/getPeakWidthFct.js","../node_modules/ml-fcnnls/lib-esm/util/sortCollectionSet.js","../node_modules/ml-fcnnls/lib-esm/cssls.js","../node_modules/ml-fcnnls/lib-esm/initialisation.js","../node_modules/ml-fcnnls/lib-esm/util/setDifference.js","../node_modules/ml-fcnnls/lib-esm/optimality.js","../node_modules/ml-fcnnls/lib-esm/util/selection.js","../node_modules/ml-fcnnls/lib-esm/fcnnls.js","../node_modules/ml-fcnnls/lib-esm/fcnnlsVector.js","../packages/mfs-deconvolution/lib/src/utils/splitMatrix.js","../packages/mfs-deconvolution/lib/src/utils/blockFcnnls.js","../packages/mfs-deconvolution/lib/src/mfsDeconvolution.js","../packages/mfs-deconvolution/lib/src/reconstruct.js","../packages/mass-tools/src/index.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","/**\n * Calculates reimAbsolute value of a complex spectrum.\n * @param data - complex spectrum\n * @returns - reimAbsolute value\n */\nexport function reimAbsolute(data) {\n    const length = data.re.length;\n    const re = data.re;\n    const im = data.im;\n    const newArray = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        newArray[i] = Math.hypot(re[i], im[i]);\n    }\n    return newArray;\n}\n//# sourceMappingURL=reimAbsolute.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","/**\n * This function returns an array with absolute values.\n * @param array - array of data\n * @returns - array with absolute values\n */\nexport function xAbsolute(array) {\n    const tmpArray = array.slice();\n    for (let i = 0; i < tmpArray.length; i++) {\n        if (tmpArray[i] < 0)\n            tmpArray[i] *= -1;\n    }\n    return tmpArray;\n}\n//# sourceMappingURL=xAbsolute.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array.\n * @param input - Array containing values\n * @param options\n * @returns - median\n */\nexport function xMedian(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { exact = false } = options || {};\n    const array = input.slice();\n    const middleIndex = calcMiddle(0, array.length - 1);\n    const median = quickSelect(array, middleIndex);\n    if (array.length % 2 === 1 || !exact) {\n        return median;\n    }\n    const medianNext = quickSelect(array, middleIndex + 1);\n    return (median + medianNext) / 2;\n}\nfunction quickSelect(array, middleIndex) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    let currentLow = 0;\n    let currentHigh = 0;\n    while (true) {\n        if (high <= low) {\n            return array[middleIndex];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[middleIndex];\n        }\n        // Find median of low, middle and high items; swap into position low\n        middle = calcMiddle(low, high);\n        if (array[middle] > array[high])\n            swap(array, middle, high);\n        if (array[low] > array[high])\n            swap(array, low, high);\n        if (array[middle] > array[low])\n            swap(array, middle, low);\n        // Swap low item (now in position middle) into position (low+1)\n        swap(array, middle, low + 1);\n        // Nibble from each end towards middle, swapping items when stuck\n        currentLow = low + 1;\n        currentHigh = high;\n        while (true) {\n            do\n                currentLow++;\n            while (array[low] > array[currentLow]);\n            do\n                currentHigh--;\n            while (array[currentHigh] > array[low]);\n            if (currentHigh < currentLow) {\n                break;\n            }\n            swap(array, currentLow, currentHigh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, currentHigh);\n        // Re-set active partition\n        if (currentHigh <= middleIndex) {\n            low = currentLow;\n        }\n        if (currentHigh >= middleIndex) {\n            high = currentHigh - 1;\n        }\n    }\n}\nfunction swap(array, i, j) {\n    const temp = array[j];\n    array[j] = array[i];\n    array[i] = temp;\n}\nfunction calcMiddle(i, j) {\n    return Math.floor((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.js.map","import { xAbsolute } from \"./xAbsolute.js\";\nimport { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median after taking the xAbsolute values of the points.\n * @param array - the array for which we want to calculate the absolute value\n * @returns - median\n */\nexport function xAbsoluteMedian(array) {\n    return xMedian(xAbsolute(array));\n}\n//# sourceMappingURL=xAbsoluteMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - Array to check.\n * @param options - Additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers\n * @param target - target\n * @param options\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = Float64Array.from(array);\n    for (let i = 0; i < array.length; i++) {\n        toReturn[i] = fct(array[i]);\n        if (Number.isNaN(toReturn[i])) {\n            throw new Error(`The callback ${fctString} does not return a number: ${array[i]}`);\n        }\n    }\n    return toReturn;\n}\n//# sourceMappingURL=xApplyFunctionStr.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","import { xMultiply } from \"./xMultiply.js\";\n/**\n * Dot product between two arrays.\n * @param A - First array.\n * @param B - Second array.\n */\nexport function xDotProduct(A, B) {\n    const g = xMultiply(A, B);\n    let result = 0;\n    for (let i = 0; i < A.length; i++) {\n        result += g[i];\n    }\n    return result;\n}\n//# sourceMappingURL=xDotProduct.js.map","import { xDotProduct } from \"./xDotProduct.js\";\n/**\n * Calculates the cross-correlation between 2 arrays\n * @param A - fixed array\n * @param B - sweeping array\n * @param options - Options\n */\nexport function xCrossCorrelation(A, B, options = {}) {\n    const { tau = 1, lag = A.length - 1 } = options;\n    const result = new Float64Array(1 + (2 * lag) / tau);\n    if (A.length === B.length) {\n        const n = B.length;\n        const g = new Float64Array(2 * n);\n        const q = new Float64Array(2 * n);\n        for (let i = 0; i < n; i++) {\n            q[n + i] = B[i];\n        }\n        for (let i = n * 2 - (tau - 1); i > 0; i -= tau) {\n            let k = 0;\n            for (let j = i; j < n * 2; j++) {\n                g[k] = q[j];\n                k++;\n            }\n            const w = [];\n            for (let l = 0; l < n; l++) {\n                w[l] = g[l];\n            }\n            result[(k - (n - lag)) / tau] = xDotProduct(A, w);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCrossCorrelation.js.map","import { xCrossCorrelation } from \"./xCrossCorrelation.js\";\n/**\n * Calculates the auto-correlation of an array\n * @param A - the array for which to calculate the auto-correlation\n * @param options - Options\n */\nexport function xAutoCorrelation(A, options = {}) {\n    return xCrossCorrelation(A, A, options);\n}\n//# sourceMappingURL=xAutoCorrelation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Calculating the box plot of the array\n * This function will interpolate the values and use the inclusive algorithm\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xBoxPlot(array) {\n    xCheck(array);\n    // duplicate the array to avoid modifying the original one\n    // and sort typed array that is much faster than sorting a normal array\n    array = Float64Array.from(array);\n    array.sort();\n    // need to deal with very close points otherwise it yields to incorrect results\n    if (array.at(-1) - array[0] <= Number.EPSILON) {\n        // if one of the 2 numbers is an integer let's take this one\n        const shortTestNumber = String(array[0]).length < String(array.at(-1)).length\n            ? array[0]\n            : array.at(-1);\n        return {\n            min: array[0],\n            q1: shortTestNumber,\n            median: shortTestNumber,\n            q3: shortTestNumber,\n            max: array.at(-1),\n        };\n    }\n    const posQ1 = (array.length - 1) / 4;\n    const posQ3 = (array.length - 1) * (3 / 4);\n    const medianPos = (array.length - 1) / 2;\n    const q1MinProportion = posQ1 % 1;\n    const q3MinProportion = posQ3 % 1;\n    const medianMinProportion = medianPos % 1;\n    return {\n        min: array[0],\n        q1: q1MinProportion === 0\n            ? array[posQ1]\n            : array[posQ1 >> 0] * (1 - q1MinProportion) +\n                array[(posQ1 >> 0) + 1] * q1MinProportion,\n        median: medianMinProportion === 0\n            ? array[medianPos]\n            : array[medianPos >> 0] * (1 - medianMinProportion) +\n                array[(medianPos >> 0) + 1] * medianMinProportion,\n        q3: q3MinProportion === 0\n            ? array[posQ3]\n            : array[posQ3 >> 0] * (1 - q3MinProportion) +\n                array[(posQ3 >> 0) + 1] * q3MinProportion,\n        max: array.at(-1),\n    };\n}\n//# sourceMappingURL=xBoxPlot.js.map","import { xBoxPlot } from \"./xBoxPlot.js\";\n/**\n * Calculating the box plot of the array with outliers\n * Values are outliers if they are below Q1 - 1.5 * IQR or above Q3 + 1.5 * IQR\n * @param array - data\n * @returns - q1, median, q3, min, max, outliers\n */\nexport function xBoxPlotWithOutliers(array) {\n    const boxPlot = xBoxPlot(array);\n    if (boxPlot.max - boxPlot.min <= Number.EPSILON) {\n        return {\n            ...boxPlot,\n            lowerWhisker: boxPlot.min,\n            upperWhisker: boxPlot.max,\n            minWhisker: boxPlot.min,\n            maxWhisker: boxPlot.max,\n            iqr: 0,\n            outliers: [],\n        };\n    }\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const upperWhisker = boxPlot.q3 + 1.5 * iqr;\n    const outliers = [];\n    let minWhisker = boxPlot.median;\n    let maxWhisker = boxPlot.median;\n    for (const value of array) {\n        if (value < lowerWhisker || value > upperWhisker) {\n            outliers.push(value);\n        }\n        else {\n            if (value < minWhisker)\n                minWhisker = value;\n            if (value > maxWhisker)\n                maxWhisker = value;\n        }\n    }\n    const info = {\n        ...boxPlot,\n        lowerWhisker,\n        upperWhisker,\n        minWhisker,\n        maxWhisker,\n        iqr,\n        outliers,\n    };\n    return info;\n}\n//# sourceMappingURL=xBoxPlotWithOutliers.js.map","/**\n * Check that two arrays have the same length.\n * @param array1 - First array.\n * @param array2 - Second array.\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//# sourceMappingURL=xCheckLengths.js.map","/**\n * Calculates the correlation between 2 vectors\n * https://en.wikipedia.org/wiki/Correlation_and_dependence\n * @param A - first array\n * @param B - sencond array\n */\nexport function xCorrelation(A, B) {\n    const n = A.length;\n    let sumA = 0;\n    let sumA2 = 0;\n    let sumB = 0;\n    let sumB2 = 0;\n    let sumAB = 0;\n    for (let i = 0; i < n; i++) {\n        const a = A[i];\n        const b = B[i];\n        sumA += a;\n        sumA2 += a ** 2;\n        sumB += b;\n        sumB2 += b ** 2;\n        sumAB += a * b;\n    }\n    return ((n * sumAB - sumA * sumB) /\n        (Math.sqrt(n * sumA2 - sumA ** 2) * Math.sqrt(n * sumB2 - sumB ** 2)));\n}\n//# sourceMappingURL=xCorrelation.js.map","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray.isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray.isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray.isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray.isAnyArray(array)) {\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { Matrix } from 'ml-matrix';\nconst absDiff = (a, b) => Math.abs(a - b);\n/**\n * Generate a cost matrix from two set of values using the function passed. by default it\n * generate the cost matrix of absolute value of differences.\n * @param rowsArray - Array of values that will represent the rows of the cost matrix.\n * @param columnsArray - Array of values that will represent the columns of the cost matrix.\n * @param options\n * @returns - A matrix instance with dimensions rowsArray.length x columnsArray.length\n */\nexport function xCostMatrix(rowsArray, columnsArray, options = {}) {\n    const { fct = absDiff } = options;\n    const nbRows = rowsArray.length;\n    const nbColumns = columnsArray.length;\n    const result = new Matrix(nbRows, nbColumns);\n    for (let r = 0; r < nbRows; r++) {\n        for (let c = 0; c < nbColumns; c++) {\n            result.set(r, c, fct(rowsArray[r], columnsArray[c]));\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCostMatrix.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculate an array of the same size that is the cumulative values\n * @param array - initial array\n */\nexport function xCumulative(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    const newArray = new Float64Array(array.length);\n    if (array.length === 0)\n        return newArray;\n    newArray[0] = array[0];\n    for (let i = 1; i < array.length; i++) {\n        newArray[i] = newArray[i - 1] + array[i];\n    }\n    return newArray;\n}\n//# sourceMappingURL=xCumulative.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from \"./xMean.js\";\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (const value of values) {\n        const x = value - mean;\n        sqrError += x * x;\n    }\n    if (unbiased) {\n        return sqrError / (values.length - 1);\n    }\n    else {\n        return sqrError / values.length;\n    }\n}\n//# sourceMappingURL=xVariance.js.map","import { xVariance } from \"./xVariance.js\";\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { xBoxPlotWithOutliers } from \"./xBoxPlotWithOutliers.js\";\nimport { xMean } from \"./xMean.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Calculate distribution statistics of an array without providing options\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xDistributionStats(array) {\n    return {\n        ...xBoxPlotWithOutliers(array),\n        mean: xMean(array),\n        sd: xStandardDeviation(array),\n        nb: array.length,\n    };\n}\n//# sourceMappingURL=xDistributionStats.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n *  Returns the targetIndex\n * @param x - array of numbers\n * @param options - options\n */\nexport function xGetTargetIndex(x, options = {}) {\n    const { target, targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            return xFindClosestIndex(x, target);\n        }\n        else {\n            return 0;\n        }\n    }\n    return targetIndex;\n}\n//# sourceMappingURL=xGetTargetIndex.js.map","'use strict';\n\nfunction FFT(size) {\n  this.size = size | 0;\n  if (this.size <= 1 || (this.size & (this.size - 1)) !== 0)\n    throw new Error('FFT size must be a power of two and bigger than 1');\n\n  this._csize = size << 1;\n\n  // NOTE: Use of `var` is intentional for old V8 versions\n  var table = new Array(this.size * 2);\n  for (var i = 0; i < table.length; i += 2) {\n    const angle = Math.PI * i / this.size;\n    table[i] = Math.cos(angle);\n    table[i + 1] = -Math.sin(angle);\n  }\n  this.table = table;\n\n  // Find size's power of two\n  var power = 0;\n  for (var t = 1; this.size > t; t <<= 1)\n    power++;\n\n  // Calculate initial step's width:\n  //   * If we are full radix-4 - it is 2x smaller to give inital len=8\n  //   * Otherwise it is the same as `power` to give len=4\n  this._width = power % 2 === 0 ? power - 1 : power;\n\n  // Pre-compute bit-reversal patterns\n  this._bitrev = new Array(1 << this._width);\n  for (var j = 0; j < this._bitrev.length; j++) {\n    this._bitrev[j] = 0;\n    for (var shift = 0; shift < this._width; shift += 2) {\n      var revShift = this._width - shift - 2;\n      this._bitrev[j] |= ((j >>> shift) & 3) << revShift;\n    }\n  }\n\n  this._out = null;\n  this._data = null;\n  this._inv = 0;\n}\nmodule.exports = FFT;\n\nFFT.prototype.fromComplexArray = function fromComplexArray(complex, storage) {\n  var res = storage || new Array(complex.length >>> 1);\n  for (var i = 0; i < complex.length; i += 2)\n    res[i >>> 1] = complex[i];\n  return res;\n};\n\nFFT.prototype.createComplexArray = function createComplexArray() {\n  const res = new Array(this._csize);\n  for (var i = 0; i < res.length; i++)\n    res[i] = 0;\n  return res;\n};\n\nFFT.prototype.toComplexArray = function toComplexArray(input, storage) {\n  var res = storage || this.createComplexArray();\n  for (var i = 0; i < res.length; i += 2) {\n    res[i] = input[i >>> 1];\n    res[i + 1] = 0;\n  }\n  return res;\n};\n\nFFT.prototype.completeSpectrum = function completeSpectrum(spectrum) {\n  var size = this._csize;\n  var half = size >>> 1;\n  for (var i = 2; i < half; i += 2) {\n    spectrum[size - i] = spectrum[i];\n    spectrum[size - i + 1] = -spectrum[i + 1];\n  }\n};\n\nFFT.prototype.transform = function transform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._transform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.realTransform = function realTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._realTransform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.inverseTransform = function inverseTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 1;\n  this._transform4();\n  for (var i = 0; i < out.length; i++)\n    out[i] /= this.size;\n  this._out = null;\n  this._data = null;\n};\n\n// radix-4 implementation\n//\n// NOTE: Uses of `var` are intentional for older V8 version that do not\n// support both `let compound assignments` and `const phi`\nFFT.prototype._transform4 = function _transform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform2(outOff, off, step);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform4(outOff, off, step);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var quarterLen = len >>> 2;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      // Full case\n      var limit = outOff + quarterLen;\n      for (var i = outOff, k = 0; i < limit; i += 2, k += step) {\n        const A = i;\n        const B = A + quarterLen;\n        const C = B + quarterLen;\n        const D = C + quarterLen;\n\n        // Original values\n        const Ar = out[A];\n        const Ai = out[A + 1];\n        const Br = out[B];\n        const Bi = out[B + 1];\n        const Cr = out[C];\n        const Ci = out[C + 1];\n        const Dr = out[D];\n        const Di = out[D + 1];\n\n        // Middle values\n        const MAr = Ar;\n        const MAi = Ai;\n\n        const tableBr = table[k];\n        const tableBi = inv * table[k + 1];\n        const MBr = Br * tableBr - Bi * tableBi;\n        const MBi = Br * tableBi + Bi * tableBr;\n\n        const tableCr = table[2 * k];\n        const tableCi = inv * table[2 * k + 1];\n        const MCr = Cr * tableCr - Ci * tableCi;\n        const MCi = Cr * tableCi + Ci * tableCr;\n\n        const tableDr = table[3 * k];\n        const tableDi = inv * table[3 * k + 1];\n        const MDr = Dr * tableDr - Di * tableDi;\n        const MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        const T0r = MAr + MCr;\n        const T0i = MAi + MCi;\n        const T1r = MAr - MCr;\n        const T1i = MAi - MCi;\n        const T2r = MBr + MDr;\n        const T2i = MBi + MDi;\n        const T3r = inv * (MBr - MDr);\n        const T3i = inv * (MBi - MDi);\n\n        // Final values\n        const FAr = T0r + T2r;\n        const FAi = T0i + T2i;\n\n        const FCr = T0r - T2r;\n        const FCi = T0i - T2i;\n\n        const FBr = T1r + T3i;\n        const FBi = T1i - T3r;\n\n        const FDr = T1r - T3i;\n        const FDi = T1i + T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n        out[C] = FCr;\n        out[C + 1] = FCi;\n        out[D] = FDr;\n        out[D + 1] = FDi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleTransform2 = function _singleTransform2(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const evenI = data[off + 1];\n  const oddR = data[off + step];\n  const oddI = data[off + step + 1];\n\n  const leftR = evenR + oddR;\n  const leftI = evenI + oddI;\n  const rightR = evenR - oddR;\n  const rightI = evenI - oddI;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = leftI;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = rightI;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleTransform4 = function _singleTransform4(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Ai = data[off + 1];\n  const Br = data[off + step];\n  const Bi = data[off + step + 1];\n  const Cr = data[off + step2];\n  const Ci = data[off + step2 + 1];\n  const Dr = data[off + step3];\n  const Di = data[off + step3 + 1];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T0i = Ai + Ci;\n  const T1r = Ar - Cr;\n  const T1i = Ai - Ci;\n  const T2r = Br + Dr;\n  const T2i = Bi + Di;\n  const T3r = inv * (Br - Dr);\n  const T3i = inv * (Bi - Di);\n\n  // Final values\n  const FAr = T0r + T2r;\n  const FAi = T0i + T2i;\n\n  const FBr = T1r + T3i;\n  const FBi = T1i - T3r;\n\n  const FCr = T0r - T2r;\n  const FCi = T0i - T2i;\n\n  const FDr = T1r - T3i;\n  const FDi = T1i + T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = FAi;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = FCi;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n\n// Real input radix-4 implementation\nFFT.prototype._realTransform4 = function _realTransform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform2(outOff, off >>> 1, step >>> 1);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform4(outOff, off >>> 1, step >>> 1);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var halfLen = len >>> 1;\n    var quarterLen = halfLen >>> 1;\n    var hquarterLen = quarterLen >>> 1;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      for (var i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {\n        var A = outOff + i;\n        var B = A + quarterLen;\n        var C = B + quarterLen;\n        var D = C + quarterLen;\n\n        // Original values\n        var Ar = out[A];\n        var Ai = out[A + 1];\n        var Br = out[B];\n        var Bi = out[B + 1];\n        var Cr = out[C];\n        var Ci = out[C + 1];\n        var Dr = out[D];\n        var Di = out[D + 1];\n\n        // Middle values\n        var MAr = Ar;\n        var MAi = Ai;\n\n        var tableBr = table[k];\n        var tableBi = inv * table[k + 1];\n        var MBr = Br * tableBr - Bi * tableBi;\n        var MBi = Br * tableBi + Bi * tableBr;\n\n        var tableCr = table[2 * k];\n        var tableCi = inv * table[2 * k + 1];\n        var MCr = Cr * tableCr - Ci * tableCi;\n        var MCi = Cr * tableCi + Ci * tableCr;\n\n        var tableDr = table[3 * k];\n        var tableDi = inv * table[3 * k + 1];\n        var MDr = Dr * tableDr - Di * tableDi;\n        var MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        var T0r = MAr + MCr;\n        var T0i = MAi + MCi;\n        var T1r = MAr - MCr;\n        var T1i = MAi - MCi;\n        var T2r = MBr + MDr;\n        var T2i = MBi + MDi;\n        var T3r = inv * (MBr - MDr);\n        var T3i = inv * (MBi - MDi);\n\n        // Final values\n        var FAr = T0r + T2r;\n        var FAi = T0i + T2i;\n\n        var FBr = T1r + T3i;\n        var FBi = T1i - T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n\n        // Output final middle point\n        if (i === 0) {\n          var FCr = T0r - T2r;\n          var FCi = T0i - T2i;\n          out[C] = FCr;\n          out[C + 1] = FCi;\n          continue;\n        }\n\n        // Do not overwrite ourselves\n        if (i === hquarterLen)\n          continue;\n\n        // In the flipped case:\n        // MAi = -MAi\n        // MBr=-MBi, MBi=-MBr\n        // MCr=-MCr\n        // MDr=MDi, MDi=MDr\n        var ST0r = T1r;\n        var ST0i = -T1i;\n        var ST1r = T0r;\n        var ST1i = -T0i;\n        var ST2r = -inv * T3i;\n        var ST2i = -inv * T3r;\n        var ST3r = -inv * T2i;\n        var ST3i = -inv * T2r;\n\n        var SFAr = ST0r + ST2r;\n        var SFAi = ST0i + ST2i;\n\n        var SFBr = ST1r + ST3i;\n        var SFBi = ST1i - ST3r;\n\n        var SA = outOff + quarterLen - i;\n        var SB = outOff + halfLen - i;\n\n        out[SA] = SFAr;\n        out[SA + 1] = SFAi;\n        out[SB] = SFBr;\n        out[SB + 1] = SFBi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleRealTransform2 = function _singleRealTransform2(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const oddR = data[off + step];\n\n  const leftR = evenR + oddR;\n  const rightR = evenR - oddR;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = 0;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleRealTransform4 = function _singleRealTransform4(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Br = data[off + step];\n  const Cr = data[off + step2];\n  const Dr = data[off + step3];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T1r = Ar - Cr;\n  const T2r = Br + Dr;\n  const T3r = inv * (Br - Dr);\n\n  // Final values\n  const FAr = T0r + T2r;\n\n  const FBr = T1r;\n  const FBi = -T3r;\n\n  const FCr = T0r - T2r;\n\n  const FDr = T1r;\n  const FDi = T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = 0;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n","export function createNumberArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\nexport function createDoubleArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\n//# sourceMappingURL=createArray.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options\n * @returns - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiplyUint32(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 class XSadd {\n    random;\n    state;\n    /**\n     * create an instance of XSadd with the specified seed\n     * @param [seed=Date.now()]\n     */\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                    multiplyUint32(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//# sourceMappingURL=XSadd.js.map","import { XSadd } from 'ml-xsadd';\n/**\n * Create a random array of numbers of a specific length.\n * @param options\n * @returns - array of random floats normally distributed\n */\nexport function createRandomArray(options = {}) {\n    const { mean = 0, standardDeviation = 1, length = 1000, range = 1, seed, distribution = 'normal', } = options;\n    const generator = new XSadd(seed);\n    const returnArray = new Float64Array(length);\n    switch (distribution) {\n        case 'normal': {\n            const gaussianGenerator = new GaussianGenerator(mean, standardDeviation, generator);\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = gaussianGenerator.generateGaussian();\n            }\n            break;\n        }\n        case 'uniform': {\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = (generator.random() - 0.5) * range + mean;\n            }\n            break;\n        }\n        default: {\n            throw new Error(`unknown distribution: ${String(distribution)}`);\n        }\n    }\n    return returnArray;\n}\nclass GaussianGenerator {\n    #spare = 0;\n    #hasSpare = false;\n    #mean;\n    #standardDeviation;\n    #generator;\n    constructor(mean, standardDeviation, generator) {\n        this.#mean = mean;\n        this.#standardDeviation = standardDeviation;\n        this.#generator = generator;\n    }\n    generateGaussian() {\n        let val, u, v, s;\n        if (this.#hasSpare) {\n            this.#hasSpare = false;\n            val = this.#spare * this.#standardDeviation + this.#mean;\n        }\n        else {\n            do {\n                u = this.#generator.random() * 2 - 1;\n                v = this.#generator.random() * 2 - 1;\n                s = u * u + v * v;\n            } while (s >= 1 || s === 0);\n            s = Math.sqrt((-2 * Math.log(s)) / s);\n            this.#spare = v * s;\n            this.#hasSpare = true;\n            val = this.#mean + this.#standardDeviation * u * s;\n        }\n        return val;\n    }\n}\n//# sourceMappingURL=createRandomArray.js.map","/**\n * Create an array with numbers starting from \"from\" with step \"step\" of length \"length\".\n * @param options - options\n * @returns - array of distributed numbers with step \"step\" from \"from\"\n */\nexport function createStepArray(options = {}) {\n    const { from = 0, step = 1, length = 1000 } = options;\n    const array = new Float64Array(length);\n    let index = 0;\n    while (index < length) {\n        array[index] = from + step * index;\n        index++;\n    }\n    return array;\n}\n//# sourceMappingURL=createStepArray.js.map","export function getRescaler(options = {}) {\n    const { targetMin = 0, targetMax = 1, clamp = true, algorithmOptions = {}, algorithm = 'linear', } = options;\n    let { originalMin = 0, originalMax = 1 } = options;\n    const convert = getDataConverter(algorithm, algorithmOptions);\n    originalMin = convert(originalMin);\n    originalMax = convert(originalMax);\n    const originalRange = originalMax - originalMin;\n    const targetRange = targetMax - targetMin;\n    return function rescaler(value) {\n        value = convert(value);\n        value = checkRange(value, originalMin, originalMax, clamp);\n        const valueScaled = (value - originalMin) / originalRange;\n        return targetMin + valueScaled * targetRange;\n    };\n}\nfunction getDataConverter(kind = 'linear', options = {}) {\n    return (value) => {\n        switch (kind) {\n            case 'linear':\n                return value;\n            case 'logarithmic':\n                return Math.log10(value);\n            case 'power':\n                return value ** (options.power || 2);\n            default:\n                throw new Error(`Unknown kind ${String(kind)}`);\n        }\n    };\n}\nfunction checkRange(value, min, max, clamp = true) {\n    if (value < min) {\n        if (clamp)\n            return min;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    if (value > max) {\n        if (clamp)\n            return max;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    return value;\n}\n//# sourceMappingURL=getRescaler.js.map","/**\n * Check if a number is a power of two.\n * @param n\n */\nexport function isPowerOfTwo(n) {\n    return n !== 0 && (n & (n - 1)) === 0;\n}\n//# sourceMappingURL=isPowerOfTwo.js.map","/**\n * Get the size of the next power of two.\n * @param n\n */\nexport function nextPowerOfTwo(n) {\n    if (n === 0)\n        return 1;\n    n--;\n    n |= n >> 1;\n    n |= n >> 2;\n    n |= n >> 4;\n    n |= n >> 8;\n    n |= n >> 16;\n    return n + 1;\n}\n//# sourceMappingURL=nextPowerOfTwo.js.map","/**\n * Resolves all promises in an object recursively. The promise with be replaced by the resolved value.\n * The changes are therefore done in-place !\n * @param object\n * @returns\n */\nexport async function recursiveResolve(object) {\n    if (typeof object !== 'object')\n        return object;\n    const promises = [];\n    await appendPromises(object, promises);\n    await Promise.all(promises);\n    return object;\n}\nfunction appendPromises(object, promises) {\n    if (typeof object !== 'object')\n        return object;\n    for (const key in object) {\n        if (typeof object[key].then === 'function') {\n            promises.push(object[key].then((value) => (object[key] = value)));\n        }\n        else if (typeof object[key] === 'object') {\n            appendPromises(object[key], promises);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveResolve.js.map","/**\n * Recursively change the typed arrays to normal arrays\n * The changes are done in-place !\n * @param object\n * @returns\n */\nexport function recursiveUntypeArrays(object) {\n    if (typeof object !== 'object')\n        return object;\n    object = modifier(object);\n    return object;\n}\nfunction modifier(object) {\n    if (typeof object !== 'object')\n        return object;\n    if (ArrayBuffer.isView(object)) {\n        return Array.from(object);\n    }\n    for (const key in object) {\n        if (ArrayBuffer.isView(object[key])) {\n            object[key] = Array.from(object[key]);\n        }\n        else if (typeof object[key] === 'object') {\n            modifier(object[key]);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveUntypeArrays.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Stringify an object and convert all typed arrays to arrays\n * @param object\n * @param replacer\n * @param space\n * @returns\n */\nexport function stringify(object, replacer, space) {\n    const internalReplacer = (key, value) => {\n        if (ArrayBuffer.isView(value)) {\n            value = Array.from(value);\n        }\n        if (replacer) {\n            return replacer(key, value);\n        }\n        return value;\n    };\n    return JSON.stringify(object, internalReplacer, space);\n}\n//# sourceMappingURL=stringify.js.map","import { 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 array1 - the array that will be rotated\n * @param array2 - second array or number\n * @returns array after subtraction\n */\nexport function xSubtract(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xSubtract.js.map","import { xAbsolute } from \"../x/xAbsolute.js\";\nimport { xMedian } from \"../x/xMedian.js\";\nimport { xSubtract } from \"../x/xSubtract.js\";\n/**\n * Calculate the weights based on the control points and the MAD between the original data and the new baseline.\n * MAD (Median Absolute Deviation) is more robust to outliers and\n * the factor (1.4826) makes MAD scaled to be equivalent to the standard deviation for\n * normal distributions. {@link https://en.m.wikipedia.org/wiki/Median_absolute_deviation}.\n * @param yData - The original data.\n * @param baseline - The new baseline calculated.\n * @param weights - The current weights to be updated.\n * @param options - Options for updating weights.\n * @returns new array of weights.\n */\nexport function calculateAdaptiveWeights(yData, baseline, weights, options) {\n    const { controlPoints, factorStd = 3, learningRate = 0.5, minWeight = 0.01, } = options;\n    const absResiduals = xAbsolute(xSubtract(yData, baseline));\n    const medAbsRes = xMedian(absResiduals);\n    const mad = 1.4826 * medAbsRes;\n    const threshold = factorStd * mad;\n    const rawWeights = new Float64Array(absResiduals.length);\n    for (let i = 0; i < absResiduals.length; i++) {\n        rawWeights[i] = Math.exp(-((absResiduals[i] / threshold) ** 2));\n    }\n    let maxWeight = Number.MIN_SAFE_INTEGER;\n    const newWeights = Float64Array.from(weights);\n    const oneMinusLearningRate = 1 - learningRate;\n    for (let i = 0; i < newWeights.length; i++) {\n        if (controlPoints && controlPoints[i] > 0)\n            continue;\n        const weight = Math.max(minWeight, oneMinusLearningRate * weights[i] + learningRate * rawWeights[i]);\n        newWeights[i] = weight;\n        maxWeight = Math.max(maxWeight, weight);\n    }\n    newWeights[0] = maxWeight;\n    newWeights[weights.length - 1] = maxWeight;\n    return newWeights;\n}\n//# sourceMappingURL=calculateAdaptiveWeights.js.map","/*\n * This file is based on the code from \"deep-cleaner\" by darksinge\n * https://github.com/darksinge/deep-cleaner\n *\n * The following license applies:\n *\n * MIT License\n *\n * Copyright (c) 2021 darksinge\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/**\n * Recursively removes empty values from an object. This will also remove empty object or empty array.\n * @param object - the object being cleaned\n * @param options - Optional object with options for cleaning\n * @returns the cleaned object\n */\nexport function recursiveRemoveEmptyAndNull(object, options = {}) {\n    const { propertiesToRemove = [], ...otherOptions } = options;\n    if (propertiesToRemove.length > 0) {\n        for (const removeProperty of propertiesToRemove) {\n            cleanCyclicObject(object, removeProperty, otherOptions);\n        }\n    }\n    else {\n        cleanCyclicObject(object, '', otherOptions);\n    }\n    return object;\n}\n/**\n * cleanCyclicObject Removes any undefined, null, or empty strings, arrays, or objects from `object`.\n *    Uses a `WeakMap` to keep track of objects that have been visited while recursively cleaning\n *    an object to prevent infinite recursive calls.\n * @param object - the object to be cleaned\n * @param propertiesToRemove - Optional key to remove from `object`. If not specified, the default\n *    behavior is to remove \"empty\" values from `object`. A value is considered to be empty if it\n *    is one of the following:\n *      - empty strings\n *      - empty arrays\n *      - empty objects\n *      - values that are null\n *      - values that are undefined\n * @param removeProperty\n * @param options\n */\nfunction cleanCyclicObject(object, removeProperty, options = {}) {\n    const visitedObjects = new WeakMap();\n    function recursiveClean(object, parent, parentKey) {\n        if (isObject(object)) {\n            if (visitedObjects.has(object))\n                return;\n            visitedObjects.set(object, null);\n            for (const key of Reflect.ownKeys(object)) {\n                if ((removeProperty && key === removeProperty) ||\n                    (!removeProperty && isEmpty(object[key]))) {\n                    Reflect.deleteProperty(object, key);\n                }\n                else {\n                    recursiveClean(object[key], object, key);\n                }\n            }\n            if (!removeProperty && isEmpty(object) && parent) {\n                Reflect.deleteProperty(parent, parentKey);\n            }\n        }\n        else if (isArray(object)) {\n            if (visitedObjects.has(object))\n                return;\n            visitedObjects.set(object, null);\n            for (let i = 0; i < object.length; i++) {\n                recursiveClean(object[i], object, i);\n            }\n            for (let i = object.length - 1; i >= 0; i--) {\n                const arrayElement = object[i];\n                if (isEmpty(arrayElement) &&\n                    !(isArray(arrayElement) &&\n                        arrayElement.length === 0 &&\n                        options?.removeEmptyArrayAndObject === false)) {\n                    object.splice(i, 1);\n                }\n            }\n            for (const key of Reflect.ownKeys(object)) {\n                const isIndex = typeof key === 'string' && /^\\d+$/.test(key);\n                if (!isIndex) {\n                    const value = object[key];\n                    if ((removeProperty && key === removeProperty) ||\n                        (!removeProperty && isEmpty(value))) {\n                        Reflect.deleteProperty(object, key);\n                    }\n                    else {\n                        recursiveClean(value, object, key);\n                    }\n                }\n            }\n            if (!removeProperty &&\n                object.length === 0 &&\n                parent &&\n                options?.removeEmptyArrayAndObject) {\n                Reflect.deleteProperty(parent, parentKey);\n            }\n        }\n    }\n    recursiveClean(object);\n}\n/**\n * repr gets the string representation of `arg`\n * @param {} arg - unknown function argument\n * @returns a string representation of `arg`\n */\nfunction repr(arg) {\n    return Object.prototype.toString.call(arg);\n}\n/**\n * Check if the argument is an array\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is an Array, false otherwise\n */\nfunction isArray(arg) {\n    return Array.isArray ? Array.isArray(arg) : repr(arg) === '[object Array]';\n}\n/**\n * Check if the argument is an object\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is an object.\n */\nfunction isObject(arg) {\n    return repr(arg) === '[object Object]';\n}\n/**\n * Check if the argument is a string\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is a String, false otherwise\n */\nfunction isString(arg) {\n    return repr(arg) === '[object String]';\n}\n/**\n * Check if the argument is null.\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is of type Null, false otherwise\n */\nfunction isNull(arg) {\n    return repr(arg) === '[object Null]';\n}\n/**\n * Check if the argument is undefined.\n * @param {} arg - unknown function argument\n * @returns Returns true if `arg` is of type Undefined, false otherwise\n */\nfunction isUndefined(arg) {\n    return arg === undefined;\n}\n/**\n * Check if the argument is null, undefined, an empty string, array, or object.\n * @param {} arg - unknown function argument\n * @returns Returns true if `arg` is an empty string,\n *  array, or object. Also returns true is `arg` is null or\n *  undefined. Returns true otherwise.\n */\nfunction isEmpty(arg) {\n    return (isUndefined(arg) ||\n        isNull(arg) ||\n        (isString(arg) && arg.length === 0) ||\n        (isArray(arg) && arg.length === 0) ||\n        (isObject(arg) && Object.keys(arg).length === 0));\n}\n//# sourceMappingURL=recursiveRemoveEmptyAndNull.js.map","import FFT from 'fft.js';\nimport { isPowerOfTwo, nextPowerOfTwo } from \"../utils/index.js\";\nimport { xCheck } from \"./xCheck.js\";\n/**\n * Performs the Hilbert transform\n * @link https://en.wikipedia.org/wiki/Hilbert_transform\n * @param array - Array containing values\n * @param options\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n */\nexport function xHilbertTransform(array, options = {}) {\n    xCheck(array);\n    const { forceFFT = false } = options;\n    const length = array.length;\n    if (isPowerOfTwo(length)) {\n        return hilbertTransformWithFFT(array);\n    }\n    else if (forceFFT) {\n        return resampling(hilbertTransformWithFFT(resampling(array, nextPowerOfTwo(length))), length);\n    }\n    else {\n        return hilbertTransform(array);\n    }\n}\n/**\n * Performs the discrete Hilbert transform using fast Fourier transform\n * @param array - Array containing values\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n * @see DOI: 10.1109/TAU.1970.1162139 \"Discrete Hilbert transform\"\n */\nfunction hilbertTransformWithFFT(array) {\n    const length = array.length;\n    const fft = new FFT(length);\n    // Single reusable buffer for FFT spectrum\n    const spectrum = new Float64Array(length * 2);\n    // Forward FFT\n    fft.realTransform(spectrum, array);\n    fft.completeSpectrum(spectrum);\n    const half = length >> 1;\n    // Zero Nyquist\n    const j = half << 1;\n    spectrum[j] = 0;\n    spectrum[j + 1] = 0;\n    // Negate negative frequencies\n    for (let j = (half + 1) << 1; j < spectrum.length; j += 2) {\n        spectrum[j] = -spectrum[j];\n        spectrum[j + 1] = -spectrum[j + 1];\n    }\n    const hilbertSignal = new Float64Array(length * 2);\n    fft.inverseTransform(hilbertSignal, spectrum);\n    // Extract imaginary part directly into output\n    const result = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        result[i] = hilbertSignal[i * 2 + 1];\n    }\n    return result;\n}\n/**\n * Performs the discrete Hilbert transform\n * @param array - Array containing values\n * @param options\n * @param options.inClockwise\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n */\nfunction hilbertTransform(array, options = {}) {\n    const { inClockwise = true } = options;\n    const input = [0, ...array, 0];\n    const result = new Float64Array(array.length);\n    for (let k = 1; k < input.length - 1; k++) {\n        let aSum = 0;\n        for (let i = 0; i < k - 1; i++) {\n            const log = Math.log((k - i) / (k - i - 1));\n            aSum += input[i] * log + (input[i + 1] - input[i]) * (-1 + (k - i) * log);\n        }\n        const b = input[k - 1] - input[k + 1];\n        let cSum = 0;\n        for (let i = k + 1; i < input.length - 1; i++) {\n            const log = Math.log((i - k) / (i - k + 1));\n            cSum += input[i] * log + (input[i - 1] - input[i]) * (1 + (i - k) * log);\n        }\n        result[k - 1] = ((inClockwise ? 1 : -1) * (aSum + b + cSum)) / Math.PI;\n    }\n    return result;\n}\n/**\n * Performs resampling of an input array to the desired length employing linear interpolation.\n * @param array - Array containing values.\n * @param length - The length of the resulting array.\n * @returns It returns a new array of the desired length.\n * @link https://en.wikipedia.org/wiki/Sample-rate_conversion\n */\nfunction resampling(array, length) {\n    xCheck(array);\n    const oldLength = array.length;\n    const ratio = (oldLength - 1) / (length - 1);\n    const result = new Float64Array(length);\n    let currentIndex = 0;\n    let floor = Math.floor(currentIndex);\n    let ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n    let diff = currentIndex - floor;\n    for (let i = 0; i < length; i++) {\n        result[i] = array[floor] * (1 - diff) + array[ceil] * diff;\n        currentIndex += ratio;\n        floor = Math.floor(currentIndex);\n        ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n        diff = currentIndex - floor;\n    }\n    return result;\n}\n//# sourceMappingURL=xHilbertTransform.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { xAbsolute } from \"./xAbsolute.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Calculates a histogram of defined number of slots\n * @param array - Array containing values\n * @param options - options\n * @returns - result of the histogram\n */\nexport function xHistogram(array, options = {}) {\n    xCheck(array);\n    const histogram = options.histogram;\n    const { centerX = true, nbSlots = histogram === undefined ? 256 : histogram.x.length, logBaseX, logBaseY, absolute = false, } = options;\n    if (absolute) {\n        array = xAbsolute(array);\n    }\n    if (logBaseX) {\n        array = array.slice();\n        const logOfBase = Math.log10(logBaseX);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = Math.log10(array[i]) / logOfBase;\n        }\n    }\n    const { min = xMinValue(array), max = xMaxValue(array) } = options;\n    const slotSize = (max - min) / (nbSlots + Number.EPSILON);\n    const y = histogram === undefined ? new Float64Array(nbSlots) : histogram.y;\n    const x = histogram === undefined\n        ? Array.from(createFromToArray({\n            from: min + (centerX ? slotSize / 2 : 0),\n            to: max - (centerX ? slotSize / 2 : 0),\n            length: nbSlots,\n        }))\n        : histogram.x;\n    for (const element of array) {\n        const index = Math.max(Math.min(Math.floor((element - min - Number.EPSILON) / slotSize), nbSlots - 1), 0);\n        y[index]++;\n    }\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xHistogram.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - Monotone growing array of number\n * @param options\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotonic.\n * @param array - array of numbers.\n * @returns 1 if monotonic increasing, -1 if monotonic decreasing, 0 if not monotonic.\n */\nexport function xIsMonotonic(array) {\n    if (array.length <= 2) {\n        return 1;\n    }\n    if (array[0] === array[1]) {\n        // maybe a constant series\n        for (let i = 1; i < array.length - 1; i++) {\n            if (array[i] !== array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    if (array[0] < array.at(-1)) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return 0;\n        }\n        return -1;\n    }\n}\n//# sourceMappingURL=xIsMonotonic.js.map","/**\n * Check the similarity between array created by xyMassCenterVector\n * @param array1\n * @param array2\n * @param options\n * @returns\n */\nexport function xMassCenterVectorSimilarity(array1, array2, options = {}) {\n    const { recenter = true, similarityFct = (a, b) => (a === b ? 1 : 0), } = options;\n    const depth1 = getDepth(array1);\n    const depth2 = getDepth(array2);\n    const depth = Math.min(depth1, depth2);\n    // need to copy the array because we shift the data in place if recenter is true\n    if (recenter) {\n        array1 = array1.slice();\n    }\n    let similarity = 0;\n    // we will compare level by level\n    // and recenter the array at each level\n    for (let level = 0; level < depth; level++) {\n        const maxSimilarity = 1 / depth / (1 << level);\n        for (let slot = 0; slot < 1 << level; slot++) {\n            const index = (1 << level) - 1 + slot;\n            const value1 = array1[index];\n            const value2 = array2[index];\n            similarity += similarityFct(value1, value2) * maxSimilarity;\n            if (recenter) {\n                shiftSubTree(array1, depth, level, slot, value2 - value1);\n            }\n        }\n    }\n    return similarity;\n}\nfunction shiftSubTree(array, depth, level, slot, shift) {\n    for (let currentLevel = level; currentLevel < depth; currentLevel++) {\n        const levelSlotShift = slot * (1 << (currentLevel - level));\n        const levelShift = (1 << currentLevel) - 1;\n        const levelSlotSize = 1 << (currentLevel - level);\n        for (let slotIndex = levelSlotShift; slotIndex < levelSlotShift + levelSlotSize; slotIndex++) {\n            const index = levelShift + slotIndex;\n            array[index] += shift;\n        }\n    }\n}\nfunction getDepth(array) {\n    const depth = Math.log2(array.length + 1);\n    if (depth % 1 !== 0) {\n        throw new Error('the array length is not a power of 2 minus 1');\n    }\n    return depth;\n}\n//# sourceMappingURL=xMassCenterVectorSimilarity.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxAbsoluteValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] >= 0) {\n            if (array[i] > maxValue) {\n                maxValue = array[i];\n            }\n        }\n        else if (-array[i] > maxValue) {\n            maxValue = -array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxAbsoluteValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the index of the maximum of the given values\n * @param array - array of numbers\n * @param  options - options\n * @returns - index\n */\nexport function xMaxIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > array[maxIndex]) {\n            maxIndex = i;\n        }\n    }\n    return maxIndex;\n}\n//# sourceMappingURL=xMaxIndex.js.map","import { xCheckLengths } from \"./xCheckLengths.js\";\n/**\n * This function calculates the mean absolute error.\n * @param array1 - first array\n * @param array2 - second array\n */\nexport function xMeanAbsoluteError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += Math.abs(array1[i] - array2[i]);\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanAbsoluteError.js.map","import { xCheckLengths } from \"./xCheckLengths.js\";\n/**\n * This function calculates the mean squared error.\n * @param array1 -first array\n * @param array2 - second array\n */\nexport function xMeanSquaredError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += (array1[i] - array2[i]) ** 2;\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanSquaredError.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the weighted mean value of an array of values.\n * @deprecated please use xyMassCenter\n * @param array - array of numbers\n * @param weights - array of weights\n * @param options - options\n */\nexport function xMeanWeighted(array, weights, options = {}) {\n    xCheck(array, { minLength: 1 });\n    xCheck(weights);\n    if (array.length !== weights.length) {\n        throw new Error('array and weights must have the same length');\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    // normalize weights\n    let sumWeights = 0;\n    let sumValue = array[fromIndex] * weights[fromIndex];\n    sumWeights += weights[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i] * weights[i];\n        sumWeights += weights[i];\n    }\n    if (sumWeights === 0) {\n        // We throw because the case is not well defined\n        throw new Error('sum of weights must be > 0');\n    }\n    return sumValue / sumWeights;\n}\n//# sourceMappingURL=xMeanWeighted.js.map","import { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median absolute deviation (MAD).\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the index of the minimum of the given values.\n * @param array - array of numbers\n * @param options - options\n * @returns - index\n */\nexport function xMinIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < array[minIndex]) {\n            minIndex = i;\n        }\n    }\n    return minIndex;\n}\n//# sourceMappingURL=xMinIndex.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max\n */\nexport function xMinMaxDelta(array) {\n    xCheck(array, {\n        minLength: 2,\n    });\n    let minDelta = array[1] - array[0];\n    let maxDelta = minDelta;\n    for (let i = 0; i < array.length - 1; i++) {\n        const delta = array[i + 1] - array[i];\n        if (delta < minDelta)\n            minDelta = delta;\n        if (delta > maxDelta)\n            maxDelta = delta;\n    }\n    return { min: minDelta, max: maxDelta };\n}\n//# sourceMappingURL=xMinMaxDelta.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (const value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","/**\n * Calculates the mode of an array\n * @param input - Array containing values\n * @returns - mode\n */\nexport function xMode(input) {\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    let maxValue = 0;\n    let maxCount = 0;\n    let count = 0;\n    const counts = {};\n    for (const element of input) {\n        count = counts[element];\n        if (count) {\n            counts[element]++;\n            count++;\n        }\n        else {\n            counts[element] = 1;\n            count = 1;\n        }\n        if (count > maxCount) {\n            maxCount = count;\n            maxValue = element;\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMode.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/* eslint-disable no-loss-of-precision */\n// Coefficients for erfcinv on [0, 0.5]:\nconst Y1 = 8.91314744949340820313e-2;\nconst P1 = [\n    -5.38772965071242932965e-3, 8.22687874676915743155e-3,\n    2.19878681111168899165e-2, -3.65637971411762664006e-2,\n    -1.26926147662974029034e-2, 3.34806625409744615033e-2,\n    -8.36874819741736770379e-3, -5.08781949658280665617e-4,\n];\nconst Q1 = [\n    8.86216390456424707504e-4, -2.33393759374190016776e-3,\n    7.95283687341571680018e-2, -5.27396382340099713954e-2,\n    -7.1228902341542847553e-1, 6.62328840472002992063e-1, 1.56221558398423026363,\n    -1.56574558234175846809, -9.70005043303290640362e-1, 1,\n];\n// Coefficients for erfcinv for 0.5 > 1-x >= 0:\nconst Y2 = 2.249481201171875;\nconst P2 = [\n    -3.67192254707729348546, 2.11294655448340526258e1, 1.7445385985570866523e1,\n    -4.46382324441786960818e1, -1.88510648058714251895e1,\n    1.76447298408374015486e1, 8.37050328343119927838, 1.05264680699391713268e-1,\n    -2.02433508355938759655e-1,\n];\nconst Q2 = [\n    1.72114765761200282724, -2.26436933413139721736e1, 1.08268667355460159008e1,\n    4.85609213108739935468e1, -2.01432634680485188801e1,\n    -2.86608180499800029974e1, 3.9713437953343869095, 6.24264124854247537712, 1,\n];\n// Coefficients for erfcinv for sqrt( -log(1-x)):\nconst Y3 = 8.07220458984375e-1;\nconst P3 = [\n    -6.81149956853776992068e-10, 2.85225331782217055858e-8,\n    -6.79465575181126350155e-7, 2.14558995388805277169e-3,\n    2.90157910005329060432e-2, 1.42869534408157156766e-1,\n    3.37785538912035898924e-1, 3.87079738972604337464e-1,\n    1.17030156341995252019e-1, -1.63794047193317060787e-1,\n    -1.31102781679951906451e-1,\n];\nconst Q3 = [\n    1.105924229346489121e-2, 1.52264338295331783612e-1, 8.48854343457902036425e-1,\n    2.59301921623620271374, 4.77846592945843778382, 5.38168345707006855425,\n    3.46625407242567245975, 1,\n];\nconst Y4 = 9.3995571136474609375e-1;\nconst P4 = [\n    2.66339227425782031962e-12, -2.30404776911882601748e-10,\n    4.60469890584317994083e-6, 1.57544617424960554631e-4,\n    1.87123492819559223345e-3, 9.50804701325919603619e-3,\n    1.85573306514231072324e-2, -2.22426529213447927281e-3,\n    -3.50353787183177984712e-2,\n];\nconst Q4 = [\n    7.64675292302794483503e-5, 2.63861676657015992959e-3,\n    3.41589143670947727934e-2, 2.20091105764131249824e-1,\n    7.62059164553623404043e-1, 1.3653349817554063097, 1,\n];\nconst Y5 = 9.8362827301025390625e-1;\nconst P5 = [\n    9.9055709973310326855e-17, -2.81128735628831791805e-14,\n    4.62596163522878599135e-9, 4.49696789927706453732e-7,\n    1.49624783758342370182e-5, 2.09386317487588078668e-4,\n    1.05628862152492910091e-3, -1.12951438745580278863e-3,\n    -1.67431005076633737133e-2,\n];\nconst Q5 = [\n    2.82243172016108031869e-7, 2.75335474764726041141e-5,\n    9.64011807005165528527e-4, 1.60746087093676504695e-2,\n    1.38151865749083321638e-1, 5.91429344886417493481e-1, 1,\n];\n/**\n * Polyval.\n * @param c - Array of Number.\n * @param x - Number.\n * @returns Number.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - Number.\n * @param v - Number.\n * @param P - Array of polynomial coefficients.\n * @param Q - Array of polynomial coefficients.\n * @param Y - Number.\n * @returns Rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - Input value.\n * @returns Evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from \"./erfcinv.js\";\n/**\n * Applies a simple normalization inverse transformation to the input data.\n * @param data - The input array of numbers to be transformed.\n * @param options - Optional parameters for the transformation.\n * @returns A new Float64Array containing the transformed data.\n */\nexport function simpleNormInv(data, options = {}) {\n    const { magnitudeMode = false } = options;\n    const result = new Float64Array(data.length);\n    if (magnitudeMode) {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -Math.sqrt(-2 * Math.log(1 - data[i]));\n        }\n    }\n    else {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -1 * Math.SQRT2 * erfcinv(2 * data[i]);\n        }\n    }\n    return result;\n}\n/**\n * Convenience wrapper for single number processing by simpleNormInv function.\n * @param data - The number to be normalized.\n * @param options - The options for the normalization process.\n * @returns The normalized number.\n */\nexport function simpleNormInvNumber(data, options = {}) {\n    return simpleNormInv([data], options)[0];\n}\n//# sourceMappingURL=simpleNormInv.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from \"../utils/index.js\";\nimport { simpleNormInvNumber } from \"./utils/simpleNormInv.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * Determine noise level by san plot methodology (https://doi.org/10.1002/mrc.4882)\n * @param array - real or magnitude spectra data.\n * @param options - options\n * @returns noise level\n */\nexport function xNoiseSanPlot(array, options = {}) {\n    const { mask, cutOff, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = input.slice(firstNegativeValueIndex);\n    const cutOffDist = cutOff || determineCutOff(signPositive, { magnitudeMode });\n    const pIndex = Math.floor(signPositive.length * cutOffDist);\n    const initialNoiseLevelPositive = signPositive[pIndex];\n    const skyPoint = signPositive[0];\n    let initialNoiseLevelNegative;\n    if (signNegative.length > 0) {\n        const nIndex = Math.floor(signNegative.length * (1 - cutOffDist));\n        initialNoiseLevelNegative = -1 * signNegative[nIndex];\n    }\n    else {\n        initialNoiseLevelNegative = 0;\n    }\n    let noiseLevelPositive = initialNoiseLevelPositive;\n    let noiseLevelNegative = initialNoiseLevelNegative;\n    let cloneSignPositive = signPositive.slice();\n    let cloneSignNegative = signNegative.slice();\n    let cutOffSignalsIndexPlus = 0;\n    let cutOffSignalsIndexNeg = 2;\n    if (refine) {\n        let cutOffSignals = noiseLevelPositive * factorStd;\n        cutOffSignalsIndexPlus = signPositive.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexPlus > -1) {\n            cloneSignPositive = signPositive.slice(cutOffSignalsIndexPlus);\n            noiseLevelPositive =\n                cloneSignPositive[Math.floor(cloneSignPositive.length * cutOffDist)];\n        }\n        cutOffSignals = noiseLevelNegative * factorStd;\n        cutOffSignalsIndexNeg = signNegative.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexNeg > -1) {\n            cloneSignNegative = signNegative.slice(cutOffSignalsIndexNeg);\n            noiseLevelNegative =\n                cloneSignPositive[Math.floor(cloneSignNegative.length * (1 - cutOffDist))];\n        }\n    }\n    const correctionFactor = -simpleNormInvNumber(cutOffDist / 2, {\n        magnitudeMode,\n    });\n    let effectiveCutOffDist, refinedCorrectionFactor;\n    if (refine && cutOffSignalsIndexPlus > -1) {\n        effectiveCutOffDist =\n            (cutOffDist * cloneSignPositive.length + cutOffSignalsIndexPlus) /\n                (cloneSignPositive.length + cutOffSignalsIndexPlus);\n        refinedCorrectionFactor =\n            -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n        noiseLevelPositive /= refinedCorrectionFactor;\n        if (cutOffSignalsIndexNeg > -1) {\n            effectiveCutOffDist =\n                (cutOffDist * cloneSignNegative.length + cutOffSignalsIndexNeg) /\n                    (cloneSignNegative.length + cutOffSignalsIndexNeg);\n            refinedCorrectionFactor =\n                -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n            if (noiseLevelNegative !== 0) {\n                noiseLevelNegative /= refinedCorrectionFactor;\n            }\n        }\n    }\n    else {\n        noiseLevelPositive /= correctionFactor;\n        noiseLevelNegative /= correctionFactor;\n    }\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n    };\n}\n/**\n * Determines the optimal cut-off point for a given array of positive numbers.\n * @param signPositive - An array of positive numbers.\n * @param options - Optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - If true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - An object specifying the range and step for consideration.\n * @param options.considerList.from - The starting point of the range. Default is 0.5.\n * @param options.considerList.step - The step size for the range. Default is 0.1.\n * @param options.considerList.to - The ending point of the range. Default is 0.9.\n * @returns The optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    //generate a list of values for\n    const cutOff = [];\n    const indexMax = signPositive.length - 1;\n    for (let i = 0.01; i <= 0.99; i += 0.01) {\n        const index = Math.round(indexMax * i);\n        const value = -signPositive[index] / simpleNormInvNumber(i / 2, { magnitudeMode });\n        cutOff.push([i, value]);\n    }\n    let minKi = Number.MAX_SAFE_INTEGER;\n    const { from, to, step } = considerList;\n    const delta = step / 2;\n    let whereToCutStat = 0.5;\n    for (let i = from; i <= to; i += step) {\n        const floor = i - delta;\n        const top = i + delta;\n        const elementsOfCutOff = cutOff.filter((e) => e[0] < top && e[0] > floor);\n        let averageValue = 0;\n        for (const element of elementsOfCutOff) {\n            averageValue += Math.abs(element[1]);\n        }\n        let kiSqrt = 0;\n        for (const element of elementsOfCutOff) {\n            kiSqrt += (element[1] - averageValue) ** 2;\n        }\n        if (kiSqrt < minKi) {\n            minKi = kiSqrt;\n            whereToCutStat = i;\n        }\n    }\n    return whereToCutStat;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - The input array of numbers to be processed.\n * @param options - An optional object containing configuration options.\n * @param options.logBaseY - The logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - An object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns An object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - The input array to be scaled.\n * @param options - An optional object containing scaling options.\n * @param options.logBaseY - If provided, the array values will be scaled using the logarithm of this base.\n * @returns An object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - The input array of numbers to be processed.\n * @param options - An object containing the following properties:\n *   - scaleFactor: A number by which to scale each element of the array.\n *   - mask: An optional array of the same length as the input array, where\n *           elements corresponding to `true` values will be excluded from processing.\n * @param options.scaleFactor\n * @param options.mask\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    input.sort();\n    input.reverse();\n    return input;\n}\n//# sourceMappingURL=xNoiseSanPlot.js.map","import { xMedianAbsoluteDeviation } from \"./xMedianAbsoluteDeviation.js\";\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","/**\n * This function calculate the norm of a vector.\n * @example xNorm([3, 4]) -> 5\n * @param array - array\n * @returns - calculated norm\n */\nexport function xNorm(array) {\n    let result = 0;\n    for (const element of array) {\n        result += element ** 2;\n    }\n    return Math.sqrt(result);\n}\n//# sourceMappingURL=xNorm.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Calculate the sum of the values\n * @param array - Object that contains property x (an ordered increasing array) and y (an array).\n * @param options - Options.\n * @returns XSum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xSum } from \"./xSum.js\";\n/**\n * Divides the data with either the sum, the absolute sum or the maximum of the data\n * @param input - Array containing values\n * @param options - options\n * @returns - normalized data\n */\nexport function xNormed(input, options = {}) {\n    const { algorithm = 'absolute', value = 1 } = options;\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n    switch (algorithm) {\n        case 'absolute': {\n            const absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / absoluteSumValue;\n            }\n            return output;\n        }\n        case 'max': {\n            const currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            const factor = value / currentMaxValue;\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] * factor;\n            }\n            return output;\n        }\n        case 'sum': {\n            const sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / sumFactor;\n            }\n            return output;\n        }\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\nfunction absoluteSum(input) {\n    let sumValue = 0;\n    for (const value of input) {\n        sumValue += Math.abs(value);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * This function pads an array\n *s\n * @param array - the array that will be padded\n * @param options - options\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { xBoxPlotWithOutliers } from \"./xBoxPlotWithOutliers.js\";\nimport { xMean } from \"./xMean.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Calculate distribution statistics of an array without providing options. Statistics\n * like sd and mean are calculated after removing outliers.\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xRobustDistributionStats(array) {\n    const boxPlot = xBoxPlotWithOutliers(array);\n    let filteredArray;\n    if (boxPlot.max - boxPlot.min <= Number.EPSILON) {\n        return {\n            ...boxPlot,\n            mean: boxPlot.median,\n            sd: array.length === 1 ? Number.NaN : 0,\n            nb: array.length,\n        };\n    }\n    if (boxPlot.outliers.length === 0) {\n        filteredArray = array;\n    }\n    else {\n        filteredArray = new Float64Array(array.length - boxPlot.outliers.length);\n        let j = 0;\n        for (const element of array) {\n            if (element >= boxPlot.min && element <= boxPlot.max) {\n                filteredArray[j++] = element;\n            }\n        }\n    }\n    return {\n        ...boxPlot,\n        mean: xMean(filteredArray),\n        sd: xStandardDeviation(filteredArray),\n        nb: filteredArray.length,\n    };\n}\n//# sourceMappingURL=xRobustDistributionStats.js.map","import { isAnyArray } from 'is-any-array';\nimport { xBoxPlot } from \"./xBoxPlot.js\";\n/**\n * Remove the outliers from the array\n * Based on 1.5 IQR\n * @param array - data\n * @returns - trimmed data\n */\nexport function xRemoveOutliersIQR(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    if (array.length === 0) {\n        return array;\n    }\n    const boxPlot = xBoxPlot(array);\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const higherWhisker = boxPlot.q3 + 1.5 * iqr;\n    if (boxPlot.min >= lowerWhisker && boxPlot.max <= higherWhisker) {\n        return array;\n    }\n    const filteredArray = [];\n    for (const element of array) {\n        if (element >= lowerWhisker && element <= higherWhisker) {\n            filteredArray.push(element);\n        }\n    }\n    return filteredArray;\n}\n//# sourceMappingURL=xRemoveOutliersIQR.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xPadding } from \"./xPadding.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xMean } from \"./xMean.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","import { xMaxValue } from \"./xMaxValue.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a maximum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMax(array, options = {}) {\n    return xRolling(array, xMaxValue, options);\n}\n//# sourceMappingURL=xRollingMax.js.map","import { xMedian } from \"./xMedian.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { xMinValue } from \"./xMinValue.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a minimum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMin(array, options = {}) {\n    return xRolling(array, xMinValue, options);\n}\n//# sourceMappingURL=xRollingMin.js.map","/**\n * This function performs a circular shift to an array.\n * Positive values of shifts will shift to the right and negative values will do to the left.\n * @example xRotate([1,2,3,4],1) -> [4,1,2,3]\n * @example xRotate([1,2,3,4],-1) -> [2,3,4,1]\n * @param array - array\n * @param shift - shift\n * @returns - rotated array\n */\nexport function xRotate(array, shift) {\n    shift = shift % array.length;\n    if (shift < 0)\n        shift += array.length;\n    const result = new Float64Array(array.length);\n    result.set(array.slice(array.length - shift));\n    result.set(array.slice(0, array.length - shift), shift);\n    return result;\n}\n//# sourceMappingURL=xRotate.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Sample within the array\n * @param array - array from which to sample\n * @param options - options\n * @returns - array with evenly spaced elements\n * @link https://en.wikipedia.org/wiki/Sampling_(signal_processing)\n */\nexport function xSampling(array, options = {}) {\n    const { length = 10 } = options;\n    xCheck(array);\n    if (length === array.length) {\n        return Float64Array.from(array);\n    }\n    else if (length > array.length) {\n        throw new RangeError('length must be smaller than the array length');\n    }\n    else {\n        return downSampling(array, length);\n    }\n}\n/**\n * Downsample within the array\n * @param array - array from which to sample\n * @param length\n * @returns - array with evenly spaced elements\n * @link https://en.wikipedia.org/wiki/Downsampling_(signal_processing)\n */\nfunction downSampling(array, length) {\n    const returnArray = new Float64Array(length);\n    const delta = (array.length - 1) / (length - 1);\n    for (let i = 0; i < length; i++) {\n        returnArray[i] = array[Math.round(i * delta)];\n    }\n    return returnArray;\n}\n//# sourceMappingURL=xSampling.js.map","import { createNumberArray } from \"../utils/index.js\";\nexport function xSequentialFillFromStep(parameters, options = {}) {\n    const { from, step, size } = parameters;\n    const { ArrayConstructor = Float64Array } = options;\n    const result = createNumberArray(ArrayConstructor, size);\n    for (let i = 0; i < size; i++) {\n        result[i] = from + i * step;\n    }\n    return result;\n}\n//# sourceMappingURL=xSequentialFillFromStep.js.map","import { xSequentialFillFromStep } from \"./xSequentialFillFromStep.js\";\nexport function xSequentialFillFromTo(parameters, options = {}) {\n    const { from, to, size } = parameters;\n    const step = (to - from) / (size - 1);\n    return xSequentialFillFromStep({ from, step, size }, options);\n}\n//# sourceMappingURL=xSequentialFillFromTo.js.map","/**\n * Function that sorts arrays or Float64Arrays in ascending order in place !\n * This method is optimized for typed arrays.\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortAscending(array) {\n    if (ArrayBuffer.isView(array)) {\n        array.sort();\n        return array;\n    }\n    else if (Array.isArray(array)) {\n        array.sort((a, b) => a - b);\n        return array;\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortAscending.js.map","/**\n * Function that sorts arrays or Float64Arrays in descending order\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortDescending(array) {\n    if (ArrayBuffer.isView(array)) {\n        array.sort();\n        array.reverse();\n        return array;\n    }\n    else if (Array.isArray(array)) {\n        array.sort((a, b) => b - a);\n        return array;\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortDescending.js.map","/**\n * XUniqueSorted.\n * @param array - array of numbers\n * @returns - sorted array\n */\nexport function xUniqueSorted(array) {\n    const unique = Float64Array.from(new Set(array));\n    unique.sort();\n    return unique;\n}\n//# sourceMappingURL=xUniqueSorted.js.map","import { xMedian } from \"../x/index.js\";\n/**\n * Returns the median of the absolute matrix.\n * @param matrix\n */\nexport function matrixAbsoluteMedian(matrix) {\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            const value = matrix[row][column];\n            flatten[currentRow + column] = Math.abs(value);\n        }\n    }\n    return xMedian(flatten);\n}\n//# sourceMappingURL=matrixAbsoluteMedian.js.map","import { createNumberArray } from \"../utils/index.js\";\n/**\n * Create a new matrix based on the size of the current one or by using specific dimensions.\n * @param options\n */\nexport function matrixCreateEmpty(options) {\n    const { matrix, nbRows = matrix?.length || 1, nbColumns = matrix?.[0].length || 1, ArrayConstructor = Float64Array, } = options;\n    const newMatrix = [];\n    for (let row = 0; row < nbRows; row++) {\n        newMatrix.push(createNumberArray(ArrayConstructor, nbColumns));\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCreateEmpty.js.map","import { xMaxValue } from \"../x/index.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Numerically encodes the strings in the matrix with an encoding dictionary.\n * @param matrixInitial - Original matrix before encoding.\n * @param dictionary - Dictionary against which to do the encoding.\n * @returns - Encoded matrix.\n */\nexport function matrixApplyNumericalEncoding(matrixInitial, dictionary) {\n    const matrix = matrixCreateEmpty({\n        nbRows: matrixInitial.length,\n        nbColumns: matrixInitial[0].length,\n        ArrayConstructor: Array,\n    });\n    const arrayOfValues = [];\n    for (const key in dictionary) {\n        arrayOfValues.push(dictionary[key]);\n    }\n    let k = xMaxValue(arrayOfValues);\n    for (const row of matrix) {\n        for (let j = 0; j < matrix[0].length; j++) {\n            if (typeof row[j] === 'string') {\n                if (row[j] in dictionary) {\n                    row[j] = dictionary[row[j]];\n                }\n                else {\n                    k++;\n                    dictionary[row[j]] = k;\n                    row[j] = k;\n                }\n            }\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixApplyNumericalEncoding.js.map","import { xCorrelation } from \"../x/index.js\";\nexport function matrixAutoCorrelation(matrix, index = 0) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 2) {\n        throw new Error('can not calculate info if matrix contains less than 2 rows');\n    }\n    const targetArray = new Float64Array(nbRows);\n    const sourceArray = new Float64Array(nbRows);\n    const result = new Float64Array(nbColumns);\n    for (let j = 0; j < nbRows; j++) {\n        targetArray[j] = matrix[j][index];\n    }\n    for (let i = 0; i < nbColumns; i++) {\n        for (let j = 0; j < nbRows; j++) {\n            sourceArray[j] = matrix[j][i];\n        }\n        result[i] = xCorrelation(targetArray, sourceArray);\n    }\n    return result;\n}\n//# sourceMappingURL=matrixAutoCorrelation.js.map","export function matrixBoxPlot(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 5) {\n        throw new Error('can not calculate info if matrix contains less than 5 rows');\n    }\n    const info = {\n        q1: new Float64Array(nbColumns),\n        median: new Float64Array(nbColumns),\n        q3: new Float64Array(nbColumns),\n        min: Float64Array.from(matrix[0]),\n        max: Float64Array.from(matrix.at(-1)),\n    };\n    const columnArray = new Float64Array(matrix.length);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            columnArray[row] = matrix[row][column];\n        }\n        let q1max = 0;\n        let q3min = 0;\n        if (nbRows % 2 === 1) {\n            // odd\n            const middle = (nbRows - 1) / 2;\n            info.median[column] = columnArray[middle];\n            q1max = middle - 1;\n            q3min = middle + 1;\n        }\n        else {\n            // even\n            q3min = nbRows / 2;\n            q1max = q3min - 1;\n            info.median[column] = (columnArray[q1max] + columnArray[q3min]) / 2;\n        }\n        if (q1max % 2 === 0) {\n            info.q1[column] = columnArray[q1max / 2];\n            info.q3[column] = columnArray[(nbRows + q3min - 1) / 2];\n        }\n        else {\n            info.q1[column] =\n                (columnArray[(q1max + 1) / 2] + columnArray[(q1max - 1) / 2]) / 2;\n            const middleOver = (columnArray.length + q3min) / 2;\n            info.q3[column] =\n                (columnArray[middleOver] + columnArray[middleOver - 1]) / 2;\n        }\n    }\n    return info;\n}\n//# sourceMappingURL=matrixBoxPlot.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Center mean of matrix columns.\n * @param matrix - matrix [rows][cols]\n */\nexport function matrixCenterZMean(matrix) {\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let mean = 0;\n        for (let row = 0; row < nbRows; row++) {\n            mean += matrix[row][column];\n        }\n        mean /= nbRows;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] - mean;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCenterZMean.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n/**\n * Solves a system of linear equations using the Cholesky decomposition method.\n * It is a direct conversion to TS from {@link https://github.com/scijs/cholesky-solve}\n * @param nonZerosArray - The matrix in triplet form (array of arrays), where each sub-array contains three elements: row index, column index, and value.\n * @param dimension - The order of the matrix (number of rows/columns).\n * @param permutationEncoded - Optional permutation array. If provided, it will be used to permute the matrix.\n * @returns A function that takes a right-hand side vector `b` and returns the solution vector `x`, or `null` if the decomposition fails.\n */\nexport function matrixCholeskySolver(nonZerosArray, dimension, permutationEncoded) {\n    if (permutationEncoded) {\n        const pinv = new Array(dimension);\n        for (let k = 0; k < dimension; k++) {\n            pinv[permutationEncoded[k]] = k;\n        }\n        const mt = new Array(nonZerosArray.length);\n        for (let a = 0; a < nonZerosArray.length; ++a) {\n            const [r, c, value] = nonZerosArray[a];\n            const [ar, ac] = [pinv[r], pinv[c]];\n            mt[a] = ac < ar ? [ac, ar, value] : [ar, ac, value];\n        }\n        nonZerosArray = mt;\n    }\n    else {\n        permutationEncoded = [];\n        for (let i = 0; i < dimension; ++i) {\n            permutationEncoded[i] = i;\n        }\n    }\n    const ap = new Array(dimension + 1);\n    const ai = new Array(nonZerosArray.length);\n    const ax = new Array(nonZerosArray.length);\n    const lnz = [];\n    for (let i = 0; i < dimension; ++i) {\n        lnz[i] = 0;\n    }\n    for (const a of nonZerosArray) {\n        lnz[a[1]]++;\n    }\n    ap[0] = 0;\n    for (let i = 0; i < dimension; ++i) {\n        ap[i + 1] = ap[i] + lnz[i];\n    }\n    const colOffset = [];\n    for (let a = 0; a < dimension; ++a) {\n        colOffset[a] = 0;\n    }\n    for (const e of nonZerosArray) {\n        const col = e[1];\n        const adr = ap[col] + colOffset[col];\n        ai[adr] = e[0];\n        ax[adr] = e[2];\n        colOffset[col]++;\n    }\n    const d = new Array(dimension);\n    const y = new Array(dimension);\n    const lp = new Array(dimension + 1);\n    const parent = new Array(dimension);\n    const lnzArray = new Array(dimension);\n    const flag = new Array(dimension);\n    const pattern = new Array(dimension);\n    const bp1 = new Array(dimension);\n    const x = new Array(dimension);\n    ldlSymbolic(dimension, ap, ai, lp, parent, lnzArray, flag);\n    const lx = new Array(lp[dimension]);\n    const li = new Array(lp[dimension]);\n    const result = ldlNumeric(dimension, ap, ai, ax, lp, parent, lnzArray, li, lx, d, y, pattern, flag);\n    if (result === dimension) {\n        return (b) => {\n            ldlPerm(dimension, bp1, b, permutationEncoded);\n            ldlLsolve(dimension, bp1, lp, li, lx);\n            ldlDsolve(dimension, bp1, d);\n            ldlLTsolve(dimension, bp1, lp, li, lx);\n            ldlPermt(dimension, x, bp1, permutationEncoded);\n            return x;\n        };\n    }\n    else {\n        return null;\n    }\n}\nfunction ldlSymbolic(dimension, ap, ai, lp, parent, lnz, flag) {\n    for (let k = 0; k < dimension; k++) {\n        parent[k] = -1;\n        flag[k] = k;\n        lnz[k] = 0;\n        const kk = k;\n        const p2 = ap[kk + 1];\n        for (let permutationEncoded = ap[kk]; permutationEncoded < p2; permutationEncoded++) {\n            let i = ai[permutationEncoded];\n            if (i < k) {\n                for (; flag[i] !== k; i = parent[i]) {\n                    if (parent[i] === -1)\n                        parent[i] = k;\n                    lnz[i]++;\n                    flag[i] = k;\n                }\n            }\n        }\n    }\n    lp[0] = 0;\n    for (let k = 0; k < dimension; k++) {\n        lp[k + 1] = lp[k] + lnz[k];\n    }\n}\nfunction ldlNumeric(dimension, ap, ai, ax, lp, parent, lnz, li, lx, d, y, pattern, flag) {\n    let yi, lKi;\n    let i, k, permutationEncoded, kk, p2, len, top;\n    for (k = 0; k < dimension; k++) {\n        y[k] = 0;\n        top = dimension;\n        flag[k] = k;\n        lnz[k] = 0;\n        kk = k;\n        p2 = ap[kk + 1];\n        for (permutationEncoded = ap[kk]; permutationEncoded < p2; permutationEncoded++) {\n            i = ai[permutationEncoded];\n            if (i <= k) {\n                y[i] += ax[permutationEncoded];\n                for (len = 0; flag[i] !== k; i = parent[i]) {\n                    pattern[len++] = i;\n                    flag[i] = k;\n                }\n                while (len > 0)\n                    pattern[--top] = pattern[--len];\n            }\n        }\n        d[k] = y[k];\n        y[k] = 0;\n        for (; top < dimension; top++) {\n            i = pattern[top];\n            yi = y[i];\n            y[i] = 0;\n            p2 = lp[i] + lnz[i];\n            for (permutationEncoded = lp[i]; permutationEncoded < p2; permutationEncoded++) {\n                y[li[permutationEncoded]] -= lx[permutationEncoded] * yi;\n            }\n            lKi = yi / d[i];\n            d[k] -= lKi * yi;\n            li[permutationEncoded] = k;\n            lx[permutationEncoded] = lKi;\n            lnz[i]++;\n        }\n        if (d[k] === 0)\n            return k;\n    }\n    return dimension;\n}\nfunction ldlLsolve(dimension, x, lp, li, lx) {\n    let j, permutationEncoded, p2;\n    for (j = 0; j < dimension; j++) {\n        p2 = lp[j + 1];\n        for (permutationEncoded = lp[j]; permutationEncoded < p2; permutationEncoded++) {\n            x[li[permutationEncoded]] -= lx[permutationEncoded] * x[j];\n        }\n    }\n}\nfunction ldlDsolve(dimension, x, d) {\n    for (let j = 0; j < dimension; j++) {\n        x[j] /= d[j];\n    }\n}\nfunction ldlLTsolve(dimension, x, lp, li, lx) {\n    let j, permutationEncoded, p2;\n    for (j = dimension - 1; j >= 0; j--) {\n        p2 = lp[j + 1];\n        for (permutationEncoded = lp[j]; permutationEncoded < p2; permutationEncoded++) {\n            x[j] -= lx[permutationEncoded] * x[li[permutationEncoded]];\n        }\n    }\n}\nfunction ldlPerm(dimension, x, b, permutationEncoded) {\n    let j;\n    for (j = 0; j < dimension; j++) {\n        x[j] = b[permutationEncoded[j]];\n    }\n}\nfunction ldlPermt(dimension, x, b, permutationEncoded) {\n    let j;\n    for (j = 0; j < dimension; j++) {\n        x[permutationEncoded[j]] = b[j];\n    }\n}\n//# sourceMappingURL=matrixCholeskySolver.js.map","/**\n * Clone a matrix.\n * @param matrix\n */\nexport function matrixClone(matrix) {\n    return matrix.map((row) => row.slice(0));\n}\n//# sourceMappingURL=matrixClone.js.map","import { Matrix } from 'ml-matrix';\nimport { xCorrelation } from \"../x/index.js\";\n/**\n * Calculates a correlation matrix based on the columns of the initial matrix.\n * @param A - matrix [rows][cols]\n */\nexport function matrixColumnsCorrelation(A) {\n    const B = new Matrix(A).transpose();\n    const result = [];\n    for (let i = 0; i < B.rows; i++) {\n        result.push(new Float64Array(B.rows));\n    }\n    for (let i = 0; i < B.rows; i++) {\n        for (let j = i; j < B.rows; j++) {\n            const correlation = xCorrelation(B.getRow(i), B.getRow(j));\n            result[i][j] = correlation;\n            result[j][i] = correlation;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixColumnsCorrelation.js.map","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2013 Mikola Lysenko\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * The reverse Cuthill-Mckee method is a fast and effective preconditioner for reducing the bandwidth of sparse linear systems.\n * When solving a positive semidefinite linear system using Cholesky factorization, it greatly reduces fill-in.\n * It is a direct conversion to TS from {@link github.com/mikolalysenko/cuthill-mckee}\n * @param list - lower triangular non zeros from a symmetric sparse matrix.\n * @param dimension - matrix dimension\n * @returns A Float64Array where the value at each index represents the new position of the node\n *          in the bandwidth-reduced ordering.\n */\nexport function matrixCuthillMckee(list, dimension) {\n    const adj = new Array(dimension);\n    const visited = new Array(dimension).fill(false);\n    for (let i = 0; i < dimension; ++i) {\n        adj[i] = [];\n    }\n    for (const l of list) {\n        adj[l[0]].push(l[1]);\n    }\n    const toVisit = new Float64Array(dimension);\n    let eol = 0;\n    let ptr = 0;\n    for (let i = 0; i < dimension; ++i) {\n        if (visited[i]) {\n            continue;\n        }\n        toVisit[eol++] = i;\n        visited[i] = true;\n        while (ptr < eol) {\n            const v = toVisit[ptr++];\n            const nbhd = Float64Array.from(adj[v]);\n            nbhd.sort();\n            for (const u of nbhd) {\n                if (visited[u]) {\n                    continue;\n                }\n                visited[u] = true;\n                toVisit[eol++] = u;\n            }\n        }\n    }\n    const result = new Float64Array(dimension);\n    for (let i = 0; i < dimension; ++i) {\n        result[toVisit[i]] = i;\n    }\n    return result;\n}\n//# sourceMappingURL=matrixCuthillMckee.js.map","/**\n * Checks if the specified submatrix boundaries are within the valid range of the given matrix.\n * @param matrix - The matrix to check the boundaries against.\n * @param boundaries - The boundaries of the submatrix.\n * @throws {RangeError} If any of the specified boundaries are out of the matrix's range.\n */\nexport function matrixCheckRanges(matrix, boundaries) {\n    const { startRow, endRow, startColumn, endColumn } = boundaries;\n    if (startRow > endRow ||\n        startColumn > endColumn ||\n        startRow < 0 ||\n        startRow >= matrix.length ||\n        endRow < 0 ||\n        endRow >= matrix.length ||\n        startColumn < 0 ||\n        startColumn >= matrix[0].length ||\n        endColumn < 0 ||\n        endColumn >= matrix[0].length) {\n        throw new RangeError('submatrix indices are out of range');\n    }\n}\n//# sourceMappingURL=matrixCheckRanges.js.map","import { matrixCheckRanges } from \"./matrixCheckRanges.js\";\n/**\n * Get a subMatrix from matrix, the function checks if the subMatrix\n * lies within the dimensions of the matrix.\n * @param matrix - The original matrix from which the subMatrix will be extracted.\n * @param options - Options to define the subMatrix boundaries and duplication behavior.\n * @returns The subMatrix extracted from the original matrix.\n */\nexport function matrixGetSubMatrix(matrix, options) {\n    const { startRow, endRow, startColumn, endColumn, duplicate = true, } = options;\n    matrixCheckRanges(matrix, { startColumn, startRow, endColumn, endRow });\n    const nbRows = endRow - startRow + 1;\n    const subMatrix = [];\n    if (duplicate) {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].slice(startColumn, endColumn + 1));\n        }\n    }\n    else {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].subarray(startColumn, endColumn + 1));\n        }\n    }\n    return subMatrix;\n}\n//# sourceMappingURL=matrixGetSubMatrix.js.map","import FFT from 'fft.js';\nimport { isPowerOfTwo } from \"../utils/index.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Apply the Hilbert transform to each row of a real-valued matrix, reusing a\n * single FFT instance for all rows to avoid repeated instantiation overhead.\n * All rows must have the same length, which must be a power of two.\n * @param rows - array of real-valued Float64Array rows\n * @param options - options\n * @returns array of Hilbert-transformed Float64Array rows\n * @see DOI: 10.1109/TAU.1970.1162139 \"Discrete Hilbert transform\"\n */\nexport function matrixHilbertTransform(rows, options = {}) {\n    if (rows.length === 0)\n        return [];\n    const size = rows[0].length;\n    if (!isPowerOfTwo(size)) {\n        throw new RangeError(`Row length must be a power of two. Got ${size}.`);\n    }\n    for (let j = 1; j < rows.length; j++) {\n        if (rows[j].length !== size) {\n            throw new RangeError(`All rows must have the same length. Expected ${size} but row ${j} has length ${rows[j].length}.`);\n        }\n    }\n    // Single FFT instance reused across all rows\n    const fft = new FFT(size);\n    // Multiplier computed once — identical for every row of the same length\n    const half = size >> 1;\n    // Shared working buffers reused across all rows\n    const fftResult = new Float64Array(size * 2);\n    const hilbertSignal = new Float64Array(size * 2);\n    const { output = matrixCreateEmpty({\n        nbRows: rows.length,\n        nbColumns: size,\n    }), } = options;\n    for (let j = 0; j < rows.length; j++) {\n        const row = rows[j];\n        fft.realTransform(fftResult, row);\n        fft.completeSpectrum(fftResult);\n        const idx = half << 1;\n        fftResult[idx] = 0;\n        fftResult[idx + 1] = 0;\n        // Negate negative frequencies\n        for (let c = (half + 1) << 1; c < fftResult.length; c += 2) {\n            fftResult[c] = -fftResult[c];\n            fftResult[c + 1] = -fftResult[c + 1];\n        }\n        fft.inverseTransform(hilbertSignal, fftResult);\n        const result = output[j];\n        for (let i = 0; i < size; i++) {\n            result[i] = hilbertSignal[i * 2 + 1];\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=matrixHilbertTransform.js.map","/**\n * Get min and max of the absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrixMinMaxAbsoluteZ requires at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            let value = matrix[row][column];\n            if (value < 0)\n                value *= -1;\n            if (value < min)\n                min = value;\n            if (value > max)\n                max = value;\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxAbsoluteZ.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","import { xHistogram } from \"../x/index.js\";\nimport { matrixMinMaxAbsoluteZ } from \"./matrixMinMaxAbsoluteZ.js\";\nimport { matrixMinMaxZ } from \"./matrixMinMaxZ.js\";\n/**\n * Calculates a histogram of defined number of slots.\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - Result of the histogram.\n */\nexport function matrixHistogram(matrix, options = {}) {\n    let { min, max } = options;\n    const { absolute, logBaseX, logBaseY, histogram, nbSlots, centerX } = options;\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least one column and one row');\n    }\n    if (min === undefined || max === undefined) {\n        const minMax = absolute\n            ? matrixMinMaxAbsoluteZ(matrix)\n            : matrixMinMaxZ(matrix);\n        if (min === undefined) {\n            min =\n                logBaseX && minMax.min\n                    ? Math.log(minMax.min) / Math.log(logBaseX)\n                    : minMax.min;\n        }\n        if (max === undefined) {\n            max =\n                logBaseX && minMax.max\n                    ? Math.log(minMax.max) / Math.log(logBaseX)\n                    : minMax.max;\n        }\n    }\n    const xHistogramOptions = {\n        histogram,\n        nbSlots,\n        centerX,\n        absolute,\n        logBaseX,\n        // Skip logBaseY as it's handled below.\n        min,\n        max,\n    };\n    const finalHistogram = xHistogram(matrix[0], xHistogramOptions);\n    xHistogramOptions.histogram = finalHistogram;\n    const nbRows = matrix.length;\n    for (let row = 1; row < nbRows; row++) {\n        xHistogram(matrix[row], xHistogramOptions);\n    }\n    const y = finalHistogram.y;\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return finalHistogram;\n}\n//# sourceMappingURL=matrixHistogram.js.map","/**\n * Returns the max absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            const value = Math.abs(matrix[row][column]);\n            if (value > max)\n                max = value;\n        }\n    }\n    return max;\n}\n//# sourceMappingURL=matrixMaxAbsoluteZ.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Convert a matrix to a flat Float64Array.\n * @param matrix\n */\nexport function matrixToArray(matrix) {\n    matrixCheck(matrix);\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            flatten[currentRow + column] = matrix[row][column];\n        }\n    }\n    return flatten;\n}\n//# sourceMappingURL=matrixToArray.js.map","import { xMedian } from \"../x/index.js\";\nimport { matrixToArray } from \"./matrixToArray.js\";\n/**\n * Returns the median of the matrix.\n * @param matrix\n */\nexport function matrixMedian(matrix) {\n    return xMedian(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixMedian.js.map","import { xNoiseStandardDeviation } from \"../x/index.js\";\nimport { matrixToArray } from \"./matrixToArray.js\";\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise.\n * @param matrix\n * @returns Noise level corresponding to one standard deviation.\n */\nexport function matrixNoiseStandardDeviation(matrix) {\n    return xNoiseStandardDeviation(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixNoiseStandardDeviation.js.map","import { matrixClone } from \"./matrixClone.js\";\n/**\n * Numerically decodes the matrix using the dictionary.\n * @param matrixInitial\n * @param dictionary - dictionary against which to do the encoding\n * @returns - decoded matrix\n */\nexport function matrixNumericalDecoding(matrixInitial, dictionary) {\n    const matrix = matrixClone(matrixInitial);\n    const invertedDictionary = swap(dictionary);\n    for (const row of matrix) {\n        for (let j = 0; j < matrix[0].length; j++) {\n            const value = row[j];\n            if (typeof value === 'number' && value in invertedDictionary) {\n                row[j] = invertedDictionary[value];\n            }\n        }\n    }\n    return matrix;\n}\nfunction swap(dictionary) {\n    const ret = {};\n    for (const key in dictionary) {\n        ret[dictionary[key]] = key;\n    }\n    return ret;\n}\n//# sourceMappingURL=matrixNumericalDecoding.js.map","import { matrixClone } from \"./matrixClone.js\";\n/**\n * Numerically encodes the strings in the matrix and returns an encoding dictionary which can be used to encode other matrices\n * @param matrixInitial - original matrix before encoding\n * @returns - dictionary from string to number\n */\nexport function matrixNumericalEncoding(matrixInitial) {\n    const matrix = matrixClone(matrixInitial);\n    const nRows = matrix.length;\n    const nColumns = matrix[0].length;\n    let k = 0;\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'number' && value > k) {\n                k = value;\n            }\n        }\n    }\n    const dictCategoricalToNumerical = {};\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'string') {\n                if (value in dictCategoricalToNumerical) {\n                    matrix[i][j] = dictCategoricalToNumerical[value];\n                }\n                else {\n                    k++;\n                    dictCategoricalToNumerical[value] = k;\n                    matrix[i][j] = k;\n                }\n            }\n        }\n    }\n    return { matrix: matrix, dictCategoricalToNumerical };\n}\n//# sourceMappingURL=matrixNumericalEncoding.js.map","import { Matrix } from 'ml-matrix';\nimport { xMedian } from \"../x/index.js\";\n/**\n * Performs a Probabilistic quotient normalization (PQN) over the dataset to account dilution based in median spectrum.\n * Dieterle, F., Ross, A., Schlotterbeck, G., & Senn, H. (2006). Probabilistic quotient normalization as robust method to account for dilution of complex biological mixtures. Application in 1H NMR metabonomics. Analytical chemistry, 78(13), 4281-4290.\n * DOI: 10.1021/ac051632c\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - {data: Normalized dataset, medianOfQuotients: The median of quotients of each variables}\n */\nexport function matrixPQN(matrix, options = {}) {\n    const { max = 100 } = options;\n    const matrixB = new Matrix(matrix);\n    for (let i = 0; i < matrixB.rows; i++) {\n        const normalizationFactor = matrixB.getRowVector(i).norm('frobenius') / max;\n        const row = matrixB.getRowVector(i).div(normalizationFactor);\n        matrixB.setRow(i, row);\n    }\n    const referenceSpectrum = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const currentVariable = matrixB.getColumn(i);\n        referenceSpectrum.push(xMedian(currentVariable));\n    }\n    const medianOfQuotients = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const quotients = matrixB.getColumnVector(i).div(referenceSpectrum[i]);\n        medianOfQuotients.push(xMedian(quotients.getColumn(0)));\n    }\n    for (let i = 0; i < matrixB.rows; i++) {\n        matrixB.mulRow(i, 1 / medianOfQuotients[i]);\n    }\n    return {\n        data: matrixB.to2DArray(),\n        medianOfQuotients,\n    };\n}\n//# sourceMappingURL=matrixPQN.js.map","import { matrixCheckRanges } from \"./matrixCheckRanges.js\";\n/**\n * Set in-place a subMatrix to matrix, the function check if the subMatrix\n * lies into the dimensions of matrix.\n * @param matrix - matrix that will receive the new element values.\n * @param subMatrix - matrix with equal or less size than matrix.\n * @param startRow - row index in matrix for the first row in subMatrix.\n * @param startColumn - column index in matrix for the first column in subMatrix.\n * @returns The modified `matrix`.\n */\nexport function matrixSetSubMatrix(matrix, subMatrix, startRow, startColumn) {\n    const endRow = startRow + subMatrix.length - 1;\n    const endColumn = startColumn + subMatrix[0].length - 1;\n    matrixCheckRanges(matrix, { startRow, endRow, startColumn, endColumn });\n    for (let i = 0; i < subMatrix.length; i++) {\n        for (let j = 0; j < subMatrix[0].length; j++) {\n            matrix[startRow + i][startColumn + j] = subMatrix[i][j];\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixSetSubMatrix.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nimport { matrixMaxAbsoluteZ } from \"./matrixMaxAbsoluteZ.js\";\n/**\n * Rescale a matrix around 0 taking into account the absolute max value.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZPivotRescale(matrix, options = {}) {\n    const { max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const currentMax = matrixMaxAbsoluteZ(matrix);\n    for (let column = 0; column < nbColumns; column++) {\n        const factor = max / currentMax;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] * factor;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZPivotRescale.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nimport { matrixMinMaxZ } from \"./matrixMinMaxZ.js\";\n/**\n * Rescale a matrix between min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescale(matrix, options = {}) {\n    const { min = 0, max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const { min: currentMin, max: currentMax } = matrixMinMaxZ(matrix);\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescale.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Rescale the matrix per column for which we get the min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescalePerColumn(matrix, options = {}) {\n    const { min = 0, max = 1 } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let currentMin = matrix[0][column];\n        let currentMax = matrix[0][column];\n        for (let row = 1; row < nbRows; row++) {\n            if (matrix[row][column] < currentMin)\n                currentMin = matrix[row][column];\n            if (matrix[row][column] > currentMax)\n                currentMax = matrix[row][column];\n        }\n        const factor = (max - min) / (currentMax - currentMin);\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescalePerColumn.js.map","import { matrixCheck } from \"./matrixCheck.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nexport function matrixTranspose(matrix, options = {}) {\n    matrixCheck(matrix);\n    const { ArrayConstructor } = options;\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    // Create new matrix with swapped dimensions\n    const result = matrixCreateEmpty({\n        nbColumns: nbRows,\n        nbRows: nbColumns,\n        ArrayConstructor,\n    });\n    for (let i = 0; i < nbRows; i++) {\n        for (let j = 0; j < nbColumns; j++) {\n            result[j][i] = matrix[i][j];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixTranspose.js.map","/**\n * add the provided weights to a particular given system matrix (lD'D) in the triplet form and y data. This function is not general\n * it assumes that diagonal coefficients are in the even indexes, it is the case of the matrix generated by createSystemMatrix function.\n * It simulates the matrix operation W + lD'D and Wy.\n * @param leftHandSide - The original system matrix to be updated, a lower triangular non-zeros of the system matrix (lambda D'D).\n * @param rightHandSide - The original vector to be updated.\n * @param weights - The weights to apply to the system matrix and vector.\n * @returns An object that contains the news left and right hand-side of the system.\n */\nexport function addWeights(leftHandSide, rightHandSide, weights) {\n    const nbPoints = rightHandSide.length;\n    const l = nbPoints - 1;\n    const newLeftHandSide = new Array(leftHandSide.length);\n    const newRightHandSide = new Float64Array(nbPoints);\n    for (let i = 0; i < l; i++) {\n        const w = weights[i];\n        const diag = i * 2;\n        const next = diag + 1;\n        newLeftHandSide[diag] = leftHandSide[diag].slice();\n        newLeftHandSide[next] = leftHandSide[next].slice();\n        newRightHandSide[i] = rightHandSide[i] * w;\n        newLeftHandSide[diag][2] += w;\n    }\n    newRightHandSide[l] = rightHandSide[l] * weights[l];\n    newLeftHandSide[l * 2] = leftHandSide[l * 2].slice();\n    newLeftHandSide[l * 2][2] += weights[l];\n    return {\n        leftHandSide: newLeftHandSide,\n        rightHandSide: newRightHandSide,\n    };\n}\n//# sourceMappingURL=addWeights.js.map","/**\n * Generates a lower triangular non-zeros of the first order smoother matrix (lambda D'D) where D is the derivate of the identity matrix\n * this function in combination with addWeights function can obtain (Q = W + lambda D'D) a penalized least square of Whittaker smoother,\n * it also generates a permutation encoded array.\n * @param dimension - The number of points in the matrix.\n * @param lambda - The factor of smoothness .\n * @returns An object containing the lower triangular non-zero elements of the matrix\n * and the permutation encoded array.\n * @property lowerTriangularNonZeros - The lower triangular non-zero elements of the matrix in triplet form.\n * @property permutationEncodedArray - The permutation encoded array generated using the Cuthill-McKee algorithm.\n */\nexport function createSystemMatrix(dimension, lambda) {\n    const upperTriangularNonZeros = [];\n    const last = dimension - 1;\n    for (let i = 0; i < last; i++) {\n        upperTriangularNonZeros.push([i, i, lambda * 2], [i, i + 1, -1 * lambda]);\n    }\n    upperTriangularNonZeros[0][2] = lambda;\n    upperTriangularNonZeros.push([last, last, lambda]);\n    return upperTriangularNonZeros;\n}\n//# sourceMappingURL=createSystemMatrix.js.map","import { matrixCholeskySolver } from \"../matrix/index.js\";\nimport { addWeights } from \"../utils/addWeights.js\";\nimport { createSystemMatrix } from \"../utils/createSystemMatrix.js\";\nimport { calculateAdaptiveWeights } from \"../utils/index.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\nimport { xMultiply } from \"./xMultiply.js\";\n/**\n * Computes the baseline points for the given data using an iterative smoothing algorithm.\n * @param yData - The input data array.\n * @param options - The options for baseline computation.\n * @returns - The computed baseline points.\n */\nexport function xWhittakerSmoother(yData, options = {}) {\n    const { lambda = 100, maxIterations = 100, tolerance = 1e-6, factorStd = 3, learningRate = 0.5, minWeight = 0.01, } = options;\n    const size = yData.length;\n    // eslint-disable-next-line prefer-const\n    let { controlPoints, weights } = getWeightsAndControlPoints(yData, options);\n    const prevBaseline = new Float64Array(size);\n    let iteration = 0;\n    let delta = Infinity;\n    let baseline = xEnsureFloat64(yData);\n    const upperTriangularNonZeros = createSystemMatrix(size, lambda);\n    while (iteration < maxIterations && delta > tolerance) {\n        const { leftHandSide, rightHandSide } = addWeights(upperTriangularNonZeros, yData, weights);\n        const cho = matrixCholeskySolver(leftHandSide, size);\n        if (!cho) {\n            return baseline;\n        }\n        const newBaseline = cho(rightHandSide);\n        weights = calculateAdaptiveWeights(yData, newBaseline, weights, {\n            controlPoints,\n            minWeight,\n            learningRate,\n            factorStd,\n        });\n        delta = calculateDelta(newBaseline, prevBaseline, size);\n        prevBaseline.set(newBaseline);\n        baseline = xEnsureFloat64(newBaseline);\n        iteration++;\n    }\n    return baseline;\n}\n/**\n * Calculates the delta between the current and previous baseline.\n * @param baseline - The current baseline array.\n * @param prevBaseline - The previous baseline array.\n * @param n - The length of the arrays.\n * @returns - The calculated delta value.\n */\nfunction calculateDelta(baseline, prevBaseline, n) {\n    let sum = 0;\n    for (let i = 0; i < n; i++) {\n        sum += (baseline[i] - prevBaseline[i]) ** 2;\n    }\n    return Math.sqrt(sum / n);\n}\n/**\n * Retrieves the control points and weights for the given data, the weights are modified multiplication of controlPoints if it exists.\n * @param  y - The input data array.\n * @param  options - The options for control points and weights.\n * @returns - The control points and modified weights.\n */\nfunction getWeightsAndControlPoints(y, options = {}) {\n    const { length } = y;\n    const { controlPoints } = options;\n    const { weights = Float64Array.from({ length }).fill(1) } = options;\n    if (controlPoints && controlPoints.length !== y.length) {\n        throw new RangeError('controlPoints should match the length with X');\n    }\n    else if (weights.length !== y.length) {\n        throw new RangeError('weights should match the length with X');\n    }\n    return {\n        weights: controlPoints ? xMultiply(weights, controlPoints) : weights,\n        controlPoints,\n    };\n}\n/**\n * @deprecated Use xWhittakerSmoother instead.\n * TODO: Remove in next major version.\n */\nexport const xWhitakerSmoother = xWhittakerSmoother;\n//# sourceMappingURL=xWhittakerSmoother.js.map","/**\n * Phase correction filter.\n * @param data - complex spectrum\n * @param phi0 - Angle in radians for zero order phase correction\n * @param phi1 - Angle in radians for first order phase correction\n * @param options\n * @returns - returns a new object {re:[], im:[]}\n */\nexport function reimPhaseCorrection(data, phi0 = 0, phi1 = 0, options = {}) {\n    const { reverse = false } = options;\n    phi0 = Number.isFinite(phi0) ? phi0 : 0;\n    phi1 = Number.isFinite(phi1) ? phi1 : 0;\n    const re = data.re;\n    const im = data.im;\n    const length = data.re.length;\n    let firstAngle = phi0;\n    let delta = phi1 / length;\n    if (reverse) {\n        delta *= -1;\n        firstAngle += phi1;\n    }\n    const alpha = 2 * Math.sin(delta / 2) ** 2;\n    const beta = Math.sin(delta);\n    let cosTheta = Math.cos(firstAngle);\n    let sinTheta = Math.sin(firstAngle);\n    const newRe = new Float64Array(length);\n    const newIm = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        newRe[i] = re[i] * cosTheta - im[i] * sinTheta;\n        newIm[i] = im[i] * cosTheta + re[i] * sinTheta;\n        // calculate angles i+1 from i\n        const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n        const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n        cosTheta = newCosTheta;\n        sinTheta = newSinTheta;\n    }\n    return { re: newRe, im: newIm };\n}\n//# sourceMappingURL=reimPhaseCorrection.js.map","import { xNoiseSanPlot } from \"../x/index.js\";\nimport { reimAbsolute } from \"./reimAbsolute.js\";\nimport { reimPhaseCorrection } from \"./reimPhaseCorrection.js\";\n/**\n * Implementation of the algorithm for automatic phase correction: A robust, general automatic phase\n * correction algorithm for high-resolution NMR data. 10.1002/mrc.4586\n * @param data - complex spectrum\n * @param options - options\n */\nexport function reimAutoPhaseCorrection(data, options = {}) {\n    const { magnitudeMode = true, minRegSize = 30, factorNoise = 3, maxDistanceToJoin = 256, reverse = false, } = options;\n    const finalPeaks = detectBaselineRegions(data, {\n        maxDistanceToJoin,\n        magnitudeMode,\n        factorNoise,\n    });\n    const { re, im } = data;\n    const length = re.length;\n    const indexMask = reverse ? (i) => length - 1 - i : (i) => i;\n    let x0 = 0;\n    let counter = -1;\n    const res = [];\n    while (counter < length) {\n        const reTmp = [];\n        const imTmp = [];\n        while (!finalPeaks[indexMask(++counter)] && counter < length) {\n            // Add some extra points(0.1 ppm) at rigth and left sides of the region.\n            x0 = counter;\n        }\n        for (; finalPeaks[indexMask(counter)] && counter < length; counter += 2) {\n            reTmp.push(re[indexMask(counter)]);\n            imTmp.push(im[indexMask(counter)]);\n        }\n        if (reTmp.length > minRegSize) {\n            res.push(autoPhaseRegion(reTmp, imTmp, x0));\n        }\n    }\n    const { ph1, ph0 } = determiningGlobalValues(res.map((r) => r.x0 / length), res.map((r) => r.ph0), res.map((r) => r.area / 1e11));\n    const phased = reimPhaseCorrection({ re, im }, toRadians(ph0), toRadians(ph1), { reverse });\n    return { data: phased, ph0, ph1 };\n}\nfunction determiningGlobalValues(x, ph0Values, weights) {\n    if (x.length === 0) {\n        return { ph0: 0, ph1: 0 };\n    }\n    else if (x.length === 1) {\n        return { ph0: ph0Values[0], ph1: 0 };\n    }\n    const [ph1, ph0] = weightedLinearRegression(x, ph0Values, weights);\n    let indexMax = -1;\n    let maxDiff = Number.MIN_SAFE_INTEGER;\n    for (let i = 0; i < x.length; i++) {\n        const predictedPh0 = x[i] * ph1 + ph0;\n        const diff = Math.abs(ph0Values[i] - predictedPh0);\n        if (diff > 34 && maxDiff < diff) {\n            indexMax = i;\n            maxDiff = diff;\n        }\n    }\n    if (indexMax > -1) {\n        x.splice(indexMax, 1);\n        ph0Values.splice(indexMax, 1);\n        weights.splice(indexMax, 1);\n        return determiningGlobalValues(x, ph0Values, weights);\n    }\n    return { ph0, ph1 };\n}\nfunction detectBaselineRegions(data, options) {\n    const magnitudeData = options.magnitudeMode ? reimAbsolute(data) : data.re;\n    const ds = holoborodko(magnitudeData);\n    const peaksDs = robustBaseLineRegionsDetection(ds, options);\n    const peaksSp = robustBaseLineRegionsDetection(magnitudeData, options);\n    return peaksSp.map((sp, i) => sp && peaksDs[i]);\n}\n/**\n * AutoPhaseRegion.\n * @param re - Array of Number.\n * @param im - Array of Number.\n * @param x0 - Number.\n * @returns Region.\n */\nfunction autoPhaseRegion(re, im, x0) {\n    let start = -180;\n    let stop = 180;\n    const nSteps = 6;\n    let maxSteps = 10;\n    let bestAng = 0;\n    let minArea = Number.MAX_SAFE_INTEGER;\n    while (maxSteps > 0) {\n        const dAng = (stop - start) / (nSteps + 1);\n        for (let i = start; i <= stop; i += dAng) {\n            const tmpPhased = reimPhaseCorrection({ re, im }, toRadians(i), 0);\n            const negArea = getNegArea(tmpPhased.re);\n            if (negArea < minArea) {\n                [minArea, bestAng] = [negArea, i];\n            }\n        }\n        start = bestAng - dAng;\n        stop = bestAng + dAng;\n        maxSteps--;\n    }\n    // Calculate the area for the best angle\n    const phased = reimPhaseCorrection({ re, im }, toRadians(bestAng), 0);\n    let area = 0;\n    let sumX = 0;\n    for (let j = 0; j < re.length; j++) {\n        area += phased.re[j];\n        sumX += phased.re[j] * (j + x0);\n    }\n    return { ph0: bestAng, area, x0: sumX / area };\n}\n/**\n * Holoborodko.\n * @param s - Array of float.\n * @returns Array of float.\n */\nfunction holoborodko(s) {\n    const dk = new Float64Array(s.length);\n    for (let i = 5; i < s.length - 5; i++) {\n        dk[i] =\n            (42 * (s[i + 1] - s[i - 1]) +\n                48 * (s[i + 2] - s[i - 2]) +\n                27 * (s[i + 3] + s[i - 3]) +\n                8 * (s[i + 4] - s[i - 4]) +\n                s[i + 5] -\n                s[i - 5]) /\n                512;\n    }\n    //Fill the borders\n    for (let i = 0; i < 5; i++) {\n        dk[i] = dk[5];\n        dk[s.length - i - 1] = dk[s.length - 6];\n    }\n    return dk;\n}\n/**\n * RobustBaseLineRegionsDetection.\n * @param s\n * @param options\n * @param options.magnitudeMode\n * @param options.maxDistanceToJoin\n * @param options.factorNoise\n */\nfunction robustBaseLineRegionsDetection(s, options) {\n    const { maxDistanceToJoin, magnitudeMode, factorNoise } = options;\n    const mask = new Uint8Array(s.length);\n    for (let i = 0; i < s.length; i++) {\n        mask[i] = 0;\n    }\n    let change = true;\n    while (change) {\n        const noiseLevel = xNoiseSanPlot(s, { magnitudeMode });\n        const cutOff = factorNoise * noiseLevel.positive;\n        change = false;\n        for (let i = 0; i < s.length; i++) {\n            if (Math.abs(s[i]) > cutOff && !mask[i]) {\n                change = true;\n                mask[i] = 1;\n            }\n        }\n    }\n    // Clean up mask by merging peaks blocks, separated by just a few points(4??).\n    let count = 0;\n    let prev = 0;\n    for (let i = 0; i < s.length; i++) {\n        if (!mask[i]) {\n            count++;\n        }\n        else {\n            if (count < maxDistanceToJoin) {\n                for (let j = 0; j <= count; j++) {\n                    mask[prev + j] = 1;\n                }\n            }\n            while (mask[++i] && i < s.length)\n                ;\n            prev = i;\n            count = 0;\n        }\n    }\n    return mask;\n}\n/**\n * WeightedLinearRegression.\n * @param x\n * @param y\n * @param w\n */\nfunction weightedLinearRegression(x, y, w) {\n    let sxtw = 0;\n    let swx = 0;\n    let sw = 0;\n    let sxtwy = 0;\n    let swy = 0;\n    for (let i = 0; i < x.length; i++) {\n        sxtw += x[i] * x[i] * w[i];\n        swx += x[i] * w[i];\n        sw += w[i];\n        sxtwy += x[i] * w[i] * y[i];\n        swy += w[i] * y[i];\n    }\n    /* Just to know what is the matrix system that we solve\n     let Mx=[[sxtw, swx], [swx, sw]];\n     let My=[[sxtwy], [swy]];\n    */\n    //Mx inverse\n    const detMx = sxtw * sw - swx * swx;\n    const inMx = [\n        [sw / detMx, -swx / detMx],\n        [-swx / detMx, sxtw / detMx],\n    ];\n    return [\n        inMx[0][0] * sxtwy + inMx[0][1] * swy,\n        inMx[1][0] * sxtwy + inMx[1][1] * swy,\n    ];\n}\nfunction toRadians(degree) {\n    return (degree * Math.PI) / 180;\n}\nfunction getNegArea(data) {\n    let area = 0;\n    for (const element of data) {\n        if (element < 0)\n            area -= element;\n    }\n    return area;\n}\n//# sourceMappingURL=reimAutoPhaseCorrection.js.map","import { xRotate } from \"../x/index.js\";\nexport function zeroShift(data, inverse) {\n    const middle = inverse\n        ? Math.ceil(data.length / 2)\n        : Math.floor(data.length / 2);\n    return xRotate(data, middle);\n}\n//# sourceMappingURL=zeroShift.js.map","import FFT from 'fft.js';\nimport { zeroShift } from \"./zeroShift.js\";\n/**\n * ReimFFT.\n * @param data - complex spectrum\n * @param options - options.\n * @returns FFT of complex spectrum.\n */\nexport function reimFFT(data, options = {}) {\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const { re, im } = data;\n    const size = re.length;\n    const csize = size << 1;\n    let complexArray = new Float64Array(csize);\n    for (let i = 0; i < csize; i += 2) {\n        complexArray[i] = re[i >>> 1];\n        complexArray[i + 1] = im[i >>> 1];\n    }\n    const fft = new FFT(size);\n    let output = new Float64Array(csize);\n    if (inverse) {\n        if (applyZeroShift)\n            complexArray = zeroShift(complexArray, true);\n        fft.inverseTransform(output, complexArray);\n    }\n    else {\n        fft.transform(output, complexArray);\n        if (applyZeroShift)\n            output = zeroShift(output);\n    }\n    if (inPlace) {\n        for (let i = 0; i < csize; i += 2) {\n            re[i >>> 1] = output[i];\n            im[i >>> 1] = output[i + 1];\n        }\n        return data;\n    }\n    const newRe = new Float64Array(size);\n    const newIm = new Float64Array(size);\n    for (let i = 0; i < csize; i += 2) {\n        newRe[i >>> 1] = output[i];\n        newIm[i >>> 1] = output[i + 1];\n    }\n    return { re: newRe, im: newIm };\n}\n//# sourceMappingURL=reimFFT.js.map","import { createDoubleArray } from \"../utils/createArray.js\";\n/**\n * This function make a zero filling to re and im part.\n * @param data - object of kind {re:[], im:[]}\n * @param totalLength - final number of points\n * @returns - New DataReIm object with zero-filled,\n * truncated arrays if totalLength is smaller current length or\n * the same input if totalLength is equal that current length\n */\nexport function reimZeroFilling(data, totalLength) {\n    if (!Number.isInteger(totalLength) || totalLength < 0) {\n        throw new RangeError('totalLength must be a non-negative integer');\n    }\n    const { re, im } = data;\n    const length = re.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newRE = createDoubleArray(re.constructor, totalLength);\n    const newIM = createDoubleArray(im.constructor, totalLength);\n    for (let i = 0; i < re.length; i++) {\n        newRE[i] = re[i];\n        newIM[i] = im[i];\n    }\n    return {\n        re: newRE,\n        im: newIM,\n    };\n}\n//# sourceMappingURL=reimZeroFilling.js.map","import FFT from 'fft.js';\nimport { zeroShift } from \"../reim/zeroShift.js\";\n/**\n * Apply FFT to an array of complex spectra, reusing a single FFT instance for\n * all elements to avoid repeated instantiation overhead.\n * All elements must have the same length.\n * @param data - array of complex spectra\n * @param options - options\n * @returns array of transformed complex spectra\n */\nexport function reimArrayFFT(data, options = {}) {\n    if (data.length === 0)\n        return [];\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const size = data[0].re.length;\n    const csize = size << 1;\n    for (let j = 1; j < data.length; j++) {\n        if (data[j].re.length !== size || data[j].im.length !== size) {\n            throw new RangeError(`All elements must have the same length. Expected ${size} but element ${j} has length ${data[j].re.length}.`);\n        }\n    }\n    // Single FFT instance and working buffers reused across all spectra\n    const fft = new FFT(size);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const results = new Array(data.length);\n    for (let j = 0; j < data.length; j++) {\n        const { re, im } = data[j];\n        for (let i = 0; i < csize; i += 2) {\n            complexArray[i] = re[i >>> 1];\n            complexArray[i + 1] = im[i >>> 1];\n        }\n        const outRe = inPlace ? re : new Float64Array(size);\n        const outIm = inPlace ? im : new Float64Array(size);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = output[i];\n                outIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = source[i];\n                outIm[i >>> 1] = source[i + 1];\n            }\n        }\n        results[j] = { re: outRe, im: outIm };\n    }\n    return results;\n}\n//# sourceMappingURL=reimArrayFFT.js.map","import FFT from 'fft.js';\nimport { zeroShift } from \"../reim/zeroShift.js\";\n/**\n * Apply FFT to each row of a complex matrix, reusing a single FFT instance for\n * all rows to avoid repeated instantiation overhead.\n * All rows must have the same length.\n * @param data - complex matrix with re and im arrays of Float64Array rows\n * @param options - options\n * @returns complex matrix with transformed rows\n */\nexport function reimMatrixFFT(data, options = {}) {\n    const { re, im } = data;\n    const numRows = re.length;\n    if (numRows === 0)\n        return { re: [], im: [] };\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const size = re[0].length;\n    const csize = size << 1;\n    for (let j = 0; j < numRows; j++) {\n        if (re[j].length !== size || im[j].length !== size) {\n            throw new RangeError(`All rows must have the same length. Expected ${size} but row ${j} has length ${re[j].length}.`);\n        }\n    }\n    // Single FFT instance and working buffers reused across all rows\n    const fft = new FFT(size);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const resultRe = new Array(numRows);\n    const resultIm = new Array(numRows);\n    for (let j = 0; j < numRows; j++) {\n        const reRow = re[j];\n        const imRow = im[j];\n        for (let i = 0; i < csize; i += 2) {\n            complexArray[i] = reRow[i >>> 1];\n            complexArray[i + 1] = imRow[i >>> 1];\n        }\n        const outRe = inPlace ? reRow : new Float64Array(size);\n        const outIm = inPlace ? imRow : new Float64Array(size);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = output[i];\n                outIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = source[i];\n                outIm[i >>> 1] = source[i + 1];\n            }\n        }\n        resultRe[j] = outRe;\n        resultIm[j] = outIm;\n    }\n    return { re: resultRe, im: resultIm };\n}\n//# sourceMappingURL=reimMatrixFFT.js.map","/**\n * Align data of two spectra by verifying wether x values are in a certain range (`delta`).\n * The two spectra should not have two consecutive x values which difference is\n * smaller than `delta` to achieve good results!\n * @param data1 - First spectrum data\n * @param data2 - Second spectrum data\n * @param options - Options\n */\nexport function xyAlign(data1, data2, options = {}) {\n    const { delta = 1, common = true, x = 'x1' } = options;\n    const result = {\n        x: [],\n        y1: [],\n        y2: [],\n    };\n    let i = 0;\n    let j = 0;\n    const length1 = data1.x.length;\n    const length2 = data2.x.length;\n    while (i < length1 && j < length2) {\n        let maxDiff = 0;\n        if (typeof delta === 'function') {\n            const mean = (data1.x[i] + data2.x[j]) / 2; // is this a good thing to do?\n            maxDiff = delta(mean);\n        }\n        else {\n            maxDiff = delta;\n        }\n        const difference = data1.x[i] - data2.x[j];\n        if (Math.abs(difference) > maxDiff) {\n            if (difference > 0) {\n                if (!common) {\n                    result.x.push(data2.x[j]);\n                    result.y1.push(0);\n                    result.y2.push(data2.y[j]);\n                    if (j === length2 - 1) {\n                        while (i < length1) {\n                            result.x.push(data1.x[i]);\n                            result.y1.push(data1.y[i]);\n                            result.y2.push(0);\n                            i++;\n                        }\n                    }\n                }\n                j++;\n            }\n            else {\n                if (!common) {\n                    result.x.push(data1.x[i]);\n                    result.y1.push(data1.y[i]);\n                    result.y2.push(0);\n                    if (i === length1 - 1) {\n                        while (j < length2) {\n                            result.x.push(data2.x[j]);\n                            result.y1.push(0);\n                            result.y2.push(data2.y[j]);\n                            j++;\n                        }\n                    }\n                }\n                i++;\n            }\n        }\n        else {\n            const weightedX = (data1.x[i] * data1.y[i] + data2.x[j] * data2.y[j]) /\n                (data1.y[i] + data2.y[j]);\n            switch (x) {\n                case 'x1':\n                    result.x.push(data1.x[i]);\n                    break;\n                case 'x2':\n                    result.x.push(data2.x[j]);\n                    break;\n                case 'weighted':\n                    result.x.push(weightedX);\n                    break;\n                default:\n                    throw new Error(`unknown x option value: ${String(x)}`);\n            }\n            result.y1.push(data1.y[i]);\n            result.y2.push(data2.y[j]);\n            i++;\n            j++;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyAlign.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data\n * @param options\n * @param options.minLength\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xMean } from \"../x/index.js\";\n/**\n * Finds the covariance of the points.\n * @param data\n * @param options\n * @returns the covariance\n */\nexport function xyCovariance(data, options = {}) {\n    const { x, y } = data;\n    const { unbiased = true } = options;\n    const meanX = xMean(x);\n    const meanY = xMean(y);\n    let error = 0;\n    for (let i = 0; i < x.length; i++) {\n        error += (x[i] - meanX) * (y[i] - meanY);\n    }\n    if (unbiased) {\n        return error / (x.length - 1);\n    }\n    else {\n        return error / x.length;\n    }\n}\n//# sourceMappingURL=xyCovariance.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the max y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMaxYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1) {\n        return { x: x[0], y: y[0], index: 0 };\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = { x: x[fromIndex], y: y[fromIndex], index: fromIndex };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] > current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMaxYPoint.js.map","import { xCumulative, xMaxValue } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\nimport { xyMaxYPoint } from \"./xyMaxYPoint.js\";\nconst STEPS = [0.25, 0.5, 0.75];\n/**\n * Cumulative Distribution Statistics\n * @param data - array of points {x,y}\n * @returns x0, x25, x50, x75, x100, xMode, xMean (x for maxY)\n */\nexport function xyCumulativeDistributionStatistics(data) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const cumulativeSum = xCumulative(y);\n    const maxY = xMaxValue(cumulativeSum);\n    for (let i = 0; i < cumulativeSum.length; i++) {\n        cumulativeSum[i] /= maxY;\n    }\n    const result = {\n        x0: x[0],\n        x25: 0,\n        x50: 0,\n        x75: 0,\n        x100: x.at(-1),\n        xMode: 0,\n        xMean: 0,\n    };\n    // need to find the x values closest to STEPS/100\n    let currentStep = 0;\n    breakPoint: for (let i = 1; i < cumulativeSum.length; i++) {\n        while (STEPS[currentStep] < cumulativeSum[i]) {\n            // Key is computed dynamically with a multiplication. This cannot be type-safe, hence the \"as\" assertion.\n            const key = `x${STEPS[currentStep] * 100}`;\n            result[key] =\n                x[i - 1] +\n                    (x[i] - x[i - 1]) *\n                        ((STEPS[currentStep] - cumulativeSum[i - 1]) /\n                            (cumulativeSum[i] - cumulativeSum[i - 1]));\n            currentStep++;\n            if (currentStep === STEPS.length)\n                break breakPoint;\n        }\n    }\n    result.xMode = xyMaxYPoint(data).x;\n    let sumXY = 0;\n    let sumY = 0;\n    for (let i = 0; i < x.length; i++) {\n        sumXY += x[i] * y[i];\n        sumY += y[i];\n    }\n    result.xMean = sumXY / sumY;\n    return result;\n}\n//# sourceMappingURL=xyCumulativeDistributionStatistics.js.map","import { xEnsureFloat64 } from \"../x/index.js\";\nexport function xyEnsureFloat64(data) {\n    return {\n        x: xEnsureFloat64(data.x),\n        y: xEnsureFloat64(data.y),\n    };\n}\n//# sourceMappingURL=xyEnsureFloat64.js.map","import { xIsMonotonic } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Filters x,y values to allow strictly growing values in x-axis.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyEnsureGrowingX(data) {\n    xyCheck(data);\n    if (xIsMonotonic(data.x) === 1)\n        return data;\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    let prevX = Number.NEGATIVE_INFINITY;\n    let currentIndex = 0;\n    for (let index = 0; index < x.length; index++) {\n        if (prevX < x[index]) {\n            if (currentIndex < index) {\n                x[currentIndex] = x[index];\n                y[currentIndex] = y[index];\n            }\n            currentIndex++;\n            prevX = x[index];\n        }\n    }\n    x.length = currentIndex;\n    y.length = currentIndex;\n    return { x, y };\n}\n//# sourceMappingURL=xyEnsureGrowingX.js.map","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n * - deal with exclusions zones\n * - if no zones is specified add one between -Infinity and +Infinity\n * @param zones - array of zones\n * @param options - options\n * @returns array of zones\n */\nexport function zonesNormalize(zones = [], options = {}) {\n    const { exclusions = [] } = options;\n    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = zones.map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : { ...zone });\n    zones.sort((a, b) => {\n        if (a.from !== b.from)\n            return a.from - b.from;\n        return a.to - b.to;\n    });\n    if (zones.length === 0) {\n        zones.push({ from, to });\n    }\n    for (const zone of zones) {\n        if (from > zone.from)\n            zone.from = from;\n        if (to < zone.to)\n            zone.to = to;\n    }\n    zones = zones.filter((zone) => zone.from <= zone.to);\n    if (zones.length === 0)\n        return [];\n    let currentZone = zones[0];\n    const beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        const zone = zones[i];\n        if (zone.from <= currentZone.to) {\n            if (currentZone.to < zone.to) {\n                currentZone.to = zone.to;\n            }\n        }\n        else {\n            currentZone = zone;\n            beforeExclusionsZones.push(currentZone);\n        }\n    }\n    if (exclusions.length === 0)\n        return beforeExclusionsZones;\n    const normalizedExclusions = zonesNormalize(exclusions);\n    let currentExclusionIndex = 0;\n    const results = [];\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        const zone = beforeExclusionsZones[zoneIndex];\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        while (currentExclusionIndex < normalizedExclusions.length &&\n            normalizedExclusions[currentExclusionIndex].to <= zone.from) {\n            currentExclusionIndex++;\n        }\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        if (zone.to < normalizedExclusions[currentExclusionIndex].from) {\n            // no problems, not yet in exclusion\n            results.push(zone);\n            continue;\n        }\n        if (normalizedExclusions[currentExclusionIndex].to >= zone.to) {\n            // could be totally excluded\n            if (normalizedExclusions[currentExclusionIndex].from <= zone.from) {\n                continue;\n            }\n            results.push({\n                from: normalizedExclusions[currentExclusionIndex].to,\n                to: zone.to,\n            });\n        }\n        // we cut in the middle, we need to create more zones, annoying !\n        if (normalizedExclusions[currentExclusionIndex].from > zone.from) {\n            results.push({\n                from: zone.from,\n                to: normalizedExclusions[currentExclusionIndex].from,\n            });\n        }\n        zone.from = normalizedExclusions[currentExclusionIndex].to;\n        zoneIndex--;\n    }\n    return results;\n}\n//# sourceMappingURL=zonesNormalize.js.map","import { zonesNormalize } from \"./zonesNormalize.js\";\n/**\n * Add the number of points per zone to reach a specified total\n * @param zones - array of zones\n * @param numberOfPoints - total number of points to distribute between zones\n * @param options - options\n * @returns array of zones with points\n */\nexport function zonesWithPoints(zones = [], \n/**\n * total number of points to distribute between zones\n * @default 10\n */\nnumberOfPoints = 10, options = {}) {\n    if (zones.length === 0)\n        return [];\n    const normalizedZones = zonesNormalize(zones, options);\n    const zonesWithNumberOfPoints = [];\n    const totalSize = normalizedZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    const unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < normalizedZones.length - 1; i++) {\n        const tempZone = normalizedZones[i];\n        const tempZoneNumberOfPoints = Math.min(Math.round((tempZone.to - tempZone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        zonesWithNumberOfPoints.push({\n            ...tempZone,\n            numberOfPoints: tempZoneNumberOfPoints,\n        });\n        currentTotal += tempZoneNumberOfPoints;\n    }\n    zonesWithNumberOfPoints.push({\n        ...normalizedZones.at(-1),\n        numberOfPoints: numberOfPoints - currentTotal,\n    });\n    return zonesWithNumberOfPoints;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * Function that retrieves the getEquallySpacedData with the variant \"slot\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0\n * @param x1\n * @param slope\n * @param intercept\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from \"./integral.js\";\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { zonesNormalize, zonesWithPoints } from \"../zones/index.js\";\nimport equallySpacedSlot from \"./utils/equallySpacedSlot.js\";\nimport equallySpacedSmooth from \"./utils/equallySpacedSmooth.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in an array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in an array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns new object with x / y array with the equally spaced data.\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Extract zones from a XY data.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Array of points\n */\nexport function xyExtract(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    let { zones } = options;\n    zones = zonesNormalize(zones);\n    if (x === undefined ||\n        y === undefined ||\n        !Array.isArray(zones) ||\n        zones.length === 0) {\n        return data;\n    }\n    const newX = [];\n    const newY = [];\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyExtract.js.map","/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilter(data, options = {}) {\n    const { x, y } = data;\n    const { filter } = options;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (!filter || filter(x[i], y[i])) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilter.js.map","import { xMinMaxValues } from \"../x/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param minRelativeYValue - the minimum relative value compare to the Y max value\n * @returns filtered data\n */\nexport function xyFilterMinYValue(data, minRelativeYValue) {\n    if (minRelativeYValue === undefined)\n        return data;\n    const { x, y } = data;\n    const { min, max } = xMinMaxValues(y);\n    const threshold = max * minRelativeYValue;\n    if (min >= threshold)\n        return data;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] >= threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterMinYValue.js.map","import { xSortDescending } from \"../x/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param nbPeaks\n * @returns filtered data\n */\nexport function xyFilterTopYValues(data, nbPeaks) {\n    if (nbPeaks === undefined)\n        return data;\n    if (nbPeaks > data.x.length)\n        return data;\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    const descending = xSortDescending(y.slice());\n    const threshold = descending[nbPeaks - 1];\n    let nbThreshold = 0;\n    for (let i = 0; i < nbPeaks; i++) {\n        if (descending[i] === threshold) {\n            nbThreshold++;\n        }\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] > threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n        else if (y[i] === threshold) {\n            nbThreshold--;\n            if (nbThreshold >= 0) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterTopYValues.js.map","import { zonesNormalize } from \"../zones/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    if (x.length === 0) {\n        return {\n            x: Array.from(x),\n            y: Array.from(y),\n        };\n    }\n    const { from = x[0], to = x.at(-1), zones = [{ from, to }], exclusions = [], } = options;\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    const newX = [];\n    const newY = [];\n    let position = 0;\n    while (position < x.length) {\n        if (x[position] <= normalizedZones[currentZoneIndex].to &&\n            x[position] >= normalizedZones[currentZoneIndex].from) {\n            newX.push(x[position]);\n            newY.push(y[position]);\n        }\n        else if (x[position] > normalizedZones[currentZoneIndex].to) {\n            currentZoneIndex++;\n            if (!normalizedZones[currentZoneIndex])\n                break;\n        }\n        position++;\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns - An object with the filtered data\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","import { xFindClosestIndex } from \"../x/index.js\";\n/**\n * Finds the closest point\n * @param data - x array should be sorted and ascending\n * @param target - target to search\n * @returns - closest point\n */\nexport function xyFindClosestPoint(\n/** points */\ndata, target) {\n    const { x, y } = data;\n    const index = xFindClosestIndex(x, target);\n    return {\n        x: x[index],\n        y: y[index],\n    };\n}\n//# sourceMappingURL=xyFindClosestPoint.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Returns the numberMaxPoints points with the bigger y.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param numberMaxPoints - Number of points to keep\n * @returns - The points filtered to keep the `numberMaxPoints` most intense points of the input.\n */\nexport function xyGetNMaxY(data, numberMaxPoints) {\n    xyCheck(data);\n    if (data.x.length <= numberMaxPoints) {\n        return data;\n    }\n    else {\n        const newX = new Float64Array(numberMaxPoints);\n        const newY = new Float64Array(numberMaxPoints);\n        const floatY = Float64Array.from(data.y);\n        floatY.sort();\n        floatY.reverse();\n        const threshold = floatY[numberMaxPoints - 1];\n        let index = 0;\n        for (let i = 0; i < data.x.length; i++) {\n            if (data.y[i] >= threshold) {\n                newX[index] = data.x[i];\n                newY[index] = data.y[i];\n                index++;\n            }\n            if (index === numberMaxPoints) {\n                return { x: newX, y: newY };\n            }\n        }\n        return data;\n    }\n}\n//# sourceMappingURL=xyGetNMaxY.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - Object of kind {x:[], y:[]}.\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.toReversed(),\n        y: y.toReversed(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Generate a X / Y of the xyIntegral\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the xyIntegration function\n */\nexport function xyIntegral(data, options = {}) {\n    const { reverse = false } = options;\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let xyIntegration = 0;\n    const currentxyIntegral = {\n        x: new Float64Array(toIndex - fromIndex + 1),\n        y: new Float64Array(toIndex - fromIndex + 1),\n    };\n    let index = 0;\n    if (reverse) {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[toIndex];\n        for (let i = toIndex; i > fromIndex; i--) {\n            xyIntegration += ((x[i] - x[i - 1]) * (y[i - 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i - 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n        currentxyIntegral.x.reverse();\n        currentxyIntegral.y.reverse();\n    }\n    else {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[fromIndex];\n        for (let i = fromIndex; i < toIndex; i++) {\n            xyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i + 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n    }\n    return currentxyIntegral;\n}\n//# sourceMappingURL=xyIntegral.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Calculate integration\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - xyIntegration value on the specified range\n */\nexport function xyIntegration(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        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    return currentxyIntegration;\n}\n//# sourceMappingURL=xyIntegration.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Join x / y values when difference in X is closer than delta.\n * When joining, y values are summed and x values are weighted average\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the xyIntegration function\n */\nexport function xyJoinX(data, options = {}) {\n    xyCheck(data);\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    if (x.length < 2) {\n        return { x, y };\n    }\n    let position = 0;\n    for (let i = 1; i < x.length; i++) {\n        const difference = x[i] - x[i - 1];\n        const currentDelta = deltaIsFunction ? delta((x[i] + x[i - 1]) / 2) : delta;\n        if (difference <= currentDelta) {\n            // we join\n            if (y[position] !== 0 || y[i] !== 0) {\n                x[position] =\n                    (x[position] * y[position] + x[i] * y[i]) / (y[position] + y[i]);\n                y[position] += y[i];\n            }\n        }\n        else {\n            position++;\n            x[position] = x[i];\n            y[position] = y[i];\n        }\n    }\n    x.length = position + 1;\n    y.length = position + 1;\n    return { x, y };\n}\n//# sourceMappingURL=xyJoinX.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Computes the weighted mean value of an array of values.\n * @param data - array of DataXY\n * @param options - options\n */\nexport function xyMassCenter(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let sumYs = 0;\n    let sumProducts = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sumProducts += x[i] * y[i];\n        sumYs += y[i];\n    }\n    if (sumYs === 0) {\n        throw new Error('Sum of Ys can not be zero.');\n    }\n    return sumProducts / sumYs;\n}\n//# sourceMappingURL=xyMassCenter.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * We will calculate a vector containing center of mass of DataXY as well as center of mass of both parts, etc.\n * This approach allows to efficiently represent spectra like XPS, NMR, etc. It should provide an extremely efficient\n * way to store and search similar spectra.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options\n * @returns - Array of centers of mass\n */\nexport function xyMassCenterVector(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { depth = 5 } = options;\n    const { weightedIntegral, integral } = getWeightedIntegral(data);\n    const results = new Float64Array((1 << depth) - 1);\n    const endIndexes = new Int32Array((1 << depth) - 1);\n    endIndexes[0] = data.x.length - 1;\n    const beginIndexes = new Int32Array((1 << depth) - 1);\n    beginIndexes[0] = -1;\n    let index = 0;\n    for (let i = 0; i < depth; i++) {\n        for (let j = 0; j < 1 << i; j++) {\n            const currentBeginIndex = beginIndexes[index];\n            const currentEndIndex = endIndexes[index];\n            const currentIntegration = currentBeginIndex === -1\n                ? integral[currentEndIndex]\n                : integral[currentEndIndex] - integral[currentBeginIndex];\n            // we need to solve the issue of null integration (rather in simulated spectra).\n            let x = 0;\n            if (currentIntegration !== 0) {\n                x =\n                    currentBeginIndex === -1\n                        ? weightedIntegral[currentEndIndex] / currentIntegration\n                        : (weightedIntegral[currentEndIndex] -\n                            weightedIntegral[currentBeginIndex]) /\n                            currentIntegration;\n            }\n            else {\n                x = (data.x[currentEndIndex] + data.x[currentBeginIndex]) / 2;\n            }\n            results[index++] = x;\n            // we can now prepare the next level\n            if (i < depth - 1) {\n                const nextIndex = (1 << (i + 1)) + j * 2 - 1;\n                let middleIndex = xFindClosestIndex(data.x, x);\n                if (middleIndex === currentBeginIndex) {\n                    middleIndex++;\n                }\n                beginIndexes[nextIndex] = currentBeginIndex;\n                endIndexes[nextIndex] = middleIndex;\n                if (middleIndex === currentEndIndex) {\n                    middleIndex--;\n                }\n                beginIndexes[nextIndex + 1] = middleIndex;\n                endIndexes[nextIndex + 1] = currentEndIndex;\n            }\n        }\n    }\n    return results;\n}\nfunction getWeightedIntegral(data) {\n    const { x, y } = data;\n    const weightedIntegral = new Float64Array(x.length);\n    const integral = new Float64Array(x.length);\n    // the first point, no points before\n    const firstIntegration = (x[1] - x[0]) * y[0];\n    let totalIntegration = firstIntegration;\n    integral[0] = totalIntegration;\n    let totalWeightedIntegral = firstIntegration * x[0];\n    weightedIntegral[0] = totalWeightedIntegral;\n    for (let i = 1; i < x.length - 1; i++) {\n        const currentIntegration = ((x[i + 1] - x[i - 1]) * y[i]) / 2;\n        const currentX = x[i];\n        totalIntegration += currentIntegration;\n        integral[i] = totalIntegration;\n        totalWeightedIntegral += currentIntegration * currentX;\n        weightedIntegral[i] = totalWeightedIntegral;\n    }\n    // the last point, no points after\n    const lastIntegration = (x.at(-1) - x.at(-2)) * y.at(-1);\n    totalIntegration += lastIntegration;\n    integral[x.length - 1] = totalIntegration;\n    totalWeightedIntegral += lastIntegration * x.at(-1);\n    weightedIntegral[x.length - 1] = totalWeightedIntegral;\n    return { integral, weightedIntegral };\n}\n//# sourceMappingURL=xyMassCenterVector.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest maximum going up hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - An object with the x/y value\n */\nexport function xyMaxClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let xyMaxY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] > xyMaxY) {\n            currentIndex--;\n        }\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//# sourceMappingURL=xyMaxClosestYPoint.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds all the max values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Object with from and to properties\n * @returns - Array of points\n */\nexport function xyMaximaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] < y[i] && y[i + 1] < y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] < y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] < y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMaximaY.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyMaxMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const maxAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            maxAbscissa.x.push(x[index]);\n            maxAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            if (y[index] > maxAbscissa.y[size - 1]) {\n                maxAbscissa.x[size - 1] = x[index];\n                maxAbscissa.y[size - 1] = y[index];\n            }\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    merged.x = maxAbscissa.x.slice();\n    return merged;\n}\n//# sourceMappingURL=xyMaxMerge.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the max value in a zone\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - Max y on the specified range\n */\nexport function xyMaxY(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyMaxY = y[fromIndex];\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] > currentxyMaxY)\n            currentxyMaxY = y[i];\n    }\n    return currentxyMaxY;\n}\n//# sourceMappingURL=xyMaxY.js.map","/**\n * Finds the median x value for an object with properties x and y (arrays of the same length)\n * @param data - x should be sorted in increasing order\n * @returns - the median of x values\n */\nexport function xyMedian(data) {\n    const { x, y } = data;\n    let sumY = 0;\n    let cumSumY = 0;\n    let i;\n    if (x.length === 0) {\n        return Number.NaN;\n    }\n    if (x.length === 1) {\n        return x[0];\n    }\n    for (i = 0; i < y.length; i++) {\n        sumY += y[i];\n    }\n    for (i = 0; i < y.length; i++) {\n        cumSumY += y[i];\n        if (cumSumY > sumY / 2) {\n            return x[i];\n        }\n        else if (cumSumY === sumY / 2) {\n            return 0.5 * (x[i] + x[i + 1]);\n        }\n    }\n    return Number.NaN;\n}\n//# sourceMappingURL=xyMedian.js.map","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param data - object containing 2 properties x and y\n * @param centroids - centroids\n * @param options - options\n * @returns merged points\n */\nexport function xyMergeByCentroids(data, centroids, options = {}) {\n    const { window = 0.01 } = options;\n    const mergedPoints = {\n        x: Float64Array.from(centroids),\n        y: new Float64Array(centroids.length).fill(0),\n    };\n    let originalIndex = 0;\n    let mergedIndex = 0;\n    while (originalIndex < data.x.length && mergedIndex < centroids.length) {\n        const diff = data.x[originalIndex] - centroids[mergedIndex];\n        if (Math.abs(diff) < window) {\n            mergedPoints.y[mergedIndex] += data.y[originalIndex++];\n        }\n        else if (diff < 0) {\n            originalIndex++;\n        }\n        else {\n            mergedIndex++;\n        }\n    }\n    return mergedPoints;\n}\n//# sourceMappingURL=xyMergeByCentroids.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest minimum going down hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the x/y value\n */\nexport function xyMinClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let minY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] < minY) {\n            currentIndex--;\n        }\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//# sourceMappingURL=xyMinClosestYPoint.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds all the min values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - Object that contains property X (an ordered increasing array) and y (an arraY)\n * @param options - Object with from and to properties\n * @returns - Array of points.\n */\nexport function xyMinimaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] > y[i] && y[i + 1] > y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] > y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] > y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMinimaY.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the min y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMinYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return { x: x[0], y: y[0], index: 0 };\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = {\n        x: x[fromIndex],\n        y: y[fromIndex],\n        index: fromIndex,\n    };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] < current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMinYPoint.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Returns an information about a signal.\n *\n *\n * We expect ordered data and equidistant X axis\n * You can use the method helper if required:\n * ML.ArrayPoints.uniqueX\n * ML.ArrayPoints.sortX\n * ML.ArrayPoints.equallySpaced\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Information about signal\n */\nexport function xyPeakInfo(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    if (x === undefined || y === undefined || x.length < 3) {\n        return;\n    }\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined && target !== undefined) {\n        targetIndex = xFindClosestIndex(x, target);\n    }\n    if (targetIndex === undefined) {\n        throw new Error('must specify target or targetIndex');\n    }\n    let i = targetIndex;\n    let currentDiff = y[i] - y[i + 1];\n    const multiplier = currentDiff < 0 ? -1 : 1;\n    currentDiff *= multiplier;\n    while (i < x.length - 1) {\n        i++;\n        const newDiff = (y[i] - y[i + 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const after = { x: x[i], y: y[i] };\n    i = targetIndex;\n    currentDiff = (y[i] - y[i - 1]) * multiplier;\n    while (i > 1) {\n        i--;\n        const newDiff = (y[i] - y[i - 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const before = { x: x[i], y: y[i] };\n    return {\n        inflectionBefore: before,\n        inflectionAfter: after,\n        extrema: { x: x[targetIndex], y: y[targetIndex] },\n        inflectionMiddle: {\n            x: (before.x + after.x) / 2,\n            y: (before.y + after.y) / 2,\n        },\n        width: Math.abs(before.x - after.x),\n    };\n}\n//# sourceMappingURL=xyPeakInfo.js.map","import { xGetTargetIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest minimum going down hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - An object with the x/y value\n */\nexport function xyRealMaxYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] > 0 &&\n        y[targetIndex + 1] > 0 &&\n        y[targetIndex] >= y[targetIndex - 1] &&\n        y[targetIndex] >= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(y[targetIndex - 1]);\n        const beta = 20 * Math.log10(y[targetIndex]);\n        const gamma = 20 * Math.log10(y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMaxYPoint.js.map","import { xGetTargetIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * xyRealMinYPoint.\n * @param data - Data.\n * @param options - Options.\n */\nexport function xyRealMinYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] < 0 &&\n        y[targetIndex + 1] < 0 &&\n        y[targetIndex] <= y[targetIndex - 1] &&\n        y[targetIndex] <= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(-y[targetIndex - 1]);\n        const beta = 20 * Math.log10(-y[targetIndex]);\n        const gamma = 20 * Math.log10(-y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMinYPoint.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. If you want a similar looking spectrum you should still however\n * generate at least 4x the nbPoints that is being displayed.\n *\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * You should rather use ml-xy-equally-spaced to make further processing\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns Object with x and y arrays\n */\nexport function xyReduce(data, options = {}) {\n    xyCheck(data);\n    // todo we should check that the single point is really in the range and the zones\n    if (data.x.length < 2) {\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), nbPoints = 4001, optimize = false, } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= nbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    // need to xyReduce number of points\n    const ratio = nbPoints / totalPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < internalZones.length - 1; i++) {\n        const zone = internalZones[i];\n        zone.nbPoints = Math.round(zone.nbPoints * ratio);\n        currentTotal += zone.nbPoints;\n    }\n    internalZones.at(-1).nbPoints = nbPoints - currentTotal;\n    const newX = [];\n    const newY = [];\n    for (const zone of internalZones) {\n        if (!zone.nbPoints)\n            continue;\n        appendFromTo(zone.fromIndex, zone.toIndex, zone.nbPoints);\n    }\n    return { x: newX, y: newY };\n    /**\n     * AppendFromTo.\n     * @param fromIndex - From.\n     * @param  toIndex - To.\n     * @param zoneNbPoints - NbPoints.\n     */\n    function appendFromTo(fromIndex, toIndex, zoneNbPoints) {\n        if (zoneNbPoints === 1) {\n            newX.push(x[Math.round((toIndex - fromIndex) / 2)]);\n            newY.push(y[Math.round((toIndex - fromIndex) / 2)]);\n            return;\n        }\n        if (zoneNbPoints === 2) {\n            newX.push(x[fromIndex], x[toIndex]);\n            newY.push(y[fromIndex], y[toIndex]);\n            return;\n        }\n        newX.push(x[fromIndex]);\n        newY.push(y[fromIndex]);\n        if (zoneNbPoints % 2 === 0) {\n            zoneNbPoints = zoneNbPoints / 2 + 1;\n        }\n        else {\n            zoneNbPoints = (zoneNbPoints - 1) / 2 + 1;\n        }\n        // we will need to make some kind of min / max because there are too many points\n        // we will always keep the first point and the last point\n        const slot = (x[toIndex] - x[fromIndex]) / (zoneNbPoints - 1);\n        let currentX = x[fromIndex] + slot;\n        let first = true;\n        let minY = Number.POSITIVE_INFINITY;\n        let xyMaxY = Number.NEGATIVE_INFINITY;\n        for (let i = fromIndex + 1; i <= toIndex; i++) {\n            if (first) {\n                minY = y[i];\n                xyMaxY = y[i];\n                first = false;\n            }\n            else {\n                if (y[i] < minY)\n                    minY = y[i];\n                if (y[i] > xyMaxY)\n                    xyMaxY = y[i];\n            }\n            if (x[i] >= currentX || i === toIndex) {\n                if (optimize) {\n                    if (minY > newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                    }\n                    else if (xyMaxY < newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                        xyMaxY = minY;\n                    }\n                    else {\n                        newX.push(currentX - slot / 2);\n                        newY.push(minY);\n                    }\n                }\n                else {\n                    newX.push(currentX - slot / 2);\n                    newY.push(minY);\n                }\n                newX.push(currentX);\n                newY.push(xyMaxY);\n                currentX += slot;\n                first = true;\n            }\n        }\n    }\n}\nexport function notEnoughPoints(x, y, internalZones, totalPoints) {\n    const newX = new Float64Array(totalPoints);\n    const newY = new Float64Array(totalPoints);\n    let index = 0;\n    for (const zone of internalZones) {\n        for (let i = zone.fromIndex; i < zone.toIndex + 1; i++) {\n            newX[index] = x[i];\n            newY[index] = y[i];\n            index++;\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\nexport function getInternalZones(zones, x) {\n    // for each zone we should know the first index, the last index and the number of points\n    const internalZones = [];\n    let totalPoints = 0;\n    for (const zone of zones) {\n        let fromIndex = xFindClosestIndex(x, zone.from);\n        let toIndex = xFindClosestIndex(x, zone.to);\n        if (fromIndex > 0 && x[fromIndex] > zone.from) {\n            fromIndex--;\n        }\n        if (toIndex < x.length - 1 && x[toIndex] < zone.to) {\n            toIndex++;\n        }\n        const nbPoints = toIndex - fromIndex + 1;\n        internalZones.push({\n            from: zone.from,\n            to: zone.to,\n            fromIndex,\n            toIndex,\n            nbPoints,\n        });\n        totalPoints += nbPoints;\n    }\n    return { internalZones, totalPoints };\n}\n//# sourceMappingURL=xyReduce.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\nimport { getInternalZones, notEnoughPoints } from \"./xyReduce.js\";\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. This algorithm is designed for non-continuous data.\n * We are expecting peaks to be only positive and the x values to be ordered.\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns Object with x and y arrays\n */\nexport function xyReduceNonContinuous(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length < 2) {\n        // todo we should check that the single point is really in the range and the zones\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), maxApproximateNbPoints = 4001, } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= maxApproximateNbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    const deltaX = (to - from) / (maxApproximateNbPoints - 1);\n    const newX = [];\n    const newY = [];\n    for (const internalZone of internalZones) {\n        const maxNbPoints = Math.ceil((internalZone.to - internalZone.from) / deltaX) + 1;\n        const fromIndex = internalZone.fromIndex;\n        const toIndex = internalZone.toIndex;\n        if (toIndex - fromIndex + 1 <= maxNbPoints) {\n            // we keep all the points\n            for (let i = fromIndex; i <= toIndex; i++) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n        else {\n            // we need to reduce the number of points\n            let currentX = x[fromIndex];\n            let currentY = y[fromIndex];\n            let lastX = currentX + deltaX;\n            newX.push(currentX);\n            newY.push(currentY);\n            for (let i = fromIndex; i <= toIndex; i++) {\n                if (x[i] > lastX) {\n                    // next slot\n                    currentX = x[i];\n                    currentY = y[i];\n                    newX.push(currentX);\n                    newY.push(currentY);\n                    lastX += deltaX;\n                }\n                if (y[i] > currentY) {\n                    currentY = y[i];\n                    newY[newY.length - 1] = currentY;\n                }\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyReduceNonContinuous.js.map","import { xRolling, xRollingAverage } from \"../x/index.js\";\n/**\n * This function calculates a rolling average.\n * This methods will recalculate the x values by using xRollingAverage\n * @param data - array of points {x,y}\n * @param fct - callback function that from an array returns a value.\n * @param options - options\n */\nexport function xyRolling(data, fct, options = {}) {\n    let { x, y } = data;\n    y = xRolling(y, fct, options);\n    if (x.length !== y.length) {\n        x = xRollingAverage(x, options);\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyRolling.js.map","/**\n *\n * Dong, Jian, et al. \"An algorithm of filtering noises in multi-beam data based on rolling circle transform.\" 2019 2nd International Conference on Sustainable Energy, Environment and Information Engineering (SEEIE 2019). Atlantis Press, 2019.\n * DONG Jian, PENG Rencan, ZHANG Lihua, WANG Zhijun. An Algorithm of Filtering Noises in Multi-beam Data Based on Rolling Circle Transform[J]. Geomatics and Information Science of Wuhan University, 2016, 41(1): 86-92. DOI: 10.13203/j.whugis20130757\n * @param data\n * @param options\n */\nimport { xFindClosestIndex } from \"../x/xFindClosestIndex.js\";\nexport function xyRollingCircleTransform(data, options = {}) {\n    const { x } = data;\n    let { y } = data;\n    const { radius = 1, position = 'top', shifted = true } = options;\n    if (position !== 'top' && position !== 'bottom') {\n        throw new Error(`Invalid position: ${String(position)}`);\n    }\n    if (position === 'bottom') {\n        y = y.slice();\n        for (let i = 0; i < y.length; i++) {\n            y[i] = -y[i];\n        }\n    }\n    if (x.length === 0 || y.length === 0) {\n        return new Float64Array();\n    }\n    const yCenters = new Float64Array(x.length);\n    for (let i = 0; i < x.length; i++) {\n        const x0 = x[i]; // x center of the current circle\n        const fromX = xFindClosestIndex(x, x0 - radius);\n        const toX = xFindClosestIndex(x, x0 + radius);\n        // for the circle radius we need to evaluate the minimal vertical shift\n        const y0 = y[i] + radius; // y center of the circle on top of peak\n        let yShift = y0; // this is the minimal possible shift\n        for (let j = fromX; j <= toX; j++) {\n            const currentX = x[j];\n            if (currentX < x0 - radius || currentX > x0 + radius) {\n                continue;\n            }\n            const currentMinYShift = y[j] + Math.sqrt(radius ** 2 - (currentX - x0) ** 2);\n            if (currentMinYShift > yShift) {\n                yShift = currentMinYShift;\n            }\n        }\n        yCenters[i] = yShift;\n    }\n    if (!shifted) {\n        for (let i = 0; i < yCenters.length; i++) {\n            yCenters[i] -= radius;\n        }\n    }\n    if (position === 'bottom') {\n        for (let i = 0; i < yCenters.length; i++) {\n            yCenters[i] = -yCenters[i];\n        }\n    }\n    return yCenters;\n}\n//# sourceMappingURL=xyRollingCircleTransform.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Set a value (default 0) to specific zones.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Array of points\n */\nexport function xySetYValue(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { value = 0 } = options;\n    let { zones } = options;\n    if (!Array.isArray(zones) || zones.length === 0) {\n        return data;\n    }\n    zones = zonesNormalize(zones);\n    const newX = x.slice();\n    const newY = y.slice();\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newY[i] = value;\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xySetYValue.js.map","import { xIsMonotonic } from \"../x/index.js\";\n/**\n * This function performs a quick sort of the x array while transforming the y array to preserve the coordinates.\n * @param data - Object that contains property x (Array) and y (Array)\n */\nexport function xySortX(data) {\n    const { x, y } = data;\n    if (xIsMonotonic(x) && x.length > 1) {\n        const floatX = Float64Array.from(x);\n        const floatY = Float64Array.from(y);\n        if (floatX.at(-1) < floatX[0]) {\n            floatX.reverse();\n            floatY.reverse();\n        }\n        return {\n            x: floatX,\n            y: floatY,\n        };\n    }\n    const xyObject = Array.from(x, (val, index) => ({\n        x: val,\n        y: y[index],\n    }));\n    xyObject.sort((a, b) => a.x - b.x);\n    const response = {\n        x: new Float64Array(x.length),\n        y: new Float64Array(y.length),\n    };\n    for (let i = 0; i < x.length; i++) {\n        response.x[i] = xyObject[i].x;\n        response.y[i] = xyObject[i].y;\n    }\n    return response;\n}\n//# sourceMappingURL=xySortX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Convert a DataXY to an array of array containing x,y.\n * @param data - array of points {x,y}\n */\nexport function xyToXYArray(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push([x[i], y[i]]);\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYArray.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * xyToXYObject.\n * @param data - Array of points {x,y}.\n */\nexport function xyToXYObject(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push({ x: x[i], y: y[i] });\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYObject.js.map","import { xyCheck } from \"./xyCheck.js\";\nimport { xySortX } from \"./xySortX.js\";\n/**\n * Ensure x values are unique\n * @param data - Object that contains property x (Array) and y (Array)\n * @param options - Object containing a property algorithm (can be 'sum' or 'average', the latter being the default value), and a property isSorted (boolean indicating if the x-array is sorted).\n */\nexport function xyUniqueX(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length === 0) {\n        return { x: [], y: [] };\n    }\n    const { algorithm = 'average', isSorted = true } = options;\n    if (!isSorted) {\n        data = xySortX(data);\n    }\n    switch (algorithm) {\n        case 'average':\n            return average(data);\n        case 'sum':\n            return sum(data);\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\n/**\n * Average.\n * @param data - Input.\n * @returns Result.\n */\nfunction average(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    let divider = 1;\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY / divider);\n            cumulativeY = 0;\n            divider = 0;\n        }\n        cumulativeY += data.y[i];\n        divider++;\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY / divider);\n    return { x, y };\n}\n/**\n * Sum.\n * @param data - Input.\n * @returns Result.\n */\nfunction sum(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY);\n            cumulativeY = 0;\n        }\n        cumulativeY += data.y[i];\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY);\n    return { x, y };\n}\n//# sourceMappingURL=xyUniqueX.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyWeightedMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const weightedAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            weightedAbscissa.x.push(x[index] * y[index]);\n            weightedAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            weightedAbscissa.x[size - 1] += x[index] * y[index];\n            weightedAbscissa.y[size - 1] += y[index];\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    for (let i = 0; i < merged.x.length; i++) {\n        merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n    }\n    return merged;\n}\n//# sourceMappingURL=xyWeightedMerge.js.map","/**\n * Convert an array of XY arrays to a DataXY object containing x,y arrays\n * @param data - array of arrays [[x,y],[x,y],...]\n */\nexport function xy2ToXY(data) {\n    const xy2 = { x: [], y: [] };\n    for (const xyValue of data) {\n        xy2.x.push(xyValue[0]);\n        xy2.y.push(xyValue[1]);\n    }\n    return xy2;\n}\n//# sourceMappingURL=xy2ToXY.js.map","/**\n * Sort object of arrays, x has to be monotone.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @returns - sorted array\n */\nexport function xreimSortX(data) {\n    const { x, re, im } = data;\n    if (x.length !== re.length || x.length !== im.length) {\n        throw new TypeError('length of x, re and im must be identical');\n    }\n    if (x.length < 2 || x[0] < x[1])\n        return data;\n    return {\n        x: x.toReversed(),\n        re: re.toReversed(),\n        im: im.toReversed(),\n    };\n}\n//# sourceMappingURL=xreimSortX.js.map","import { reimZeroFilling } from \"../reim/index.js\";\n/**\n * This function makes a zero filling to re and im part.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @param totalLength - final number of points\n * @returns - data.\n */\nexport function xreimZeroFilling(data, totalLength) {\n    const { x, re, im } = data;\n    const length = x.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            x: x.slice(0, totalLength),\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newX = new Float64Array(totalLength);\n    newX.set(x);\n    const deltaX = (x.at(-1) - x[0]) / (length - 1);\n    for (let i = length; i < totalLength; i++) {\n        newX[i] = newX[i - 1] + deltaX;\n    }\n    return {\n        x: newX,\n        ...reimZeroFilling({ re, im }, totalLength),\n    };\n}\n//# sourceMappingURL=xreimZeroFilling.js.map","/**\n * GetSlots.\n * @param data - data.\n * @param options - Options.\n */\nexport function getSlots(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const possibleXs = Float64Array.from(data.flatMap((spectrum) => spectrum.x));\n    possibleXs.sort();\n    if (possibleXs.length === 0) {\n        throw new Error('can not process empty arrays');\n    }\n    let currentSlot = {\n        from: possibleXs[0],\n        to: possibleXs[0],\n        average: possibleXs[0],\n        sum: possibleXs[0],\n        number: 1,\n    };\n    const slots = [currentSlot];\n    for (let i = 1; i < possibleXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(possibleXs[i]) : delta;\n        if (possibleXs[i] - currentSlot.to <= currentDelta) {\n            currentSlot.to = possibleXs[i];\n            currentSlot.number++;\n            currentSlot.sum += possibleXs[i];\n            currentSlot.average = currentSlot.sum / currentSlot.number;\n        }\n        else {\n            currentSlot = {\n                from: possibleXs[i],\n                to: possibleXs[i],\n                average: possibleXs[i],\n                sum: possibleXs[i],\n                number: 1,\n            };\n            slots.push(currentSlot);\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlots.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Aligns data, can be used for spectra\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayAlign(data, options = {}) {\n    const { delta = 1, requiredY = false } = options;\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    if (requiredY)\n        return filterRequiredY(x, ys);\n    return { x, ys };\n}\nfunction filterRequiredY(x, ys) {\n    const newX = [];\n    const newYs = Array.from(ys, () => []);\n    for (let i = 0; i < x.length; i++) {\n        if (ys.every((y) => y[i] !== 0)) {\n            newX.push(x[i]);\n            for (let j = 0; j < ys.length; j++) {\n                newYs[j].push(ys[j][i]);\n            }\n        }\n    }\n    return { x: newX, ys: newYs };\n}\n//# sourceMappingURL=xyArrayAlign.js.map","/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values for which the deltaX is small or equal to delta.\n * X values are weighted average\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayWeightedMerge(data, options = {}) {\n    let { delta = 1 } = options;\n    if (typeof delta === 'number') {\n        const deltaNumber = delta;\n        delta = () => deltaNumber;\n    }\n    data = data.filter((spectrum) => spectrum.x.length > 0);\n    if (data.length === 0)\n        return { x: [], y: [] };\n    const x = [];\n    const y = [];\n    const positions = new Array(data.length).fill(0);\n    const point = { x: 0, y: 0 };\n    nextValue(data, positions, point);\n    const slot = {\n        maxX: point.x + delta(point.x),\n        sumY: point.y,\n        sumXY: point.y * point.x,\n    };\n    while (data.length > 0) {\n        nextValue(data, positions, point);\n        const sameSlot = point.x <= slot.maxX;\n        if (!sameSlot) {\n            if (slot.sumY > 0) {\n                x.push(slot.sumXY / slot.sumY);\n                y.push(slot.sumY);\n            }\n            slot.sumY = 0;\n            slot.sumXY = 0;\n        }\n        slot.sumY += point.y;\n        slot.sumXY += point.x * point.y;\n        slot.maxX = point.x + delta(point.x);\n        if (data.length === 0 && slot.sumY > 0) {\n            x.push(slot.sumXY / slot.sumY);\n            y.push(slot.sumY);\n        }\n    }\n    return { x, y };\n}\n/**\n * NextValue.\n * @param data - data.\n * @param positions - Positions array.\n * @param point - Point.\n */\nfunction nextValue(data, positions, point) {\n    let minIndex = 0;\n    let minX = data[0].x[positions[0]];\n    for (let i = 1; i < data.length; i++) {\n        const currentX = data[i].x[positions[i]];\n        if (currentX < minX) {\n            minX = currentX;\n            minIndex = i;\n        }\n    }\n    point.x = minX;\n    point.y = data[minIndex].y[positions[minIndex]];\n    positions[minIndex]++;\n    if (positions[minIndex] === data[minIndex].x.length) {\n        positions.splice(minIndex, 1);\n        data.splice(minIndex, 1);\n    }\n}\n//# sourceMappingURL=xyArrayWeightedMerge.js.map","import { xyArrayWeightedMerge } from \"../xyArrayWeightedMerge.js\";\n/**\n * GetSlotsToFirst.\n * @param data - data.\n * @param options - Options.\n */\nexport function getSlotsToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const firstXs = data[0].x;\n    const slots = [];\n    // we first create the slots based on the first spectrum\n    for (const element of firstXs) {\n        const currentDelta = deltaIsFunction ? delta(element) : delta;\n        slots.push({\n            from: element - currentDelta,\n            to: element + currentDelta,\n            value: element,\n        });\n    }\n    const otherXs = xyArrayWeightedMerge(data.slice(1), options).x;\n    let currentPosition = 0;\n    for (const slot of slots) {\n        while (otherXs[currentPosition] < slot.to &&\n            currentPosition < otherXs.length) {\n            if (otherXs[currentPosition] < slot.from) {\n                const currentDelta = deltaIsFunction\n                    ? delta(otherXs[currentPosition])\n                    : delta;\n                slots.push({\n                    from: otherXs[currentPosition] - currentDelta,\n                    to: otherXs[currentPosition] + currentDelta,\n                    value: otherXs[currentPosition],\n                });\n            }\n            currentPosition++;\n        }\n    }\n    for (let i = currentPosition; i < otherXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(otherXs[i]) : delta;\n        slots.push({\n            from: otherXs[i] - currentDelta,\n            to: otherXs[i] + currentDelta,\n            value: otherXs[i],\n        });\n    }\n    slots.sort((a, b) => a.value - b.value);\n    // we prevent slots overlap in the first spectrum\n    for (let i = 0; i < slots.length - 1; i++) {\n        if (slots[i].to > slots[i + 1].from) {\n            const middle = (slots[i].value + slots[i + 1].value) / 2;\n            slots[i].to = middle;\n            slots[i + 1].from = middle;\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlotsToFirst.js.map","import { getSlotsToFirst } from \"./utils/getSlotsToFirst.js\";\n/**\n * We align all the data/spectra to the first array of X.\n * The alignment is based on the X values of the first spectrum and the `delta` error allowed.\n * If some x values are missing in the first spectrum we will add them\n * @param data - data\n * @param options - options\n */\nexport function xyArrayAlignToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const slots = getSlotsToFirst(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.value));\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] < slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    return { x, ys };\n}\n//# sourceMappingURL=xyArrayAlignToFirst.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values that are the closest possible\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayMerge(data, options = {}) {\n    const { delta = 1 } = options;\n    // We start by checking that the data/spectra don't have peaks too close and we simplify them.\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    // At first, we will calculate the X values (simple mean).\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const y = new Float64Array(x.length);\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                y[i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyArrayMerge.js.map","/**\n * Throws an error if it's not an array of x,y objects.\n * Only checks the first element.\n * @param points - List of points.\n * @param options - Additional checks.\n */\nexport function xyObjectCheck(points, options = {}) {\n    const { minLength = 0 } = options;\n    if (!Array.isArray(points)) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (points.length > 0 &&\n        (typeof points[0].x !== 'number' || typeof points[0].y !== 'number')) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (minLength && points.length < minLength) {\n        throw new Error(`points must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyObjectCheck.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the max x value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMaxXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x > current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxXPoint.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the min x value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMinXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x < current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinXPoint.js.map","import { xyObjectMaxXPoint } from \"./xyObjectMaxXPoint.js\";\nimport { xyObjectMinXPoint } from \"./xyObjectMinXPoint.js\";\n/**\n * Filter the array by taking the higher points (max y value) and only.\n * Keep one per slot. There are 2 different slots, the smallest one will have the\n * new property `close` to true\n * @param points - array of all the points\n * @param options - Options\n * @returns - copy of points with 'close' property\n */\nexport function xyObjectBestPoints(points, options = {}) {\n    const { from = xyObjectMinXPoint(points).x, to = xyObjectMaxXPoint(points).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, } = options;\n    const slot = (to - from) / numberSlots;\n    const closeSlot = (to - from) / numberCloseSlots;\n    const selected = points\n        .filter((point) => point.x >= from && point.x <= to)\n        .map((point) => {\n        return {\n            point,\n        };\n    });\n    selected.sort((a, b) => {\n        return b.point.y - a.point.y;\n    });\n    const toReturn = [];\n    if (selected.length === 0)\n        return [];\n    const minY = selected[0].point.y * threshold;\n    peakLoop: for (const item of selected) {\n        if (item.point.y < minY) {\n            break;\n        }\n        let close = false;\n        for (const existing of toReturn) {\n            if (Math.abs(existing.x - item.point.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.point.x) < slot) {\n                close = true;\n            }\n        }\n        const newPeak = { ...item.point, close };\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    toReturn.sort((a, b) => a.x - b.x);\n    return toReturn;\n}\n//# sourceMappingURL=xyObjectBestPoints.js.map","/**\n * xyObjectJoinX.\n * @param points - Array of growing points {x,y}.\n * @param options - Options.\n */\nexport function xyObjectJoinX(points, options = {}) {\n    const { xError = Number.EPSILON } = options;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.MIN_SAFE_INTEGER,\n        y: 0,\n    };\n    for (const point of points) {\n        if (point.x - current.x <= xError) {\n            // weighted sum\n            if (current.y !== 0 || point.y !== 0) {\n                current.x =\n                    (point.y / (current.y + point.y)) * (point.x - current.x) + current.x;\n                current.y += point.y;\n            }\n        }\n        else {\n            current = {\n                x: point.x,\n                y: point.y,\n            };\n            result.push(current);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectJoinX.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the max y value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n * @returns max point\n */\nexport function xyObjectMaxYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y > current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxYPoint.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Returns all min and max values of an array of points.\n * @param points - Array of points {x,y}.\n * @returns - Object with the 4 extrema.\n */\nexport function xyObjectMinMaxValues(points) {\n    xyObjectCheck(points, { minLength: 1 });\n    let minX = points[0].x;\n    let maxX = minX;\n    let minY = points[0].y;\n    let maxY = minY;\n    for (const point of points) {\n        if (point.x < minX)\n            minX = point.x;\n        if (point.x > maxX)\n            maxX = point.x;\n        if (point.y < minY)\n            minY = point.y;\n        if (point.y > maxY)\n            maxY = point.y;\n    }\n    return { minX, maxX, minY, maxY };\n}\n//# sourceMappingURL=xyObjectMinMaxValues.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the min y value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMinYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y < current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinYPoint.js.map","import { xNormed } from \"../x/xNormed.js\";\n/**\n * Resize the Y values of the points to be normalized.\n * @param points - array of points {x,y}\n * @param options\n * @returns - array of points {x,y} with normalized Y values\n */\nexport function xyObjectNormedY(points, options) {\n    points = structuredClone(points);\n    const ys = points.map((point) => point.y);\n    const normalizedYs = xNormed(ys, options);\n    for (let i = 0; i < points.length; i++) {\n        points[i].y = normalizedYs[i];\n    }\n    return points;\n}\n//# sourceMappingURL=xyObjectNormedY.js.map","/**\n * xyObjectSlotX\n * @param points - Array of growing points {x,y}.\n * @param options - Options.\n */\nexport function xyObjectSlotX(points, options = {}) {\n    const { slotWidth = 1 } = options;\n    const halfSlot = slotWidth / 2;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.NEGATIVE_INFINITY,\n        y: 0,\n    };\n    for (const point of points) {\n        const slot = point.x - ((point.x + halfSlot) % slotWidth) + halfSlot;\n        if (Math.abs(current.x - slot) > Number.EPSILON) {\n            current = {\n                x: slot,\n                y: 0,\n            };\n            result.push(current);\n        }\n        current.y += point.y;\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectSlotX.js.map","/**\n * Sorts an array of points in-place.\n * @param points - array of points {x,y}\n * @returns - sorted array of points {x,y}\n */\nexport function xyObjectSortX(points) {\n    points.sort((a, b) => a.x - b.x);\n    return points;\n}\n//# sourceMappingURL=xyObjectSortX.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Calculate the sum of Y values.\n * @param points - Object that contains property x and y (an array)\n */\nexport function xyObjectSumY(points = []) {\n    xyObjectCheck(points);\n    let sum = 0;\n    for (const point of points) {\n        sum += point.y;\n    }\n    return sum;\n}\n//# sourceMappingURL=xyObjectSumY.js.map","/**\n * xyObjectToXY.\n * @param points - Array of points {x,y}.\n */\nexport function xyObjectToXY(points) {\n    return {\n        x: points.map((entry) => entry.x),\n        y: points.map((entry) => entry.y),\n    };\n}\n//# sourceMappingURL=xyObjectToXY.js.map","/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        if (options.encoding) {\n            return new TextDecoder(options.encoding).decode(blob);\n        }\n        else {\n            return decodeText(blob);\n        }\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction decodeText(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 new TextDecoder('utf-16be').decode(uint8);\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return new TextDecoder('utf-16le').decode(uint8);\n        }\n    }\n    try {\n        return new TextDecoder('utf-8', { fatal: true }).decode(uint8);\n    }\n    catch {\n        return new TextDecoder('latin1').decode(uint8);\n    }\n}\n//# sourceMappingURL=index.js.map","import { ensureString } from 'ensure-string';\nimport { xIsMonotonic, xMaxValue, xyUniqueX } from 'ml-spectra-processing';\n/**\n * General internal parsing function\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns parsed text file with column information\n */\nexport function parse(text, options = {}) {\n    const { rescale = false, uniqueX = false, bestGuess = false, \n    //@ts-expect-error old library used this property and we want to throw an error so that people are forced to migrate\n    keepInfo, } = options;\n    let { xColumn = 0, yColumn = 1, numberColumns = Number.MAX_SAFE_INTEGER, maxNumberColumns = Number.MAX_SAFE_INTEGER, minNumberColumns = 2, } = options;\n    if (keepInfo !== undefined) {\n        throw new Error('keepInfo has been deprecated, please use the new method parseXYAndKeepInfo');\n    }\n    text = ensureString(text);\n    maxNumberColumns = Math.max(maxNumberColumns, xColumn + 1, yColumn + 1);\n    minNumberColumns = Math.max(xColumn + 1, yColumn + 1, minNumberColumns);\n    const lines = text.split(/[\\n\\r]+/);\n    let matrix = [];\n    const info = [];\n    let position = 0;\n    for (let line of lines) {\n        line = line.trim();\n        // we will consider only lines that contains only numbers\n        if (/\\d+/.test(line) && /^[\\d\\t +,.;Ee-]+$/.test(line)) {\n            let fields = line.split(/,[\\t ;]+|[\\t ;]+/);\n            if (fields.length === 1) {\n                fields = line.split(/[\\t ,;]+/);\n            }\n            if (fields &&\n                fields.length >= minNumberColumns && // we filter lines that have not enough or too many columns\n                fields.length <= maxNumberColumns) {\n                matrix.push(fields.map((value) => Number.parseFloat(value.replace(',', '.'))));\n                position++;\n            }\n        }\n        else if (line) {\n            info.push({ position, value: line });\n        }\n    }\n    if (bestGuess) {\n        if (matrix[0]?.length === 3 &&\n            options.xColumn === undefined &&\n            options.yColumn === undefined) {\n            // is the first column a sequential number?\n            let skipFirstColumn = true;\n            for (let i = 0; i < matrix.length - 1; i++) {\n                const currentFirst = matrix[i][0];\n                const nextFirst = matrix[i + 1][0];\n                if (Math.abs(currentFirst - nextFirst) !== 1) {\n                    skipFirstColumn = false;\n                }\n            }\n            if (skipFirstColumn) {\n                xColumn = 1;\n                yColumn = 2;\n            }\n        }\n        if (matrix[0] && matrix[0].length > 3) {\n            const xs = [];\n            for (const row of matrix) {\n                for (let i = xColumn; i < row.length; i += 2) {\n                    xs.push(row[i]);\n                }\n            }\n            if (xIsMonotonic(xs)) {\n                numberColumns = 2;\n            }\n        }\n    }\n    if (numberColumns) {\n        const newMatrix = [];\n        for (const row of matrix) {\n            for (let i = 0; i < row.length; i += numberColumns) {\n                newMatrix.push(row.slice(i, i + numberColumns));\n            }\n        }\n        matrix = newMatrix;\n    }\n    let result = {\n        x: matrix.map((row) => row[xColumn]),\n        y: matrix.map((row) => row[yColumn]),\n    };\n    if (uniqueX) {\n        result = xyUniqueX(result, { algorithm: 'sum' });\n    }\n    if (rescale) {\n        const maxY = xMaxValue(result.y);\n        const yValues = result.y;\n        for (let i = 0; i < yValues.length; i++) {\n            yValues[i] = yValues[i] / maxY;\n        }\n    }\n    return {\n        info,\n        data: result,\n    };\n}\n//# sourceMappingURL=parse.js.map","import { parse } from \"./parse.js\";\nexport * from \"./ParseXYOptions.js\";\n/**\n * Parse a text-file and convert it to an object {x:[], y:[]}\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data\n */\nexport function parseXY(text, options = {}) {\n    return parse(text, options).data;\n}\n/**\n * Parse a text-file and returns the parsed data and information about the columns\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data with information about the columns\n */\nexport function parseXYAndKeepInfo(text, options = {}) {\n    return parse(text, options);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getBestPeaks = getBestPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array by taking the higher peaks and only\n * keep one per slot.\n * There are 2 different slots, the smallest one will have the\n * extra annotation `close` to true\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.minValue=Number.NEGATIVE_INFINITY] - min Y value of the window to consider\n * @param {number} [options.maxValue=Number.POSITIVE_INFINITY] - max Y value of the window to consider\n * @param {number} [options.searchMonoisotopicRatio=0] - search previous peaks with at least ratio height\n * @param {number} [options.limit=20] - max number of peaks\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.numberSlots=10] - define the number of slots and indirectly the slot width\n * @param {number} [options.numberCloseSlots=50]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getBestPeaks(peaks, options = {}) {\n    const { searchMonoisotopicRatio = 0, from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, minValue = Number.NEGATIVE_INFINITY, maxValue = Number.POSITIVE_INFINITY, } = options;\n    let slot = (to - from) / numberSlots;\n    let closeSlot = (to - from) / numberCloseSlots;\n    let selected = peaks\n        .filter((peak) => peak.x >= from && peak.x <= to)\n        .filter((peak) => peak.y >= minValue && peak.y <= maxValue)\n        .map((peak) => {\n        return {\n            peak,\n            monoisotopic: false,\n        };\n    });\n    if (searchMonoisotopicRatio) {\n        selected = selected.toSorted((a, b) => b.peak.x - a.peak.x);\n        for (let i = 0; i < selected.length; i++) {\n            let item = selected[i];\n            for (let j = i + 1; j < selected.length; j++) {\n                let nextItem = selected[j];\n                if (item.peak.x - nextItem.peak.x < 0.09)\n                    continue;\n                if (item.peak.x - nextItem.peak.x > 1.1)\n                    break;\n                if (nextItem.peak.y > item.peak.y * searchMonoisotopicRatio) {\n                    item.monoisotopic = false;\n                    nextItem.monoisotopic = true;\n                    break;\n                }\n            }\n        }\n    }\n    selected = selected.toSorted((a, b) => {\n        if (a.monoisotopic && !b.monoisotopic)\n            return -1;\n        if (b.monoisotopic && !a.monoisotopic)\n            return 1;\n        return b.peak.y - a.peak.y;\n    });\n    let toReturn = [];\n    if (selected.length === 0)\n        return [];\n    let minY = selected[0].peak.y * threshold;\n    peakLoop: for (let item of selected) {\n        if (item.peak.y < minY) {\n            if (item.monoisotopic) {\n                continue;\n            }\n            else {\n                break;\n            }\n        }\n        let close = false;\n        for (let existing of toReturn) {\n            if (Math.abs(existing.x - item.peak.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.peak.x) < slot) {\n                close = true;\n            }\n        }\n        let newPeak = structuredClone(item.peak);\n        newPeak.close = close;\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    return toReturn.toSorted((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getBestPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.atomSorter = atomSorter;\n/**\n * Implementation of the Hill system for sorting atoms\n * https://en.wikipedia.org/wiki/Chemical_formula#Hill_system\n * @param a - first atom to compare\n * @param b - second atom to compare\n * @returns A value suitable for use in Array.prototype.sort.\n */\nfunction atomSorter(a, b) {\n    if (a === b)\n        return 0;\n    if (a === 'C')\n        return -1;\n    if (b === 'C')\n        return 1;\n    if (a === 'H')\n        return -1;\n    if (b === 'H')\n        return 1;\n    if (a < b)\n        return -1;\n    return 1;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopes = void 0;\nexports.elementsAndIsotopes = [\n    {\n        number: 1,\n        isotopes: [\n            { nominal: 1, mass: 1.00782503223, abundance: 0.999885 },\n            { nominal: 2, mass: 2.01410177812, abundance: 0.000115 },\n            { nominal: 3, mass: 3.0160492779 },\n            { nominal: 4, mass: 4.02643 },\n            { nominal: 5, mass: 5.035311 },\n            { nominal: 6, mass: 6.04496 },\n            { nominal: 7, mass: 7.0527 },\n        ],\n        symbol: 'H',\n        mass: 1.0079407540557772,\n        name: 'Hydrogen',\n        monoisotopicMass: 1.00782503223,\n    },\n    {\n        number: 2,\n        isotopes: [\n            { nominal: 3, mass: 3.0160293201, abundance: 0.00000134 },\n            { nominal: 4, mass: 4.00260325413, abundance: 0.99999866 },\n            { nominal: 5, mass: 5.012057 },\n            { nominal: 6, mass: 6.018885891 },\n            { nominal: 7, mass: 7.0279907 },\n            { nominal: 8, mass: 8.03393439 },\n            { nominal: 9, mass: 9.043946 },\n            { nominal: 10, mass: 10.05279 },\n        ],\n        symbol: 'He',\n        mass: 4.002601932120929,\n        name: 'Helium',\n        monoisotopicMass: 4.00260325413,\n    },\n    {\n        number: 3,\n        isotopes: [\n            { nominal: 3, mass: 3.0308 },\n            { nominal: 4, mass: 4.02719 },\n            { nominal: 5, mass: 5.012538 },\n            { nominal: 6, mass: 6.0151228874, abundance: 0.0759 },\n            { nominal: 7, mass: 7.0160034366, abundance: 0.9241 },\n            { nominal: 8, mass: 8.022486246 },\n            { nominal: 9, mass: 9.02679019 },\n            { nominal: 10, mass: 10.035483 },\n            { nominal: 11, mass: 11.04372358 },\n            { nominal: 12, mass: 12.052517 },\n            { nominal: 13, mass: 13.06263 },\n        ],\n        symbol: 'Li',\n        mass: 6.94003660291572,\n        name: 'Lithium',\n        monoisotopicMass: 7.0160034366,\n    },\n    {\n        number: 4,\n        isotopes: [\n            { nominal: 5, mass: 5.0399 },\n            { nominal: 6, mass: 6.0197264 },\n            { nominal: 7, mass: 7.016928717 },\n            { nominal: 8, mass: 8.005305102 },\n            { nominal: 9, mass: 9.012183065, abundance: 1 },\n            { nominal: 10, mass: 10.013534695 },\n            { nominal: 11, mass: 11.02166108 },\n            { nominal: 12, mass: 12.0269221 },\n            { nominal: 13, mass: 13.036135 },\n            { nominal: 14, mass: 14.04289 },\n            { nominal: 15, mass: 15.05342 },\n            { nominal: 16, mass: 16.06167 },\n        ],\n        symbol: 'Be',\n        mass: 9.012183065,\n        name: 'Beryllium',\n        monoisotopicMass: 9.012183065,\n    },\n    {\n        number: 5,\n        isotopes: [\n            { nominal: 6, mass: 6.0508 },\n            { nominal: 7, mass: 7.029712 },\n            { nominal: 8, mass: 8.0246073 },\n            { nominal: 9, mass: 9.01332965 },\n            { nominal: 10, mass: 10.01293695, abundance: 0.199 },\n            { nominal: 11, mass: 11.00930536, abundance: 0.801 },\n            { nominal: 12, mass: 12.0143527 },\n            { nominal: 13, mass: 13.0177802 },\n            { nominal: 14, mass: 14.025404 },\n            { nominal: 15, mass: 15.031088 },\n            { nominal: 16, mass: 16.039842 },\n            { nominal: 17, mass: 17.04699 },\n            { nominal: 18, mass: 18.05566 },\n            { nominal: 19, mass: 19.0631 },\n            { nominal: 20, mass: 20.07207 },\n            { nominal: 21, mass: 21.08129 },\n        ],\n        symbol: 'B',\n        mass: 10.811028046410001,\n        name: 'Boron',\n        monoisotopicMass: 11.00930536,\n    },\n    {\n        number: 6,\n        isotopes: [\n            { nominal: 8, mass: 8.037643 },\n            { nominal: 9, mass: 9.0310372 },\n            { nominal: 10, mass: 10.01685331 },\n            { nominal: 11, mass: 11.0114336 },\n            { nominal: 12, mass: 12, abundance: 0.9893 },\n            { nominal: 13, mass: 13.00335483507, abundance: 0.0107 },\n            { nominal: 14, mass: 14.0032419884 },\n            { nominal: 15, mass: 15.01059926 },\n            { nominal: 16, mass: 16.0147013 },\n            { nominal: 17, mass: 17.022577 },\n            { nominal: 18, mass: 18.026751 },\n            { nominal: 19, mass: 19.0348 },\n            { nominal: 20, mass: 20.04032 },\n            { nominal: 21, mass: 21.049 },\n            { nominal: 22, mass: 22.05753 },\n            { nominal: 23, mass: 23.0689 },\n        ],\n        symbol: 'C',\n        mass: 12.010735896735248,\n        name: 'Carbon',\n        monoisotopicMass: 12,\n    },\n    {\n        number: 7,\n        isotopes: [\n            { nominal: 10, mass: 10.04165 },\n            { nominal: 11, mass: 11.026091 },\n            { nominal: 12, mass: 12.0186132 },\n            { nominal: 13, mass: 13.00573861 },\n            { nominal: 14, mass: 14.00307400443, abundance: 0.99636 },\n            { nominal: 15, mass: 15.00010889888, abundance: 0.00364 },\n            { nominal: 16, mass: 16.0061019 },\n            { nominal: 17, mass: 17.008449 },\n            { nominal: 18, mass: 18.014078 },\n            { nominal: 19, mass: 19.017022 },\n            { nominal: 20, mass: 20.023366 },\n            { nominal: 21, mass: 21.02711 },\n            { nominal: 22, mass: 22.03439 },\n            { nominal: 23, mass: 23.04114 },\n            { nominal: 24, mass: 24.05039 },\n            { nominal: 25, mass: 25.0601 },\n        ],\n        symbol: 'N',\n        mass: 14.006703211445798,\n        name: 'Nitrogen',\n        monoisotopicMass: 14.00307400443,\n    },\n    {\n        number: 8,\n        isotopes: [\n            { nominal: 12, mass: 12.034262 },\n            { nominal: 13, mass: 13.024815 },\n            { nominal: 14, mass: 14.00859636 },\n            { nominal: 15, mass: 15.00306562 },\n            { nominal: 16, mass: 15.99491461957, abundance: 0.99757 },\n            { nominal: 17, mass: 16.9991317565, abundance: 0.00038 },\n            { nominal: 18, mass: 17.99915961286, abundance: 0.00205 },\n            { nominal: 19, mass: 19.003578 },\n            { nominal: 20, mass: 20.00407535 },\n            { nominal: 21, mass: 21.008655 },\n            { nominal: 22, mass: 22.009966 },\n            { nominal: 23, mass: 23.015696 },\n            { nominal: 24, mass: 24.01986 },\n            { nominal: 25, mass: 25.02936 },\n            { nominal: 26, mass: 26.03729 },\n            { nominal: 27, mass: 27.04772 },\n            { nominal: 28, mass: 28.05591 },\n        ],\n        symbol: 'O',\n        mass: 15.999404924318277,\n        name: 'Oxygen',\n        monoisotopicMass: 15.99491461957,\n    },\n    {\n        number: 9,\n        isotopes: [\n            { nominal: 14, mass: 14.034315 },\n            { nominal: 15, mass: 15.018043 },\n            { nominal: 16, mass: 16.0114657 },\n            { nominal: 17, mass: 17.00209524 },\n            { nominal: 18, mass: 18.00093733 },\n            { nominal: 19, mass: 18.99840316273, abundance: 1 },\n            { nominal: 20, mass: 19.999981252 },\n            { nominal: 21, mass: 20.9999489 },\n            { nominal: 22, mass: 22.002999 },\n            { nominal: 23, mass: 23.003557 },\n            { nominal: 24, mass: 24.008115 },\n            { nominal: 25, mass: 25.012199 },\n            { nominal: 26, mass: 26.020038 },\n            { nominal: 27, mass: 27.02644 },\n            { nominal: 28, mass: 28.03534 },\n            { nominal: 29, mass: 29.04254 },\n            { nominal: 30, mass: 30.05165 },\n            { nominal: 31, mass: 31.05971 },\n        ],\n        symbol: 'F',\n        mass: 18.99840316273,\n        name: 'Fluorine',\n        monoisotopicMass: 18.99840316273,\n    },\n    {\n        number: 10,\n        isotopes: [\n            { nominal: 16, mass: 16.02575 },\n            { nominal: 17, mass: 17.01771396 },\n            { nominal: 18, mass: 18.0057087 },\n            { nominal: 19, mass: 19.00188091 },\n            { nominal: 20, mass: 19.9924401762, abundance: 0.9048 },\n            { nominal: 21, mass: 20.993846685, abundance: 0.0027 },\n            { nominal: 22, mass: 21.991385114, abundance: 0.0925 },\n            { nominal: 23, mass: 22.99446691 },\n            { nominal: 24, mass: 23.99361065 },\n            { nominal: 25, mass: 24.997789 },\n            { nominal: 26, mass: 26.000515 },\n            { nominal: 27, mass: 27.007553 },\n            { nominal: 28, mass: 28.01212 },\n            { nominal: 29, mass: 29.01975 },\n            { nominal: 30, mass: 30.02473 },\n            { nominal: 31, mass: 31.0331 },\n            { nominal: 32, mass: 32.03972 },\n            { nominal: 33, mass: 33.04938 },\n            { nominal: 34, mass: 34.05673 },\n        ],\n        symbol: 'Ne',\n        mass: 20.18004638052026,\n        name: 'Neon',\n        monoisotopicMass: 19.9924401762,\n    },\n    {\n        number: 11,\n        isotopes: [\n            { nominal: 18, mass: 18.02688 },\n            { nominal: 19, mass: 19.01388 },\n            { nominal: 20, mass: 20.0073544 },\n            { nominal: 21, mass: 20.99765469 },\n            { nominal: 22, mass: 21.99443741 },\n            { nominal: 23, mass: 22.989769282, abundance: 1 },\n            { nominal: 24, mass: 23.99096295 },\n            { nominal: 25, mass: 24.989954 },\n            { nominal: 26, mass: 25.9926346 },\n            { nominal: 27, mass: 26.9940765 },\n            { nominal: 28, mass: 27.998939 },\n            { nominal: 29, mass: 29.0028771 },\n            { nominal: 30, mass: 30.0090979 },\n            { nominal: 31, mass: 31.013163 },\n            { nominal: 32, mass: 32.02019 },\n            { nominal: 33, mass: 33.02573 },\n            { nominal: 34, mass: 34.03359 },\n            { nominal: 35, mass: 35.04062 },\n            { nominal: 36, mass: 36.04929 },\n            { nominal: 37, mass: 37.05705 },\n        ],\n        symbol: 'Na',\n        mass: 22.989769282,\n        name: 'Sodium',\n        monoisotopicMass: 22.989769282,\n    },\n    {\n        number: 12,\n        isotopes: [\n            { nominal: 19, mass: 19.034169 },\n            { nominal: 20, mass: 20.01885 },\n            { nominal: 21, mass: 21.011716 },\n            { nominal: 22, mass: 21.99957065 },\n            { nominal: 23, mass: 22.99412421 },\n            { nominal: 24, mass: 23.985041697, abundance: 0.7899 },\n            { nominal: 25, mass: 24.985836976, abundance: 0.1 },\n            { nominal: 26, mass: 25.982592968, abundance: 0.1101 },\n            { nominal: 27, mass: 26.984340624 },\n            { nominal: 28, mass: 27.9838767 },\n            { nominal: 29, mass: 28.988617 },\n            { nominal: 30, mass: 29.9904629 },\n            { nominal: 31, mass: 30.996648 },\n            { nominal: 32, mass: 31.9991102 },\n            { nominal: 33, mass: 33.0053271 },\n            { nominal: 34, mass: 34.008935 },\n            { nominal: 35, mass: 35.01679 },\n            { nominal: 36, mass: 36.02188 },\n            { nominal: 37, mass: 37.03037 },\n            { nominal: 38, mass: 38.03658 },\n            { nominal: 39, mass: 39.04538 },\n            { nominal: 40, mass: 40.05218 },\n        ],\n        symbol: 'Mg',\n        mass: 24.3050516198371,\n        name: 'Magnesium',\n        monoisotopicMass: 23.985041697,\n    },\n    {\n        number: 13,\n        isotopes: [\n            { nominal: 21, mass: 21.02897 },\n            { nominal: 22, mass: 22.01954 },\n            { nominal: 23, mass: 23.00724435 },\n            { nominal: 24, mass: 23.9999489 },\n            { nominal: 25, mass: 24.9904281 },\n            { nominal: 26, mass: 25.986891904 },\n            { nominal: 27, mass: 26.98153853, abundance: 1 },\n            { nominal: 28, mass: 27.98191021 },\n            { nominal: 29, mass: 28.9804565 },\n            { nominal: 30, mass: 29.98296 },\n            { nominal: 31, mass: 30.983945 },\n            { nominal: 32, mass: 31.988085 },\n            { nominal: 33, mass: 32.990909 },\n            { nominal: 34, mass: 33.996705 },\n            { nominal: 35, mass: 34.999764 },\n            { nominal: 36, mass: 36.00639 },\n            { nominal: 37, mass: 37.01053 },\n            { nominal: 38, mass: 38.0174 },\n            { nominal: 39, mass: 39.02254 },\n            { nominal: 40, mass: 40.03003 },\n            { nominal: 41, mass: 41.03638 },\n            { nominal: 42, mass: 42.04384 },\n            { nominal: 43, mass: 43.05147 },\n        ],\n        symbol: 'Al',\n        mass: 26.98153853,\n        name: 'Aluminium',\n        monoisotopicMass: 26.98153853,\n    },\n    {\n        number: 14,\n        isotopes: [\n            { nominal: 22, mass: 22.03579 },\n            { nominal: 23, mass: 23.02544 },\n            { nominal: 24, mass: 24.011535 },\n            { nominal: 25, mass: 25.004109 },\n            { nominal: 26, mass: 25.99233384 },\n            { nominal: 27, mass: 26.98670481 },\n            { nominal: 28, mass: 27.97692653465, abundance: 0.92223 },\n            { nominal: 29, mass: 28.9764946649, abundance: 0.04685 },\n            { nominal: 30, mass: 29.973770136, abundance: 0.03092 },\n            { nominal: 31, mass: 30.975363194 },\n            { nominal: 32, mass: 31.97415154 },\n            { nominal: 33, mass: 32.97797696 },\n            { nominal: 34, mass: 33.978576 },\n            { nominal: 35, mass: 34.984583 },\n            { nominal: 36, mass: 35.986695 },\n            { nominal: 37, mass: 36.992921 },\n            { nominal: 38, mass: 37.995523 },\n            { nominal: 39, mass: 39.002491 },\n            { nominal: 40, mass: 40.00583 },\n            { nominal: 41, mass: 41.01301 },\n            { nominal: 42, mass: 42.01778 },\n            { nominal: 43, mass: 43.0248 },\n            { nominal: 44, mass: 44.03061 },\n            { nominal: 45, mass: 45.03995 },\n        ],\n        symbol: 'Si',\n        mass: 28.085498705705955,\n        name: 'Silicon',\n        monoisotopicMass: 27.97692653465,\n    },\n    {\n        number: 15,\n        isotopes: [\n            { nominal: 24, mass: 24.03577 },\n            { nominal: 25, mass: 25.02119 },\n            { nominal: 26, mass: 26.01178 },\n            { nominal: 27, mass: 26.999224 },\n            { nominal: 28, mass: 27.9923266 },\n            { nominal: 29, mass: 28.98180079 },\n            { nominal: 30, mass: 29.97831375 },\n            { nominal: 31, mass: 30.97376199842, abundance: 1 },\n            { nominal: 32, mass: 31.973907643 },\n            { nominal: 33, mass: 32.9717257 },\n            { nominal: 34, mass: 33.97364589 },\n            { nominal: 35, mass: 34.9733141 },\n            { nominal: 36, mass: 35.97826 },\n            { nominal: 37, mass: 36.979607 },\n            { nominal: 38, mass: 37.984252 },\n            { nominal: 39, mass: 38.986227 },\n            { nominal: 40, mass: 39.99133 },\n            { nominal: 41, mass: 40.994654 },\n            { nominal: 42, mass: 42.00108 },\n            { nominal: 43, mass: 43.00502 },\n            { nominal: 44, mass: 44.01121 },\n            { nominal: 45, mass: 45.01645 },\n            { nominal: 46, mass: 46.02446 },\n            { nominal: 47, mass: 47.03139 },\n        ],\n        symbol: 'P',\n        mass: 30.97376199842,\n        name: 'Phosphorus',\n        monoisotopicMass: 30.97376199842,\n    },\n    {\n        number: 16,\n        isotopes: [\n            { nominal: 26, mass: 26.02907 },\n            { nominal: 27, mass: 27.01828 },\n            { nominal: 28, mass: 28.00437 },\n            { nominal: 29, mass: 28.996611 },\n            { nominal: 30, mass: 29.98490703 },\n            { nominal: 31, mass: 30.97955701 },\n            { nominal: 32, mass: 31.9720711744, abundance: 0.9499 },\n            { nominal: 33, mass: 32.9714589098, abundance: 0.0075 },\n            { nominal: 34, mass: 33.967867004, abundance: 0.0425 },\n            { nominal: 35, mass: 34.96903231 },\n            { nominal: 36, mass: 35.96708071, abundance: 0.0001 },\n            { nominal: 37, mass: 36.97112551 },\n            { nominal: 38, mass: 37.9711633 },\n            { nominal: 39, mass: 38.975134 },\n            { nominal: 40, mass: 39.9754826 },\n            { nominal: 41, mass: 40.9795935 },\n            { nominal: 42, mass: 41.9810651 },\n            { nominal: 43, mass: 42.9869076 },\n            { nominal: 44, mass: 43.9901188 },\n            { nominal: 45, mass: 44.99572 },\n            { nominal: 46, mass: 46.00004 },\n            { nominal: 47, mass: 47.00795 },\n            { nominal: 48, mass: 48.0137 },\n            { nominal: 49, mass: 49.02276 },\n        ],\n        symbol: 'S',\n        mass: 32.06478740612706,\n        name: 'Sulfur',\n        monoisotopicMass: 31.9720711744,\n    },\n    {\n        number: 17,\n        isotopes: [\n            { nominal: 28, mass: 28.02954 },\n            { nominal: 29, mass: 29.01478 },\n            { nominal: 30, mass: 30.00477 },\n            { nominal: 31, mass: 30.992414 },\n            { nominal: 32, mass: 31.98568464 },\n            { nominal: 33, mass: 32.97745199 },\n            { nominal: 34, mass: 33.973762485 },\n            { nominal: 35, mass: 34.968852682, abundance: 0.7576 },\n            { nominal: 36, mass: 35.968306809 },\n            { nominal: 37, mass: 36.965902602, abundance: 0.2424 },\n            { nominal: 38, mass: 37.96801044 },\n            { nominal: 39, mass: 38.9680082 },\n            { nominal: 40, mass: 39.970415 },\n            { nominal: 41, mass: 40.970685 },\n            { nominal: 42, mass: 41.97325 },\n            { nominal: 43, mass: 42.97389 },\n            { nominal: 44, mass: 43.97787 },\n            { nominal: 45, mass: 44.98029 },\n            { nominal: 46, mass: 45.98517 },\n            { nominal: 47, mass: 46.98916 },\n            { nominal: 48, mass: 47.99564 },\n            { nominal: 49, mass: 49.00123 },\n            { nominal: 50, mass: 50.00905 },\n            { nominal: 51, mass: 51.01554 },\n        ],\n        symbol: 'Cl',\n        mass: 35.452937582608,\n        name: 'Chlorine',\n        monoisotopicMass: 34.968852682,\n    },\n    {\n        number: 18,\n        isotopes: [\n            { nominal: 30, mass: 30.02307 },\n            { nominal: 31, mass: 31.01212 },\n            { nominal: 32, mass: 31.9976378 },\n            { nominal: 33, mass: 32.98992555 },\n            { nominal: 34, mass: 33.98027009 },\n            { nominal: 35, mass: 34.97525759 },\n            { nominal: 36, mass: 35.967545105, abundance: 0.003336 },\n            { nominal: 37, mass: 36.96677633 },\n            { nominal: 38, mass: 37.96273211, abundance: 0.000629 },\n            { nominal: 39, mass: 38.964313 },\n            { nominal: 40, mass: 39.9623831237, abundance: 0.996035 },\n            { nominal: 41, mass: 40.96450057 },\n            { nominal: 42, mass: 41.9630457 },\n            { nominal: 43, mass: 42.9656361 },\n            { nominal: 44, mass: 43.9649238 },\n            { nominal: 45, mass: 44.96803973 },\n            { nominal: 46, mass: 45.968083 },\n            { nominal: 47, mass: 46.972935 },\n            { nominal: 48, mass: 47.97591 },\n            { nominal: 49, mass: 48.9819 },\n            { nominal: 50, mass: 49.98613 },\n            { nominal: 51, mass: 50.9937 },\n            { nominal: 52, mass: 51.99896 },\n            { nominal: 53, mass: 53.00729 },\n        ],\n        symbol: 'Ar',\n        mass: 39.947798563582005,\n        name: 'Argon',\n        monoisotopicMass: 39.9623831237,\n    },\n    {\n        number: 19,\n        isotopes: [\n            { nominal: 32, mass: 32.02265 },\n            { nominal: 33, mass: 33.00756 },\n            { nominal: 34, mass: 33.99869 },\n            { nominal: 35, mass: 34.98800541 },\n            { nominal: 36, mass: 35.98130201 },\n            { nominal: 37, mass: 36.97337589 },\n            { nominal: 38, mass: 37.96908112 },\n            { nominal: 39, mass: 38.9637064864, abundance: 0.932581 },\n            { nominal: 40, mass: 39.963998166, abundance: 0.000117 },\n            { nominal: 41, mass: 40.9618252579, abundance: 0.067302 },\n            { nominal: 42, mass: 41.96240231 },\n            { nominal: 43, mass: 42.9607347 },\n            { nominal: 44, mass: 43.96158699 },\n            { nominal: 45, mass: 44.96069149 },\n            { nominal: 46, mass: 45.96198159 },\n            { nominal: 47, mass: 46.9616616 },\n            { nominal: 48, mass: 47.96534119 },\n            { nominal: 49, mass: 48.96821075 },\n            { nominal: 50, mass: 49.97238 },\n            { nominal: 51, mass: 50.975828 },\n            { nominal: 52, mass: 51.98224 },\n            { nominal: 53, mass: 52.98746 },\n            { nominal: 54, mass: 53.99463 },\n            { nominal: 55, mass: 55.00076 },\n            { nominal: 56, mass: 56.00851 },\n        ],\n        symbol: 'K',\n        mass: 39.098300910086,\n        name: 'Potassium',\n        monoisotopicMass: 38.9637064864,\n    },\n    {\n        number: 20,\n        isotopes: [\n            { nominal: 34, mass: 34.01487 },\n            { nominal: 35, mass: 35.00514 },\n            { nominal: 36, mass: 35.993074 },\n            { nominal: 37, mass: 36.98589785 },\n            { nominal: 38, mass: 37.97631922 },\n            { nominal: 39, mass: 38.97071081 },\n            { nominal: 40, mass: 39.962590863, abundance: 0.96941 },\n            { nominal: 41, mass: 40.96227792 },\n            { nominal: 42, mass: 41.95861783, abundance: 0.00647 },\n            { nominal: 43, mass: 42.95876644, abundance: 0.00135 },\n            { nominal: 44, mass: 43.95548156, abundance: 0.02086 },\n            { nominal: 45, mass: 44.95618635 },\n            { nominal: 46, mass: 45.953689, abundance: 0.00004 },\n            { nominal: 47, mass: 46.9545424 },\n            { nominal: 48, mass: 47.95252276, abundance: 0.00187 },\n            { nominal: 49, mass: 48.95566274 },\n            { nominal: 50, mass: 49.9574992 },\n            { nominal: 51, mass: 50.960989 },\n            { nominal: 52, mass: 51.963217 },\n            { nominal: 53, mass: 52.96945 },\n            { nominal: 54, mass: 53.9734 },\n            { nominal: 55, mass: 54.9803 },\n            { nominal: 56, mass: 55.98508 },\n            { nominal: 57, mass: 56.99262 },\n            { nominal: 58, mass: 57.99794 },\n        ],\n        symbol: 'Ca',\n        mass: 40.078022511017735,\n        name: 'Calcium',\n        monoisotopicMass: 39.962590863,\n    },\n    {\n        number: 21,\n        isotopes: [\n            { nominal: 36, mass: 36.01648 },\n            { nominal: 37, mass: 37.00374 },\n            { nominal: 38, mass: 37.99512 },\n            { nominal: 39, mass: 38.984785 },\n            { nominal: 40, mass: 39.9779673 },\n            { nominal: 41, mass: 40.969251105 },\n            { nominal: 42, mass: 41.96551653 },\n            { nominal: 43, mass: 42.9611505 },\n            { nominal: 44, mass: 43.9594029 },\n            { nominal: 45, mass: 44.95590828, abundance: 1 },\n            { nominal: 46, mass: 45.95516826 },\n            { nominal: 47, mass: 46.9524037 },\n            { nominal: 48, mass: 47.9522236 },\n            { nominal: 49, mass: 48.9500146 },\n            { nominal: 50, mass: 49.952176 },\n            { nominal: 51, mass: 50.953592 },\n            { nominal: 52, mass: 51.95688 },\n            { nominal: 53, mass: 52.95909 },\n            { nominal: 54, mass: 53.96393 },\n            { nominal: 55, mass: 54.96782 },\n            { nominal: 56, mass: 55.97345 },\n            { nominal: 57, mass: 56.97777 },\n            { nominal: 58, mass: 57.98403 },\n            { nominal: 59, mass: 58.98894 },\n            { nominal: 60, mass: 59.99565 },\n            { nominal: 61, mass: 61.001 },\n        ],\n        symbol: 'Sc',\n        mass: 44.95590828,\n        name: 'Scandium',\n        monoisotopicMass: 44.95590828,\n    },\n    {\n        number: 22,\n        isotopes: [\n            { nominal: 38, mass: 38.01145 },\n            { nominal: 39, mass: 39.00236 },\n            { nominal: 40, mass: 39.9905 },\n            { nominal: 41, mass: 40.983148 },\n            { nominal: 42, mass: 41.97304903 },\n            { nominal: 43, mass: 42.9685225 },\n            { nominal: 44, mass: 43.95968995 },\n            { nominal: 45, mass: 44.95812198 },\n            { nominal: 46, mass: 45.95262772, abundance: 0.0825 },\n            { nominal: 47, mass: 46.95175879, abundance: 0.0744 },\n            { nominal: 48, mass: 47.94794198, abundance: 0.7372 },\n            { nominal: 49, mass: 48.94786568, abundance: 0.0541 },\n            { nominal: 50, mass: 49.94478689, abundance: 0.0518 },\n            { nominal: 51, mass: 50.94661065 },\n            { nominal: 52, mass: 51.946893 },\n            { nominal: 53, mass: 52.94973 },\n            { nominal: 54, mass: 53.95105 },\n            { nominal: 55, mass: 54.95527 },\n            { nominal: 56, mass: 55.95791 },\n            { nominal: 57, mass: 56.96364 },\n            { nominal: 58, mass: 57.9666 },\n            { nominal: 59, mass: 58.97247 },\n            { nominal: 60, mass: 59.97603 },\n            { nominal: 61, mass: 60.98245 },\n            { nominal: 62, mass: 61.98651 },\n            { nominal: 63, mass: 62.99375 },\n        ],\n        symbol: 'Ti',\n        mass: 47.866744962721995,\n        name: 'Titanium',\n        monoisotopicMass: 47.94794198,\n    },\n    {\n        number: 23,\n        isotopes: [\n            { nominal: 40, mass: 40.01276 },\n            { nominal: 41, mass: 41.00021 },\n            { nominal: 42, mass: 41.99182 },\n            { nominal: 43, mass: 42.980766 },\n            { nominal: 44, mass: 43.97411 },\n            { nominal: 45, mass: 44.9657748 },\n            { nominal: 46, mass: 45.96019878 },\n            { nominal: 47, mass: 46.95490491 },\n            { nominal: 48, mass: 47.9522522 },\n            { nominal: 49, mass: 48.9485118 },\n            { nominal: 50, mass: 49.94715601, abundance: 0.0025 },\n            { nominal: 51, mass: 50.94395704, abundance: 0.9975 },\n            { nominal: 52, mass: 51.94477301 },\n            { nominal: 53, mass: 52.9443367 },\n            { nominal: 54, mass: 53.946439 },\n            { nominal: 55, mass: 54.94724 },\n            { nominal: 56, mass: 55.95048 },\n            { nominal: 57, mass: 56.95252 },\n            { nominal: 58, mass: 57.95672 },\n            { nominal: 59, mass: 58.95939 },\n            { nominal: 60, mass: 59.96431 },\n            { nominal: 61, mass: 60.96725 },\n            { nominal: 62, mass: 61.97265 },\n            { nominal: 63, mass: 62.97639 },\n            { nominal: 64, mass: 63.98264 },\n            { nominal: 65, mass: 64.9875 },\n            { nominal: 66, mass: 65.99398 },\n        ],\n        symbol: 'V',\n        mass: 50.941465037425004,\n        name: 'Vanadium',\n        monoisotopicMass: 50.94395704,\n    },\n    {\n        number: 24,\n        isotopes: [\n            { nominal: 42, mass: 42.0067 },\n            { nominal: 43, mass: 42.99753 },\n            { nominal: 44, mass: 43.98536 },\n            { nominal: 45, mass: 44.97905 },\n            { nominal: 46, mass: 45.968359 },\n            { nominal: 47, mass: 46.9628974 },\n            { nominal: 48, mass: 47.9540291 },\n            { nominal: 49, mass: 48.9513333 },\n            { nominal: 50, mass: 49.94604183, abundance: 0.04345 },\n            { nominal: 51, mass: 50.94476502 },\n            { nominal: 52, mass: 51.94050623, abundance: 0.83789 },\n            { nominal: 53, mass: 52.94064815, abundance: 0.09501 },\n            { nominal: 54, mass: 53.93887916, abundance: 0.02365 },\n            { nominal: 55, mass: 54.94083843 },\n            { nominal: 56, mass: 55.9406531 },\n            { nominal: 57, mass: 56.943613 },\n            { nominal: 58, mass: 57.94435 },\n            { nominal: 59, mass: 58.94859 },\n            { nominal: 60, mass: 59.95008 },\n            { nominal: 61, mass: 60.95442 },\n            { nominal: 62, mass: 61.9561 },\n            { nominal: 63, mass: 62.96165 },\n            { nominal: 64, mass: 63.96408 },\n            { nominal: 65, mass: 64.96996 },\n            { nominal: 66, mass: 65.97366 },\n            { nominal: 67, mass: 66.98016 },\n            { nominal: 68, mass: 67.98403 },\n        ],\n        symbol: 'Cr',\n        mass: 51.9961317554337,\n        name: 'Chromium',\n        monoisotopicMass: 51.94050623,\n    },\n    {\n        number: 25,\n        isotopes: [\n            { nominal: 44, mass: 44.00715 },\n            { nominal: 45, mass: 44.99449 },\n            { nominal: 46, mass: 45.98609 },\n            { nominal: 47, mass: 46.975775 },\n            { nominal: 48, mass: 47.96852 },\n            { nominal: 49, mass: 48.959595 },\n            { nominal: 50, mass: 49.95423778 },\n            { nominal: 51, mass: 50.94820847 },\n            { nominal: 52, mass: 51.9455639 },\n            { nominal: 53, mass: 52.94128889 },\n            { nominal: 54, mass: 53.9403576 },\n            { nominal: 55, mass: 54.93804391, abundance: 1 },\n            { nominal: 56, mass: 55.93890369 },\n            { nominal: 57, mass: 56.9382861 },\n            { nominal: 58, mass: 57.9400666 },\n            { nominal: 59, mass: 58.9403911 },\n            { nominal: 60, mass: 59.9431366 },\n            { nominal: 61, mass: 60.9444525 },\n            { nominal: 62, mass: 61.94795 },\n            { nominal: 63, mass: 62.9496647 },\n            { nominal: 64, mass: 63.9538494 },\n            { nominal: 65, mass: 64.9560198 },\n            { nominal: 66, mass: 65.960547 },\n            { nominal: 67, mass: 66.96424 },\n            { nominal: 68, mass: 67.96962 },\n            { nominal: 69, mass: 68.97366 },\n            { nominal: 70, mass: 69.97937 },\n            { nominal: 71, mass: 70.98368 },\n        ],\n        symbol: 'Mn',\n        mass: 54.93804391,\n        name: 'Manganese',\n        monoisotopicMass: 54.93804391,\n    },\n    {\n        number: 26,\n        isotopes: [\n            { nominal: 45, mass: 45.01442 },\n            { nominal: 46, mass: 46.00063 },\n            { nominal: 47, mass: 46.99185 },\n            { nominal: 48, mass: 47.98023 },\n            { nominal: 49, mass: 48.973429 },\n            { nominal: 50, mass: 49.962975 },\n            { nominal: 51, mass: 50.956841 },\n            { nominal: 52, mass: 51.9481131 },\n            { nominal: 53, mass: 52.9453064 },\n            { nominal: 54, mass: 53.93960899, abundance: 0.05845 },\n            { nominal: 55, mass: 54.93829199 },\n            { nominal: 56, mass: 55.93493633, abundance: 0.91754 },\n            { nominal: 57, mass: 56.93539284, abundance: 0.02119 },\n            { nominal: 58, mass: 57.93327443, abundance: 0.00282 },\n            { nominal: 59, mass: 58.93487434 },\n            { nominal: 60, mass: 59.9340711 },\n            { nominal: 61, mass: 60.9367462 },\n            { nominal: 62, mass: 61.9367918 },\n            { nominal: 63, mass: 62.9402727 },\n            { nominal: 64, mass: 63.9409878 },\n            { nominal: 65, mass: 64.9450115 },\n            { nominal: 66, mass: 65.94625 },\n            { nominal: 67, mass: 66.95054 },\n            { nominal: 68, mass: 67.95295 },\n            { nominal: 69, mass: 68.95807 },\n            { nominal: 70, mass: 69.96102 },\n            { nominal: 71, mass: 70.96672 },\n            { nominal: 72, mass: 71.96983 },\n            { nominal: 73, mass: 72.97572 },\n            { nominal: 74, mass: 73.97935 },\n        ],\n        symbol: 'Fe',\n        mass: 55.845144433865904,\n        name: 'Iron',\n        monoisotopicMass: 55.93493633,\n    },\n    {\n        number: 27,\n        isotopes: [\n            { nominal: 47, mass: 47.01057 },\n            { nominal: 48, mass: 48.00093 },\n            { nominal: 49, mass: 48.98891 },\n            { nominal: 50, mass: 49.98091 },\n            { nominal: 51, mass: 50.970647 },\n            { nominal: 52, mass: 51.96351 },\n            { nominal: 53, mass: 52.9542041 },\n            { nominal: 54, mass: 53.94845987 },\n            { nominal: 55, mass: 54.9419972 },\n            { nominal: 56, mass: 55.9398388 },\n            { nominal: 57, mass: 56.93629057 },\n            { nominal: 58, mass: 57.9357521 },\n            { nominal: 59, mass: 58.93319429, abundance: 1 },\n            { nominal: 60, mass: 59.9338163 },\n            { nominal: 61, mass: 60.93247662 },\n            { nominal: 62, mass: 61.934059 },\n            { nominal: 63, mass: 62.9336 },\n            { nominal: 64, mass: 63.935811 },\n            { nominal: 65, mass: 64.9364621 },\n            { nominal: 66, mass: 65.939443 },\n            { nominal: 67, mass: 66.9406096 },\n            { nominal: 68, mass: 67.94426 },\n            { nominal: 69, mass: 68.94614 },\n            { nominal: 70, mass: 69.94963 },\n            { nominal: 71, mass: 70.95237 },\n            { nominal: 72, mass: 71.95729 },\n            { nominal: 73, mass: 72.96039 },\n            { nominal: 74, mass: 73.96515 },\n            { nominal: 75, mass: 74.96876 },\n            { nominal: 76, mass: 75.97413 },\n        ],\n        symbol: 'Co',\n        mass: 58.93319429,\n        name: 'Cobalt',\n        monoisotopicMass: 58.93319429,\n    },\n    {\n        number: 28,\n        isotopes: [\n            { nominal: 48, mass: 48.01769 },\n            { nominal: 49, mass: 49.0077 },\n            { nominal: 50, mass: 49.99474 },\n            { nominal: 51, mass: 50.98611 },\n            { nominal: 52, mass: 51.9748 },\n            { nominal: 53, mass: 52.96819 },\n            { nominal: 54, mass: 53.957892 },\n            { nominal: 55, mass: 54.95133063 },\n            { nominal: 56, mass: 55.94212855 },\n            { nominal: 57, mass: 56.93979218 },\n            { nominal: 58, mass: 57.93534241, abundance: 0.68077 },\n            { nominal: 59, mass: 58.9343462 },\n            { nominal: 60, mass: 59.93078588, abundance: 0.26223 },\n            { nominal: 61, mass: 60.93105557, abundance: 0.011399 },\n            { nominal: 62, mass: 61.92834537, abundance: 0.036346 },\n            { nominal: 63, mass: 62.92966963 },\n            { nominal: 64, mass: 63.92796682, abundance: 0.009255 },\n            { nominal: 65, mass: 64.93008517 },\n            { nominal: 66, mass: 65.9291393 },\n            { nominal: 67, mass: 66.9315694 },\n            { nominal: 68, mass: 67.9318688 },\n            { nominal: 69, mass: 68.9356103 },\n            { nominal: 70, mass: 69.9364313 },\n            { nominal: 71, mass: 70.940519 },\n            { nominal: 72, mass: 71.9417859 },\n            { nominal: 73, mass: 72.9462067 },\n            { nominal: 74, mass: 73.94798 },\n            { nominal: 75, mass: 74.9525 },\n            { nominal: 76, mass: 75.95533 },\n            { nominal: 77, mass: 76.96055 },\n            { nominal: 78, mass: 77.96336 },\n            { nominal: 79, mass: 78.97025 },\n        ],\n        symbol: 'Ni',\n        mass: 58.69334710994765,\n        name: 'Nickel',\n        monoisotopicMass: 57.93534241,\n    },\n    {\n        number: 29,\n        isotopes: [\n            { nominal: 52, mass: 51.99671 },\n            { nominal: 53, mass: 52.98459 },\n            { nominal: 54, mass: 53.97666 },\n            { nominal: 55, mass: 54.96604 },\n            { nominal: 56, mass: 55.95895 },\n            { nominal: 57, mass: 56.9492125 },\n            { nominal: 58, mass: 57.94453305 },\n            { nominal: 59, mass: 58.93949748 },\n            { nominal: 60, mass: 59.9373645 },\n            { nominal: 61, mass: 60.9334576 },\n            { nominal: 62, mass: 61.93259541 },\n            { nominal: 63, mass: 62.92959772, abundance: 0.6915 },\n            { nominal: 64, mass: 63.92976434 },\n            { nominal: 65, mass: 64.9277897, abundance: 0.3085 },\n            { nominal: 66, mass: 65.92886903 },\n            { nominal: 67, mass: 66.9277303 },\n            { nominal: 68, mass: 67.9296109 },\n            { nominal: 69, mass: 68.9294293 },\n            { nominal: 70, mass: 69.9323921 },\n            { nominal: 71, mass: 70.9326768 },\n            { nominal: 72, mass: 71.9358203 },\n            { nominal: 73, mass: 72.9366744 },\n            { nominal: 74, mass: 73.9398749 },\n            { nominal: 75, mass: 74.9415226 },\n            { nominal: 76, mass: 75.945275 },\n            { nominal: 77, mass: 76.94792 },\n            { nominal: 78, mass: 77.95223 },\n            { nominal: 79, mass: 78.95502 },\n            { nominal: 80, mass: 79.96089 },\n            { nominal: 81, mass: 80.96587 },\n            { nominal: 82, mass: 81.97244 },\n        ],\n        symbol: 'Cu',\n        mass: 63.54603994583,\n        name: 'Copper',\n        monoisotopicMass: 62.92959772,\n    },\n    {\n        number: 30,\n        isotopes: [\n            { nominal: 54, mass: 53.99204 },\n            { nominal: 55, mass: 54.98398 },\n            { nominal: 56, mass: 55.97254 },\n            { nominal: 57, mass: 56.96506 },\n            { nominal: 58, mass: 57.954591 },\n            { nominal: 59, mass: 58.94931266 },\n            { nominal: 60, mass: 59.9418421 },\n            { nominal: 61, mass: 60.939507 },\n            { nominal: 62, mass: 61.93433397 },\n            { nominal: 63, mass: 62.9332115 },\n            { nominal: 64, mass: 63.92914201, abundance: 0.4917 },\n            { nominal: 65, mass: 64.92924077 },\n            { nominal: 66, mass: 65.92603381, abundance: 0.2773 },\n            { nominal: 67, mass: 66.92712775, abundance: 0.0404 },\n            { nominal: 68, mass: 67.92484455, abundance: 0.1845 },\n            { nominal: 69, mass: 68.9265507 },\n            { nominal: 70, mass: 69.9253192, abundance: 0.0061 },\n            { nominal: 71, mass: 70.9277196 },\n            { nominal: 72, mass: 71.9268428 },\n            { nominal: 73, mass: 72.9295826 },\n            { nominal: 74, mass: 73.9294073 },\n            { nominal: 75, mass: 74.9328402 },\n            { nominal: 76, mass: 75.933115 },\n            { nominal: 77, mass: 76.9368872 },\n            { nominal: 78, mass: 77.9382892 },\n            { nominal: 79, mass: 78.9426381 },\n            { nominal: 80, mass: 79.9445529 },\n            { nominal: 81, mass: 80.9504026 },\n            { nominal: 82, mass: 81.95426 },\n            { nominal: 83, mass: 82.96056 },\n            { nominal: 84, mass: 83.96521 },\n            { nominal: 85, mass: 84.97226 },\n        ],\n        symbol: 'Zn',\n        mass: 65.37778252952499,\n        name: 'Zinc',\n        monoisotopicMass: 63.92914201,\n    },\n    {\n        number: 31,\n        isotopes: [\n            { nominal: 56, mass: 55.99536 },\n            { nominal: 57, mass: 56.9832 },\n            { nominal: 58, mass: 57.97478 },\n            { nominal: 59, mass: 58.96353 },\n            { nominal: 60, mass: 59.95729 },\n            { nominal: 61, mass: 60.949399 },\n            { nominal: 62, mass: 61.94419025 },\n            { nominal: 63, mass: 62.9392942 },\n            { nominal: 64, mass: 63.9368404 },\n            { nominal: 65, mass: 64.93273459 },\n            { nominal: 66, mass: 65.9315894 },\n            { nominal: 67, mass: 66.9282025 },\n            { nominal: 68, mass: 67.9279805 },\n            { nominal: 69, mass: 68.9255735, abundance: 0.60108 },\n            { nominal: 70, mass: 69.9260219 },\n            { nominal: 71, mass: 70.92470258, abundance: 0.39892 },\n            { nominal: 72, mass: 71.92636747 },\n            { nominal: 73, mass: 72.9251747 },\n            { nominal: 74, mass: 73.9269457 },\n            { nominal: 75, mass: 74.9265002 },\n            { nominal: 76, mass: 75.9288276 },\n            { nominal: 77, mass: 76.9291543 },\n            { nominal: 78, mass: 77.9316088 },\n            { nominal: 79, mass: 78.9328523 },\n            { nominal: 80, mass: 79.9364208 },\n            { nominal: 81, mass: 80.9381338 },\n            { nominal: 82, mass: 81.9431765 },\n            { nominal: 83, mass: 82.9471203 },\n            { nominal: 84, mass: 83.95246 },\n            { nominal: 85, mass: 84.95699 },\n            { nominal: 86, mass: 85.96301 },\n            { nominal: 87, mass: 86.96824 },\n        ],\n        symbol: 'Ga',\n        mass: 69.7230660725936,\n        name: 'Gallium',\n        monoisotopicMass: 68.9255735,\n    },\n    {\n        number: 32,\n        isotopes: [\n            { nominal: 58, mass: 57.99172 },\n            { nominal: 59, mass: 58.98249 },\n            { nominal: 60, mass: 59.97036 },\n            { nominal: 61, mass: 60.96379 },\n            { nominal: 62, mass: 61.95502 },\n            { nominal: 63, mass: 62.949628 },\n            { nominal: 64, mass: 63.9416899 },\n            { nominal: 65, mass: 64.9393681 },\n            { nominal: 66, mass: 65.9338621 },\n            { nominal: 67, mass: 66.9327339 },\n            { nominal: 68, mass: 67.9280953 },\n            { nominal: 69, mass: 68.9279645 },\n            { nominal: 70, mass: 69.92424875, abundance: 0.2057 },\n            { nominal: 71, mass: 70.92495233 },\n            { nominal: 72, mass: 71.922075826, abundance: 0.2745 },\n            { nominal: 73, mass: 72.923458956, abundance: 0.0775 },\n            { nominal: 74, mass: 73.921177761, abundance: 0.365 },\n            { nominal: 75, mass: 74.92285837 },\n            { nominal: 76, mass: 75.921402726, abundance: 0.0773 },\n            { nominal: 77, mass: 76.923549843 },\n            { nominal: 78, mass: 77.9228529 },\n            { nominal: 79, mass: 78.92536 },\n            { nominal: 80, mass: 79.9253508 },\n            { nominal: 81, mass: 80.9288329 },\n            { nominal: 82, mass: 81.929774 },\n            { nominal: 83, mass: 82.9345391 },\n            { nominal: 84, mass: 83.9375751 },\n            { nominal: 85, mass: 84.9429697 },\n            { nominal: 86, mass: 85.94658 },\n            { nominal: 87, mass: 86.95268 },\n            { nominal: 88, mass: 87.95691 },\n            { nominal: 89, mass: 88.96379 },\n            { nominal: 90, mass: 89.96863 },\n        ],\n        symbol: 'Ge',\n        mass: 72.6275501646868,\n        name: 'Germanium',\n        monoisotopicMass: 73.921177761,\n    },\n    {\n        number: 33,\n        isotopes: [\n            { nominal: 60, mass: 59.99388 },\n            { nominal: 61, mass: 60.98112 },\n            { nominal: 62, mass: 61.97361 },\n            { nominal: 63, mass: 62.9639 },\n            { nominal: 64, mass: 63.95743 },\n            { nominal: 65, mass: 64.949611 },\n            { nominal: 66, mass: 65.9441488 },\n            { nominal: 67, mass: 66.93925111 },\n            { nominal: 68, mass: 67.9367741 },\n            { nominal: 69, mass: 68.932246 },\n            { nominal: 70, mass: 69.930926 },\n            { nominal: 71, mass: 70.9271138 },\n            { nominal: 72, mass: 71.9267523 },\n            { nominal: 73, mass: 72.9238291 },\n            { nominal: 74, mass: 73.9239286 },\n            { nominal: 75, mass: 74.92159457, abundance: 1 },\n            { nominal: 76, mass: 75.92239202 },\n            { nominal: 77, mass: 76.9206476 },\n            { nominal: 78, mass: 77.921828 },\n            { nominal: 79, mass: 78.9209484 },\n            { nominal: 80, mass: 79.9224746 },\n            { nominal: 81, mass: 80.9221323 },\n            { nominal: 82, mass: 81.9247412 },\n            { nominal: 83, mass: 82.9252069 },\n            { nominal: 84, mass: 83.9293033 },\n            { nominal: 85, mass: 84.9321637 },\n            { nominal: 86, mass: 85.9367015 },\n            { nominal: 87, mass: 86.9402917 },\n            { nominal: 88, mass: 87.94555 },\n            { nominal: 89, mass: 88.94976 },\n            { nominal: 90, mass: 89.95563 },\n            { nominal: 91, mass: 90.96039 },\n            { nominal: 92, mass: 91.96674 },\n        ],\n        symbol: 'As',\n        mass: 74.92159457,\n        name: 'Arsenic',\n        monoisotopicMass: 74.92159457,\n    },\n    {\n        number: 34,\n        isotopes: [\n            { nominal: 64, mass: 63.97109 },\n            { nominal: 65, mass: 64.9644 },\n            { nominal: 66, mass: 65.95559 },\n            { nominal: 67, mass: 66.949994 },\n            { nominal: 68, mass: 67.94182524 },\n            { nominal: 69, mass: 68.9394148 },\n            { nominal: 70, mass: 69.9335155 },\n            { nominal: 71, mass: 70.9322094 },\n            { nominal: 72, mass: 71.9271405 },\n            { nominal: 73, mass: 72.9267549 },\n            { nominal: 74, mass: 73.922475934, abundance: 0.0089 },\n            { nominal: 75, mass: 74.92252287 },\n            { nominal: 76, mass: 75.919213704, abundance: 0.0937 },\n            { nominal: 77, mass: 76.919914154, abundance: 0.0763 },\n            { nominal: 78, mass: 77.91730928, abundance: 0.2377 },\n            { nominal: 79, mass: 78.91849929 },\n            { nominal: 80, mass: 79.9165218, abundance: 0.4961 },\n            { nominal: 81, mass: 80.917993 },\n            { nominal: 82, mass: 81.9166995, abundance: 0.0873 },\n            { nominal: 83, mass: 82.9191186 },\n            { nominal: 84, mass: 83.9184668 },\n            { nominal: 85, mass: 84.9222608 },\n            { nominal: 86, mass: 85.9243117 },\n            { nominal: 87, mass: 86.9286886 },\n            { nominal: 88, mass: 87.9314175 },\n            { nominal: 89, mass: 88.9366691 },\n            { nominal: 90, mass: 89.9401 },\n            { nominal: 91, mass: 90.94596 },\n            { nominal: 92, mass: 91.94984 },\n            { nominal: 93, mass: 92.95629 },\n            { nominal: 94, mass: 93.96049 },\n            { nominal: 95, mass: 94.9673 },\n        ],\n        symbol: 'Se',\n        mass: 78.95938855701361,\n        name: 'Selenium',\n        monoisotopicMass: 79.9165218,\n    },\n    {\n        number: 35,\n        isotopes: [\n            { nominal: 67, mass: 66.96465 },\n            { nominal: 68, mass: 67.95873 },\n            { nominal: 69, mass: 68.950497 },\n            { nominal: 70, mass: 69.944792 },\n            { nominal: 71, mass: 70.9393422 },\n            { nominal: 72, mass: 71.9365886 },\n            { nominal: 73, mass: 72.9316715 },\n            { nominal: 74, mass: 73.9299102 },\n            { nominal: 75, mass: 74.9258105 },\n            { nominal: 76, mass: 75.924542 },\n            { nominal: 77, mass: 76.9213792 },\n            { nominal: 78, mass: 77.9211459 },\n            { nominal: 79, mass: 78.9183376, abundance: 0.5069 },\n            { nominal: 80, mass: 79.9185298 },\n            { nominal: 81, mass: 80.9162897, abundance: 0.4931 },\n            { nominal: 82, mass: 81.9168032 },\n            { nominal: 83, mass: 82.9151756 },\n            { nominal: 84, mass: 83.916496 },\n            { nominal: 85, mass: 84.9156458 },\n            { nominal: 86, mass: 85.9188054 },\n            { nominal: 87, mass: 86.920674 },\n            { nominal: 88, mass: 87.9240833 },\n            { nominal: 89, mass: 88.9267046 },\n            { nominal: 90, mass: 89.9312928 },\n            { nominal: 91, mass: 90.9343986 },\n            { nominal: 92, mass: 91.9396316 },\n            { nominal: 93, mass: 92.94313 },\n            { nominal: 94, mass: 93.9489 },\n            { nominal: 95, mass: 94.95301 },\n            { nominal: 96, mass: 95.95903 },\n            { nominal: 97, mass: 96.96344 },\n            { nominal: 98, mass: 97.96946 },\n        ],\n        symbol: 'Br',\n        mass: 79.90352778050999,\n        name: 'Bromine',\n        monoisotopicMass: 78.9183376,\n    },\n    {\n        number: 36,\n        isotopes: [\n            { nominal: 69, mass: 68.96518 },\n            { nominal: 70, mass: 69.95604 },\n            { nominal: 71, mass: 70.95027 },\n            { nominal: 72, mass: 71.9420924 },\n            { nominal: 73, mass: 72.9392892 },\n            { nominal: 74, mass: 73.933084 },\n            { nominal: 75, mass: 74.9309457 },\n            { nominal: 76, mass: 75.9259103 },\n            { nominal: 77, mass: 76.92467 },\n            { nominal: 78, mass: 77.92036494, abundance: 0.00355 },\n            { nominal: 79, mass: 78.9200829 },\n            { nominal: 80, mass: 79.91637808, abundance: 0.02286 },\n            { nominal: 81, mass: 80.9165912 },\n            { nominal: 82, mass: 81.91348273, abundance: 0.11593 },\n            { nominal: 83, mass: 82.91412716, abundance: 0.115 },\n            { nominal: 84, mass: 83.9114977282, abundance: 0.56987 },\n            { nominal: 85, mass: 84.9125273 },\n            { nominal: 86, mass: 85.9106106269, abundance: 0.17279 },\n            { nominal: 87, mass: 86.91335476 },\n            { nominal: 88, mass: 87.9144479 },\n            { nominal: 89, mass: 88.9178355 },\n            { nominal: 90, mass: 89.9195279 },\n            { nominal: 91, mass: 90.9238063 },\n            { nominal: 92, mass: 91.9261731 },\n            { nominal: 93, mass: 92.9311472 },\n            { nominal: 94, mass: 93.93414 },\n            { nominal: 95, mass: 94.939711 },\n            { nominal: 96, mass: 95.943017 },\n            { nominal: 97, mass: 96.94909 },\n            { nominal: 98, mass: 97.95243 },\n            { nominal: 99, mass: 98.95839 },\n            { nominal: 100, mass: 99.96237 },\n            { nominal: 101, mass: 100.96873 },\n        ],\n        symbol: 'Kr',\n        mass: 83.7979999953261,\n        name: 'Krypton',\n        monoisotopicMass: 83.9114977282,\n    },\n    {\n        number: 37,\n        isotopes: [\n            { nominal: 71, mass: 70.96532 },\n            { nominal: 72, mass: 71.95908 },\n            { nominal: 73, mass: 72.95053 },\n            { nominal: 74, mass: 73.9442659 },\n            { nominal: 75, mass: 74.9385732 },\n            { nominal: 76, mass: 75.935073 },\n            { nominal: 77, mass: 76.9304016 },\n            { nominal: 78, mass: 77.9281419 },\n            { nominal: 79, mass: 78.9239899 },\n            { nominal: 80, mass: 79.9225164 },\n            { nominal: 81, mass: 80.9189939 },\n            { nominal: 82, mass: 81.918209 },\n            { nominal: 83, mass: 82.9151142 },\n            { nominal: 84, mass: 83.9143752 },\n            { nominal: 85, mass: 84.9117897379, abundance: 0.7217 },\n            { nominal: 86, mass: 85.91116743 },\n            { nominal: 87, mass: 86.909180531, abundance: 0.2783 },\n            { nominal: 88, mass: 87.91131559 },\n            { nominal: 89, mass: 88.9122783 },\n            { nominal: 90, mass: 89.9147985 },\n            { nominal: 91, mass: 90.9165372 },\n            { nominal: 92, mass: 91.9197284 },\n            { nominal: 93, mass: 92.9220393 },\n            { nominal: 94, mass: 93.9263948 },\n            { nominal: 95, mass: 94.92926 },\n            { nominal: 96, mass: 95.9341334 },\n            { nominal: 97, mass: 96.9371771 },\n            { nominal: 98, mass: 97.9416869 },\n            { nominal: 99, mass: 98.94503 },\n            { nominal: 100, mass: 99.95003 },\n            { nominal: 101, mass: 100.95404 },\n            { nominal: 102, mass: 101.95952 },\n            { nominal: 103, mass: 102.96392 },\n        ],\n        symbol: 'Rb',\n        mass: 85.46766359561973,\n        name: 'Rubidium',\n        monoisotopicMass: 84.9117897379,\n    },\n    {\n        number: 38,\n        isotopes: [\n            { nominal: 73, mass: 72.9657 },\n            { nominal: 74, mass: 73.95617 },\n            { nominal: 75, mass: 74.94995 },\n            { nominal: 76, mass: 75.941763 },\n            { nominal: 77, mass: 76.9379455 },\n            { nominal: 78, mass: 77.93218 },\n            { nominal: 79, mass: 78.9297077 },\n            { nominal: 80, mass: 79.9245175 },\n            { nominal: 81, mass: 80.9232114 },\n            { nominal: 82, mass: 81.9183999 },\n            { nominal: 83, mass: 82.9175544 },\n            { nominal: 84, mass: 83.9134191, abundance: 0.0056 },\n            { nominal: 85, mass: 84.912932 },\n            { nominal: 86, mass: 85.9092606, abundance: 0.0986 },\n            { nominal: 87, mass: 86.9088775, abundance: 0.07 },\n            { nominal: 88, mass: 87.9056125, abundance: 0.8258 },\n            { nominal: 89, mass: 88.9074511 },\n            { nominal: 90, mass: 89.90773 },\n            { nominal: 91, mass: 90.9101954 },\n            { nominal: 92, mass: 91.9110382 },\n            { nominal: 93, mass: 92.9140242 },\n            { nominal: 94, mass: 93.9153556 },\n            { nominal: 95, mass: 94.9193529 },\n            { nominal: 96, mass: 95.9217066 },\n            { nominal: 97, mass: 96.926374 },\n            { nominal: 98, mass: 97.9286888 },\n            { nominal: 99, mass: 98.9328907 },\n            { nominal: 100, mass: 99.93577 },\n            { nominal: 101, mass: 100.940352 },\n            { nominal: 102, mass: 101.943791 },\n            { nominal: 103, mass: 102.94909 },\n            { nominal: 104, mass: 103.95265 },\n            { nominal: 105, mass: 104.95855 },\n            { nominal: 106, mass: 105.96265 },\n            { nominal: 107, mass: 106.96897 },\n        ],\n        symbol: 'Sr',\n        mass: 87.61664446962,\n        name: 'Strontium',\n        monoisotopicMass: 87.9056125,\n    },\n    {\n        number: 39,\n        isotopes: [\n            { nominal: 76, mass: 75.95856 },\n            { nominal: 77, mass: 76.949781 },\n            { nominal: 78, mass: 77.94361 },\n            { nominal: 79, mass: 78.93735 },\n            { nominal: 80, mass: 79.9343561 },\n            { nominal: 81, mass: 80.9294556 },\n            { nominal: 82, mass: 81.9269314 },\n            { nominal: 83, mass: 82.922485 },\n            { nominal: 84, mass: 83.9206721 },\n            { nominal: 85, mass: 84.916433 },\n            { nominal: 86, mass: 85.914886 },\n            { nominal: 87, mass: 86.9108761 },\n            { nominal: 88, mass: 87.9095016 },\n            { nominal: 89, mass: 88.9058403, abundance: 1 },\n            { nominal: 90, mass: 89.9071439 },\n            { nominal: 91, mass: 90.9072974 },\n            { nominal: 92, mass: 91.9089451 },\n            { nominal: 93, mass: 92.909578 },\n            { nominal: 94, mass: 93.9115906 },\n            { nominal: 95, mass: 94.9128161 },\n            { nominal: 96, mass: 95.9158968 },\n            { nominal: 97, mass: 96.9182741 },\n            { nominal: 98, mass: 97.9223821 },\n            { nominal: 99, mass: 98.924148 },\n            { nominal: 100, mass: 99.927715 },\n            { nominal: 101, mass: 100.9301477 },\n            { nominal: 102, mass: 101.9343277 },\n            { nominal: 103, mass: 102.937243 },\n            { nominal: 104, mass: 103.94196 },\n            { nominal: 105, mass: 104.94544 },\n            { nominal: 106, mass: 105.95056 },\n            { nominal: 107, mass: 106.95452 },\n            { nominal: 108, mass: 107.95996 },\n            { nominal: 109, mass: 108.96436 },\n        ],\n        symbol: 'Y',\n        mass: 88.9058403,\n        name: 'Yttrium',\n        monoisotopicMass: 88.9058403,\n    },\n    {\n        number: 40,\n        isotopes: [\n            { nominal: 78, mass: 77.95566 },\n            { nominal: 79, mass: 78.94948 },\n            { nominal: 80, mass: 79.9404 },\n            { nominal: 81, mass: 80.93731 },\n            { nominal: 82, mass: 81.93135 },\n            { nominal: 83, mass: 82.9292421 },\n            { nominal: 84, mass: 83.9233269 },\n            { nominal: 85, mass: 84.9214444 },\n            { nominal: 86, mass: 85.9162972 },\n            { nominal: 87, mass: 86.914818 },\n            { nominal: 88, mass: 87.9102213 },\n            { nominal: 89, mass: 88.9088814 },\n            { nominal: 90, mass: 89.9046977, abundance: 0.5145 },\n            { nominal: 91, mass: 90.9056396, abundance: 0.1122 },\n            { nominal: 92, mass: 91.9050347, abundance: 0.1715 },\n            { nominal: 93, mass: 92.9064699 },\n            { nominal: 94, mass: 93.9063108, abundance: 0.1738 },\n            { nominal: 95, mass: 94.9080385 },\n            { nominal: 96, mass: 95.9082714, abundance: 0.028 },\n            { nominal: 97, mass: 96.9109512 },\n            { nominal: 98, mass: 97.9127289 },\n            { nominal: 99, mass: 98.916667 },\n            { nominal: 100, mass: 99.9180006 },\n            { nominal: 101, mass: 100.921448 },\n            { nominal: 102, mass: 101.9231409 },\n            { nominal: 103, mass: 102.927191 },\n            { nominal: 104, mass: 103.929436 },\n            { nominal: 105, mass: 104.934008 },\n            { nominal: 106, mass: 105.93676 },\n            { nominal: 107, mass: 106.94174 },\n            { nominal: 108, mass: 107.94487 },\n            { nominal: 109, mass: 108.95041 },\n            { nominal: 110, mass: 109.95396 },\n            { nominal: 111, mass: 110.95968 },\n            { nominal: 112, mass: 111.9637 },\n        ],\n        symbol: 'Zr',\n        mass: 91.22364159706,\n        name: 'Zirconium',\n        monoisotopicMass: 89.9046977,\n    },\n    {\n        number: 41,\n        isotopes: [\n            { nominal: 81, mass: 80.9496 },\n            { nominal: 82, mass: 81.94396 },\n            { nominal: 83, mass: 82.93729 },\n            { nominal: 84, mass: 83.93449 },\n            { nominal: 85, mass: 84.9288458 },\n            { nominal: 86, mass: 85.9257828 },\n            { nominal: 87, mass: 86.9206937 },\n            { nominal: 88, mass: 87.918222 },\n            { nominal: 89, mass: 88.913445 },\n            { nominal: 90, mass: 89.9112584 },\n            { nominal: 91, mass: 90.9069897 },\n            { nominal: 92, mass: 91.9071881 },\n            { nominal: 93, mass: 92.906373, abundance: 1 },\n            { nominal: 94, mass: 93.9072788 },\n            { nominal: 95, mass: 94.9068324 },\n            { nominal: 96, mass: 95.9080973 },\n            { nominal: 97, mass: 96.9080959 },\n            { nominal: 98, mass: 97.9103265 },\n            { nominal: 99, mass: 98.911613 },\n            { nominal: 100, mass: 99.9143276 },\n            { nominal: 101, mass: 100.9153103 },\n            { nominal: 102, mass: 101.9180772 },\n            { nominal: 103, mass: 102.9194572 },\n            { nominal: 104, mass: 103.9228925 },\n            { nominal: 105, mass: 104.9249465 },\n            { nominal: 106, mass: 105.9289317 },\n            { nominal: 107, mass: 106.9315937 },\n            { nominal: 108, mass: 107.9360748 },\n            { nominal: 109, mass: 108.93922 },\n            { nominal: 110, mass: 109.94403 },\n            { nominal: 111, mass: 110.94753 },\n            { nominal: 112, mass: 111.95247 },\n            { nominal: 113, mass: 112.95651 },\n            { nominal: 114, mass: 113.96201 },\n            { nominal: 115, mass: 114.96634 },\n        ],\n        symbol: 'Nb',\n        mass: 92.906373,\n        name: 'Niobium',\n        monoisotopicMass: 92.906373,\n    },\n    {\n        number: 42,\n        isotopes: [\n            { nominal: 83, mass: 82.94988 },\n            { nominal: 84, mass: 83.94149 },\n            { nominal: 85, mass: 84.938261 },\n            { nominal: 86, mass: 85.9311748 },\n            { nominal: 87, mass: 86.9281962 },\n            { nominal: 88, mass: 87.9219678 },\n            { nominal: 89, mass: 88.9194682 },\n            { nominal: 90, mass: 89.9139309 },\n            { nominal: 91, mass: 90.9117453 },\n            { nominal: 92, mass: 91.90680796, abundance: 0.1453 },\n            { nominal: 93, mass: 92.90680958 },\n            { nominal: 94, mass: 93.9050849, abundance: 0.0915 },\n            { nominal: 95, mass: 94.90583877, abundance: 0.1584 },\n            { nominal: 96, mass: 95.90467612, abundance: 0.1667 },\n            { nominal: 97, mass: 96.90601812, abundance: 0.096 },\n            { nominal: 98, mass: 97.90540482, abundance: 0.2439 },\n            { nominal: 99, mass: 98.90770851 },\n            { nominal: 100, mass: 99.9074718, abundance: 0.0982 },\n            { nominal: 101, mass: 100.9103414 },\n            { nominal: 102, mass: 101.9102834 },\n            { nominal: 103, mass: 102.913079 },\n            { nominal: 104, mass: 103.9137344 },\n            { nominal: 105, mass: 104.916969 },\n            { nominal: 106, mass: 105.918259 },\n            { nominal: 107, mass: 106.922106 },\n            { nominal: 108, mass: 107.924033 },\n            { nominal: 109, mass: 108.928424 },\n            { nominal: 110, mass: 109.930704 },\n            { nominal: 111, mass: 110.935654 },\n            { nominal: 112, mass: 111.93831 },\n            { nominal: 113, mass: 112.94335 },\n            { nominal: 114, mass: 113.94653 },\n            { nominal: 115, mass: 114.95196 },\n            { nominal: 116, mass: 115.95545 },\n            { nominal: 117, mass: 116.96117 },\n        ],\n        symbol: 'Mo',\n        mass: 95.959788541188,\n        name: 'Molybdenum',\n        monoisotopicMass: 97.90540482,\n    },\n    {\n        number: 43,\n        isotopes: [\n            { nominal: 85, mass: 84.95058 },\n            { nominal: 86, mass: 85.94493 },\n            { nominal: 87, mass: 86.9380672 },\n            { nominal: 88, mass: 87.93378 },\n            { nominal: 89, mass: 88.9276487 },\n            { nominal: 90, mass: 89.9240739 },\n            { nominal: 91, mass: 90.9184254 },\n            { nominal: 92, mass: 91.9152698 },\n            { nominal: 93, mass: 92.910246 },\n            { nominal: 94, mass: 93.9096536 },\n            { nominal: 95, mass: 94.9076536 },\n            { nominal: 96, mass: 95.907868 },\n            { nominal: 97, mass: 96.9063667 },\n            { nominal: 98, mass: 97.9072124 },\n            { nominal: 99, mass: 98.9062508 },\n            { nominal: 100, mass: 99.9076539 },\n            { nominal: 101, mass: 100.907309 },\n            { nominal: 102, mass: 101.9092097 },\n            { nominal: 103, mass: 102.909176 },\n            { nominal: 104, mass: 103.911425 },\n            { nominal: 105, mass: 104.911655 },\n            { nominal: 106, mass: 105.914358 },\n            { nominal: 107, mass: 106.9154606 },\n            { nominal: 108, mass: 107.9184957 },\n            { nominal: 109, mass: 108.920256 },\n            { nominal: 110, mass: 109.923744 },\n            { nominal: 111, mass: 110.925901 },\n            { nominal: 112, mass: 111.9299458 },\n            { nominal: 113, mass: 112.932569 },\n            { nominal: 114, mass: 113.93691 },\n            { nominal: 115, mass: 114.93998 },\n            { nominal: 116, mass: 115.94476 },\n            { nominal: 117, mass: 116.94806 },\n            { nominal: 118, mass: 117.95299 },\n            { nominal: 119, mass: 118.95666 },\n            { nominal: 120, mass: 119.96187 },\n        ],\n        symbol: 'Tc',\n        mass: null,\n        name: 'Technetium',\n    },\n    {\n        number: 44,\n        isotopes: [\n            { nominal: 87, mass: 86.95069 },\n            { nominal: 88, mass: 87.9416 },\n            { nominal: 89, mass: 88.93762 },\n            { nominal: 90, mass: 89.9303444 },\n            { nominal: 91, mass: 90.9267419 },\n            { nominal: 92, mass: 91.9202344 },\n            { nominal: 93, mass: 92.9171044 },\n            { nominal: 94, mass: 93.9113429 },\n            { nominal: 95, mass: 94.910406 },\n            { nominal: 96, mass: 95.90759025, abundance: 0.0554 },\n            { nominal: 97, mass: 96.9075471 },\n            { nominal: 98, mass: 97.9052868, abundance: 0.0187 },\n            { nominal: 99, mass: 98.9059341, abundance: 0.1276 },\n            { nominal: 100, mass: 99.9042143, abundance: 0.126 },\n            { nominal: 101, mass: 100.9055769, abundance: 0.1706 },\n            { nominal: 102, mass: 101.9043441, abundance: 0.3155 },\n            { nominal: 103, mass: 102.9063186 },\n            { nominal: 104, mass: 103.9054275, abundance: 0.1862 },\n            { nominal: 105, mass: 104.9077476 },\n            { nominal: 106, mass: 105.9073291 },\n            { nominal: 107, mass: 106.909972 },\n            { nominal: 108, mass: 107.910188 },\n            { nominal: 109, mass: 108.913326 },\n            { nominal: 110, mass: 109.9140407 },\n            { nominal: 111, mass: 110.91757 },\n            { nominal: 112, mass: 111.918809 },\n            { nominal: 113, mass: 112.922844 },\n            { nominal: 114, mass: 113.9246136 },\n            { nominal: 115, mass: 114.92882 },\n            { nominal: 116, mass: 115.9312192 },\n            { nominal: 117, mass: 116.9361 },\n            { nominal: 118, mass: 117.93853 },\n            { nominal: 119, mass: 118.94357 },\n            { nominal: 120, mass: 119.94631 },\n            { nominal: 121, mass: 120.95164 },\n            { nominal: 122, mass: 121.95447 },\n            { nominal: 123, mass: 122.95989 },\n            { nominal: 124, mass: 123.96305 },\n        ],\n        symbol: 'Ru',\n        mass: 101.06494013916,\n        name: 'Ruthenium',\n        monoisotopicMass: 101.9043441,\n    },\n    {\n        number: 45,\n        isotopes: [\n            { nominal: 89, mass: 88.95058 },\n            { nominal: 90, mass: 89.94422 },\n            { nominal: 91, mass: 90.93688 },\n            { nominal: 92, mass: 91.9323677 },\n            { nominal: 93, mass: 92.9259128 },\n            { nominal: 94, mass: 93.9217305 },\n            { nominal: 95, mass: 94.9158979 },\n            { nominal: 96, mass: 95.914453 },\n            { nominal: 97, mass: 96.911329 },\n            { nominal: 98, mass: 97.910708 },\n            { nominal: 99, mass: 98.9081282 },\n            { nominal: 100, mass: 99.908117 },\n            { nominal: 101, mass: 100.9061606 },\n            { nominal: 102, mass: 101.9068374 },\n            { nominal: 103, mass: 102.905498, abundance: 1 },\n            { nominal: 104, mass: 103.9066492 },\n            { nominal: 105, mass: 104.9056885 },\n            { nominal: 106, mass: 105.9072868 },\n            { nominal: 107, mass: 106.906748 },\n            { nominal: 108, mass: 107.908714 },\n            { nominal: 109, mass: 108.9087488 },\n            { nominal: 110, mass: 109.911079 },\n            { nominal: 111, mass: 110.9116423 },\n            { nominal: 112, mass: 111.914403 },\n            { nominal: 113, mass: 112.9154393 },\n            { nominal: 114, mass: 113.918718 },\n            { nominal: 115, mass: 114.9203116 },\n            { nominal: 116, mass: 115.924059 },\n            { nominal: 117, mass: 116.9260354 },\n            { nominal: 118, mass: 117.93034 },\n            { nominal: 119, mass: 118.932557 },\n            { nominal: 120, mass: 119.93686 },\n            { nominal: 121, mass: 120.93942 },\n            { nominal: 122, mass: 121.94399 },\n            { nominal: 123, mass: 122.94685 },\n            { nominal: 124, mass: 123.95151 },\n            { nominal: 125, mass: 124.95469 },\n            { nominal: 126, mass: 125.95946 },\n        ],\n        symbol: 'Rh',\n        mass: 102.905498,\n        name: 'Rhodium',\n        monoisotopicMass: 102.905498,\n    },\n    {\n        number: 46,\n        isotopes: [\n            { nominal: 91, mass: 90.95032 },\n            { nominal: 92, mass: 91.94088 },\n            { nominal: 93, mass: 92.93651 },\n            { nominal: 94, mass: 93.9290376 },\n            { nominal: 95, mass: 94.9248898 },\n            { nominal: 96, mass: 95.9182151 },\n            { nominal: 97, mass: 96.916472 },\n            { nominal: 98, mass: 97.9126983 },\n            { nominal: 99, mass: 98.9117748 },\n            { nominal: 100, mass: 99.908505 },\n            { nominal: 101, mass: 100.9082864 },\n            { nominal: 102, mass: 101.9056022, abundance: 0.0102 },\n            { nominal: 103, mass: 102.9060809 },\n            { nominal: 104, mass: 103.9040305, abundance: 0.1114 },\n            { nominal: 105, mass: 104.9050796, abundance: 0.2233 },\n            { nominal: 106, mass: 105.9034804, abundance: 0.2733 },\n            { nominal: 107, mass: 106.9051282 },\n            { nominal: 108, mass: 107.9038916, abundance: 0.2646 },\n            { nominal: 109, mass: 108.9059504 },\n            { nominal: 110, mass: 109.9051722, abundance: 0.1172 },\n            { nominal: 111, mass: 110.90768968 },\n            { nominal: 112, mass: 111.9073297 },\n            { nominal: 113, mass: 112.910261 },\n            { nominal: 114, mass: 113.9103686 },\n            { nominal: 115, mass: 114.913659 },\n            { nominal: 116, mass: 115.914297 },\n            { nominal: 117, mass: 116.9179547 },\n            { nominal: 118, mass: 117.9190667 },\n            { nominal: 119, mass: 118.9233402 },\n            { nominal: 120, mass: 119.9245511 },\n            { nominal: 121, mass: 120.9289503 },\n            { nominal: 122, mass: 121.930632 },\n            { nominal: 123, mass: 122.93514 },\n            { nominal: 124, mass: 123.93714 },\n            { nominal: 125, mass: 124.94179 },\n            { nominal: 126, mass: 125.94416 },\n            { nominal: 127, mass: 126.94907 },\n            { nominal: 128, mass: 127.95183 },\n        ],\n        symbol: 'Pd',\n        mass: 106.41532750734,\n        name: 'Palladium',\n        monoisotopicMass: 105.9034804,\n    },\n    {\n        number: 47,\n        isotopes: [\n            { nominal: 93, mass: 92.95033 },\n            { nominal: 94, mass: 93.94373 },\n            { nominal: 95, mass: 94.93602 },\n            { nominal: 96, mass: 95.930744 },\n            { nominal: 97, mass: 96.92397 },\n            { nominal: 98, mass: 97.92156 },\n            { nominal: 99, mass: 98.9176458 },\n            { nominal: 100, mass: 99.9161154 },\n            { nominal: 101, mass: 100.912684 },\n            { nominal: 102, mass: 101.9117047 },\n            { nominal: 103, mass: 102.9089631 },\n            { nominal: 104, mass: 103.9086239 },\n            { nominal: 105, mass: 104.9065256 },\n            { nominal: 106, mass: 105.9066636 },\n            { nominal: 107, mass: 106.9050916, abundance: 0.51839 },\n            { nominal: 108, mass: 107.9059503 },\n            { nominal: 109, mass: 108.9047553, abundance: 0.48161 },\n            { nominal: 110, mass: 109.9061102 },\n            { nominal: 111, mass: 110.9052959 },\n            { nominal: 112, mass: 111.9070486 },\n            { nominal: 113, mass: 112.906573 },\n            { nominal: 114, mass: 113.908823 },\n            { nominal: 115, mass: 114.908767 },\n            { nominal: 116, mass: 115.9113868 },\n            { nominal: 117, mass: 116.911774 },\n            { nominal: 118, mass: 117.9145955 },\n            { nominal: 119, mass: 118.91557 },\n            { nominal: 120, mass: 119.9187848 },\n            { nominal: 121, mass: 120.920125 },\n            { nominal: 122, mass: 121.923664 },\n            { nominal: 123, mass: 122.925337 },\n            { nominal: 124, mass: 123.92893 },\n            { nominal: 125, mass: 124.93105 },\n            { nominal: 126, mass: 125.93475 },\n            { nominal: 127, mass: 126.93711 },\n            { nominal: 128, mass: 127.94106 },\n            { nominal: 129, mass: 128.94395 },\n            { nominal: 130, mass: 129.9507 },\n        ],\n        symbol: 'Ag',\n        mass: 107.868149634557,\n        name: 'Silver',\n        monoisotopicMass: 106.9050916,\n    },\n    {\n        number: 48,\n        isotopes: [\n            { nominal: 95, mass: 94.94994 },\n            { nominal: 96, mass: 95.94034 },\n            { nominal: 97, mass: 96.9351 },\n            { nominal: 98, mass: 97.927389 },\n            { nominal: 99, mass: 98.9249258 },\n            { nominal: 100, mass: 99.9203488 },\n            { nominal: 101, mass: 100.9185862 },\n            { nominal: 102, mass: 101.914482 },\n            { nominal: 103, mass: 102.9134165 },\n            { nominal: 104, mass: 103.9098564 },\n            { nominal: 105, mass: 104.9094639 },\n            { nominal: 106, mass: 105.9064599, abundance: 0.0125 },\n            { nominal: 107, mass: 106.9066121 },\n            { nominal: 108, mass: 107.9041834, abundance: 0.0089 },\n            { nominal: 109, mass: 108.9049867 },\n            { nominal: 110, mass: 109.90300661, abundance: 0.1249 },\n            { nominal: 111, mass: 110.90418287, abundance: 0.128 },\n            { nominal: 112, mass: 111.90276287, abundance: 0.2413 },\n            { nominal: 113, mass: 112.90440813, abundance: 0.1222 },\n            { nominal: 114, mass: 113.90336509, abundance: 0.2873 },\n            { nominal: 115, mass: 114.90543751 },\n            { nominal: 116, mass: 115.90476315, abundance: 0.0749 },\n            { nominal: 117, mass: 116.907226 },\n            { nominal: 118, mass: 117.906922 },\n            { nominal: 119, mass: 118.909847 },\n            { nominal: 120, mass: 119.9098681 },\n            { nominal: 121, mass: 120.9129637 },\n            { nominal: 122, mass: 121.9134591 },\n            { nominal: 123, mass: 122.9168925 },\n            { nominal: 124, mass: 123.9176574 },\n            { nominal: 125, mass: 124.9212576 },\n            { nominal: 126, mass: 125.9224291 },\n            { nominal: 127, mass: 126.926472 },\n            { nominal: 128, mass: 127.9278129 },\n            { nominal: 129, mass: 128.93182 },\n            { nominal: 130, mass: 129.93394 },\n            { nominal: 131, mass: 130.9406 },\n            { nominal: 132, mass: 131.94604 },\n            { nominal: 133, mass: 132.95285 },\n        ],\n        symbol: 'Cd',\n        mass: 112.411557818268,\n        name: 'Cadmium',\n        monoisotopicMass: 113.90336509,\n    },\n    {\n        number: 49,\n        isotopes: [\n            { nominal: 97, mass: 96.94934 },\n            { nominal: 98, mass: 97.94214 },\n            { nominal: 99, mass: 98.93411 },\n            { nominal: 100, mass: 99.93096 },\n            { nominal: 101, mass: 100.92634 },\n            { nominal: 102, mass: 101.9241071 },\n            { nominal: 103, mass: 102.9198819 },\n            { nominal: 104, mass: 103.9182145 },\n            { nominal: 105, mass: 104.914502 },\n            { nominal: 106, mass: 105.913464 },\n            { nominal: 107, mass: 106.91029 },\n            { nominal: 108, mass: 107.9096935 },\n            { nominal: 109, mass: 108.9071514 },\n            { nominal: 110, mass: 109.90717 },\n            { nominal: 111, mass: 110.9051085 },\n            { nominal: 112, mass: 111.9055377 },\n            { nominal: 113, mass: 112.90406184, abundance: 0.0429 },\n            { nominal: 114, mass: 113.90491791 },\n            { nominal: 115, mass: 114.903878776, abundance: 0.9571 },\n            { nominal: 116, mass: 115.90525999 },\n            { nominal: 117, mass: 116.9045157 },\n            { nominal: 118, mass: 117.9063566 },\n            { nominal: 119, mass: 118.9058507 },\n            { nominal: 120, mass: 119.907967 },\n            { nominal: 121, mass: 120.907851 },\n            { nominal: 122, mass: 121.910281 },\n            { nominal: 123, mass: 122.910434 },\n            { nominal: 124, mass: 123.913182 },\n            { nominal: 125, mass: 124.913605 },\n            { nominal: 126, mass: 125.916507 },\n            { nominal: 127, mass: 126.917446 },\n            { nominal: 128, mass: 127.9204 },\n            { nominal: 129, mass: 128.9218053 },\n            { nominal: 130, mass: 129.924977 },\n            { nominal: 131, mass: 130.9269715 },\n            { nominal: 132, mass: 131.933001 },\n            { nominal: 133, mass: 132.93831 },\n            { nominal: 134, mass: 133.94454 },\n            { nominal: 135, mass: 134.95005 },\n        ],\n        symbol: 'In',\n        mass: 114.81808662944559,\n        name: 'Indium',\n        monoisotopicMass: 114.903878776,\n    },\n    {\n        number: 50,\n        isotopes: [\n            { nominal: 99, mass: 98.94853 },\n            { nominal: 100, mass: 99.9385 },\n            { nominal: 101, mass: 100.93526 },\n            { nominal: 102, mass: 101.93029 },\n            { nominal: 103, mass: 102.928105 },\n            { nominal: 104, mass: 103.9231052 },\n            { nominal: 105, mass: 104.9212684 },\n            { nominal: 106, mass: 105.9169574 },\n            { nominal: 107, mass: 106.9157137 },\n            { nominal: 108, mass: 107.9118943 },\n            { nominal: 109, mass: 108.9112921 },\n            { nominal: 110, mass: 109.907845 },\n            { nominal: 111, mass: 110.9077401 },\n            { nominal: 112, mass: 111.90482387, abundance: 0.0097 },\n            { nominal: 113, mass: 112.9051757 },\n            { nominal: 114, mass: 113.9027827, abundance: 0.0066 },\n            { nominal: 115, mass: 114.903344699, abundance: 0.0034 },\n            { nominal: 116, mass: 115.9017428, abundance: 0.1454 },\n            { nominal: 117, mass: 116.90295398, abundance: 0.0768 },\n            { nominal: 118, mass: 117.90160657, abundance: 0.2422 },\n            { nominal: 119, mass: 118.90331117, abundance: 0.0859 },\n            { nominal: 120, mass: 119.90220163, abundance: 0.3258 },\n            { nominal: 121, mass: 120.9042426 },\n            { nominal: 122, mass: 121.9034438, abundance: 0.0463 },\n            { nominal: 123, mass: 122.9057252 },\n            { nominal: 124, mass: 123.9052766, abundance: 0.0579 },\n            { nominal: 125, mass: 124.9077864 },\n            { nominal: 126, mass: 125.907659 },\n            { nominal: 127, mass: 126.91039 },\n            { nominal: 128, mass: 127.910507 },\n            { nominal: 129, mass: 128.913465 },\n            { nominal: 130, mass: 129.9139738 },\n            { nominal: 131, mass: 130.917045 },\n            { nominal: 132, mass: 131.9178267 },\n            { nominal: 133, mass: 132.9239134 },\n            { nominal: 134, mass: 133.9286821 },\n            { nominal: 135, mass: 134.9349086 },\n            { nominal: 136, mass: 135.93999 },\n            { nominal: 137, mass: 136.94655 },\n            { nominal: 138, mass: 137.95184 },\n        ],\n        symbol: 'Sn',\n        mass: 118.71011259301059,\n        name: 'Tin',\n        monoisotopicMass: 119.90220163,\n    },\n    {\n        number: 51,\n        isotopes: [\n            { nominal: 103, mass: 102.93969 },\n            { nominal: 104, mass: 103.93648 },\n            { nominal: 105, mass: 104.931276 },\n            { nominal: 106, mass: 105.928638 },\n            { nominal: 107, mass: 106.9241506 },\n            { nominal: 108, mass: 107.9222267 },\n            { nominal: 109, mass: 108.9181411 },\n            { nominal: 110, mass: 109.9168543 },\n            { nominal: 111, mass: 110.9132182 },\n            { nominal: 112, mass: 111.9124 },\n            { nominal: 113, mass: 112.909375 },\n            { nominal: 114, mass: 113.90929 },\n            { nominal: 115, mass: 114.906598 },\n            { nominal: 116, mass: 115.9067931 },\n            { nominal: 117, mass: 116.9048415 },\n            { nominal: 118, mass: 117.9055321 },\n            { nominal: 119, mass: 118.9039455 },\n            { nominal: 120, mass: 119.9050794 },\n            { nominal: 121, mass: 120.903812, abundance: 0.5721 },\n            { nominal: 122, mass: 121.9051699 },\n            { nominal: 123, mass: 122.9042132, abundance: 0.4279 },\n            { nominal: 124, mass: 123.905935 },\n            { nominal: 125, mass: 124.905253 },\n            { nominal: 126, mass: 125.907253 },\n            { nominal: 127, mass: 126.9069243 },\n            { nominal: 128, mass: 127.909146 },\n            { nominal: 129, mass: 128.909147 },\n            { nominal: 130, mass: 129.911662 },\n            { nominal: 131, mass: 130.9119888 },\n            { nominal: 132, mass: 131.9145077 },\n            { nominal: 133, mass: 132.9152732 },\n            { nominal: 134, mass: 133.9205357 },\n            { nominal: 135, mass: 134.9251851 },\n            { nominal: 136, mass: 135.9307459 },\n            { nominal: 137, mass: 136.93555 },\n            { nominal: 138, mass: 137.94145 },\n            { nominal: 139, mass: 138.94655 },\n            { nominal: 140, mass: 139.95283 },\n        ],\n        symbol: 'Sb',\n        mass: 121.75978367348,\n        name: 'Antimony',\n        monoisotopicMass: 120.903812,\n    },\n    {\n        number: 52,\n        isotopes: [\n            { nominal: 105, mass: 104.9433 },\n            { nominal: 106, mass: 105.9375 },\n            { nominal: 107, mass: 106.935012 },\n            { nominal: 108, mass: 107.9293805 },\n            { nominal: 109, mass: 108.9273045 },\n            { nominal: 110, mass: 109.9224581 },\n            { nominal: 111, mass: 110.9210006 },\n            { nominal: 112, mass: 111.9167279 },\n            { nominal: 113, mass: 112.915891 },\n            { nominal: 114, mass: 113.912089 },\n            { nominal: 115, mass: 114.911902 },\n            { nominal: 116, mass: 115.90846 },\n            { nominal: 117, mass: 116.908646 },\n            { nominal: 118, mass: 117.905854 },\n            { nominal: 119, mass: 118.9064071 },\n            { nominal: 120, mass: 119.9040593, abundance: 0.0009 },\n            { nominal: 121, mass: 120.904944 },\n            { nominal: 122, mass: 121.9030435, abundance: 0.0255 },\n            { nominal: 123, mass: 122.9042698, abundance: 0.0089 },\n            { nominal: 124, mass: 123.9028171, abundance: 0.0474 },\n            { nominal: 125, mass: 124.9044299, abundance: 0.0707 },\n            { nominal: 126, mass: 125.9033109, abundance: 0.1884 },\n            { nominal: 127, mass: 126.9052257 },\n            { nominal: 128, mass: 127.90446128, abundance: 0.3174 },\n            { nominal: 129, mass: 128.90659646 },\n            { nominal: 130, mass: 129.906222748, abundance: 0.3408 },\n            { nominal: 131, mass: 130.908522213 },\n            { nominal: 132, mass: 131.9085467 },\n            { nominal: 133, mass: 132.9109688 },\n            { nominal: 134, mass: 133.911394 },\n            { nominal: 135, mass: 134.9165557 },\n            { nominal: 136, mass: 135.9201006 },\n            { nominal: 137, mass: 136.9255989 },\n            { nominal: 138, mass: 137.9294722 },\n            { nominal: 139, mass: 138.9353672 },\n            { nominal: 140, mass: 139.939499 },\n            { nominal: 141, mass: 140.9458 },\n            { nominal: 142, mass: 141.95022 },\n            { nominal: 143, mass: 142.95676 },\n        ],\n        symbol: 'Te',\n        mass: 127.6031264846604,\n        name: 'Tellurium',\n        monoisotopicMass: 129.906222748,\n    },\n    {\n        number: 53,\n        isotopes: [\n            { nominal: 107, mass: 106.94678 },\n            { nominal: 108, mass: 107.94348 },\n            { nominal: 109, mass: 108.9380853 },\n            { nominal: 110, mass: 109.935089 },\n            { nominal: 111, mass: 110.9302692 },\n            { nominal: 112, mass: 111.928005 },\n            { nominal: 113, mass: 112.9236501 },\n            { nominal: 114, mass: 113.92185 },\n            { nominal: 115, mass: 114.918048 },\n            { nominal: 116, mass: 115.91681 },\n            { nominal: 117, mass: 116.913648 },\n            { nominal: 118, mass: 117.913074 },\n            { nominal: 119, mass: 118.910074 },\n            { nominal: 120, mass: 119.910087 },\n            { nominal: 121, mass: 120.9074051 },\n            { nominal: 122, mass: 121.9075888 },\n            { nominal: 123, mass: 122.9055885 },\n            { nominal: 124, mass: 123.906209 },\n            { nominal: 125, mass: 124.9046294 },\n            { nominal: 126, mass: 125.9056233 },\n            { nominal: 127, mass: 126.9044719, abundance: 1 },\n            { nominal: 128, mass: 127.9058086 },\n            { nominal: 129, mass: 128.9049837 },\n            { nominal: 130, mass: 129.9066702 },\n            { nominal: 131, mass: 130.9061263 },\n            { nominal: 132, mass: 131.9079935 },\n            { nominal: 133, mass: 132.907797 },\n            { nominal: 134, mass: 133.9097588 },\n            { nominal: 135, mass: 134.9100488 },\n            { nominal: 136, mass: 135.914604 },\n            { nominal: 137, mass: 136.9180282 },\n            { nominal: 138, mass: 137.9227264 },\n            { nominal: 139, mass: 138.926506 },\n            { nominal: 140, mass: 139.93173 },\n            { nominal: 141, mass: 140.93569 },\n            { nominal: 142, mass: 141.9412 },\n            { nominal: 143, mass: 142.94565 },\n            { nominal: 144, mass: 143.95139 },\n            { nominal: 145, mass: 144.95605 },\n        ],\n        symbol: 'I',\n        mass: 126.9044719,\n        name: 'Iodine',\n        monoisotopicMass: 126.9044719,\n    },\n    {\n        number: 54,\n        isotopes: [\n            { nominal: 109, mass: 108.95043 },\n            { nominal: 110, mass: 109.94426 },\n            { nominal: 111, mass: 110.941607 },\n            { nominal: 112, mass: 111.935559 },\n            { nominal: 113, mass: 112.9332217 },\n            { nominal: 114, mass: 113.92798 },\n            { nominal: 115, mass: 114.926294 },\n            { nominal: 116, mass: 115.921581 },\n            { nominal: 117, mass: 116.920359 },\n            { nominal: 118, mass: 117.916179 },\n            { nominal: 119, mass: 118.915411 },\n            { nominal: 120, mass: 119.911784 },\n            { nominal: 121, mass: 120.911453 },\n            { nominal: 122, mass: 121.908368 },\n            { nominal: 123, mass: 122.908482 },\n            { nominal: 124, mass: 123.905892, abundance: 0.000952 },\n            { nominal: 125, mass: 124.9063944 },\n            { nominal: 126, mass: 125.9042983, abundance: 0.00089 },\n            { nominal: 127, mass: 126.9051829 },\n            { nominal: 128, mass: 127.903531, abundance: 0.019102 },\n            { nominal: 129, mass: 128.9047808611, abundance: 0.264006 },\n            { nominal: 130, mass: 129.903509349, abundance: 0.04071 },\n            { nominal: 131, mass: 130.90508406, abundance: 0.212324 },\n            { nominal: 132, mass: 131.9041550856, abundance: 0.269086 },\n            { nominal: 133, mass: 132.9059108 },\n            { nominal: 134, mass: 133.90539466, abundance: 0.104357 },\n            { nominal: 135, mass: 134.9072278 },\n            { nominal: 136, mass: 135.907214484, abundance: 0.088573 },\n            { nominal: 137, mass: 136.91155778 },\n            { nominal: 138, mass: 137.9141463 },\n            { nominal: 139, mass: 138.9187922 },\n            { nominal: 140, mass: 139.9216458 },\n            { nominal: 141, mass: 140.9267872 },\n            { nominal: 142, mass: 141.9299731 },\n            { nominal: 143, mass: 142.9353696 },\n            { nominal: 144, mass: 143.9389451 },\n            { nominal: 145, mass: 144.94472 },\n            { nominal: 146, mass: 145.948518 },\n            { nominal: 147, mass: 146.95426 },\n            { nominal: 148, mass: 147.95813 },\n        ],\n        symbol: 'Xe',\n        mass: 131.29276144779053,\n        name: 'Xenon',\n        monoisotopicMass: 131.9041550856,\n    },\n    {\n        number: 55,\n        isotopes: [\n            { nominal: 112, mass: 111.950309 },\n            { nominal: 113, mass: 112.9444291 },\n            { nominal: 114, mass: 113.941296 },\n            { nominal: 115, mass: 114.93591 },\n            { nominal: 116, mass: 115.93337 },\n            { nominal: 117, mass: 116.928617 },\n            { nominal: 118, mass: 117.92656 },\n            { nominal: 119, mass: 118.922377 },\n            { nominal: 120, mass: 119.920677 },\n            { nominal: 121, mass: 120.917227 },\n            { nominal: 122, mass: 121.916108 },\n            { nominal: 123, mass: 122.912996 },\n            { nominal: 124, mass: 123.9122578 },\n            { nominal: 125, mass: 124.909728 },\n            { nominal: 126, mass: 125.909446 },\n            { nominal: 127, mass: 126.9074174 },\n            { nominal: 128, mass: 127.9077487 },\n            { nominal: 129, mass: 128.9060657 },\n            { nominal: 130, mass: 129.9067093 },\n            { nominal: 131, mass: 130.9054649 },\n            { nominal: 132, mass: 131.9064339 },\n            { nominal: 133, mass: 132.905451961, abundance: 1 },\n            { nominal: 134, mass: 133.906718503 },\n            { nominal: 135, mass: 134.905977 },\n            { nominal: 136, mass: 135.9073114 },\n            { nominal: 137, mass: 136.90708923 },\n            { nominal: 138, mass: 137.9110171 },\n            { nominal: 139, mass: 138.9133638 },\n            { nominal: 140, mass: 139.9172831 },\n            { nominal: 141, mass: 140.9200455 },\n            { nominal: 142, mass: 141.924296 },\n            { nominal: 143, mass: 142.927349 },\n            { nominal: 144, mass: 143.932076 },\n            { nominal: 145, mass: 144.935527 },\n            { nominal: 146, mass: 145.940344 },\n            { nominal: 147, mass: 146.944156 },\n            { nominal: 148, mass: 147.94923 },\n            { nominal: 149, mass: 148.95302 },\n            { nominal: 150, mass: 149.95833 },\n            { nominal: 151, mass: 150.96258 },\n        ],\n        symbol: 'Cs',\n        mass: 132.905451961,\n        name: 'Caesium',\n        monoisotopicMass: 132.905451961,\n    },\n    {\n        number: 56,\n        isotopes: [\n            { nominal: 114, mass: 113.95066 },\n            { nominal: 115, mass: 114.94737 },\n            { nominal: 116, mass: 115.94128 },\n            { nominal: 117, mass: 116.93814 },\n            { nominal: 118, mass: 117.93306 },\n            { nominal: 119, mass: 118.93066 },\n            { nominal: 120, mass: 119.92605 },\n            { nominal: 121, mass: 120.92405 },\n            { nominal: 122, mass: 121.919904 },\n            { nominal: 123, mass: 122.918781 },\n            { nominal: 124, mass: 123.915094 },\n            { nominal: 125, mass: 124.914472 },\n            { nominal: 126, mass: 125.91125 },\n            { nominal: 127, mass: 126.911091 },\n            { nominal: 128, mass: 127.908342 },\n            { nominal: 129, mass: 128.908681 },\n            { nominal: 130, mass: 129.9063207, abundance: 0.00106 },\n            { nominal: 131, mass: 130.906941 },\n            { nominal: 132, mass: 131.9050611, abundance: 0.00101 },\n            { nominal: 133, mass: 132.9060074 },\n            { nominal: 134, mass: 133.90450818, abundance: 0.02417 },\n            { nominal: 135, mass: 134.90568838, abundance: 0.06592 },\n            { nominal: 136, mass: 135.90457573, abundance: 0.07854 },\n            { nominal: 137, mass: 136.90582714, abundance: 0.11232 },\n            { nominal: 138, mass: 137.905247, abundance: 0.71698 },\n            { nominal: 139, mass: 138.9088411 },\n            { nominal: 140, mass: 139.9106057 },\n            { nominal: 141, mass: 140.9144033 },\n            { nominal: 142, mass: 141.9164324 },\n            { nominal: 143, mass: 142.9206253 },\n            { nominal: 144, mass: 143.9229549 },\n            { nominal: 145, mass: 144.9275184 },\n            { nominal: 146, mass: 145.930284 },\n            { nominal: 147, mass: 146.935304 },\n            { nominal: 148, mass: 147.938171 },\n            { nominal: 149, mass: 148.94308 },\n            { nominal: 150, mass: 149.94605 },\n            { nominal: 151, mass: 150.95127 },\n            { nominal: 152, mass: 151.95481 },\n            { nominal: 153, mass: 152.96036 },\n        ],\n        symbol: 'Ba',\n        mass: 137.3268916286322,\n        name: 'Barium',\n        monoisotopicMass: 137.905247,\n    },\n    {\n        number: 57,\n        isotopes: [\n            { nominal: 116, mass: 115.9563 },\n            { nominal: 117, mass: 116.94999 },\n            { nominal: 118, mass: 117.94673 },\n            { nominal: 119, mass: 118.94099 },\n            { nominal: 120, mass: 119.93807 },\n            { nominal: 121, mass: 120.93315 },\n            { nominal: 122, mass: 121.93071 },\n            { nominal: 123, mass: 122.9263 },\n            { nominal: 124, mass: 123.924574 },\n            { nominal: 125, mass: 124.920816 },\n            { nominal: 126, mass: 125.919513 },\n            { nominal: 127, mass: 126.916375 },\n            { nominal: 128, mass: 127.915592 },\n            { nominal: 129, mass: 128.912694 },\n            { nominal: 130, mass: 129.912369 },\n            { nominal: 131, mass: 130.91007 },\n            { nominal: 132, mass: 131.910119 },\n            { nominal: 133, mass: 132.908218 },\n            { nominal: 134, mass: 133.908514 },\n            { nominal: 135, mass: 134.906984 },\n            { nominal: 136, mass: 135.907635 },\n            { nominal: 137, mass: 136.9064504 },\n            { nominal: 138, mass: 137.9071149, abundance: 0.0008881 },\n            { nominal: 139, mass: 138.9063563, abundance: 0.9991119 },\n            { nominal: 140, mass: 139.9094806 },\n            { nominal: 141, mass: 140.910966 },\n            { nominal: 142, mass: 141.9140909 },\n            { nominal: 143, mass: 142.9160795 },\n            { nominal: 144, mass: 143.919646 },\n            { nominal: 145, mass: 144.921808 },\n            { nominal: 146, mass: 145.925875 },\n            { nominal: 147, mass: 146.928418 },\n            { nominal: 148, mass: 147.932679 },\n            { nominal: 149, mass: 148.93535 },\n            { nominal: 150, mass: 149.93947 },\n            { nominal: 151, mass: 150.94232 },\n            { nominal: 152, mass: 151.94682 },\n            { nominal: 153, mass: 152.95036 },\n            { nominal: 154, mass: 153.95517 },\n            { nominal: 155, mass: 154.95901 },\n        ],\n        symbol: 'La',\n        mass: 138.90546887371266,\n        name: 'Lanthanum',\n        monoisotopicMass: 138.9063563,\n    },\n    {\n        number: 58,\n        isotopes: [\n            { nominal: 119, mass: 118.95271 },\n            { nominal: 120, mass: 119.94654 },\n            { nominal: 121, mass: 120.94335 },\n            { nominal: 122, mass: 121.93787 },\n            { nominal: 123, mass: 122.93528 },\n            { nominal: 124, mass: 123.93031 },\n            { nominal: 125, mass: 124.92844 },\n            { nominal: 126, mass: 125.923971 },\n            { nominal: 127, mass: 126.922727 },\n            { nominal: 128, mass: 127.918911 },\n            { nominal: 129, mass: 128.918102 },\n            { nominal: 130, mass: 129.914736 },\n            { nominal: 131, mass: 130.914429 },\n            { nominal: 132, mass: 131.911464 },\n            { nominal: 133, mass: 132.91152 },\n            { nominal: 134, mass: 133.908928 },\n            { nominal: 135, mass: 134.909161 },\n            { nominal: 136, mass: 135.90712921, abundance: 0.00185 },\n            { nominal: 137, mass: 136.90776236 },\n            { nominal: 138, mass: 137.905991, abundance: 0.00251 },\n            { nominal: 139, mass: 138.9066551 },\n            { nominal: 140, mass: 139.9054431, abundance: 0.8845 },\n            { nominal: 141, mass: 140.9082807 },\n            { nominal: 142, mass: 141.9092504, abundance: 0.11114 },\n            { nominal: 143, mass: 142.9123921 },\n            { nominal: 144, mass: 143.9136529 },\n            { nominal: 145, mass: 144.917265 },\n            { nominal: 146, mass: 145.918802 },\n            { nominal: 147, mass: 146.9226899 },\n            { nominal: 148, mass: 147.924424 },\n            { nominal: 149, mass: 148.928427 },\n            { nominal: 150, mass: 149.930384 },\n            { nominal: 151, mass: 150.934272 },\n            { nominal: 152, mass: 151.9366 },\n            { nominal: 153, mass: 152.94093 },\n            { nominal: 154, mass: 153.9438 },\n            { nominal: 155, mass: 154.94855 },\n            { nominal: 156, mass: 155.95183 },\n            { nominal: 157, mass: 156.95705 },\n        ],\n        symbol: 'Ce',\n        mass: 140.1157307378545,\n        name: 'Cerium',\n        monoisotopicMass: 139.9054431,\n    },\n    {\n        number: 59,\n        isotopes: [\n            { nominal: 121, mass: 120.95532 },\n            { nominal: 122, mass: 121.95175 },\n            { nominal: 123, mass: 122.94596 },\n            { nominal: 124, mass: 123.94294 },\n            { nominal: 125, mass: 124.9377 },\n            { nominal: 126, mass: 125.93524 },\n            { nominal: 127, mass: 126.93071 },\n            { nominal: 128, mass: 127.928791 },\n            { nominal: 129, mass: 128.925095 },\n            { nominal: 130, mass: 129.92359 },\n            { nominal: 131, mass: 130.920235 },\n            { nominal: 132, mass: 131.919255 },\n            { nominal: 133, mass: 132.916331 },\n            { nominal: 134, mass: 133.915697 },\n            { nominal: 135, mass: 134.913112 },\n            { nominal: 136, mass: 135.912677 },\n            { nominal: 137, mass: 136.9106792 },\n            { nominal: 138, mass: 137.910754 },\n            { nominal: 139, mass: 138.9089408 },\n            { nominal: 140, mass: 139.9090803 },\n            { nominal: 141, mass: 140.9076576, abundance: 1 },\n            { nominal: 142, mass: 141.9100496 },\n            { nominal: 143, mass: 142.9108228 },\n            { nominal: 144, mass: 143.9133109 },\n            { nominal: 145, mass: 144.9145182 },\n            { nominal: 146, mass: 145.91768 },\n            { nominal: 147, mass: 146.919008 },\n            { nominal: 148, mass: 147.92213 },\n            { nominal: 149, mass: 148.923736 },\n            { nominal: 150, mass: 149.9266765 },\n            { nominal: 151, mass: 150.928309 },\n            { nominal: 152, mass: 151.931553 },\n            { nominal: 153, mass: 152.933904 },\n            { nominal: 154, mass: 153.93753 },\n            { nominal: 155, mass: 154.940509 },\n            { nominal: 156, mass: 155.94464 },\n            { nominal: 157, mass: 156.94789 },\n            { nominal: 158, mass: 157.95241 },\n            { nominal: 159, mass: 158.95589 },\n        ],\n        symbol: 'Pr',\n        mass: 140.9076576,\n        name: 'Praseodymium',\n        monoisotopicMass: 140.9076576,\n    },\n    {\n        number: 60,\n        isotopes: [\n            { nominal: 124, mass: 123.9522 },\n            { nominal: 125, mass: 124.9489 },\n            { nominal: 126, mass: 125.94311 },\n            { nominal: 127, mass: 126.94038 },\n            { nominal: 128, mass: 127.93525 },\n            { nominal: 129, mass: 128.9331 },\n            { nominal: 130, mass: 129.928506 },\n            { nominal: 131, mass: 130.927248 },\n            { nominal: 132, mass: 131.923321 },\n            { nominal: 133, mass: 132.922348 },\n            { nominal: 134, mass: 133.91879 },\n            { nominal: 135, mass: 134.918181 },\n            { nominal: 136, mass: 135.914976 },\n            { nominal: 137, mass: 136.914562 },\n            { nominal: 138, mass: 137.91195 },\n            { nominal: 139, mass: 138.911954 },\n            { nominal: 140, mass: 139.90955 },\n            { nominal: 141, mass: 140.9096147 },\n            { nominal: 142, mass: 141.907729, abundance: 0.27152 },\n            { nominal: 143, mass: 142.90982, abundance: 0.12174 },\n            { nominal: 144, mass: 143.910093, abundance: 0.23798 },\n            { nominal: 145, mass: 144.9125793, abundance: 0.08293 },\n            { nominal: 146, mass: 145.9131226, abundance: 0.17189 },\n            { nominal: 147, mass: 146.9161061 },\n            { nominal: 148, mass: 147.9168993, abundance: 0.05756 },\n            { nominal: 149, mass: 148.9201548 },\n            { nominal: 150, mass: 149.9209022, abundance: 0.05638 },\n            { nominal: 151, mass: 150.9238403 },\n            { nominal: 152, mass: 151.924692 },\n            { nominal: 153, mass: 152.927718 },\n            { nominal: 154, mass: 153.92948 },\n            { nominal: 155, mass: 154.9331357 },\n            { nominal: 156, mass: 155.93508 },\n            { nominal: 157, mass: 156.939386 },\n            { nominal: 158, mass: 157.94197 },\n            { nominal: 159, mass: 158.94653 },\n            { nominal: 160, mass: 159.9494 },\n            { nominal: 161, mass: 160.95428 },\n        ],\n        symbol: 'Nd',\n        mass: 144.241596031827,\n        name: 'Neodymium',\n        monoisotopicMass: 141.907729,\n    },\n    {\n        number: 61,\n        isotopes: [\n            { nominal: 126, mass: 125.95792 },\n            { nominal: 127, mass: 126.95192 },\n            { nominal: 128, mass: 127.9487 },\n            { nominal: 129, mass: 128.94323 },\n            { nominal: 130, mass: 129.94053 },\n            { nominal: 131, mass: 130.93567 },\n            { nominal: 132, mass: 131.93384 },\n            { nominal: 133, mass: 132.929782 },\n            { nominal: 134, mass: 133.928353 },\n            { nominal: 135, mass: 134.924823 },\n            { nominal: 136, mass: 135.923585 },\n            { nominal: 137, mass: 136.92048 },\n            { nominal: 138, mass: 137.919548 },\n            { nominal: 139, mass: 138.9168 },\n            { nominal: 140, mass: 139.91604 },\n            { nominal: 141, mass: 140.913555 },\n            { nominal: 142, mass: 141.91289 },\n            { nominal: 143, mass: 142.9109383 },\n            { nominal: 144, mass: 143.9125964 },\n            { nominal: 145, mass: 144.9127559 },\n            { nominal: 146, mass: 145.9147024 },\n            { nominal: 147, mass: 146.915145 },\n            { nominal: 148, mass: 147.9174819 },\n            { nominal: 149, mass: 148.9183423 },\n            { nominal: 150, mass: 149.920991 },\n            { nominal: 151, mass: 150.9212175 },\n            { nominal: 152, mass: 151.923506 },\n            { nominal: 153, mass: 152.9241567 },\n            { nominal: 154, mass: 153.926472 },\n            { nominal: 155, mass: 154.928137 },\n            { nominal: 156, mass: 155.9311175 },\n            { nominal: 157, mass: 156.9331214 },\n            { nominal: 158, mass: 157.936565 },\n            { nominal: 159, mass: 158.939287 },\n            { nominal: 160, mass: 159.9431 },\n            { nominal: 161, mass: 160.94607 },\n            { nominal: 162, mass: 161.95022 },\n            { nominal: 163, mass: 162.95357 },\n        ],\n        symbol: 'Pm',\n        mass: null,\n        name: 'Promethium',\n    },\n    {\n        number: 62,\n        isotopes: [\n            { nominal: 128, mass: 127.95842 },\n            { nominal: 129, mass: 128.95476 },\n            { nominal: 130, mass: 129.949 },\n            { nominal: 131, mass: 130.94618 },\n            { nominal: 132, mass: 131.94087 },\n            { nominal: 133, mass: 132.93856 },\n            { nominal: 134, mass: 133.93411 },\n            { nominal: 135, mass: 134.93252 },\n            { nominal: 136, mass: 135.928276 },\n            { nominal: 137, mass: 136.926971 },\n            { nominal: 138, mass: 137.923244 },\n            { nominal: 139, mass: 138.922297 },\n            { nominal: 140, mass: 139.918995 },\n            { nominal: 141, mass: 140.9184816 },\n            { nominal: 142, mass: 141.9152044 },\n            { nominal: 143, mass: 142.9146353 },\n            { nominal: 144, mass: 143.9120065, abundance: 0.0307 },\n            { nominal: 145, mass: 144.9134173 },\n            { nominal: 146, mass: 145.913047 },\n            { nominal: 147, mass: 146.9149044, abundance: 0.1499 },\n            { nominal: 148, mass: 147.9148292, abundance: 0.1124 },\n            { nominal: 149, mass: 148.9171921, abundance: 0.1382 },\n            { nominal: 150, mass: 149.9172829, abundance: 0.0738 },\n            { nominal: 151, mass: 150.9199398 },\n            { nominal: 152, mass: 151.9197397, abundance: 0.2675 },\n            { nominal: 153, mass: 152.9221047 },\n            { nominal: 154, mass: 153.9222169, abundance: 0.2275 },\n            { nominal: 155, mass: 154.9246477 },\n            { nominal: 156, mass: 155.925536 },\n            { nominal: 157, mass: 156.9284187 },\n            { nominal: 158, mass: 157.929951 },\n            { nominal: 159, mass: 158.9332172 },\n            { nominal: 160, mass: 159.9353353 },\n            { nominal: 161, mass: 160.9391602 },\n            { nominal: 162, mass: 161.94146 },\n            { nominal: 163, mass: 162.94555 },\n            { nominal: 164, mass: 163.94836 },\n            { nominal: 165, mass: 164.95297 },\n        ],\n        symbol: 'Sm',\n        mass: 150.36635571193,\n        name: 'Samarium',\n        monoisotopicMass: 151.9197397,\n    },\n    {\n        number: 63,\n        isotopes: [\n            { nominal: 130, mass: 129.96369 },\n            { nominal: 131, mass: 130.95784 },\n            { nominal: 132, mass: 131.95467 },\n            { nominal: 133, mass: 132.94929 },\n            { nominal: 134, mass: 133.9464 },\n            { nominal: 135, mass: 134.94187 },\n            { nominal: 136, mass: 135.93962 },\n            { nominal: 137, mass: 136.93546 },\n            { nominal: 138, mass: 137.933709 },\n            { nominal: 139, mass: 138.929792 },\n            { nominal: 140, mass: 139.928088 },\n            { nominal: 141, mass: 140.924932 },\n            { nominal: 142, mass: 141.923442 },\n            { nominal: 143, mass: 142.920299 },\n            { nominal: 144, mass: 143.91882 },\n            { nominal: 145, mass: 144.9162726 },\n            { nominal: 146, mass: 145.917211 },\n            { nominal: 147, mass: 146.9167527 },\n            { nominal: 148, mass: 147.918089 },\n            { nominal: 149, mass: 148.9179378 },\n            { nominal: 150, mass: 149.9197077 },\n            { nominal: 151, mass: 150.9198578, abundance: 0.4781 },\n            { nominal: 152, mass: 151.9217522 },\n            { nominal: 153, mass: 152.921238, abundance: 0.5219 },\n            { nominal: 154, mass: 153.922987 },\n            { nominal: 155, mass: 154.9229011 },\n            { nominal: 156, mass: 155.9247605 },\n            { nominal: 157, mass: 156.9254334 },\n            { nominal: 158, mass: 157.927799 },\n            { nominal: 159, mass: 158.9291001 },\n            { nominal: 160, mass: 159.931851 },\n            { nominal: 161, mass: 160.933664 },\n            { nominal: 162, mass: 161.936989 },\n            { nominal: 163, mass: 162.939196 },\n            { nominal: 164, mass: 163.94274 },\n            { nominal: 165, mass: 164.94559 },\n            { nominal: 166, mass: 165.94962 },\n            { nominal: 167, mass: 166.95289 },\n        ],\n        symbol: 'Eu',\n        mass: 151.96437812637998,\n        name: 'Europium',\n        monoisotopicMass: 152.921238,\n    },\n    {\n        number: 64,\n        isotopes: [\n            { nominal: 133, mass: 132.96133 },\n            { nominal: 134, mass: 133.95566 },\n            { nominal: 135, mass: 134.95245 },\n            { nominal: 136, mass: 135.9473 },\n            { nominal: 137, mass: 136.94502 },\n            { nominal: 138, mass: 137.94025 },\n            { nominal: 139, mass: 138.93813 },\n            { nominal: 140, mass: 139.933674 },\n            { nominal: 141, mass: 140.932126 },\n            { nominal: 142, mass: 141.928116 },\n            { nominal: 143, mass: 142.92675 },\n            { nominal: 144, mass: 143.922963 },\n            { nominal: 145, mass: 144.921713 },\n            { nominal: 146, mass: 145.9183188 },\n            { nominal: 147, mass: 146.9191014 },\n            { nominal: 148, mass: 147.9181215 },\n            { nominal: 149, mass: 148.9193481 },\n            { nominal: 150, mass: 149.9186644 },\n            { nominal: 151, mass: 150.920356 },\n            { nominal: 152, mass: 151.9197995, abundance: 0.002 },\n            { nominal: 153, mass: 152.921758 },\n            { nominal: 154, mass: 153.9208741, abundance: 0.0218 },\n            { nominal: 155, mass: 154.9226305, abundance: 0.148 },\n            { nominal: 156, mass: 155.9221312, abundance: 0.2047 },\n            { nominal: 157, mass: 156.9239686, abundance: 0.1565 },\n            { nominal: 158, mass: 157.9241123, abundance: 0.2484 },\n            { nominal: 159, mass: 158.926397 },\n            { nominal: 160, mass: 159.9270624, abundance: 0.2186 },\n            { nominal: 161, mass: 160.9296775 },\n            { nominal: 162, mass: 161.930993 },\n            { nominal: 163, mass: 162.9341769 },\n            { nominal: 164, mass: 163.93583 },\n            { nominal: 165, mass: 164.93936 },\n            { nominal: 166, mass: 165.94146 },\n            { nominal: 167, mass: 166.94545 },\n            { nominal: 168, mass: 167.94808 },\n            { nominal: 169, mass: 168.9526 },\n        ],\n        symbol: 'Gd',\n        mass: 157.25213064687998,\n        name: 'Gadolinium',\n        monoisotopicMass: 157.9241123,\n    },\n    {\n        number: 65,\n        isotopes: [\n            { nominal: 135, mass: 134.96476 },\n            { nominal: 136, mass: 135.96129 },\n            { nominal: 137, mass: 136.95602 },\n            { nominal: 138, mass: 137.95312 },\n            { nominal: 139, mass: 138.94833 },\n            { nominal: 140, mass: 139.94581 },\n            { nominal: 141, mass: 140.94145 },\n            { nominal: 142, mass: 141.93928 },\n            { nominal: 143, mass: 142.935137 },\n            { nominal: 144, mass: 143.933045 },\n            { nominal: 145, mass: 144.92882 },\n            { nominal: 146, mass: 145.927253 },\n            { nominal: 147, mass: 146.9240548 },\n            { nominal: 148, mass: 147.924282 },\n            { nominal: 149, mass: 148.9232535 },\n            { nominal: 150, mass: 149.9236649 },\n            { nominal: 151, mass: 150.9231096 },\n            { nominal: 152, mass: 151.924083 },\n            { nominal: 153, mass: 152.9234424 },\n            { nominal: 154, mass: 153.924685 },\n            { nominal: 155, mass: 154.923511 },\n            { nominal: 156, mass: 155.9247552 },\n            { nominal: 157, mass: 156.924033 },\n            { nominal: 158, mass: 157.9254209 },\n            { nominal: 159, mass: 158.9253547, abundance: 1 },\n            { nominal: 160, mass: 159.9271756 },\n            { nominal: 161, mass: 160.9275778 },\n            { nominal: 162, mass: 161.929495 },\n            { nominal: 163, mass: 162.9306547 },\n            { nominal: 164, mass: 163.93336 },\n            { nominal: 165, mass: 164.93498 },\n            { nominal: 166, mass: 165.93786 },\n            { nominal: 167, mass: 166.93996 },\n            { nominal: 168, mass: 167.9434 },\n            { nominal: 169, mass: 168.94597 },\n            { nominal: 170, mass: 169.94984 },\n            { nominal: 171, mass: 170.95273 },\n        ],\n        symbol: 'Tb',\n        mass: 158.9253547,\n        name: 'Terbium',\n        monoisotopicMass: 158.9253547,\n    },\n    {\n        number: 66,\n        isotopes: [\n            { nominal: 138, mass: 137.9625 },\n            { nominal: 139, mass: 138.95959 },\n            { nominal: 140, mass: 139.95402 },\n            { nominal: 141, mass: 140.95128 },\n            { nominal: 142, mass: 141.94619 },\n            { nominal: 143, mass: 142.943994 },\n            { nominal: 144, mass: 143.9392695 },\n            { nominal: 145, mass: 144.937474 },\n            { nominal: 146, mass: 145.9328445 },\n            { nominal: 147, mass: 146.9310827 },\n            { nominal: 148, mass: 147.927157 },\n            { nominal: 149, mass: 148.927322 },\n            { nominal: 150, mass: 149.9255933 },\n            { nominal: 151, mass: 150.9261916 },\n            { nominal: 152, mass: 151.9247253 },\n            { nominal: 153, mass: 152.9257724 },\n            { nominal: 154, mass: 153.9244293 },\n            { nominal: 155, mass: 154.925759 },\n            { nominal: 156, mass: 155.9242847, abundance: 0.00056 },\n            { nominal: 157, mass: 156.9254707 },\n            { nominal: 158, mass: 157.9244159, abundance: 0.00095 },\n            { nominal: 159, mass: 158.925747 },\n            { nominal: 160, mass: 159.9252046, abundance: 0.02329 },\n            { nominal: 161, mass: 160.9269405, abundance: 0.18889 },\n            { nominal: 162, mass: 161.9268056, abundance: 0.25475 },\n            { nominal: 163, mass: 162.9287383, abundance: 0.24896 },\n            { nominal: 164, mass: 163.9291819, abundance: 0.2826 },\n            { nominal: 165, mass: 164.9317105 },\n            { nominal: 166, mass: 165.9328139 },\n            { nominal: 167, mass: 166.935661 },\n            { nominal: 168, mass: 167.93713 },\n            { nominal: 169, mass: 168.94031 },\n            { nominal: 170, mass: 169.94239 },\n            { nominal: 171, mass: 170.94612 },\n            { nominal: 172, mass: 171.94846 },\n            { nominal: 173, mass: 172.95283 },\n        ],\n        symbol: 'Dy',\n        mass: 162.499472819424,\n        name: 'Dysprosium',\n        monoisotopicMass: 163.9291819,\n    },\n    {\n        number: 67,\n        isotopes: [\n            { nominal: 140, mass: 139.96859 },\n            { nominal: 141, mass: 140.96311 },\n            { nominal: 142, mass: 141.96001 },\n            { nominal: 143, mass: 142.95486 },\n            { nominal: 144, mass: 143.9521097 },\n            { nominal: 145, mass: 144.9472674 },\n            { nominal: 146, mass: 145.9449935 },\n            { nominal: 147, mass: 146.9401423 },\n            { nominal: 148, mass: 147.937744 },\n            { nominal: 149, mass: 148.933803 },\n            { nominal: 150, mass: 149.933498 },\n            { nominal: 151, mass: 150.9316983 },\n            { nominal: 152, mass: 151.931724 },\n            { nominal: 153, mass: 152.9302064 },\n            { nominal: 154, mass: 153.9306068 },\n            { nominal: 155, mass: 154.929104 },\n            { nominal: 156, mass: 155.929706 },\n            { nominal: 157, mass: 156.928254 },\n            { nominal: 158, mass: 157.928946 },\n            { nominal: 159, mass: 158.9277197 },\n            { nominal: 160, mass: 159.928737 },\n            { nominal: 161, mass: 160.9278615 },\n            { nominal: 162, mass: 161.9291023 },\n            { nominal: 163, mass: 162.928741 },\n            { nominal: 164, mass: 163.9302403 },\n            { nominal: 165, mass: 164.9303288, abundance: 1 },\n            { nominal: 166, mass: 165.9322909 },\n            { nominal: 167, mass: 166.9331385 },\n            { nominal: 168, mass: 167.935522 },\n            { nominal: 169, mass: 168.936878 },\n            { nominal: 170, mass: 169.939625 },\n            { nominal: 171, mass: 170.94147 },\n            { nominal: 172, mass: 171.94473 },\n            { nominal: 173, mass: 172.94702 },\n            { nominal: 174, mass: 173.95095 },\n            { nominal: 175, mass: 174.95362 },\n        ],\n        symbol: 'Ho',\n        mass: 164.9303288,\n        name: 'Holmium',\n        monoisotopicMass: 164.9303288,\n    },\n    {\n        number: 68,\n        isotopes: [\n            { nominal: 142, mass: 141.9701 },\n            { nominal: 143, mass: 142.96662 },\n            { nominal: 144, mass: 143.9607 },\n            { nominal: 145, mass: 144.95805 },\n            { nominal: 146, mass: 145.9524184 },\n            { nominal: 147, mass: 146.949964 },\n            { nominal: 148, mass: 147.944735 },\n            { nominal: 149, mass: 148.942306 },\n            { nominal: 150, mass: 149.937916 },\n            { nominal: 151, mass: 150.937449 },\n            { nominal: 152, mass: 151.935057 },\n            { nominal: 153, mass: 152.93508 },\n            { nominal: 154, mass: 153.9327908 },\n            { nominal: 155, mass: 154.9332159 },\n            { nominal: 156, mass: 155.931067 },\n            { nominal: 157, mass: 156.931949 },\n            { nominal: 158, mass: 157.929893 },\n            { nominal: 159, mass: 158.9306918 },\n            { nominal: 160, mass: 159.929077 },\n            { nominal: 161, mass: 160.9300046 },\n            { nominal: 162, mass: 161.9287884, abundance: 0.00139 },\n            { nominal: 163, mass: 162.9300408 },\n            { nominal: 164, mass: 163.9292088, abundance: 0.01601 },\n            { nominal: 165, mass: 164.9307345 },\n            { nominal: 166, mass: 165.9302995, abundance: 0.33503 },\n            { nominal: 167, mass: 166.9320546, abundance: 0.22869 },\n            { nominal: 168, mass: 167.9323767, abundance: 0.26978 },\n            { nominal: 169, mass: 168.9345968 },\n            { nominal: 170, mass: 169.9354702, abundance: 0.1491 },\n            { nominal: 171, mass: 170.9380357 },\n            { nominal: 172, mass: 171.9393619 },\n            { nominal: 173, mass: 172.9424 },\n            { nominal: 174, mass: 173.94423 },\n            { nominal: 175, mass: 174.94777 },\n            { nominal: 176, mass: 175.94994 },\n            { nominal: 177, mass: 176.95399 },\n        ],\n        symbol: 'Er',\n        mass: 167.259082649669,\n        name: 'Erbium',\n        monoisotopicMass: 165.9302995,\n    },\n    {\n        number: 69,\n        isotopes: [\n            { nominal: 144, mass: 143.97628 },\n            { nominal: 145, mass: 144.97039 },\n            { nominal: 146, mass: 145.96684 },\n            { nominal: 147, mass: 146.9613799 },\n            { nominal: 148, mass: 147.958384 },\n            { nominal: 149, mass: 148.95289 },\n            { nominal: 150, mass: 149.95009 },\n            { nominal: 151, mass: 150.945488 },\n            { nominal: 152, mass: 151.944422 },\n            { nominal: 153, mass: 152.94204 },\n            { nominal: 154, mass: 153.94157 },\n            { nominal: 155, mass: 154.93921 },\n            { nominal: 156, mass: 155.938992 },\n            { nominal: 157, mass: 156.936944 },\n            { nominal: 158, mass: 157.93698 },\n            { nominal: 159, mass: 158.934975 },\n            { nominal: 160, mass: 159.935263 },\n            { nominal: 161, mass: 160.933549 },\n            { nominal: 162, mass: 161.934002 },\n            { nominal: 163, mass: 162.9326592 },\n            { nominal: 164, mass: 163.933544 },\n            { nominal: 165, mass: 164.9324431 },\n            { nominal: 166, mass: 165.933561 },\n            { nominal: 167, mass: 166.9328562 },\n            { nominal: 168, mass: 167.9341774 },\n            { nominal: 169, mass: 168.9342179, abundance: 1 },\n            { nominal: 170, mass: 169.935806 },\n            { nominal: 171, mass: 170.9364339 },\n            { nominal: 172, mass: 171.9384055 },\n            { nominal: 173, mass: 172.9396084 },\n            { nominal: 174, mass: 173.942173 },\n            { nominal: 175, mass: 174.943841 },\n            { nominal: 176, mass: 175.947 },\n            { nominal: 177, mass: 176.94904 },\n            { nominal: 178, mass: 177.95264 },\n            { nominal: 179, mass: 178.95534 },\n        ],\n        symbol: 'Tm',\n        mass: 168.9342179,\n        name: 'Thulium',\n        monoisotopicMass: 168.9342179,\n    },\n    {\n        number: 70,\n        isotopes: [\n            { nominal: 148, mass: 147.96758 },\n            { nominal: 149, mass: 148.96436 },\n            { nominal: 150, mass: 149.95852 },\n            { nominal: 151, mass: 150.9554 },\n            { nominal: 152, mass: 151.95027 },\n            { nominal: 153, mass: 152.94932 },\n            { nominal: 154, mass: 153.946396 },\n            { nominal: 155, mass: 154.945783 },\n            { nominal: 156, mass: 155.942825 },\n            { nominal: 157, mass: 156.942645 },\n            { nominal: 158, mass: 157.9398705 },\n            { nominal: 159, mass: 158.940055 },\n            { nominal: 160, mass: 159.937557 },\n            { nominal: 161, mass: 160.937907 },\n            { nominal: 162, mass: 161.935774 },\n            { nominal: 163, mass: 162.93634 },\n            { nominal: 164, mass: 163.934495 },\n            { nominal: 165, mass: 164.93527 },\n            { nominal: 166, mass: 165.9338747 },\n            { nominal: 167, mass: 166.934953 },\n            { nominal: 168, mass: 167.9338896, abundance: 0.00123 },\n            { nominal: 169, mass: 168.9351825 },\n            { nominal: 170, mass: 169.9347664, abundance: 0.02982 },\n            { nominal: 171, mass: 170.9363302, abundance: 0.1409 },\n            { nominal: 172, mass: 171.9363859, abundance: 0.2168 },\n            { nominal: 173, mass: 172.9382151, abundance: 0.16103 },\n            { nominal: 174, mass: 173.9388664, abundance: 0.32026 },\n            { nominal: 175, mass: 174.9412808 },\n            { nominal: 176, mass: 175.9425764, abundance: 0.12996 },\n            { nominal: 177, mass: 176.9452656 },\n            { nominal: 178, mass: 177.946651 },\n            { nominal: 179, mass: 178.95004 },\n            { nominal: 180, mass: 179.95212 },\n            { nominal: 181, mass: 180.95589 },\n        ],\n        symbol: 'Yb',\n        mass: 173.05415016631702,\n        name: 'Ytterbium',\n        monoisotopicMass: 173.9388664,\n    },\n    {\n        number: 71,\n        isotopes: [\n            { nominal: 150, mass: 149.97355 },\n            { nominal: 151, mass: 150.96768 },\n            { nominal: 152, mass: 151.96412 },\n            { nominal: 153, mass: 152.95875 },\n            { nominal: 154, mass: 153.95736 },\n            { nominal: 155, mass: 154.954321 },\n            { nominal: 156, mass: 155.953033 },\n            { nominal: 157, mass: 156.950127 },\n            { nominal: 158, mass: 157.949316 },\n            { nominal: 159, mass: 158.946636 },\n            { nominal: 160, mass: 159.946033 },\n            { nominal: 161, mass: 160.943572 },\n            { nominal: 162, mass: 161.943283 },\n            { nominal: 163, mass: 162.941179 },\n            { nominal: 164, mass: 163.941339 },\n            { nominal: 165, mass: 164.939407 },\n            { nominal: 166, mass: 165.939859 },\n            { nominal: 167, mass: 166.93827 },\n            { nominal: 168, mass: 167.938736 },\n            { nominal: 169, mass: 168.9376441 },\n            { nominal: 170, mass: 169.938478 },\n            { nominal: 171, mass: 170.937917 },\n            { nominal: 172, mass: 171.9390891 },\n            { nominal: 173, mass: 172.938934 },\n            { nominal: 174, mass: 173.9403409 },\n            { nominal: 175, mass: 174.9407752, abundance: 0.97401 },\n            { nominal: 176, mass: 175.9426897, abundance: 0.02599 },\n            { nominal: 177, mass: 176.9437615 },\n            { nominal: 178, mass: 177.945958 },\n            { nominal: 179, mass: 178.9473309 },\n            { nominal: 180, mass: 179.949888 },\n            { nominal: 181, mass: 180.95191 },\n            { nominal: 182, mass: 181.95504 },\n            { nominal: 183, mass: 182.957363 },\n            { nominal: 184, mass: 183.96091 },\n            { nominal: 185, mass: 184.96362 },\n        ],\n        symbol: 'Lu',\n        mass: 174.96681495785498,\n        name: 'Lutetium',\n        monoisotopicMass: 174.9407752,\n    },\n    {\n        number: 72,\n        isotopes: [\n            { nominal: 153, mass: 152.97069 },\n            { nominal: 154, mass: 153.96486 },\n            { nominal: 155, mass: 154.96311 },\n            { nominal: 156, mass: 155.95935 },\n            { nominal: 157, mass: 156.95824 },\n            { nominal: 158, mass: 157.954801 },\n            { nominal: 159, mass: 158.953996 },\n            { nominal: 160, mass: 159.950691 },\n            { nominal: 161, mass: 160.950278 },\n            { nominal: 162, mass: 161.9472148 },\n            { nominal: 163, mass: 162.947113 },\n            { nominal: 164, mass: 163.944371 },\n            { nominal: 165, mass: 164.944567 },\n            { nominal: 166, mass: 165.94218 },\n            { nominal: 167, mass: 166.9426 },\n            { nominal: 168, mass: 167.940568 },\n            { nominal: 169, mass: 168.941259 },\n            { nominal: 170, mass: 169.939609 },\n            { nominal: 171, mass: 170.940492 },\n            { nominal: 172, mass: 171.93945 },\n            { nominal: 173, mass: 172.940513 },\n            { nominal: 174, mass: 173.9400461, abundance: 0.0016 },\n            { nominal: 175, mass: 174.9415092 },\n            { nominal: 176, mass: 175.9414076, abundance: 0.0526 },\n            { nominal: 177, mass: 176.9432277, abundance: 0.186 },\n            { nominal: 178, mass: 177.9437058, abundance: 0.2728 },\n            { nominal: 179, mass: 178.9458232, abundance: 0.1362 },\n            { nominal: 180, mass: 179.946557, abundance: 0.3508 },\n            { nominal: 181, mass: 180.9491083 },\n            { nominal: 182, mass: 181.9505612 },\n            { nominal: 183, mass: 182.95353 },\n            { nominal: 184, mass: 183.955446 },\n            { nominal: 185, mass: 184.958862 },\n            { nominal: 186, mass: 185.960897 },\n            { nominal: 187, mass: 186.96477 },\n            { nominal: 188, mass: 187.96685 },\n            { nominal: 189, mass: 188.97084 },\n        ],\n        symbol: 'Hf',\n        mass: 178.4849787234,\n        name: 'Hafnium',\n        monoisotopicMass: 179.946557,\n    },\n    {\n        number: 73,\n        isotopes: [\n            { nominal: 155, mass: 154.97424 },\n            { nominal: 156, mass: 155.97203 },\n            { nominal: 157, mass: 156.96818 },\n            { nominal: 158, mass: 157.96654 },\n            { nominal: 159, mass: 158.963023 },\n            { nominal: 160, mass: 159.961488 },\n            { nominal: 161, mass: 160.958452 },\n            { nominal: 162, mass: 161.957294 },\n            { nominal: 163, mass: 162.954337 },\n            { nominal: 164, mass: 163.953534 },\n            { nominal: 165, mass: 164.950781 },\n            { nominal: 166, mass: 165.950512 },\n            { nominal: 167, mass: 166.948093 },\n            { nominal: 168, mass: 167.948047 },\n            { nominal: 169, mass: 168.946011 },\n            { nominal: 170, mass: 169.946175 },\n            { nominal: 171, mass: 170.944476 },\n            { nominal: 172, mass: 171.944895 },\n            { nominal: 173, mass: 172.94375 },\n            { nominal: 174, mass: 173.944454 },\n            { nominal: 175, mass: 174.943737 },\n            { nominal: 176, mass: 175.944857 },\n            { nominal: 177, mass: 176.9444795 },\n            { nominal: 178, mass: 177.945678 },\n            { nominal: 179, mass: 178.9459366 },\n            { nominal: 180, mass: 179.9474648, abundance: 0.0001201 },\n            { nominal: 181, mass: 180.9479958, abundance: 0.9998799 },\n            { nominal: 182, mass: 181.9501519 },\n            { nominal: 183, mass: 182.9513726 },\n            { nominal: 184, mass: 183.954008 },\n            { nominal: 185, mass: 184.955559 },\n            { nominal: 186, mass: 185.958551 },\n            { nominal: 187, mass: 186.960386 },\n            { nominal: 188, mass: 187.963916 },\n            { nominal: 189, mass: 188.96583 },\n            { nominal: 190, mass: 189.96939 },\n            { nominal: 191, mass: 190.97156 },\n            { nominal: 192, mass: 191.97514 },\n        ],\n        symbol: 'Ta',\n        mass: 180.9478756362269,\n        name: 'Tantalum',\n        monoisotopicMass: 180.9479958,\n    },\n    {\n        number: 74,\n        isotopes: [\n            { nominal: 157, mass: 156.97884 },\n            { nominal: 158, mass: 157.97456 },\n            { nominal: 159, mass: 158.97264 },\n            { nominal: 160, mass: 159.96846 },\n            { nominal: 161, mass: 160.9672 },\n            { nominal: 162, mass: 161.963499 },\n            { nominal: 163, mass: 162.962524 },\n            { nominal: 164, mass: 163.958961 },\n            { nominal: 165, mass: 164.958281 },\n            { nominal: 166, mass: 165.955031 },\n            { nominal: 167, mass: 166.954805 },\n            { nominal: 168, mass: 167.951806 },\n            { nominal: 169, mass: 168.951779 },\n            { nominal: 170, mass: 169.949232 },\n            { nominal: 171, mass: 170.949451 },\n            { nominal: 172, mass: 171.947292 },\n            { nominal: 173, mass: 172.947689 },\n            { nominal: 174, mass: 173.946079 },\n            { nominal: 175, mass: 174.946717 },\n            { nominal: 176, mass: 175.945634 },\n            { nominal: 177, mass: 176.946643 },\n            { nominal: 178, mass: 177.945883 },\n            { nominal: 179, mass: 178.947077 },\n            { nominal: 180, mass: 179.9467108, abundance: 0.0012 },\n            { nominal: 181, mass: 180.9481978 },\n            { nominal: 182, mass: 181.94820394, abundance: 0.265 },\n            { nominal: 183, mass: 182.95022275, abundance: 0.1431 },\n            { nominal: 184, mass: 183.95093092, abundance: 0.3064 },\n            { nominal: 185, mass: 184.95341897 },\n            { nominal: 186, mass: 185.9543628, abundance: 0.2843 },\n            { nominal: 187, mass: 186.9571588 },\n            { nominal: 188, mass: 187.9584862 },\n            { nominal: 189, mass: 188.961763 },\n            { nominal: 190, mass: 189.963091 },\n            { nominal: 191, mass: 190.966531 },\n            { nominal: 192, mass: 191.96817 },\n            { nominal: 193, mass: 192.97178 },\n            { nominal: 194, mass: 193.97367 },\n        ],\n        symbol: 'W',\n        mass: 183.841777550513,\n        name: 'Tungsten',\n        monoisotopicMass: 183.95093092,\n    },\n    {\n        number: 75,\n        isotopes: [\n            { nominal: 159, mass: 158.98418 },\n            { nominal: 160, mass: 159.98182 },\n            { nominal: 161, mass: 160.97757 },\n            { nominal: 162, mass: 161.97584 },\n            { nominal: 163, mass: 162.97208 },\n            { nominal: 164, mass: 163.970453 },\n            { nominal: 165, mass: 164.967103 },\n            { nominal: 166, mass: 165.965761 },\n            { nominal: 167, mass: 166.962595 },\n            { nominal: 168, mass: 167.961573 },\n            { nominal: 169, mass: 168.958766 },\n            { nominal: 170, mass: 169.95822 },\n            { nominal: 171, mass: 170.955716 },\n            { nominal: 172, mass: 171.95542 },\n            { nominal: 173, mass: 172.953243 },\n            { nominal: 174, mass: 173.953115 },\n            { nominal: 175, mass: 174.951381 },\n            { nominal: 176, mass: 175.951623 },\n            { nominal: 177, mass: 176.950328 },\n            { nominal: 178, mass: 177.950989 },\n            { nominal: 179, mass: 178.949989 },\n            { nominal: 180, mass: 179.950792 },\n            { nominal: 181, mass: 180.950058 },\n            { nominal: 182, mass: 181.95121 },\n            { nominal: 183, mass: 182.9508196 },\n            { nominal: 184, mass: 183.9525228 },\n            { nominal: 185, mass: 184.9529545, abundance: 0.374 },\n            { nominal: 186, mass: 185.9549856 },\n            { nominal: 187, mass: 186.9557501, abundance: 0.626 },\n            { nominal: 188, mass: 187.9581115 },\n            { nominal: 189, mass: 188.959226 },\n            { nominal: 190, mass: 189.961744 },\n            { nominal: 191, mass: 190.963122 },\n            { nominal: 192, mass: 191.966088 },\n            { nominal: 193, mass: 192.967541 },\n            { nominal: 194, mass: 193.97076 },\n            { nominal: 195, mass: 194.97254 },\n            { nominal: 196, mass: 195.9758 },\n            { nominal: 197, mass: 196.97799 },\n            { nominal: 198, mass: 197.9816 },\n        ],\n        symbol: 'Re',\n        mass: 186.20670454560002,\n        name: 'Rhenium',\n        monoisotopicMass: 186.9557501,\n    },\n    {\n        number: 76,\n        isotopes: [\n            { nominal: 161, mass: 160.98903 },\n            { nominal: 162, mass: 161.98443 },\n            { nominal: 163, mass: 162.98241 },\n            { nominal: 164, mass: 163.97802 },\n            { nominal: 165, mass: 164.9766 },\n            { nominal: 166, mass: 165.972692 },\n            { nominal: 167, mass: 166.971549 },\n            { nominal: 168, mass: 167.967808 },\n            { nominal: 169, mass: 168.967018 },\n            { nominal: 170, mass: 169.963578 },\n            { nominal: 171, mass: 170.963174 },\n            { nominal: 172, mass: 171.960017 },\n            { nominal: 173, mass: 172.959808 },\n            { nominal: 174, mass: 173.957064 },\n            { nominal: 175, mass: 174.956945 },\n            { nominal: 176, mass: 175.954806 },\n            { nominal: 177, mass: 176.954966 },\n            { nominal: 178, mass: 177.953254 },\n            { nominal: 179, mass: 178.953817 },\n            { nominal: 180, mass: 179.952375 },\n            { nominal: 181, mass: 180.953247 },\n            { nominal: 182, mass: 181.95211 },\n            { nominal: 183, mass: 182.953125 },\n            { nominal: 184, mass: 183.9524885, abundance: 0.0002 },\n            { nominal: 185, mass: 184.9540417 },\n            { nominal: 186, mass: 185.953835, abundance: 0.0159 },\n            { nominal: 187, mass: 186.9557474, abundance: 0.0196 },\n            { nominal: 188, mass: 187.9558352, abundance: 0.1324 },\n            { nominal: 189, mass: 188.9581442, abundance: 0.1615 },\n            { nominal: 190, mass: 189.9584437, abundance: 0.2626 },\n            { nominal: 191, mass: 190.9609264 },\n            { nominal: 192, mass: 191.961477, abundance: 0.4078 },\n            { nominal: 193, mass: 192.9641479 },\n            { nominal: 194, mass: 193.9651772 },\n            { nominal: 195, mass: 194.968318 },\n            { nominal: 196, mass: 195.969641 },\n            { nominal: 197, mass: 196.97283 },\n            { nominal: 198, mass: 197.97441 },\n            { nominal: 199, mass: 198.97801 },\n            { nominal: 200, mass: 199.97984 },\n            { nominal: 201, mass: 200.98364 },\n            { nominal: 202, mass: 201.98595 },\n        ],\n        symbol: 'Os',\n        mass: 190.22485962823998,\n        name: 'Osmium',\n        monoisotopicMass: 191.961477,\n    },\n    {\n        number: 77,\n        isotopes: [\n            { nominal: 164, mass: 163.99191 },\n            { nominal: 165, mass: 164.9875 },\n            { nominal: 166, mass: 165.98566 },\n            { nominal: 167, mass: 166.981666 },\n            { nominal: 168, mass: 167.979907 },\n            { nominal: 169, mass: 168.976298 },\n            { nominal: 170, mass: 169.974922 },\n            { nominal: 171, mass: 170.97164 },\n            { nominal: 172, mass: 171.970607 },\n            { nominal: 173, mass: 172.967506 },\n            { nominal: 174, mass: 173.966861 },\n            { nominal: 175, mass: 174.96415 },\n            { nominal: 176, mass: 175.96365 },\n            { nominal: 177, mass: 176.961301 },\n            { nominal: 178, mass: 177.961082 },\n            { nominal: 179, mass: 178.95912 },\n            { nominal: 180, mass: 179.959229 },\n            { nominal: 181, mass: 180.957625 },\n            { nominal: 182, mass: 181.958076 },\n            { nominal: 183, mass: 182.95684 },\n            { nominal: 184, mass: 183.957476 },\n            { nominal: 185, mass: 184.956698 },\n            { nominal: 186, mass: 185.957944 },\n            { nominal: 187, mass: 186.957542 },\n            { nominal: 188, mass: 187.958828 },\n            { nominal: 189, mass: 188.958715 },\n            { nominal: 190, mass: 189.9605412 },\n            { nominal: 191, mass: 190.9605893, abundance: 0.373 },\n            { nominal: 192, mass: 191.9626002 },\n            { nominal: 193, mass: 192.9629216, abundance: 0.627 },\n            { nominal: 194, mass: 193.9650735 },\n            { nominal: 195, mass: 194.9659747 },\n            { nominal: 196, mass: 195.968397 },\n            { nominal: 197, mass: 196.969655 },\n            { nominal: 198, mass: 197.97228 },\n            { nominal: 199, mass: 198.973805 },\n            { nominal: 200, mass: 199.9768 },\n            { nominal: 201, mass: 200.97864 },\n            { nominal: 202, mass: 201.98199 },\n            { nominal: 203, mass: 202.98423 },\n            { nominal: 204, mass: 203.9896 },\n        ],\n        symbol: 'Ir',\n        mass: 192.2160516521,\n        name: 'Iridium',\n        monoisotopicMass: 192.9629216,\n    },\n    {\n        number: 78,\n        isotopes: [\n            { nominal: 166, mass: 165.99486 },\n            { nominal: 167, mass: 166.99269 },\n            { nominal: 168, mass: 167.98813 },\n            { nominal: 169, mass: 168.98657 },\n            { nominal: 170, mass: 169.982496 },\n            { nominal: 171, mass: 170.981245 },\n            { nominal: 172, mass: 171.977351 },\n            { nominal: 173, mass: 172.976443 },\n            { nominal: 174, mass: 173.97282 },\n            { nominal: 175, mass: 174.97241 },\n            { nominal: 176, mass: 175.968938 },\n            { nominal: 177, mass: 176.96847 },\n            { nominal: 178, mass: 177.96565 },\n            { nominal: 179, mass: 178.965359 },\n            { nominal: 180, mass: 179.963032 },\n            { nominal: 181, mass: 180.963098 },\n            { nominal: 182, mass: 181.961172 },\n            { nominal: 183, mass: 182.961597 },\n            { nominal: 184, mass: 183.959915 },\n            { nominal: 185, mass: 184.960614 },\n            { nominal: 186, mass: 185.959351 },\n            { nominal: 187, mass: 186.960617 },\n            { nominal: 188, mass: 187.9593889 },\n            { nominal: 189, mass: 188.960831 },\n            { nominal: 190, mass: 189.9599297, abundance: 0.00012 },\n            { nominal: 191, mass: 190.9616729 },\n            { nominal: 192, mass: 191.9610387, abundance: 0.00782 },\n            { nominal: 193, mass: 192.9629824 },\n            { nominal: 194, mass: 193.9626809, abundance: 0.3286 },\n            { nominal: 195, mass: 194.9647917, abundance: 0.3378 },\n            { nominal: 196, mass: 195.96495209, abundance: 0.2521 },\n            { nominal: 197, mass: 196.96734069 },\n            { nominal: 198, mass: 197.9678949, abundance: 0.07356 },\n            { nominal: 199, mass: 198.9705952 },\n            { nominal: 200, mass: 199.971443 },\n            { nominal: 201, mass: 200.974513 },\n            { nominal: 202, mass: 201.975639 },\n            { nominal: 203, mass: 202.97893 },\n            { nominal: 204, mass: 203.98076 },\n            { nominal: 205, mass: 204.98608 },\n            { nominal: 206, mass: 205.98966 },\n        ],\n        symbol: 'Pt',\n        mass: 195.084456864931,\n        name: 'Platinum',\n        monoisotopicMass: 194.9647917,\n    },\n    {\n        number: 79,\n        isotopes: [\n            { nominal: 169, mass: 168.99808 },\n            { nominal: 170, mass: 169.99597 },\n            { nominal: 171, mass: 170.991876 },\n            { nominal: 172, mass: 171.989942 },\n            { nominal: 173, mass: 172.986241 },\n            { nominal: 174, mass: 173.984717 },\n            { nominal: 175, mass: 174.981304 },\n            { nominal: 176, mass: 175.98025 },\n            { nominal: 177, mass: 176.97687 },\n            { nominal: 178, mass: 177.976032 },\n            { nominal: 179, mass: 178.973174 },\n            { nominal: 180, mass: 179.972523 },\n            { nominal: 181, mass: 180.970079 },\n            { nominal: 182, mass: 181.969618 },\n            { nominal: 183, mass: 182.967591 },\n            { nominal: 184, mass: 183.967452 },\n            { nominal: 185, mass: 184.96579 },\n            { nominal: 186, mass: 185.965953 },\n            { nominal: 187, mass: 186.964543 },\n            { nominal: 188, mass: 187.965349 },\n            { nominal: 189, mass: 188.963948 },\n            { nominal: 190, mass: 189.964698 },\n            { nominal: 191, mass: 190.963702 },\n            { nominal: 192, mass: 191.964814 },\n            { nominal: 193, mass: 192.9641373 },\n            { nominal: 194, mass: 193.9654178 },\n            { nominal: 195, mass: 194.9650352 },\n            { nominal: 196, mass: 195.9665699 },\n            { nominal: 197, mass: 196.96656879, abundance: 1 },\n            { nominal: 198, mass: 197.96824242 },\n            { nominal: 199, mass: 198.96876528 },\n            { nominal: 200, mass: 199.970756 },\n            { nominal: 201, mass: 200.9716575 },\n            { nominal: 202, mass: 201.973856 },\n            { nominal: 203, mass: 202.9751544 },\n            { nominal: 204, mass: 203.97783 },\n            { nominal: 205, mass: 204.97985 },\n            { nominal: 206, mass: 205.98474 },\n            { nominal: 207, mass: 206.9884 },\n            { nominal: 208, mass: 207.99345 },\n            { nominal: 209, mass: 208.99735 },\n            { nominal: 210, mass: 210.0025 },\n        ],\n        symbol: 'Au',\n        mass: 196.96656879,\n        name: 'Gold',\n        monoisotopicMass: 196.96656879,\n    },\n    {\n        number: 80,\n        isotopes: [\n            { nominal: 171, mass: 171.00353 },\n            { nominal: 172, mass: 171.99881 },\n            { nominal: 173, mass: 172.99709 },\n            { nominal: 174, mass: 173.992865 },\n            { nominal: 175, mass: 174.991441 },\n            { nominal: 176, mass: 175.987361 },\n            { nominal: 177, mass: 176.986277 },\n            { nominal: 178, mass: 177.982484 },\n            { nominal: 179, mass: 178.981831 },\n            { nominal: 180, mass: 179.97826 },\n            { nominal: 181, mass: 180.977819 },\n            { nominal: 182, mass: 181.974689 },\n            { nominal: 183, mass: 182.9744448 },\n            { nominal: 184, mass: 183.971714 },\n            { nominal: 185, mass: 184.971899 },\n            { nominal: 186, mass: 185.969362 },\n            { nominal: 187, mass: 186.969814 },\n            { nominal: 188, mass: 187.967567 },\n            { nominal: 189, mass: 188.968195 },\n            { nominal: 190, mass: 189.966323 },\n            { nominal: 191, mass: 190.967157 },\n            { nominal: 192, mass: 191.965635 },\n            { nominal: 193, mass: 192.966653 },\n            { nominal: 194, mass: 193.9654491 },\n            { nominal: 195, mass: 194.966721 },\n            { nominal: 196, mass: 195.9658326, abundance: 0.0015 },\n            { nominal: 197, mass: 196.9672128 },\n            { nominal: 198, mass: 197.9667686, abundance: 0.0997 },\n            { nominal: 199, mass: 198.96828064, abundance: 0.1687 },\n            { nominal: 200, mass: 199.96832659, abundance: 0.231 },\n            { nominal: 201, mass: 200.97030284, abundance: 0.1318 },\n            { nominal: 202, mass: 201.9706434, abundance: 0.2986 },\n            { nominal: 203, mass: 202.9728728 },\n            { nominal: 204, mass: 203.97349398, abundance: 0.0687 },\n            { nominal: 205, mass: 204.9760734 },\n            { nominal: 206, mass: 205.977514 },\n            { nominal: 207, mass: 206.9823 },\n            { nominal: 208, mass: 207.985759 },\n            { nominal: 209, mass: 208.99072 },\n            { nominal: 210, mass: 209.99424 },\n            { nominal: 211, mass: 210.99933 },\n            { nominal: 212, mass: 212.00296 },\n            { nominal: 213, mass: 213.00823 },\n            { nominal: 214, mass: 214.012 },\n            { nominal: 215, mass: 215.0174 },\n            { nominal: 216, mass: 216.02132 },\n        ],\n        symbol: 'Hg',\n        mass: 200.59916703455602,\n        name: 'Mercury',\n        monoisotopicMass: 201.9706434,\n    },\n    {\n        number: 81,\n        isotopes: [\n            { nominal: 176, mass: 176.000624 },\n            { nominal: 177, mass: 176.996431 },\n            { nominal: 178, mass: 177.99485 },\n            { nominal: 179, mass: 178.991111 },\n            { nominal: 180, mass: 179.990057 },\n            { nominal: 181, mass: 180.98626 },\n            { nominal: 182, mass: 181.985713 },\n            { nominal: 183, mass: 182.982193 },\n            { nominal: 184, mass: 183.981886 },\n            { nominal: 185, mass: 184.978789 },\n            { nominal: 186, mass: 185.978651 },\n            { nominal: 187, mass: 186.9759063 },\n            { nominal: 188, mass: 187.976021 },\n            { nominal: 189, mass: 188.973588 },\n            { nominal: 190, mass: 189.973828 },\n            { nominal: 191, mass: 190.9717842 },\n            { nominal: 192, mass: 191.972225 },\n            { nominal: 193, mass: 192.970502 },\n            { nominal: 194, mass: 193.971081 },\n            { nominal: 195, mass: 194.969774 },\n            { nominal: 196, mass: 195.970481 },\n            { nominal: 197, mass: 196.969576 },\n            { nominal: 198, mass: 197.970483 },\n            { nominal: 199, mass: 198.969877 },\n            { nominal: 200, mass: 199.9709633 },\n            { nominal: 201, mass: 200.970822 },\n            { nominal: 202, mass: 201.972102 },\n            { nominal: 203, mass: 202.9723446, abundance: 0.2952 },\n            { nominal: 204, mass: 203.9738639 },\n            { nominal: 205, mass: 204.9744278, abundance: 0.7048 },\n            { nominal: 206, mass: 205.9761106 },\n            { nominal: 207, mass: 206.9774197 },\n            { nominal: 208, mass: 207.982019 },\n            { nominal: 209, mass: 208.9853594 },\n            { nominal: 210, mass: 209.990074 },\n            { nominal: 211, mass: 210.993475 },\n            { nominal: 212, mass: 211.99834 },\n            { nominal: 213, mass: 213.001915 },\n            { nominal: 214, mass: 214.00694 },\n            { nominal: 215, mass: 215.01064 },\n            { nominal: 216, mass: 216.0158 },\n            { nominal: 217, mass: 217.01966 },\n            { nominal: 218, mass: 218.02479 },\n        ],\n        symbol: 'Tl',\n        mass: 204.38341283936,\n        name: 'Thallium',\n        monoisotopicMass: 204.9744278,\n    },\n    {\n        number: 82,\n        isotopes: [\n            { nominal: 178, mass: 178.003831 },\n            { nominal: 179, mass: 179.002201 },\n            { nominal: 180, mass: 179.997928 },\n            { nominal: 181, mass: 180.996653 },\n            { nominal: 182, mass: 181.992672 },\n            { nominal: 183, mass: 182.991872 },\n            { nominal: 184, mass: 183.988136 },\n            { nominal: 185, mass: 184.98761 },\n            { nominal: 186, mass: 185.984238 },\n            { nominal: 187, mass: 186.9839109 },\n            { nominal: 188, mass: 187.980875 },\n            { nominal: 189, mass: 188.980807 },\n            { nominal: 190, mass: 189.978082 },\n            { nominal: 191, mass: 190.978276 },\n            { nominal: 192, mass: 191.975775 },\n            { nominal: 193, mass: 192.976173 },\n            { nominal: 194, mass: 193.974012 },\n            { nominal: 195, mass: 194.974543 },\n            { nominal: 196, mass: 195.972774 },\n            { nominal: 197, mass: 196.9734312 },\n            { nominal: 198, mass: 197.972034 },\n            { nominal: 199, mass: 198.972913 },\n            { nominal: 200, mass: 199.971819 },\n            { nominal: 201, mass: 200.972883 },\n            { nominal: 202, mass: 201.972152 },\n            { nominal: 203, mass: 202.9733911 },\n            { nominal: 204, mass: 203.973044, abundance: 0.014 },\n            { nominal: 205, mass: 204.9744822 },\n            { nominal: 206, mass: 205.9744657, abundance: 0.241 },\n            { nominal: 207, mass: 206.9758973, abundance: 0.221 },\n            { nominal: 208, mass: 207.9766525, abundance: 0.524 },\n            { nominal: 209, mass: 208.9810905 },\n            { nominal: 210, mass: 209.9841889 },\n            { nominal: 211, mass: 210.9887371 },\n            { nominal: 212, mass: 211.9918977 },\n            { nominal: 213, mass: 212.9965629 },\n            { nominal: 214, mass: 213.9998059 },\n            { nominal: 215, mass: 215.00474 },\n            { nominal: 216, mass: 216.00803 },\n            { nominal: 217, mass: 217.01314 },\n            { nominal: 218, mass: 218.01659 },\n            { nominal: 219, mass: 219.02177 },\n            { nominal: 220, mass: 220.02541 },\n        ],\n        symbol: 'Pb',\n        mass: 207.216908063,\n        name: 'Lead',\n        monoisotopicMass: 207.9766525,\n    },\n    {\n        number: 83,\n        isotopes: [\n            { nominal: 184, mass: 184.001275 },\n            { nominal: 185, mass: 184.9976 },\n            { nominal: 186, mass: 185.996644 },\n            { nominal: 187, mass: 186.993147 },\n            { nominal: 188, mass: 187.992287 },\n            { nominal: 189, mass: 188.989195 },\n            { nominal: 190, mass: 189.988622 },\n            { nominal: 191, mass: 190.9857866 },\n            { nominal: 192, mass: 191.985469 },\n            { nominal: 193, mass: 192.98296 },\n            { nominal: 194, mass: 193.982785 },\n            { nominal: 195, mass: 194.9806488 },\n            { nominal: 196, mass: 195.980667 },\n            { nominal: 197, mass: 196.9788651 },\n            { nominal: 198, mass: 197.979206 },\n            { nominal: 199, mass: 198.977673 },\n            { nominal: 200, mass: 199.978131 },\n            { nominal: 201, mass: 200.97701 },\n            { nominal: 202, mass: 201.977734 },\n            { nominal: 203, mass: 202.976893 },\n            { nominal: 204, mass: 203.9778361 },\n            { nominal: 205, mass: 204.9773867 },\n            { nominal: 206, mass: 205.9784993 },\n            { nominal: 207, mass: 206.978471 },\n            { nominal: 208, mass: 207.9797425 },\n            { nominal: 209, mass: 208.9803991, abundance: 1 },\n            { nominal: 210, mass: 209.9841207 },\n            { nominal: 211, mass: 210.9872697 },\n            { nominal: 212, mass: 211.991286 },\n            { nominal: 213, mass: 212.9943851 },\n            { nominal: 214, mass: 213.998712 },\n            { nominal: 215, mass: 215.00177 },\n            { nominal: 216, mass: 216.006306 },\n            { nominal: 217, mass: 217.009372 },\n            { nominal: 218, mass: 218.014188 },\n            { nominal: 219, mass: 219.01748 },\n            { nominal: 220, mass: 220.02235 },\n            { nominal: 221, mass: 221.02587 },\n            { nominal: 222, mass: 222.03078 },\n            { nominal: 223, mass: 223.0345 },\n            { nominal: 224, mass: 224.03947 },\n        ],\n        symbol: 'Bi',\n        mass: 208.9803991,\n        name: 'Bismuth',\n        monoisotopicMass: 208.9803991,\n    },\n    {\n        number: 84,\n        isotopes: [\n            { nominal: 186, mass: 186.004393 },\n            { nominal: 187, mass: 187.003041 },\n            { nominal: 188, mass: 187.999416 },\n            { nominal: 189, mass: 188.998473 },\n            { nominal: 190, mass: 189.995101 },\n            { nominal: 191, mass: 190.9945585 },\n            { nominal: 192, mass: 191.991336 },\n            { nominal: 193, mass: 192.991026 },\n            { nominal: 194, mass: 193.988186 },\n            { nominal: 195, mass: 194.988126 },\n            { nominal: 196, mass: 195.985526 },\n            { nominal: 197, mass: 196.98566 },\n            { nominal: 198, mass: 197.983389 },\n            { nominal: 199, mass: 198.983667 },\n            { nominal: 200, mass: 199.981799 },\n            { nominal: 201, mass: 200.9822598 },\n            { nominal: 202, mass: 201.980758 },\n            { nominal: 203, mass: 202.9814161 },\n            { nominal: 204, mass: 203.98031 },\n            { nominal: 205, mass: 204.981203 },\n            { nominal: 206, mass: 205.980474 },\n            { nominal: 207, mass: 206.9815938 },\n            { nominal: 208, mass: 207.9812461 },\n            { nominal: 209, mass: 208.9824308 },\n            { nominal: 210, mass: 209.9828741 },\n            { nominal: 211, mass: 210.9866536 },\n            { nominal: 212, mass: 211.9888684 },\n            { nominal: 213, mass: 212.9928576 },\n            { nominal: 214, mass: 213.9952017 },\n            { nominal: 215, mass: 214.9994201 },\n            { nominal: 216, mass: 216.0019152 },\n            { nominal: 217, mass: 217.0063182 },\n            { nominal: 218, mass: 218.0089735 },\n            { nominal: 219, mass: 219.013614 },\n            { nominal: 220, mass: 220.016386 },\n            { nominal: 221, mass: 221.021228 },\n            { nominal: 222, mass: 222.02414 },\n            { nominal: 223, mass: 223.02907 },\n            { nominal: 224, mass: 224.03211 },\n            { nominal: 225, mass: 225.03707 },\n            { nominal: 226, mass: 226.04031 },\n            { nominal: 227, mass: 227.04539 },\n        ],\n        symbol: 'Po',\n        mass: null,\n        name: 'Polonium',\n    },\n    {\n        number: 85,\n        isotopes: [\n            { nominal: 191, mass: 191.004148 },\n            { nominal: 192, mass: 192.003152 },\n            { nominal: 193, mass: 192.999927 },\n            { nominal: 194, mass: 193.999236 },\n            { nominal: 195, mass: 194.9962685 },\n            { nominal: 196, mass: 195.9958 },\n            { nominal: 197, mass: 196.993189 },\n            { nominal: 198, mass: 197.992784 },\n            { nominal: 199, mass: 198.9905277 },\n            { nominal: 200, mass: 199.990351 },\n            { nominal: 201, mass: 200.9884171 },\n            { nominal: 202, mass: 201.98863 },\n            { nominal: 203, mass: 202.986943 },\n            { nominal: 204, mass: 203.987251 },\n            { nominal: 205, mass: 204.986076 },\n            { nominal: 206, mass: 205.986657 },\n            { nominal: 207, mass: 206.9858 },\n            { nominal: 208, mass: 207.9866133 },\n            { nominal: 209, mass: 208.9861702 },\n            { nominal: 210, mass: 209.9871479 },\n            { nominal: 211, mass: 210.9874966 },\n            { nominal: 212, mass: 211.9907377 },\n            { nominal: 213, mass: 212.992937 },\n            { nominal: 214, mass: 213.9963721 },\n            { nominal: 215, mass: 214.9986528 },\n            { nominal: 216, mass: 216.0024236 },\n            { nominal: 217, mass: 217.0047192 },\n            { nominal: 218, mass: 218.008695 },\n            { nominal: 219, mass: 219.0111618 },\n            { nominal: 220, mass: 220.015433 },\n            { nominal: 221, mass: 221.018017 },\n            { nominal: 222, mass: 222.022494 },\n            { nominal: 223, mass: 223.025151 },\n            { nominal: 224, mass: 224.029749 },\n            { nominal: 225, mass: 225.03263 },\n            { nominal: 226, mass: 226.03716 },\n            { nominal: 227, mass: 227.04024 },\n            { nominal: 228, mass: 228.04475 },\n            { nominal: 229, mass: 229.04812 },\n        ],\n        symbol: 'At',\n        mass: null,\n        name: 'Astatine',\n    },\n    {\n        number: 86,\n        isotopes: [\n            { nominal: 193, mass: 193.009708 },\n            { nominal: 194, mass: 194.006144 },\n            { nominal: 195, mass: 195.005422 },\n            { nominal: 196, mass: 196.002116 },\n            { nominal: 197, mass: 197.001585 },\n            { nominal: 198, mass: 197.998679 },\n            { nominal: 199, mass: 198.99839 },\n            { nominal: 200, mass: 199.99569 },\n            { nominal: 201, mass: 200.995628 },\n            { nominal: 202, mass: 201.993264 },\n            { nominal: 203, mass: 202.993388 },\n            { nominal: 204, mass: 203.99143 },\n            { nominal: 205, mass: 204.991719 },\n            { nominal: 206, mass: 205.990214 },\n            { nominal: 207, mass: 206.9907303 },\n            { nominal: 208, mass: 207.989635 },\n            { nominal: 209, mass: 208.990415 },\n            { nominal: 210, mass: 209.9896891 },\n            { nominal: 211, mass: 210.9906011 },\n            { nominal: 212, mass: 211.9907039 },\n            { nominal: 213, mass: 212.9938831 },\n            { nominal: 214, mass: 213.995363 },\n            { nominal: 215, mass: 214.9987459 },\n            { nominal: 216, mass: 216.0002719 },\n            { nominal: 217, mass: 217.003928 },\n            { nominal: 218, mass: 218.0056016 },\n            { nominal: 219, mass: 219.0094804 },\n            { nominal: 220, mass: 220.0113941 },\n            { nominal: 221, mass: 221.0155371 },\n            { nominal: 222, mass: 222.0175782 },\n            { nominal: 223, mass: 223.0218893 },\n            { nominal: 224, mass: 224.024096 },\n            { nominal: 225, mass: 225.028486 },\n            { nominal: 226, mass: 226.030861 },\n            { nominal: 227, mass: 227.035304 },\n            { nominal: 228, mass: 228.037835 },\n            { nominal: 229, mass: 229.042257 },\n            { nominal: 230, mass: 230.04514 },\n            { nominal: 231, mass: 231.04987 },\n        ],\n        symbol: 'Rn',\n        mass: null,\n        name: 'Radon',\n    },\n    {\n        number: 87,\n        isotopes: [\n            { nominal: 199, mass: 199.007259 },\n            { nominal: 200, mass: 200.006586 },\n            { nominal: 201, mass: 201.003867 },\n            { nominal: 202, mass: 202.00332 },\n            { nominal: 203, mass: 203.0009407 },\n            { nominal: 204, mass: 204.000652 },\n            { nominal: 205, mass: 204.9985939 },\n            { nominal: 206, mass: 205.998666 },\n            { nominal: 207, mass: 206.996946 },\n            { nominal: 208, mass: 207.997138 },\n            { nominal: 209, mass: 208.995955 },\n            { nominal: 210, mass: 209.996422 },\n            { nominal: 211, mass: 210.995556 },\n            { nominal: 212, mass: 211.9962257 },\n            { nominal: 213, mass: 212.996186 },\n            { nominal: 214, mass: 213.9989713 },\n            { nominal: 215, mass: 215.0003418 },\n            { nominal: 216, mass: 216.0031899 },\n            { nominal: 217, mass: 217.0046323 },\n            { nominal: 218, mass: 218.0075787 },\n            { nominal: 219, mass: 219.0092524 },\n            { nominal: 220, mass: 220.0123277 },\n            { nominal: 221, mass: 221.0142552 },\n            { nominal: 222, mass: 222.017552 },\n            { nominal: 223, mass: 223.019736 },\n            { nominal: 224, mass: 224.023398 },\n            { nominal: 225, mass: 225.025573 },\n            { nominal: 226, mass: 226.029566 },\n            { nominal: 227, mass: 227.031869 },\n            { nominal: 228, mass: 228.035823 },\n            { nominal: 229, mass: 229.038298 },\n            { nominal: 230, mass: 230.042416 },\n            { nominal: 231, mass: 231.045158 },\n            { nominal: 232, mass: 232.04937 },\n            { nominal: 233, mass: 233.05264 },\n        ],\n        symbol: 'Fr',\n        mass: null,\n        name: 'Francium',\n    },\n    {\n        number: 88,\n        isotopes: [\n            { nominal: 201, mass: 201.01271 },\n            { nominal: 202, mass: 202.00976 },\n            { nominal: 203, mass: 203.009304 },\n            { nominal: 204, mass: 204.006492 },\n            { nominal: 205, mass: 205.006268 },\n            { nominal: 206, mass: 206.003828 },\n            { nominal: 207, mass: 207.003799 },\n            { nominal: 208, mass: 208.001841 },\n            { nominal: 209, mass: 209.00199 },\n            { nominal: 210, mass: 210.000494 },\n            { nominal: 211, mass: 211.0008932 },\n            { nominal: 212, mass: 211.999787 },\n            { nominal: 213, mass: 213.000384 },\n            { nominal: 214, mass: 214.0000997 },\n            { nominal: 215, mass: 215.0027204 },\n            { nominal: 216, mass: 216.0035334 },\n            { nominal: 217, mass: 217.0063207 },\n            { nominal: 218, mass: 218.007141 },\n            { nominal: 219, mass: 219.0100855 },\n            { nominal: 220, mass: 220.0110259 },\n            { nominal: 221, mass: 221.0139177 },\n            { nominal: 222, mass: 222.0153748 },\n            { nominal: 223, mass: 223.0185023 },\n            { nominal: 224, mass: 224.020212 },\n            { nominal: 225, mass: 225.0236119 },\n            { nominal: 226, mass: 226.0254103 },\n            { nominal: 227, mass: 227.0291783 },\n            { nominal: 228, mass: 228.0310707 },\n            { nominal: 229, mass: 229.034942 },\n            { nominal: 230, mass: 230.037055 },\n            { nominal: 231, mass: 231.041027 },\n            { nominal: 232, mass: 232.0434753 },\n            { nominal: 233, mass: 233.047582 },\n            { nominal: 234, mass: 234.050342 },\n            { nominal: 235, mass: 235.05497 },\n        ],\n        symbol: 'Ra',\n        mass: null,\n        name: 'Radium',\n    },\n    {\n        number: 89,\n        isotopes: [\n            { nominal: 206, mass: 206.014452 },\n            { nominal: 207, mass: 207.011966 },\n            { nominal: 208, mass: 208.01155 },\n            { nominal: 209, mass: 209.009495 },\n            { nominal: 210, mass: 210.009436 },\n            { nominal: 211, mass: 211.007732 },\n            { nominal: 212, mass: 212.007813 },\n            { nominal: 213, mass: 213.006609 },\n            { nominal: 214, mass: 214.006918 },\n            { nominal: 215, mass: 215.006475 },\n            { nominal: 216, mass: 216.008743 },\n            { nominal: 217, mass: 217.009344 },\n            { nominal: 218, mass: 218.011642 },\n            { nominal: 219, mass: 219.012421 },\n            { nominal: 220, mass: 220.0147549 },\n            { nominal: 221, mass: 221.015592 },\n            { nominal: 222, mass: 222.0178442 },\n            { nominal: 223, mass: 223.0191377 },\n            { nominal: 224, mass: 224.0217232 },\n            { nominal: 225, mass: 225.02323 },\n            { nominal: 226, mass: 226.0260984 },\n            { nominal: 227, mass: 227.0277523 },\n            { nominal: 228, mass: 228.0310215 },\n            { nominal: 229, mass: 229.032956 },\n            { nominal: 230, mass: 230.036327 },\n            { nominal: 231, mass: 231.038393 },\n            { nominal: 232, mass: 232.042034 },\n            { nominal: 233, mass: 233.044346 },\n            { nominal: 234, mass: 234.048139 },\n            { nominal: 235, mass: 235.05084 },\n            { nominal: 236, mass: 236.054988 },\n            { nominal: 237, mass: 237.05827 },\n        ],\n        symbol: 'Ac',\n        mass: null,\n        name: 'Actinium',\n    },\n    {\n        number: 90,\n        isotopes: [\n            { nominal: 208, mass: 208.0179 },\n            { nominal: 209, mass: 209.017753 },\n            { nominal: 210, mass: 210.015094 },\n            { nominal: 211, mass: 211.014929 },\n            { nominal: 212, mass: 212.012988 },\n            { nominal: 213, mass: 213.013009 },\n            { nominal: 214, mass: 214.0115 },\n            { nominal: 215, mass: 215.0117248 },\n            { nominal: 216, mass: 216.011056 },\n            { nominal: 217, mass: 217.013117 },\n            { nominal: 218, mass: 218.013276 },\n            { nominal: 219, mass: 219.015537 },\n            { nominal: 220, mass: 220.015748 },\n            { nominal: 221, mass: 221.018184 },\n            { nominal: 222, mass: 222.018469 },\n            { nominal: 223, mass: 223.0208119 },\n            { nominal: 224, mass: 224.021464 },\n            { nominal: 225, mass: 225.0239514 },\n            { nominal: 226, mass: 226.0249034 },\n            { nominal: 227, mass: 227.0277042 },\n            { nominal: 228, mass: 228.0287413 },\n            { nominal: 229, mass: 229.0317627 },\n            { nominal: 230, mass: 230.0331341 },\n            { nominal: 231, mass: 231.0363046 },\n            { nominal: 232, mass: 232.0380558, abundance: 1 },\n            { nominal: 233, mass: 233.0415823 },\n            { nominal: 234, mass: 234.0436014 },\n            { nominal: 235, mass: 235.047255 },\n            { nominal: 236, mass: 236.049657 },\n            { nominal: 237, mass: 237.053629 },\n            { nominal: 238, mass: 238.0565 },\n            { nominal: 239, mass: 239.06077 },\n        ],\n        symbol: 'Th',\n        mass: 232.0380558,\n        name: 'Thorium',\n        monoisotopicMass: 232.0380558,\n    },\n    {\n        number: 91,\n        isotopes: [\n            { nominal: 212, mass: 212.023203 },\n            { nominal: 213, mass: 213.021109 },\n            { nominal: 214, mass: 214.020918 },\n            { nominal: 215, mass: 215.019183 },\n            { nominal: 216, mass: 216.019109 },\n            { nominal: 217, mass: 217.018325 },\n            { nominal: 218, mass: 218.020059 },\n            { nominal: 219, mass: 219.019904 },\n            { nominal: 220, mass: 220.021705 },\n            { nominal: 221, mass: 221.021875 },\n            { nominal: 222, mass: 222.023784 },\n            { nominal: 223, mass: 223.023963 },\n            { nominal: 224, mass: 224.0256176 },\n            { nominal: 225, mass: 225.026131 },\n            { nominal: 226, mass: 226.027948 },\n            { nominal: 227, mass: 227.0288054 },\n            { nominal: 228, mass: 228.0310517 },\n            { nominal: 229, mass: 229.0320972 },\n            { nominal: 230, mass: 230.034541 },\n            { nominal: 231, mass: 231.0358842, abundance: 1 },\n            { nominal: 232, mass: 232.0385917 },\n            { nominal: 233, mass: 233.0402472 },\n            { nominal: 234, mass: 234.0433072 },\n            { nominal: 235, mass: 235.045399 },\n            { nominal: 236, mass: 236.048668 },\n            { nominal: 237, mass: 237.051023 },\n            { nominal: 238, mass: 238.054637 },\n            { nominal: 239, mass: 239.05726 },\n            { nominal: 240, mass: 240.06098 },\n            { nominal: 241, mass: 241.06408 },\n        ],\n        symbol: 'Pa',\n        mass: 231.0358842,\n        name: 'Protactinium',\n        monoisotopicMass: 231.0358842,\n    },\n    {\n        number: 92,\n        isotopes: [\n            { nominal: 217, mass: 217.02466 },\n            { nominal: 218, mass: 218.023523 },\n            { nominal: 219, mass: 219.024999 },\n            { nominal: 220, mass: 220.02462 },\n            { nominal: 221, mass: 221.02628 },\n            { nominal: 222, mass: 222.026 },\n            { nominal: 223, mass: 223.027739 },\n            { nominal: 224, mass: 224.027605 },\n            { nominal: 225, mass: 225.029391 },\n            { nominal: 226, mass: 226.029339 },\n            { nominal: 227, mass: 227.031157 },\n            { nominal: 228, mass: 228.031371 },\n            { nominal: 229, mass: 229.0335063 },\n            { nominal: 230, mass: 230.0339401 },\n            { nominal: 231, mass: 231.0362939 },\n            { nominal: 232, mass: 232.0371563 },\n            { nominal: 233, mass: 233.0396355 },\n            { nominal: 234, mass: 234.0409523, abundance: 0.000054 },\n            { nominal: 235, mass: 235.0439301, abundance: 0.007204 },\n            { nominal: 236, mass: 236.0455682 },\n            { nominal: 237, mass: 237.0487304 },\n            { nominal: 238, mass: 238.0507884, abundance: 0.992742 },\n            { nominal: 239, mass: 239.0542935 },\n            { nominal: 240, mass: 240.0565934 },\n            { nominal: 241, mass: 241.06033 },\n            { nominal: 242, mass: 242.06293 },\n            { nominal: 243, mass: 243.06699 },\n        ],\n        symbol: 'U',\n        mass: 238.0289104616574,\n        name: 'Uranium',\n        monoisotopicMass: 238.0507884,\n    },\n    {\n        number: 93,\n        isotopes: [\n            { nominal: 219, mass: 219.03143 },\n            { nominal: 220, mass: 220.03254 },\n            { nominal: 221, mass: 221.03204 },\n            { nominal: 222, mass: 222.0333 },\n            { nominal: 223, mass: 223.03285 },\n            { nominal: 224, mass: 224.03422 },\n            { nominal: 225, mass: 225.033911 },\n            { nominal: 226, mass: 226.035188 },\n            { nominal: 227, mass: 227.034957 },\n            { nominal: 228, mass: 228.036067 },\n            { nominal: 229, mass: 229.036264 },\n            { nominal: 230, mass: 230.037828 },\n            { nominal: 231, mass: 231.038245 },\n            { nominal: 232, mass: 232.04011 },\n            { nominal: 233, mass: 233.040741 },\n            { nominal: 234, mass: 234.0428953 },\n            { nominal: 235, mass: 235.0440635 },\n            { nominal: 236, mass: 236.04657 },\n            { nominal: 237, mass: 237.0481736 },\n            { nominal: 238, mass: 238.0509466 },\n            { nominal: 239, mass: 239.0529392 },\n            { nominal: 240, mass: 240.056165 },\n            { nominal: 241, mass: 241.058253 },\n            { nominal: 242, mass: 242.06164 },\n            { nominal: 243, mass: 243.06428 },\n            { nominal: 244, mass: 244.06785 },\n            { nominal: 245, mass: 245.0708 },\n        ],\n        symbol: 'Np',\n        mass: null,\n        name: 'Neptunium',\n    },\n    {\n        number: 94,\n        isotopes: [\n            { nominal: 228, mass: 228.038732 },\n            { nominal: 229, mass: 229.040144 },\n            { nominal: 230, mass: 230.03965 },\n            { nominal: 231, mass: 231.041102 },\n            { nominal: 232, mass: 232.041185 },\n            { nominal: 233, mass: 233.042998 },\n            { nominal: 234, mass: 234.0433174 },\n            { nominal: 235, mass: 235.045286 },\n            { nominal: 236, mass: 236.0460581 },\n            { nominal: 237, mass: 237.0484098 },\n            { nominal: 238, mass: 238.0495601 },\n            { nominal: 239, mass: 239.0521636 },\n            { nominal: 240, mass: 240.0538138 },\n            { nominal: 241, mass: 241.0568517 },\n            { nominal: 242, mass: 242.0587428 },\n            { nominal: 243, mass: 243.0620036 },\n            { nominal: 244, mass: 244.0642053 },\n            { nominal: 245, mass: 245.067826 },\n            { nominal: 246, mass: 246.070205 },\n            { nominal: 247, mass: 247.07419 },\n        ],\n        symbol: 'Pu',\n        mass: null,\n        name: 'Plutonium',\n    },\n    {\n        number: 95,\n        isotopes: [\n            { nominal: 230, mass: 230.04609 },\n            { nominal: 231, mass: 231.04556 },\n            { nominal: 232, mass: 232.04645 },\n            { nominal: 233, mass: 233.04644 },\n            { nominal: 234, mass: 234.04773 },\n            { nominal: 235, mass: 235.047908 },\n            { nominal: 236, mass: 236.04943 },\n            { nominal: 237, mass: 237.049996 },\n            { nominal: 238, mass: 238.051985 },\n            { nominal: 239, mass: 239.0530247 },\n            { nominal: 240, mass: 240.0553 },\n            { nominal: 241, mass: 241.0568293 },\n            { nominal: 242, mass: 242.0595494 },\n            { nominal: 243, mass: 243.0613813 },\n            { nominal: 244, mass: 244.0642851 },\n            { nominal: 245, mass: 245.0664548 },\n            { nominal: 246, mass: 246.069775 },\n            { nominal: 247, mass: 247.07209 },\n            { nominal: 248, mass: 248.07575 },\n            { nominal: 249, mass: 249.07848 },\n        ],\n        symbol: 'Am',\n        name: 'Americium',\n        mass: null,\n    },\n    {\n        number: 96,\n        isotopes: [\n            { nominal: 232, mass: 232.04982 },\n            { nominal: 233, mass: 233.05077 },\n            { nominal: 234, mass: 234.05016 },\n            { nominal: 235, mass: 235.05154 },\n            { nominal: 236, mass: 236.051374 },\n            { nominal: 237, mass: 237.052869 },\n            { nominal: 238, mass: 238.053081 },\n            { nominal: 239, mass: 239.05491 },\n            { nominal: 240, mass: 240.0555297 },\n            { nominal: 241, mass: 241.0576532 },\n            { nominal: 242, mass: 242.058836 },\n            { nominal: 243, mass: 243.0613893 },\n            { nominal: 244, mass: 244.0627528 },\n            { nominal: 245, mass: 245.0654915 },\n            { nominal: 246, mass: 246.0672238 },\n            { nominal: 247, mass: 247.0703541 },\n            { nominal: 248, mass: 248.0723499 },\n            { nominal: 249, mass: 249.0759548 },\n            { nominal: 250, mass: 250.078358 },\n            { nominal: 251, mass: 251.082286 },\n            { nominal: 252, mass: 252.08487 },\n        ],\n        symbol: 'Cm',\n        name: 'Curium',\n        mass: null,\n    },\n    {\n        number: 97,\n        isotopes: [\n            { nominal: 234, mass: 234.05727 },\n            { nominal: 235, mass: 235.05658 },\n            { nominal: 236, mass: 236.05748 },\n            { nominal: 237, mass: 237.0571 },\n            { nominal: 238, mass: 238.0582 },\n            { nominal: 239, mass: 239.05824 },\n            { nominal: 240, mass: 240.05976 },\n            { nominal: 241, mass: 241.06016 },\n            { nominal: 242, mass: 242.06198 },\n            { nominal: 243, mass: 243.0630078 },\n            { nominal: 244, mass: 244.065181 },\n            { nominal: 245, mass: 245.0663618 },\n            { nominal: 246, mass: 246.068673 },\n            { nominal: 247, mass: 247.0703073 },\n            { nominal: 248, mass: 248.073088 },\n            { nominal: 249, mass: 249.0749877 },\n            { nominal: 250, mass: 250.0783167 },\n            { nominal: 251, mass: 251.080762 },\n            { nominal: 252, mass: 252.08431 },\n            { nominal: 253, mass: 253.08688 },\n            { nominal: 254, mass: 254.0906 },\n        ],\n        symbol: 'Bk',\n        name: 'Berkelium',\n        mass: null,\n    },\n    {\n        number: 98,\n        isotopes: [\n            { nominal: 237, mass: 237.062198 },\n            { nominal: 238, mass: 238.06149 },\n            { nominal: 239, mass: 239.06253 },\n            { nominal: 240, mass: 240.062256 },\n            { nominal: 241, mass: 241.06369 },\n            { nominal: 242, mass: 242.063754 },\n            { nominal: 243, mass: 243.06548 },\n            { nominal: 244, mass: 244.0660008 },\n            { nominal: 245, mass: 245.0680487 },\n            { nominal: 246, mass: 246.0688055 },\n            { nominal: 247, mass: 247.070965 },\n            { nominal: 248, mass: 248.0721851 },\n            { nominal: 249, mass: 249.0748539 },\n            { nominal: 250, mass: 250.0764062 },\n            { nominal: 251, mass: 251.0795886 },\n            { nominal: 252, mass: 252.0816272 },\n            { nominal: 253, mass: 253.0851345 },\n            { nominal: 254, mass: 254.087324 },\n            { nominal: 255, mass: 255.09105 },\n            { nominal: 256, mass: 256.09344 },\n        ],\n        symbol: 'Cf',\n        name: 'Californium',\n        mass: null,\n    },\n    {\n        number: 99,\n        isotopes: [\n            { nominal: 239, mass: 239.06823 },\n            { nominal: 240, mass: 240.06892 },\n            { nominal: 241, mass: 241.06856 },\n            { nominal: 242, mass: 242.06957 },\n            { nominal: 243, mass: 243.06951 },\n            { nominal: 244, mass: 244.07088 },\n            { nominal: 245, mass: 245.07125 },\n            { nominal: 246, mass: 246.0729 },\n            { nominal: 247, mass: 247.073622 },\n            { nominal: 248, mass: 248.075471 },\n            { nominal: 249, mass: 249.076411 },\n            { nominal: 250, mass: 250.07861 },\n            { nominal: 251, mass: 251.0799936 },\n            { nominal: 252, mass: 252.08298 },\n            { nominal: 253, mass: 253.0848257 },\n            { nominal: 254, mass: 254.0880222 },\n            { nominal: 255, mass: 255.090275 },\n            { nominal: 256, mass: 256.0936 },\n            { nominal: 257, mass: 257.09598 },\n            { nominal: 258, mass: 258.09952 },\n        ],\n        symbol: 'Es',\n        name: 'Einsteinium',\n        mass: null,\n    },\n    {\n        number: 100,\n        isotopes: [\n            { nominal: 241, mass: 241.07421 },\n            { nominal: 242, mass: 242.07343 },\n            { nominal: 243, mass: 243.07446 },\n            { nominal: 244, mass: 244.07404 },\n            { nominal: 245, mass: 245.07535 },\n            { nominal: 246, mass: 246.07535 },\n            { nominal: 247, mass: 247.07694 },\n            { nominal: 248, mass: 248.0771865 },\n            { nominal: 249, mass: 249.0789275 },\n            { nominal: 250, mass: 250.079521 },\n            { nominal: 251, mass: 251.08154 },\n            { nominal: 252, mass: 252.0824671 },\n            { nominal: 253, mass: 253.0851846 },\n            { nominal: 254, mass: 254.0868544 },\n            { nominal: 255, mass: 255.089964 },\n            { nominal: 256, mass: 256.0917745 },\n            { nominal: 257, mass: 257.0951061 },\n            { nominal: 258, mass: 258.09708 },\n            { nominal: 259, mass: 259.1006 },\n            { nominal: 260, mass: 260.10281 },\n        ],\n        symbol: 'Fm',\n        name: 'Fermium',\n        mass: null,\n    },\n    {\n        number: 101,\n        isotopes: [\n            { nominal: 245, mass: 245.08081 },\n            { nominal: 246, mass: 246.08171 },\n            { nominal: 247, mass: 247.08152 },\n            { nominal: 248, mass: 248.08282 },\n            { nominal: 249, mass: 249.08291 },\n            { nominal: 250, mass: 250.08441 },\n            { nominal: 251, mass: 251.084774 },\n            { nominal: 252, mass: 252.08643 },\n            { nominal: 253, mass: 253.087144 },\n            { nominal: 254, mass: 254.08959 },\n            { nominal: 255, mass: 255.0910841 },\n            { nominal: 256, mass: 256.09389 },\n            { nominal: 257, mass: 257.0955424 },\n            { nominal: 258, mass: 258.0984315 },\n            { nominal: 259, mass: 259.10051 },\n            { nominal: 260, mass: 260.10365 },\n            { nominal: 261, mass: 261.10583 },\n            { nominal: 262, mass: 262.1091 },\n        ],\n        symbol: 'Md',\n        name: 'Mendelevium',\n        mass: null,\n    },\n    {\n        number: 102,\n        isotopes: [\n            { nominal: 248, mass: 248.08655 },\n            { nominal: 249, mass: 249.0878 },\n            { nominal: 250, mass: 250.08756 },\n            { nominal: 251, mass: 251.08894 },\n            { nominal: 252, mass: 252.088967 },\n            { nominal: 253, mass: 253.0905641 },\n            { nominal: 254, mass: 254.090956 },\n            { nominal: 255, mass: 255.093191 },\n            { nominal: 256, mass: 256.0942829 },\n            { nominal: 257, mass: 257.0968878 },\n            { nominal: 258, mass: 258.09821 },\n            { nominal: 259, mass: 259.10103 },\n            { nominal: 260, mass: 260.10264 },\n            { nominal: 261, mass: 261.1057 },\n            { nominal: 262, mass: 262.10746 },\n            { nominal: 263, mass: 263.11071 },\n            { nominal: 264, mass: 264.11273 },\n        ],\n        symbol: 'No',\n        name: 'Nobelium',\n        mass: null,\n    },\n    {\n        number: 103,\n        isotopes: [\n            { nominal: 251, mass: 251.09418 },\n            { nominal: 252, mass: 252.09526 },\n            { nominal: 253, mass: 253.09509 },\n            { nominal: 254, mass: 254.09648 },\n            { nominal: 255, mass: 255.096562 },\n            { nominal: 256, mass: 256.098494 },\n            { nominal: 257, mass: 257.099418 },\n            { nominal: 258, mass: 258.10176 },\n            { nominal: 259, mass: 259.102902 },\n            { nominal: 260, mass: 260.1055 },\n            { nominal: 261, mass: 261.10688 },\n            { nominal: 262, mass: 262.10961 },\n            { nominal: 263, mass: 263.11136 },\n            { nominal: 264, mass: 264.1142 },\n            { nominal: 265, mass: 265.11619 },\n            { nominal: 266, mass: 266.11983 },\n        ],\n        symbol: 'Lr',\n        name: 'Lawrencium',\n        mass: null,\n    },\n    {\n        number: 104,\n        isotopes: [\n            { nominal: 253, mass: 253.10044 },\n            { nominal: 254, mass: 254.10005 },\n            { nominal: 255, mass: 255.10127 },\n            { nominal: 256, mass: 256.101152 },\n            { nominal: 257, mass: 257.102918 },\n            { nominal: 258, mass: 258.103428 },\n            { nominal: 259, mass: 259.105596 },\n            { nominal: 260, mass: 260.10644 },\n            { nominal: 261, mass: 261.108773 },\n            { nominal: 262, mass: 262.10992 },\n            { nominal: 263, mass: 263.11249 },\n            { nominal: 264, mass: 264.11388 },\n            { nominal: 265, mass: 265.11668 },\n            { nominal: 266, mass: 266.11817 },\n            { nominal: 267, mass: 267.12179 },\n            { nominal: 268, mass: 268.12397 },\n        ],\n        symbol: 'Rf',\n        name: 'Rutherfordium',\n        mass: null,\n    },\n    {\n        number: 105,\n        isotopes: [\n            { nominal: 255, mass: 255.10707 },\n            { nominal: 256, mass: 256.10789 },\n            { nominal: 257, mass: 257.10758 },\n            { nominal: 258, mass: 258.10928 },\n            { nominal: 259, mass: 259.109492 },\n            { nominal: 260, mass: 260.1113 },\n            { nominal: 261, mass: 261.11192 },\n            { nominal: 262, mass: 262.11407 },\n            { nominal: 263, mass: 263.11499 },\n            { nominal: 264, mass: 264.11741 },\n            { nominal: 265, mass: 265.11861 },\n            { nominal: 266, mass: 266.12103 },\n            { nominal: 267, mass: 267.12247 },\n            { nominal: 268, mass: 268.12567 },\n            { nominal: 269, mass: 269.12791 },\n            { nominal: 270, mass: 270.13136 },\n        ],\n        symbol: 'Db',\n        name: 'Dubnium',\n        mass: null,\n    },\n    {\n        number: 106,\n        isotopes: [\n            { nominal: 258, mass: 258.11298 },\n            { nominal: 259, mass: 259.1144 },\n            { nominal: 260, mass: 260.114384 },\n            { nominal: 261, mass: 261.115949 },\n            { nominal: 262, mass: 262.116337 },\n            { nominal: 263, mass: 263.11829 },\n            { nominal: 264, mass: 264.11893 },\n            { nominal: 265, mass: 265.12109 },\n            { nominal: 266, mass: 266.12198 },\n            { nominal: 267, mass: 267.12436 },\n            { nominal: 268, mass: 268.12539 },\n            { nominal: 269, mass: 269.12863 },\n            { nominal: 270, mass: 270.13043 },\n            { nominal: 271, mass: 271.13393 },\n            { nominal: 272, mass: 272.13589 },\n            { nominal: 273, mass: 273.13958 },\n        ],\n        symbol: 'Sg',\n        name: 'Seaborgium',\n        mass: null,\n    },\n    {\n        number: 107,\n        isotopes: [\n            { nominal: 260, mass: 260.12166 },\n            { nominal: 261, mass: 261.12145 },\n            { nominal: 262, mass: 262.12297 },\n            { nominal: 263, mass: 263.12292 },\n            { nominal: 264, mass: 264.12459 },\n            { nominal: 265, mass: 265.12491 },\n            { nominal: 266, mass: 266.12679 },\n            { nominal: 267, mass: 267.1275 },\n            { nominal: 268, mass: 268.12969 },\n            { nominal: 269, mass: 269.13042 },\n            { nominal: 270, mass: 270.13336 },\n            { nominal: 271, mass: 271.13526 },\n            { nominal: 272, mass: 272.13826 },\n            { nominal: 273, mass: 273.14024 },\n            { nominal: 274, mass: 274.14355 },\n            { nominal: 275, mass: 275.14567 },\n        ],\n        symbol: 'Bh',\n        name: 'Bohrium',\n        mass: null,\n    },\n    {\n        number: 108,\n        isotopes: [\n            { nominal: 263, mass: 263.12852 },\n            { nominal: 264, mass: 264.128357 },\n            { nominal: 265, mass: 265.129793 },\n            { nominal: 266, mass: 266.130046 },\n            { nominal: 267, mass: 267.13167 },\n            { nominal: 268, mass: 268.13186 },\n            { nominal: 269, mass: 269.13375 },\n            { nominal: 270, mass: 270.13429 },\n            { nominal: 271, mass: 271.13717 },\n            { nominal: 272, mass: 272.1385 },\n            { nominal: 273, mass: 273.14168 },\n            { nominal: 274, mass: 274.1433 },\n            { nominal: 275, mass: 275.14667 },\n            { nominal: 276, mass: 276.14846 },\n            { nominal: 277, mass: 277.1519 },\n        ],\n        symbol: 'Hs',\n        name: 'Hassium',\n        mass: null,\n    },\n    {\n        number: 109,\n        isotopes: [\n            { nominal: 265, mass: 265.136 },\n            { nominal: 266, mass: 266.13737 },\n            { nominal: 267, mass: 267.13719 },\n            { nominal: 268, mass: 268.13865 },\n            { nominal: 269, mass: 269.13882 },\n            { nominal: 270, mass: 270.14033 },\n            { nominal: 271, mass: 271.14074 },\n            { nominal: 272, mass: 272.14341 },\n            { nominal: 273, mass: 273.1444 },\n            { nominal: 274, mass: 274.14724 },\n            { nominal: 275, mass: 275.14882 },\n            { nominal: 276, mass: 276.15159 },\n            { nominal: 277, mass: 277.15327 },\n            { nominal: 278, mass: 278.15631 },\n            { nominal: 279, mass: 279.15808 },\n        ],\n        symbol: 'Mt',\n        name: 'Meitnerium',\n        mass: null,\n    },\n    {\n        number: 110,\n        isotopes: [\n            { nominal: 267, mass: 267.14377 },\n            { nominal: 268, mass: 268.14348 },\n            { nominal: 269, mass: 269.144752 },\n            { nominal: 270, mass: 270.144584 },\n            { nominal: 271, mass: 271.14595 },\n            { nominal: 272, mass: 272.14602 },\n            { nominal: 273, mass: 273.14856 },\n            { nominal: 274, mass: 274.14941 },\n            { nominal: 275, mass: 275.15203 },\n            { nominal: 276, mass: 276.15303 },\n            { nominal: 277, mass: 277.15591 },\n            { nominal: 278, mass: 278.15704 },\n            { nominal: 279, mass: 279.1601 },\n            { nominal: 280, mass: 280.16131 },\n            { nominal: 281, mass: 281.16451 },\n        ],\n        symbol: 'Ds',\n        name: 'Darmstadtium',\n        mass: null,\n    },\n    {\n        number: 111,\n        isotopes: [\n            { nominal: 272, mass: 272.15327 },\n            { nominal: 273, mass: 273.15313 },\n            { nominal: 274, mass: 274.15525 },\n            { nominal: 275, mass: 275.15594 },\n            { nominal: 276, mass: 276.15833 },\n            { nominal: 277, mass: 277.15907 },\n            { nominal: 278, mass: 278.16149 },\n            { nominal: 279, mass: 279.16272 },\n            { nominal: 280, mass: 280.16514 },\n            { nominal: 281, mass: 281.16636 },\n            { nominal: 282, mass: 282.16912 },\n            { nominal: 283, mass: 283.17054 },\n        ],\n        symbol: 'Rg',\n        name: 'Roentgenium',\n        mass: null,\n    },\n    {\n        number: 112,\n        isotopes: [\n            { nominal: 276, mass: 276.16141 },\n            { nominal: 277, mass: 277.16364 },\n            { nominal: 278, mass: 278.16416 },\n            { nominal: 279, mass: 279.16654 },\n            { nominal: 280, mass: 280.16715 },\n            { nominal: 281, mass: 281.16975 },\n            { nominal: 282, mass: 282.1705 },\n            { nominal: 283, mass: 283.17327 },\n            { nominal: 284, mass: 284.17416 },\n            { nominal: 285, mass: 285.17712 },\n        ],\n        symbol: 'Cn',\n        name: 'Copernicium',\n        mass: null,\n    },\n    {\n        number: 113,\n        isotopes: [\n            { nominal: 278, mass: 278.17058 },\n            { nominal: 279, mass: 279.17095 },\n            { nominal: 280, mass: 280.17293 },\n            { nominal: 281, mass: 281.17348 },\n            { nominal: 282, mass: 282.17567 },\n            { nominal: 283, mass: 283.17657 },\n            { nominal: 284, mass: 284.17873 },\n            { nominal: 285, mass: 285.17973 },\n            { nominal: 286, mass: 286.18221 },\n            { nominal: 287, mass: 287.18339 },\n        ],\n        symbol: 'Nh',\n        name: 'Nihonium',\n        mass: null,\n    },\n    {\n        number: 114,\n        isotopes: [\n            { nominal: 285, mass: 285.18364 },\n            { nominal: 286, mass: 286.18423 },\n            { nominal: 287, mass: 287.18678 },\n            { nominal: 288, mass: 288.18757 },\n            { nominal: 289, mass: 289.19042 },\n        ],\n        symbol: 'Fl',\n        name: 'Flerovium',\n        mass: null,\n    },\n    {\n        number: 115,\n        isotopes: [\n            { nominal: 287, mass: 287.1907 },\n            { nominal: 288, mass: 288.19274 },\n            { nominal: 289, mass: 289.19363 },\n            { nominal: 290, mass: 290.19598 },\n            { nominal: 291, mass: 291.19707 },\n        ],\n        symbol: 'Mc',\n        name: 'Moscovium',\n        mass: null,\n    },\n    {\n        number: 116,\n        isotopes: [\n            { nominal: 289, mass: 289.19816 },\n            { nominal: 290, mass: 290.19864 },\n            { nominal: 291, mass: 291.20108 },\n            { nominal: 292, mass: 292.20174 },\n            { nominal: 293, mass: 293.20449 },\n        ],\n        symbol: 'Lv',\n        name: 'Livermorium',\n        mass: null,\n    },\n    {\n        number: 117,\n        isotopes: [\n            { nominal: 291, mass: 291.20553 },\n            { nominal: 292, mass: 292.20746 },\n            { nominal: 293, mass: 293.20824 },\n            { nominal: 294, mass: 294.21046 },\n        ],\n        symbol: 'Ts',\n        name: 'Teennessine',\n        mass: null,\n    },\n    {\n        number: 118,\n        isotopes: [\n            { nominal: 293, mass: 293.21356 },\n            { nominal: 294, mass: 294.21392 },\n            { nominal: 295, mass: 295.21624 },\n        ],\n        symbol: 'Og',\n        name: 'Oganesson',\n        mass: null,\n    },\n];\n//# sourceMappingURL=elementsAndIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elements = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elements = elementsAndIsotopes_js_1.elementsAndIsotopes.map((element) => ({\n    number: element.number,\n    symbol: element.symbol,\n    mass: element.mass,\n    name: element.name,\n    monoisotopicMass: element.monoisotopicMass,\n}));\n//# sourceMappingURL=elements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    exports.elementsAndIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopes = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndStableIsotopes = structuredClone(elementsAndIsotopes_js_1.elementsAndIsotopes);\nfor (const element of exports.elementsAndStableIsotopes) {\n    element.isotopes = element.isotopes.filter((i) => {\n        return typeof i.abundance === 'number' && i.abundance > 0;\n    });\n}\n//# sourceMappingURL=elementsAndStableIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopesObject = void 0;\nconst elementsAndStableIsotopes_js_1 = require(\"./elementsAndStableIsotopes.js\");\nexports.elementsAndStableIsotopesObject = {};\nfor (const element of elementsAndStableIsotopes_js_1.elementsAndStableIsotopes) {\n    exports.elementsAndStableIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndStableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsObject = void 0;\nconst elements_js_1 = require(\"./elements.js\");\nexports.elementsObject = {};\nfor (const element of elements_js_1.elements) {\n    exports.elementsObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isotopesObject = void 0;\nconst elementsAndIsotopesObject_js_1 = require(\"./elementsAndIsotopesObject.js\");\nexports.isotopesObject = {};\nfor (const [symbol, element] of Object.entries(elementsAndIsotopesObject_js_1.elementsAndIsotopesObject)) {\n    if (!element)\n        continue;\n    for (const isotope of element.isotopes) {\n        exports.isotopesObject[`${isotope.nominal}${symbol}`] = {\n            abundance: isotope.abundance,\n            mass: isotope.mass,\n        };\n    }\n}\n//# sourceMappingURL=isotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stableIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.stableIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    let abundance = 0;\n    let mostAbundant = 0;\n    for (const isotope of element.isotopes) {\n        if (typeof isotope.abundance === 'number' &&\n            isotope.abundance > abundance) {\n            abundance = isotope.abundance;\n            mostAbundant = isotope.nominal;\n        }\n    }\n    for (const isotope of element.isotopes) {\n        if (isotope.abundance === 0)\n            continue;\n        const entry = {\n            name: element.name,\n            mass: isotope.mass,\n            symbol: element.symbol,\n            mostAbundant: false,\n        };\n        if (isotope.nominal === mostAbundant) {\n            entry.mostAbundant = true;\n        }\n        exports.stableIsotopesObject[`${isotope.nominal}${element.symbol}`] = entry;\n    }\n}\n//# sourceMappingURL=stableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationsObject = void 0;\nexports.unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    Na: -1,\n    K: -1,\n    Li: -1,\n    Ca: -2,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n    S: 0,\n    P: 1,\n};\n//# sourceMappingURL=unsaturationsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsObject = void 0;\nconst groups_1 = require(\"./groups\");\nexports.groupsObject = {};\ngroups_1.groups.forEach((e) => {\n    if (exports.groupsObject[e.symbol]) {\n        // eslint-disable-next-line no-console\n        console.log(`The symbol ${e.symbol} is used more than once`);\n    }\n    exports.groupsObject[e.symbol] = e;\n});\n//# sourceMappingURL=groupsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsToSequence = groupsToSequence;\nconst groupsObject_js_1 = require(\"./groupsObject.js\");\n/**\n * Recreate a one letter sequence\n * @param {object} mf\n */\nfunction groupsToSequence(mf) {\n    mf = mf.replaceAll(/\\([^(]*\\)/g, '');\n    let parts = mf.split(/(?=[ A-Z])/);\n    let usefulParts = [];\n    for (let part of parts) {\n        if (part === ' ') {\n            usefulParts.push(' ');\n            continue;\n        }\n        if (!part.match(/^[A-Z][a-z]{2,6}/))\n            continue;\n        if (groupsObject_js_1.groupsObject[part] && groupsObject_js_1.groupsObject[part].oneLetter) {\n            usefulParts.push(groupsObject_js_1.groupsObject[part].oneLetter);\n        }\n        else {\n            usefulParts.push('?');\n        }\n    }\n    return usefulParts.join('').replaceAll(/ +/g, ' ').trim();\n}\n//# sourceMappingURL=groupsToSequence.js.map","\"use strict\";\n/**\n * Define static variable corresponding to the various Kinds of a molecular formula part.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Kind = void 0;\nexports.Kind = {\n    BEGIN: 'begin',\n    ATOM: 'atom',\n    MULTIPLIER_RANGE: 'multiplierRange',\n    ISOTOPE: 'isotope',\n    ISOTOPE_RATIO: 'isotopeRatio',\n    CHARGE: 'charge',\n    SALT: 'salt',\n    OPENING_PARENTHESIS: 'openingParenthesis',\n    CLOSING_PARENTHESIS: 'closingParenthesis',\n    PRE_MULTIPLIER: 'preMultiplier',\n    MULTIPLIER: 'multiplier',\n    TEXT: 'text',\n    ANCHOR: 'anchor',\n    COMMENT: 'comment',\n};\n//# sourceMappingURL=Kind.js.map","\"use strict\";\n/**\n * Parse a string to extract the charge.\n * The charge may be in the form --, +++, +3, -2, 4+, 2-\n * @param {*} charge\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseCharge = parseCharge;\nfunction parseCharge(charge) {\n    charge = charge.replaceAll(/[()]/g, '');\n    let chargeNumber = 0;\n    if (charge.match(/^[+-]+$/)) {\n        for (let i = 0; i < charge.length; i++) {\n            if (charge.charAt(i) === '+')\n                chargeNumber++;\n            else\n                chargeNumber--;\n        }\n    }\n    else if (charge.match(/^\\d+[+-]$/)) {\n        chargeNumber = Number(\n        // eslint-disable-next-line unicorn/prefer-at\n        charge.charAt(charge.length - 1) + charge.slice(0, -1));\n    }\n    else {\n        chargeNumber = Number(charge);\n    }\n    return chargeNumber;\n}\n//# sourceMappingURL=parseCharge.js.map","\"use strict\";\n/* eslint-disable unicorn/prefer-code-point */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"./Kind\");\nconst parseCharge_1 = require(\"./util/parseCharge\");\n/**\n * Parse a mf to an array of kind / value\n * @param {String} mf\n * @param {Object} [options={}]\n * @param {Boolean} [options.expandGroups=false] - if true, expand groups\n * @param {Boolean} [options.simplify=false] - if true, remove all the parenthesis and join identical atoms / groups\n */\nfunction parse(mf, options = {}) {\n    return new MFParser().parse(mf, options);\n}\nclass MFParser {\n    parse(mf = '', options = {}) {\n        this.expandGroups = options?.expandGroups ?? false;\n        this.simplify = options?.simplify ?? false;\n        this.mf = mf;\n        this.i = 0;\n        this.result = [];\n        let lastKind = Kind_1.Kind.BEGIN;\n        while (this.i < mf.length) {\n            if (this.result.length > 0 && this.result.at(-1).kind !== Kind_1.Kind.TEXT) {\n                lastKind = this.result.at(-1).kind;\n            }\n            let char = mf.charAt(this.i);\n            let ascii = mf.charCodeAt(this.i);\n            let nextAscii = 0;\n            if (this.i + 1 < mf.length)\n                nextAscii = mf.charCodeAt(this.i + 1);\n            if ((ascii > 47 && ascii < 58) ||\n                (char === '-' && nextAscii > 47 && nextAscii < 58)) {\n                // a number\n                let value = this.getNumber(ascii);\n                if (lastKind === Kind_1.Kind.SALT ||\n                    lastKind === Kind_1.Kind.BEGIN ||\n                    lastKind === Kind_1.Kind.OPENING_PARENTHESIS) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Premultiplier may not contain a -');\n                    }\n                    this.result.push({ kind: Kind_1.Kind.PRE_MULTIPLIER, value: value.from });\n                }\n                else if (lastKind === Kind_1.Kind.ANCHOR) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Anchor ID may not contain -');\n                    }\n                    this.result.at(-1).value = value.from;\n                }\n                else if (value.to) {\n                    this.result.push({\n                        kind: Kind_1.Kind.MULTIPLIER_RANGE,\n                        value: {\n                            from: Math.min(value.from, value.to),\n                            to: Math.max(value.from, value.to),\n                        },\n                    });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.MULTIPLIER, value: value.from });\n                }\n                continue;\n            }\n            else if (char === '.') {\n                // a point\n                this.result.push({ kind: Kind_1.Kind.SALT, value: char });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (char === '#') {\n                // an anchor\n                this.result.push({ kind: Kind_1.Kind.ANCHOR, value: 0 });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (ascii > 64 && ascii < 91) {\n                // an uppercase = new atom\n                this.result.push(...this.getAtom(ascii));\n                continue;\n            }\n            else if (ascii > 96 && ascii < 123) {\n                // a lowercase\n                throw new MFError(this.mf, this.i, 'found a lowercase not following an uppercase');\n            }\n            else if (char === '(') {\n                let charge = this.getParenthesisCharge(ascii);\n                if (charge) {\n                    this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' });\n                }\n            }\n            else if (char === ')') {\n                this.result.push({ kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' });\n            }\n            else if (char === '[') {\n                // defines an isotope\n                let isotope = this.getIsotope(ascii);\n                this.result.push({ kind: Kind_1.Kind.ISOTOPE, value: isotope });\n            }\n            else if (char === ']') {\n                throw new MFError(this.mf, this.i, 'should never meet an closing bracket not in isotopes');\n            }\n            else if (char === '{') {\n                // can define an exotic isotopic ratio or mixtures of groups\n                let isotopeRatio = this.getCurlyBracketIsotopeRatio(ascii);\n                if (lastKind === Kind_1.Kind.ATOM) {\n                    let lastResult = this.result.at(-1);\n                    lastResult.kind = Kind_1.Kind.ISOTOPE_RATIO;\n                    lastResult.value = {\n                        atom: lastResult.value,\n                        ratio: isotopeRatio,\n                    };\n                }\n                else {\n                    throw new MFError(this.mf, this.i, 'isotopic composition has to follow an atom');\n                }\n            }\n            else if (char === '}') {\n                throw new MFError(this.mf, this.i, 'found a unexpected closing curly bracket');\n            }\n            else if (char === '+') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '-') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '$') {\n                // it is a comment after\n                this.result.push({\n                    kind: Kind_1.Kind.COMMENT,\n                    value: this.mf.slice(this.i + 1),\n                });\n                break;\n            }\n            else {\n                this.result.push({ kind: Kind_1.Kind.TEXT, value: char });\n            }\n            this.i++;\n        }\n        this.checkParenthesis();\n        if (this.simplify) {\n            this.result = simplify(this.result);\n        }\n        return this.result;\n    }\n    checkParenthesis() {\n        let counter = 0;\n        for (let line of this.result) {\n            if (line.kind === Kind_1.Kind.OPENING_PARENTHESIS)\n                counter++;\n            if (line.kind === Kind_1.Kind.CLOSING_PARENTHESIS)\n                counter--;\n        }\n        if (counter !== 0) {\n            throw new MFError(this.mf, this.i, 'number of opening and closing parenthesis not equal');\n        }\n    }\n    getNumber(ascii) {\n        let number = '';\n        let previous;\n        do {\n            previous = ascii;\n            number += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while ((ascii > 47 && ascii < 58) ||\n            ascii === 46 ||\n            ascii === 45 ||\n            ascii === 47); // number . - /\n        // we need to deal with the case there is a from / to\n        if (previous === 46)\n            this.i--;\n        let indexOfDash = number.indexOf('-', 1);\n        if (indexOfDash > -1) {\n            return {\n                from: parseNumberWithDivision(number.slice(0, indexOfDash)),\n                to: parseNumberWithDivision(number.slice(indexOfDash + 1)),\n            };\n        }\n        return { from: parseNumberWithDivision(number) };\n    }\n    getAtom(ascii) {\n        let atom = '';\n        do {\n            atom += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii > 96 && ascii < 123);\n        if (chemical_elements_1.elementsObject[atom] || !this.expandGroups) {\n            return [\n                {\n                    kind: Kind_1.Kind.ATOM,\n                    value: atom,\n                },\n            ];\n        }\n        if (chemical_groups_1.groupsObject[atom]) {\n            const group = chemical_groups_1.groupsObject[atom].mf;\n            const expandedGroups = parse(group, {\n                expandGroups: this.expandGroups,\n            });\n            // need to surround with parenthesis\n            return [\n                { kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' },\n                ...expandedGroups,\n                { kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' },\n            ];\n        }\n        throw new MFError(`Not able to expand group: ${this.mf}`);\n    }\n    getIsotope(ascii) {\n        // [13C]\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 93 && this.i <= this.mf.length);\n        let atom = substring.replaceAll(/[^A-Za-z]/g, '');\n        let isotope = Number(substring.replaceAll(/\\D/g, ''));\n        return { atom, isotope };\n    }\n    getCurlyBracketIsotopeRatio(ascii) {\n        let substring = '';\n        let first = true;\n        do {\n            if (!first) {\n                substring += String.fromCharCode(ascii);\n            }\n            else {\n                first = false;\n            }\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 125 && this.i <= this.mf.length); // closing curly bracket\n        if (substring.match(/^[0-9.,]+$/)) {\n            return substring.split(',').map(Number);\n        }\n        throw new MFError(this.mf, this.i, 'Curly brackets should contain only number, dot and comma');\n    }\n    getParenthesisCharge(ascii) {\n        let substring = '';\n        let begin = this.i;\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 41 && this.i <= this.mf.length); // closing parenthesis\n        if (substring.match(/^\\([\\d+-]+$/)) {\n            return (0, parseCharge_1.parseCharge)(substring.slice(1));\n        }\n        else {\n            this.i = begin;\n            return undefined;\n        }\n    }\n    getNonParenthesisCharge(ascii) {\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii === 43 || ascii === 45 || (ascii > 47 && ascii < 58));\n        this.i--;\n        return (0, parseCharge_1.parseCharge)(substring);\n    }\n}\nclass MFError extends SyntaxError {\n    constructor(mf, i, message) {\n        let text = `${message}\\n\\n${mf}\\n${' '.repeat(i)}^`;\n        super(text);\n    }\n}\nfunction parseNumberWithDivision(string) {\n    if (string.includes('/')) {\n        let parts = string.split('/');\n        if (parts.length !== 2) {\n            throw new TypeError('Can not parse MF with number like: ', string);\n        }\n        return Number(parts[0]) / Number(parts[1]);\n    }\n    else {\n        return Number(string);\n    }\n}\n/**\n * Remove all the parenthesis and multipliers\n * Merge atoms and groups if present many times\n * We will also sort the atoms and groups\n * @param {*} parsed\n * @returns\n */\nfunction simplify(parsed) {\n    if (!parsed || parsed.length === 0)\n        return [];\n    const multipliers = [];\n    let currentMultiplier = { from: 1, to: 1 };\n    let newParsed = [];\n    for (let i = parsed.length - 1; i >= 0; i--) {\n        const item = parsed[i];\n        switch (item.kind) {\n            case 'atom':\n            case 'isotope':\n                {\n                    let realMultiplier = currentMultiplier;\n                    for (const multiplier of multipliers) {\n                        realMultiplier = {\n                            from: multiplier.from * realMultiplier.from,\n                            to: multiplier.to * realMultiplier.to,\n                        };\n                    }\n                    newParsed.push({\n                        kind: item.kind,\n                        value: item.value,\n                    }, {\n                        kind: 'multiplierRange',\n                        value: realMultiplier,\n                    });\n                    currentMultiplier = { from: 1, to: 1 };\n                }\n                break;\n            case 'multiplier':\n                currentMultiplier = { from: item.value, to: item.value };\n                break;\n            case 'multiplierRange':\n                currentMultiplier = item.value;\n                break;\n            case 'openingParenthesis':\n                multipliers.pop();\n                break;\n            case 'closingParenthesis':\n                multipliers.push(currentMultiplier);\n                currentMultiplier = { from: 1, to: 1 };\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Unexpected kind --${item.kind}-- in removeParenthesis`);\n        }\n    }\n    // if we have many times the same atom / group, we can merge them\n    const distinctParsedObject = {};\n    for (let i = 0; i < newParsed.length; i = i + 2) {\n        const item = newParsed[i];\n        const multiplier = newParsed[i + 1];\n        const key = JSON.stringify(item.value);\n        if (!distinctParsedObject[key]) {\n            distinctParsedObject[key] = {\n                ...item,\n                multiplier: multiplier.value,\n            };\n        }\n        else {\n            distinctParsedObject[key].multiplier.from += multiplier.value.from;\n            distinctParsedObject[key].multiplier.to += multiplier.value.to;\n        }\n    }\n    const sorted = Object.values(distinctParsedObject).toSorted((a, b) => {\n        const atomA = a.kind === 'atom' ? a.value : a.value.atom;\n        const atomB = b.kind === 'atom' ? b.value : b.value.atom;\n        if (atomA === atomB) {\n            if (a.kind === 'isotope' && b.kind === 'isotope') {\n                return a.value.isotope - b.value.isotope;\n            }\n            if (a.kind === 'isotope' && b.kind !== 'isotope') {\n                return -1; // isotope comes before non-isotope\n            }\n            if (a.kind !== 'isotope' && b.kind === 'isotope') {\n                return 1; // non-isotope comes after isotope\n            }\n            return 0;\n        }\n        return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n    });\n    const distinctParsed = [];\n    for (const item of sorted) {\n        if (item.multiplier.from === 0 && item.multiplier.to === 0) {\n            continue;\n        }\n        distinctParsed.push({\n            kind: item.kind,\n            value: item.value,\n        });\n        if (item.multiplier.from === 1 && item.multiplier.to === 1) {\n            continue; // no need to add a multiplier\n        }\n        if (item.multiplier.from === item.multiplier.to) {\n            distinctParsed.push({\n                kind: 'multiplier',\n                value: item.multiplier.from,\n            });\n        }\n        else {\n            distinctParsed.push({\n                kind: 'multiplierRange',\n                value: {\n                    from: item.multiplier.from,\n                    to: item.multiplier.to,\n                },\n            });\n        }\n    }\n    return distinctParsed;\n}\n//# sourceMappingURL=parse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscript = exports.superscript = void 0;\nexports.superscript = {\n    0: '⁰',\n    1: '¹',\n    2: '²',\n    3: '³',\n    4: '⁴',\n    5: '⁵',\n    6: '⁶',\n    7: '⁷',\n    8: '⁸',\n    9: '⁹',\n    '+': '⁺',\n    '-': '⁻',\n    '(': '⁽',\n    ')': '⁾',\n    '{': '⁽',\n    '}': '⁾',\n    '.': '˙',\n    ',': '˒',\n};\nexports.subscript = {\n    0: '₀',\n    1: '₁',\n    2: '₂',\n    3: '₃',\n    4: '₄',\n    5: '₅',\n    6: '₆',\n    7: '₇',\n    8: '₈',\n    9: '₉',\n    '(': '₍',\n    ')': '₎',\n    '{': '₍',\n    '}': '₎',\n    '.': ' ',\n    ',': ' ',\n};\n//# sourceMappingURL=subSuperscript.js.map","\"use strict\";\n/**\n * Defines static variables corresponding to the various formatting possibilities\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Format = void 0;\nexports.Format = {\n    SUBSCRIPT: 'subscript',\n    SUPERSCRIPT: 'superscript',\n    SUPERIMPOSE: 'superimpose',\n    TEXT: 'text',\n};\n//# sourceMappingURL=Format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatCharge = formatCharge;\nfunction formatCharge(charge) {\n    if (charge === 1)\n        return '+';\n    if (charge > 1)\n        return `+${charge}`;\n    if (charge < 0)\n        return String(charge);\n    return '';\n}\n//# sourceMappingURL=formatCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.improveLinesForDisplay = improveLinesForDisplay;\nconst Kind_js_1 = require(\"../Kind.js\");\n/**\n * We try to remove useless lines that are not needed for the display and could be confusing\n * for the user\n * @param {object[]} lines\n */\nfunction improveLinesForDisplay(lines) {\n    lines = lines.slice(0);\n    // multipliers by one seems completely useless\n    lines = lines.filter((line) => !(line.kind === Kind_js_1.Kind.MULTIPLIER && line.value === 1));\n    // global surrouding useless parenthesis\n    // (C) -> C, (CH2) -> CH2, ((CH2)) -> CH2, ((CH2)2) -> (CH2)2, (C(CH2)2) -> C(CH2)2\n    // need to count the number of opening parenthesis\n    // and check the minimum number of parenthesis we find\n    let beginCounter = 0;\n    let endCounter = 0;\n    let minCounter = Number.MAX_SAFE_INTEGER;\n    let counter = 0;\n    let begin = true;\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.OPENING_PARENTHESIS:\n                if (begin) {\n                    beginCounter++;\n                }\n                counter++;\n                break;\n            case Kind_js_1.Kind.CLOSING_PARENTHESIS:\n                endCounter++;\n                counter--;\n                break;\n            case Kind_js_1.Kind.CHARGE: // seems to me we can still remove parenthesis even if we have some charges\n                break;\n            default:\n                if (counter < minCounter)\n                    minCounter = counter;\n                endCounter = 0;\n                begin = false;\n        }\n    }\n    let nbParenthesisToSuppress = Math.min(minCounter, beginCounter, endCounter);\n    if (nbParenthesisToSuppress > 0) {\n        // need to remove from the beginning and from the end the number of parenthesis\n        // knowing some of the lines could be charges\n        let toSuppress = nbParenthesisToSuppress;\n        let i = 0;\n        while (toSuppress > 0) {\n            if (lines[0].kind === Kind_js_1.Kind.OPENING_PARENTHESIS) {\n                lines.splice(i, 1);\n                toSuppress--;\n            }\n            else {\n                i++;\n            }\n        }\n        toSuppress = nbParenthesisToSuppress;\n        i = lines.length - 1;\n        while (toSuppress > 0) {\n            if (lines[i].kind === Kind_js_1.Kind.CLOSING_PARENTHESIS) {\n                toSuppress--;\n                lines.splice(i, 1);\n            }\n            i--;\n        }\n    }\n    return lines;\n}\n//# sourceMappingURL=improveLinesForDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toDisplay = toDisplay;\nconst Format_1 = require(\"../Format\");\nconst Kind_1 = require(\"../Kind\");\nconst formatCharge_js_1 = require(\"./formatCharge.js\");\nconst improveLinesForDisplay_js_1 = require(\"./improveLinesForDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {object[]} lines of the parse method\n * @returns {{kind: string, value: string}[]}\n */\nfunction toDisplay(lines) {\n    lines = (0, improveLinesForDisplay_js_1.improveLinesForDisplay)(lines);\n    const special = specialCases(lines);\n    if (special)\n        return special;\n    let results = [];\n    let result = {};\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.MULTIPLIER:\n                if (line.value !== 1) {\n                    result = {\n                        kind: Format_1.Format.SUBSCRIPT,\n                        value: String(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.MULTIPLIER_RANGE:\n                result = {\n                    kind: Format_1.Format.SUBSCRIPT,\n                    value: `${String(line.value.from)}-${line.value.to}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (result.kind === Format_1.Format.SUBSCRIPT) {\n                    result.kind = Format_1.Format.SUPERIMPOSE;\n                    result.over = (0, formatCharge_js_1.formatCharge)(line.value);\n                    result.under = result.value;\n                    result.value = undefined;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.SUPERSCRIPT,\n                        value: (0, formatCharge_js_1.formatCharge)(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE:\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: line.value.isotope,\n                };\n                results.push(result);\n                result = {\n                    kind: Format_1.Format.TEXT,\n                    value: line.value.atom,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value.atom;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value.atom,\n                    };\n                    results.push(result);\n                }\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: `{${line.value.ratio.join(',')}}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.SALT:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += ' • ';\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: ' • ',\n                    };\n                    results.push(result);\n                }\n                break;\n            default:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value,\n                    };\n                    results.push(result);\n                }\n        }\n    }\n    return results;\n}\n/**\n * Some special changes for specific cases\n * @param {} lines\n */\nfunction specialCases(lines) {\n    // (-)\n    if (lines.length === 1 && lines[0].kind === Kind_1.Kind.CHARGE) {\n        const charge = lines[0].value;\n        if (charge === 0)\n            return [];\n        if (charge === 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '-e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge === -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '+e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge > 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `-${charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge < -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `+${-charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n    }\n    // (-)2, (-)-1, (+)2, (+)-1, (2+)2, (2+)-1, (2-)+1, (2-)-1\n    if (lines.length === 2 &&\n        lines[0].kind === Kind_1.Kind.CHARGE &&\n        lines[1].kind === Kind_1.Kind.MULTIPLIER) {\n        const charge = lines[0].value;\n        const nbElectrons = -lines[1].value * charge;\n        const results = [];\n        if (nbElectrons === 0)\n            return [];\n        if (nbElectrons === 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '+e' });\n        }\n        if (nbElectrons === -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '-e' });\n        }\n        if (nbElectrons > 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `+${nbElectrons}e` });\n        }\n        if (nbElectrons < -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `${nbElectrons}e` });\n        }\n        results.push({ kind: Format_1.Format.SUPERSCRIPT, value: '-' });\n        return results;\n    }\n    return undefined;\n}\n//# sourceMappingURL=toDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isMF = isMF;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nfunction isMF(mf) {\n    let tmpMF = mf.replaceAll(/[^A-Za-z]/g, '');\n    let parts = tmpMF.replaceAll(/([A-Za-z])(?=[A-Z])/g, '$1 ').split(' ');\n    for (let i = 0; i < parts.length; i++) {\n        if (!chemical_elements_1.elementsObject[parts[i]] && !chemical_groups_1.groupsObject[parts[i]]) {\n            return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=isMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Style = void 0;\nexports.Style = {\n    SUPERIMPOSE: 'flex-direction: column;display: inline-flex;justify-content: center;text-align: left;vertical-align: middle;',\n    SUPERIMPOSE_SUP_SUB: 'line-height: 1; font-size: 70%',\n};\n//# sourceMappingURL=Style.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toHtml = toHtml;\nconst Format_1 = require(\"../Format\");\nconst Style_1 = require(\"../Style\");\nfunction toHtml(lines) {\n    let html = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT:\n                html.push(`<sub>${line.value}</sub>`);\n                break;\n            case Format_1.Format.SUPERSCRIPT:\n                html.push(`<sup>${line.value}</sup>`);\n                break;\n            case Format_1.Format.SUPERIMPOSE:\n                html.push(`<span style=\"${Style_1.Style.SUPERIMPOSE}\">`, `<sup style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.over}</sup>`, `<sub style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.under}</sub>`, '</span>');\n                break;\n            default:\n                html.push(line.value);\n        }\n    }\n    return html.join('');\n}\n//# sourceMappingURL=toHtml.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureCase = ensureCase;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst elements = new Set(Object.keys(chemical_elements_1.elementsObject).toSorted((a, b) => b.length - a.length));\n/**\n * Ensure that the mf has been entered with capital letters and not only lowercase\n * If there is only lowercase we try to capitalize the mf\n * @param {string} mf\n */\nfunction ensureCase(mf) {\n    for (let i = 0; i < mf.length; i++) {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        if (mf.charCodeAt(i) > 64 && mf.charCodeAt(i) < 91) {\n            return mf;\n        }\n    }\n    let parts = mf.replaceAll(/([a-z]*)([^a-z]*)/g, '$1 $2 ').split(/ +/);\n    for (let i = 0; i < parts.length; i++) {\n        if (parts[i].match(/^[a-z]$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n        else if (parts[i].match(/^[a-z]+$/)) {\n            let newPart = '';\n            for (let j = 0; j < parts[i].length; j++) {\n                let two = parts[i].slice(j, j + 2);\n                let one = parts[i].charAt(j).toUpperCase();\n                if (['c', 'h', 'o', 'n'].includes(two.charAt(0)) &&\n                    ['h', 'o', 'n'].includes(two.charAt(1))) {\n                    newPart += two.toUpperCase();\n                    j++;\n                }\n                else {\n                    two = two.charAt(0).toUpperCase() + two.charAt(1);\n                    if (elements.has(two)) {\n                        newPart += two;\n                        j++;\n                    }\n                    else if (elements.has(one)) {\n                        newPart += one;\n                    }\n                    else {\n                        return mf;\n                    }\n                }\n            }\n            parts[i] = newPart;\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureCase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flatten = flatten;\n/**\n * This method will generate all possible molecular formulas\n * from ranges.\n * It should rather be called expand because it expands all the ranges\n * @param parsed\n * @param options\n * @return {string[]}\n */\nfunction flatten(parsed, options = {}) {\n    const { groupIdentical = false, limit = 100000 } = options;\n    if (parsed.length === 0)\n        return [''];\n    let parts = [];\n    let parenthesisLevel = 0;\n    let currentPart;\n    let comments = [];\n    for (const entry of parsed) {\n        if ((entry.kind === 'atom' ||\n            entry.kind === 'charge' ||\n            entry.kind === 'isotope' ||\n            entry.kind === 'openingParenthesis' ||\n            !currentPart) &&\n            parenthesisLevel === 0) {\n            currentPart = {\n                mf: '',\n                min: 1,\n                max: 1,\n            };\n            parts.push(currentPart);\n        }\n        switch (entry.kind) {\n            case 'atom':\n                currentPart.mf += entry.value;\n                break;\n            case 'isotope':\n                currentPart.mf += `[${entry.value.isotope}${entry.value.atom}]`;\n                break;\n            case 'multiplier':\n                currentPart.mf += entry.value;\n                break;\n            case 'multiplierRange':\n                if (parenthesisLevel !== 0) {\n                    throw new Error('Range definition inside parenthesis is not allowed.');\n                }\n                currentPart.min = entry.value.from;\n                currentPart.max = entry.value.to;\n                break;\n            case 'openingParenthesis':\n                parenthesisLevel++;\n                currentPart.mf += entry.value;\n                break;\n            case 'charge':\n                if (entry.value === 1) {\n                    currentPart.mf += '+';\n                }\n                else if (entry.value > 1) {\n                    currentPart.mf += `(+${entry.value})`;\n                }\n                else if (entry.value < 0) {\n                    currentPart.mf += `(${entry.value})`;\n                }\n                break;\n            case 'closingParenthesis':\n                parenthesisLevel--;\n                currentPart.mf += entry.value;\n                break;\n            case 'comment':\n                comments.push(entry.value);\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Could not flatten the parsed MF. Unknown kind: ${entry.kind}`);\n        }\n    }\n    if (groupIdentical) {\n        parts = optimizeRanges(parts);\n    }\n    const mfs = createMFs(parts, comments.join(' '), limit);\n    return mfs;\n}\n/**\n * If we have many times the same mf we can combine them\n * This should only be applied if there are acutaly some ranges\n */\nfunction optimizeRanges(parts) {\n    let newParts = [];\n    let mfsObject = {};\n    let hasRange = false;\n    for (const mf of parts) {\n        if (mf.min !== mf.max) {\n            hasRange = true;\n            break;\n        }\n    }\n    if (!hasRange)\n        return parts;\n    for (const mf of parts) {\n        if (!mfsObject[mf.mf]) {\n            mfsObject[mf.mf] = {\n                mf: mf.mf,\n                min: mf.min,\n                max: mf.max,\n            };\n            newParts.push(mfsObject[mf.mf]);\n        }\n        else {\n            mfsObject[mf.mf].min = mfsObject[mf.mf].min + mf.min;\n            mfsObject[mf.mf].max = mfsObject[mf.mf].max + mf.max;\n        }\n    }\n    return newParts;\n}\nfunction createMFs(parts, comment, limit) {\n    const currents = new Array(parts.length);\n    for (let i = 0; i < currents.length; i++) {\n        currents[i] = parts[i].min;\n    }\n    /** @type {string[]} */\n    const mfs = [];\n    let position = 0;\n    while (position < currents.length) {\n        if (currents[position] < parts[position].max) {\n            mfs.push(getMF(parts, currents, comment));\n            currents[position]++;\n            for (let i = 0; i < position; i++) {\n                currents[i] = parts[i].min;\n            }\n            position = 0;\n        }\n        else {\n            position++;\n        }\n        if (mfs.length >= limit) {\n            throw new Error(`MF.flatten generates too many fragments (over ${limit})`);\n        }\n    }\n    mfs.push(getMF(parts, currents, comment));\n    return mfs;\n}\nfunction getMF(parts, currents, comment) {\n    let mf = '';\n    for (let i = 0; i < parts.length; i++) {\n        if (currents[i] === 0) {\n            continue;\n        }\n        mf += parts[i].mf;\n        if (currents[i] !== 1) {\n            mf += currents[i];\n        }\n    }\n    if (comment)\n        mf += `$${comment}`;\n    return mf;\n}\n//# sourceMappingURL=flatten.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopeRatioInfo = getIsotopeRatioInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getIsotopeRatioInfo(value) {\n    let result = { mass: 0, monoisotopicMass: 0 };\n    let element = chemical_elements_1.elementsAndStableIsotopesObject[value.atom];\n    if (!element)\n        throw new Error(`Element not found: ${value.atom}`);\n    let isotopesArray = element.isotopes;\n    let ratios = normalize(value.ratio);\n    let max = Math.max(...ratios);\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${value.atom}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.mass += ratios[i] * isotopesArray[i].mass;\n        if (max === ratios[i] && result.monoisotopicMass === 0) {\n            result.monoisotopicMass = isotopesArray[i].mass;\n        }\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopeRatioInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEA = getEA;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\n/**\n * @param {*} parts\n */\nfunction getEA(parts) {\n    let results = {};\n    for (let part of parts) {\n        for (let line of part) {\n            switch (line.kind) {\n                case Kind_1.Kind.ISOTOPE: {\n                    let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                    if (!isotope) {\n                        throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                    }\n                    addMass(results, line.value.atom, isotope.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE_RATIO: {\n                    let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                    addMass(results, line.value.atom, isotopeRatioInfo.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ATOM: {\n                    let element = chemical_elements_1.elementsObject[line.value];\n                    if (!element) {\n                        element = chemical_groups_1.groupsObject[line.value];\n                        if (!element)\n                            throw new Error(`Unknown element: ${line.value}`);\n                        // need to explode group ????\n                    }\n                    addMass(results, line.value, element.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.CHARGE:\n                    break;\n                default:\n                    throw new Error('partToMF unhandled Kind: ', line.kind);\n            }\n        }\n    }\n    let eas = [];\n    let sum = 0;\n    for (let key in results) {\n        sum += results[key];\n        eas.push({\n            element: key,\n            mass: results[key],\n        });\n    }\n    for (const ea of eas) {\n        ea.ratio = ea.mass / sum;\n    }\n    return eas;\n}\nfunction addMass(results, atom, mass) {\n    if (!results[atom])\n        results[atom] = 0;\n    results[atom] += mass;\n}\n//# sourceMappingURL=getEA.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElements = getElements;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/**\n * @param {*} parts\n */\nfunction getElements(parts) {\n    const elements = [];\n    for (const part of parts) {\n        for (const line of part) {\n            let number = line.multiplier;\n            switch (line.kind) {\n                case Kind_1.Kind.ATOM: {\n                    let symbol = line.value;\n                    let element = chemical_elements_1.elementsObject[symbol];\n                    if (!element) {\n                        throw new Error(`element unknown: ${symbol} - ${line}`);\n                    }\n                    addElement(elements, { symbol, number });\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE: {\n                    let element = chemical_elements_1.elementsAndIsotopesObject[line.value.atom];\n                    if (!element) {\n                        throw new Error(`element unknown: ${part.value.atom} - ${line}`);\n                    }\n                    let isotope = element.isotopes.find((a) => a.nominal === line.value.isotope);\n                    if (!isotope) {\n                        throw new Error(`isotope unknown: ${line.value.isotope} - ${line}`);\n                    }\n                    addElement(elements, {\n                        symbol: line.value.atom,\n                        number,\n                        isotope: line.value.isotope,\n                    });\n                    break;\n                }\n                default:\n                    throw new Error(`unknown type: ${line.kind}`);\n            }\n        }\n    }\n    return elements;\n}\nfunction addElement(elements, newElement) {\n    for (let element of elements) {\n        if (element.symbol === newElement.symbol &&\n            element.isotope === newElement.isotope) {\n            element.number += newElement.number;\n            return;\n        }\n    }\n    elements.push(newElement);\n}\n//# sourceMappingURL=getElements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getNumberOfIsotopologues = getNumberOfIsotopologues;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * Returns the theoretical number of isotopologues for a given MF based on stable isotopes for each element.\n * This method will not take into account possible non natural isotopic composition (e.g. 13C enrichment)\n * If one element does not have any stable isotope, the result will be 0.\n * @param atoms\n * @returns\n */\nfunction getNumberOfIsotopologues(atoms) {\n    if (Object.keys(atoms).length === 0) {\n        return 0;\n    }\n    let result = 1;\n    for (const atom in atoms) {\n        const nbIsotopes = chemical_elements_1.elementsAndStableIsotopesObject[atom]?.isotopes.length;\n        if (!nbIsotopes) {\n            return 0;\n        }\n        const nbAtoms = atoms[atom];\n        result *= getNbCombinationsPerAtom(nbAtoms, nbIsotopes);\n    }\n    return result;\n}\n/**\n * Returns the number of isotopologues for one specific atom\n *\n * @param nbAtoms\n * @param nbIsotopes\n * @returns\n */\nfunction getNbCombinationsPerAtom(nbAtoms, nbIsotopes) {\n    let result = 1;\n    for (let i = nbAtoms + 1; i < nbAtoms + nbIsotopes; i++) {\n        result *= i;\n    }\n    for (let i = 2; i < nbIsotopes; i++) {\n        result /= i;\n    }\n    return result;\n}\n//# sourceMappingURL=getNumberOfIsotopologues.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToAtoms = partToAtoms;\nconst Kind_js_1 = require(\"../Kind.js\");\n/** @typedef {import('./partToAtoms.types').AtomsMap} AtomsMap */\n/**\n * Convert a MF part to a map of atoms\n * This procedure will suppress the isotopes !\n * This is mainly used to make queries\n * @returns {AtomsMap}\n */\nfunction partToAtoms(part) {\n    /** @type {AtomsMap} */\n    const atoms = {};\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.ISOTOPE:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ISOTOPE_RATIO:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ATOM:\n                if (!atoms[line.value])\n                    atoms[line.value] = 0;\n                atoms[line.value] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.CHARGE:\n                break;\n            case Kind_js_1.Kind.ANCHOR:\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=partToAtoms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToMF = partToMF;\nconst Kind_1 = require(\"../Kind\");\nfunction partToMF(part, options = {}) {\n    let mf = [];\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE:\n                if (line.multiplier !== 0) {\n                    mf.push(`[${line.value.isotope}${line.value.atom}]${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (line.multiplier !== 0) {\n                    mf.push(`${line.value.atom}{${line.value.ratio.join(',')}}${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ATOM:\n                if (line.multiplier !== 0) {\n                    mf.push(line.value + (line.multiplier !== 1 ? line.multiplier : ''));\n                }\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (line.value === 0 || options.neutral)\n                    break;\n                mf.push(`(${line.value > 0 ? `+${line.value}` : line.value})`);\n                break;\n            default:\n        }\n    }\n    return mf.join('');\n}\n//# sourceMappingURL=partToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfoInternal = getInfoInternal;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\nconst getNumberOfIsotopologues_1 = require(\"./getNumberOfIsotopologues\");\nconst partToAtoms_1 = require(\"./partToAtoms\");\nconst partToMF_1 = require(\"./partToMF\");\n/** @typedef {import('./getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n *\n * @param {*} parts\n * @param {*} [options={}]\n * @returns {object|MFInfo|MFInfoWithParts}\n */\nfunction getInfoInternal(parts, options = {}) {\n    let { customUnsaturations = {}, emFieldName = 'monoisotopicMass', msemFieldName = 'observedMonoisotopicMass', } = options;\n    if (parts.length === 0)\n        return {};\n    if (parts.length === 1) {\n        let oneResult = getProcessedPart(parts[0], {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        });\n        oneResult.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(oneResult.atoms);\n        return oneResult;\n    }\n    let result = { parts: [] };\n    for (let part of parts) {\n        result.parts.push(getProcessedPart(part, {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        }));\n    }\n    result[emFieldName] = 0;\n    result.mass = 0;\n    result.charge = 0;\n    result.unsaturation = 0;\n    result.atoms = {};\n    result.mf = result.parts.map((a) => a.mf).join('.');\n    for (const part of result.parts) {\n        result.mass += part.mass;\n        result[emFieldName] += part[emFieldName];\n        result.charge += part.charge;\n        result.unsaturation += part.unsaturation;\n        for (const atom in part.atoms) {\n            if (!result.atoms[atom]) {\n                result.atoms[atom] = 0;\n            }\n            result.atoms[atom] += part.atoms[atom];\n        }\n    }\n    result.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(result.atoms);\n    return result;\n}\nfunction getProcessedPart(part, options) {\n    let { customUnsaturations, emFieldName, msemFieldName } = options;\n    /** @type {MFInfo} */\n    let currentPart = {\n        mass: 0,\n        charge: 0,\n        mf: '',\n        atoms: (0, partToAtoms_1.partToAtoms)(part),\n        [emFieldName]: 0,\n    };\n    let unsaturation = 0;\n    let validUnsaturation = true;\n    currentPart.mf = (0, partToMF_1.partToMF)(part);\n    for (let line of part) {\n        let currentElement = '';\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM: {\n                currentElement = line.value;\n                let element = chemical_elements_1.elementsAndIsotopesObject[line.value];\n                // todo should we have a kind GROUP ?\n                if (!element) {\n                    element = chemical_groups_1.groupsObject[line.value];\n                    if (!element)\n                        throw new Error(`Unknown element: ${line.value}`);\n                    if (!customUnsaturations[line.value]) {\n                        customUnsaturations[line.value] = element.unsaturation;\n                    }\n                }\n                if (!element)\n                    throw new Error(`Unknown element: ${line.value}`);\n                currentPart[emFieldName] += element.monoisotopicMass * line.multiplier;\n                currentPart.mass += element.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE: {\n                currentElement = line.value.atom;\n                let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                if (!isotope) {\n                    throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                }\n                currentPart[emFieldName] += isotope.mass * line.multiplier;\n                currentPart.mass += isotope.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO: {\n                currentElement = line.value.atom;\n                let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                currentPart[emFieldName] +=\n                    isotopeRatioInfo[emFieldName] * line.multiplier;\n                currentPart.mass += isotopeRatioInfo.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                currentPart.charge = line.value;\n                if (validUnsaturation) {\n                    unsaturation -= line.value;\n                }\n                break;\n            default:\n                throw new Error('Unimplemented Kind in getInfo', line.kind);\n        }\n        if (currentElement) {\n            if (customUnsaturations[currentElement] !== undefined) {\n                unsaturation += customUnsaturations[currentElement] * line.multiplier;\n            }\n            else if (chemical_elements_1.unsaturationsObject[currentElement] !== undefined) {\n                unsaturation += chemical_elements_1.unsaturationsObject[currentElement] * line.multiplier;\n            }\n            else {\n                validUnsaturation = false;\n            }\n        }\n    }\n    // need to calculate the observedMonoisotopicMass\n    if (currentPart.charge) {\n        currentPart[msemFieldName] =\n            (currentPart[emFieldName] - currentPart.charge * chemical_elements_1.ELECTRON_MASS) /\n                Math.abs(currentPart.charge);\n    }\n    if (validUnsaturation) {\n        currentPart.unsaturation = unsaturation / 2 + 1;\n    }\n    return currentPart;\n}\n//# sourceMappingURL=getInfoInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopesInfo = getIsotopesInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/** @typedef {import('./getIsotopesInfo.types').IsotopesInfo} IsotopesInfo\n\n/**\n *\n * @param {*} parts\n * @returns {[]|IsotopesInfo}\n */\nfunction getIsotopesInfo(parts) {\n    if (parts.length === 0)\n        return [];\n    if (parts.length > 1) {\n        throw new Error('getIsotopesInfo can not be applied on multipart MF');\n    }\n    return getProcessedPart(parts[0]);\n}\n/**\n * @returns {IsotopesInfo}\n */\nfunction getProcessedPart(part) {\n    /** @type {IsotopesInfo} */\n    let result = {\n        charge: 0,\n        isotopes: [],\n    };\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE: {\n                let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                if (!isotope) {\n                    throw new Error('unknown isotope:', line.value.atom, line.value.isotope);\n                }\n                result.isotopes.push({\n                    atom: line.value.atom,\n                    number: line.multiplier,\n                    distribution: [{ x: isotope.mass, y: 1 }],\n                });\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                {\n                    let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value.atom];\n                    if (!element)\n                        throw new Error('unknown element:', line.value);\n                    let distribution = getDistribution(element.isotopes, line.value.ratio);\n                    result.isotopes.push({\n                        atom: line.value.atom,\n                        number: line.multiplier,\n                        distribution,\n                    });\n                }\n                break;\n            case Kind_1.Kind.ATOM: {\n                let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value];\n                if (!element)\n                    throw new Error('unknown element:', line.value);\n                result.isotopes.push({\n                    atom: line.value,\n                    number: line.multiplier,\n                    distribution: element.isotopes.map((e) => ({\n                        x: e.mass,\n                        y: e.abundance,\n                    })),\n                });\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                result.charge += line.value;\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return result;\n}\nfunction getDistribution(isotopesArray, ratio) {\n    let ratios = normalize(ratio);\n    let result = [];\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${chemical_elements_1.isotopesObject}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.push({\n            x: isotopesArray[i].mass,\n            y: ratios[i],\n        });\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopesInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToDisplay = partsToDisplay;\nconst Kind_1 = require(\"../Kind\");\nconst toDisplay_js_1 = require(\"./toDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {Array<Object>} result of the parse method\n */\nfunction partsToDisplay(parts) {\n    let lines = [];\n    for (let part of parts) {\n        if (lines.length > 0)\n            lines.push({ kind: Kind_1.Kind.SALT, value: '•' });\n        for (let partLine of part) {\n            lines.push(partLine);\n            if (partLine.multiplier) {\n                lines.push({\n                    kind: Kind_1.Kind.MULTIPLIER,\n                    value: partLine.multiplier,\n                });\n            }\n        }\n    }\n    return (0, toDisplay_js_1.toDisplay)(lines);\n}\n//# sourceMappingURL=partsToDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToMF = partsToMF;\nconst partToMF_1 = require(\"./partToMF\");\nfunction partsToMF(parts, options) {\n    let mf = [];\n    for (let part of parts) {\n        mf.push((0, partToMF_1.partToMF)(part, options));\n    }\n    return mf.join(' . ');\n}\n//# sourceMappingURL=partsToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toParts = toParts;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\n/**\n *\n * @param {*} lines\n * @param {object} [options={}]\n * @param {boolean} [options.expand=true] - Should we expand the groupsObject\n */\nfunction toParts(lines, options = {}) {\n    const { expand: shouldExpandgroupsObject = true } = options;\n    let parts = [];\n    let currentPart = createNewPart();\n    let previousKind = Kind_1.Kind.BEGIN;\n    parts.push(currentPart);\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM:\n            case Kind_1.Kind.ISOTOPE_RATIO:\n            case Kind_1.Kind.ISOTOPE:\n            case Kind_1.Kind.CHARGE:\n                currentPart.lines.push({ ...line, multiplier: 1 });\n                break;\n            case Kind_1.Kind.OPENING_PARENTHESIS:\n                openingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.CLOSING_PARENTHESIS:\n                closingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.PRE_MULTIPLIER:\n                preMultiplier(currentPart, line);\n                break;\n            case Kind_1.Kind.MULTIPLIER:\n                postMultiplier(currentPart, line.value, previousKind);\n                break;\n            case Kind_1.Kind.SALT:\n                globalPartMultiplier(currentPart);\n                currentPart = createNewPart();\n                parts.push(currentPart);\n                break;\n            case Kind_1.Kind.ANCHOR: // we ignore anchors to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.COMMENT: // we ignore comments to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.TEXT:\n                break;\n            default:\n                throw new Error(`Can not process mf having: ${line.kind}`);\n        }\n        previousKind = line.kind;\n    }\n    globalPartMultiplier(currentPart);\n    if (shouldExpandgroupsObject)\n        expandgroupsObject(parts);\n    return combineAtomsIsotopesCharges(parts);\n}\nfunction createNewPart() {\n    let currentMultiplier = { value: 1, fromIndex: 0 };\n    return { lines: [], multipliers: [currentMultiplier], currentMultiplier };\n}\nfunction openingParenthesis(currentPart) {\n    currentPart.currentMultiplier = {\n        value: 1,\n        fromIndex: currentPart.lines.length,\n    };\n    currentPart.multipliers.push(currentPart.currentMultiplier);\n}\nfunction closingParenthesis(currentPart) {\n    currentPart.currentMultiplier = currentPart.multipliers.pop();\n    if (currentPart.currentMultiplier !== 1) {\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= currentPart.currentMultiplier.value;\n        }\n    }\n}\nfunction preMultiplier(currentPart, line) {\n    currentPart.currentMultiplier.value *= line.value;\n}\nfunction globalPartMultiplier(currentPart) {\n    for (let i = currentPart.multipliers[0].fromIndex; i < currentPart.lines.length; i++) {\n        currentPart.lines[i].multiplier *= currentPart.multipliers[0].value;\n    }\n}\nfunction postMultiplier(currentPart, value, previousKind) {\n    if (previousKind === Kind_1.Kind.CLOSING_PARENTHESIS) {\n        // need to apply to everything till the previous parenthesis\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= value;\n        }\n    }\n    else {\n        // just applies to the previous element\n        currentPart.lines.at(-1).multiplier *= value;\n    }\n}\nfunction expandgroupsObject(parts) {\n    for (let part of parts) {\n        let expanded = false;\n        for (let i = 0; i < part.lines.length; i++) {\n            let line = part.lines[i];\n            if (line.kind === Kind_1.Kind.ATOM) {\n                let group = chemical_groups_1.groupsObject[line.value];\n                if (group) {\n                    expanded = true;\n                    for (let element of group.elements) {\n                        if (element.isotope) {\n                            part.lines.push({\n                                kind: 'isotope',\n                                value: { atom: element.symbol, isotope: element.isotope },\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                        else {\n                            part.lines.push({\n                                kind: 'atom',\n                                value: element.symbol,\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                    }\n                    part.lines[i] = undefined;\n                }\n            }\n        }\n        if (expanded)\n            part.lines = part.lines.filter(Boolean);\n    }\n}\nfunction combineAtomsIsotopesCharges(parts) {\n    let results = [];\n    for (let part of parts) {\n        let result = [];\n        results.push(result);\n        calculateAndSortKeys(part);\n        let currentKey = '';\n        for (let key of part.keys) {\n            if (key.key === Kind_1.Kind.CHARGE) {\n                if (currentKey !== key.key) {\n                    result.push({\n                        kind: Kind_1.Kind.CHARGE,\n                        value: key.value.value * key.value.multiplier,\n                    });\n                }\n                else {\n                    result.at(-1).value += key.value.value * key.value.multiplier;\n                }\n            }\n            else if (currentKey !== key.key) {\n                result.push(key.value);\n            }\n            else {\n                result.at(-1).multiplier += key.value.multiplier;\n            }\n            currentKey = key.key;\n        }\n        result.sort((a, b) => {\n            if (a.kind === Kind_1.Kind.CHARGE)\n                return 1;\n            if (b.kind === Kind_1.Kind.CHARGE)\n                return -1;\n            let atomA = a.kind === Kind_1.Kind.ATOM ? a.value : a.value.atom;\n            let atomB = b.kind === Kind_1.Kind.ATOM ? b.value : b.value.atom;\n            if (atomA !== atomB)\n                return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n            // same atome but some isotopes ...\n            if (a.kind === Kind_1.Kind.ATOM)\n                return -1;\n            if (b.kind === Kind_1.Kind.ATOM)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return 1;\n            return 0;\n        });\n    }\n    return results;\n}\nfunction calculateAndSortKeys(part) {\n    part.keys = [];\n    for (let line of part.lines) {\n        part.keys.push({ key: getKey(line), value: line });\n    }\n    part.keys.sort((a, b) => stringComparator(a.key, b.key));\n}\nfunction getKey(line) {\n    let key = [line.kind];\n    switch (line.kind) {\n        case Kind_1.Kind.CHARGE:\n            break;\n        default:\n            if (typeof line.value === 'string') {\n                key.push(line.value);\n            }\n            else {\n                for (let prop of Object.keys(line.value).toSorted()) {\n                    key.push(line.value[prop]);\n                }\n            }\n    }\n    return key.join('-');\n}\nfunction stringComparator(a, b) {\n    if (a < b)\n        return -1;\n    if (a > b)\n        return 1;\n    return 0;\n}\n//# sourceMappingURL=toParts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toText = toText;\nconst Format_1 = require(\"../Format\");\nconst subSuperscript_1 = require(\"./subSuperscript\");\nfunction toText(lines) {\n    let text = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT:\n                {\n                    const value = String(line.value);\n                    for (let i = 0; i < value.length; i++) {\n                        const char = value[i];\n                        if (subSuperscript_1.subscript[char]) {\n                            text.push(subSuperscript_1.subscript[char]);\n                        }\n                        else {\n                            throw new Error(`Subscript problem with: ${char}`);\n                        }\n                    }\n                }\n                break;\n            case Format_1.Format.SUPERSCRIPT: {\n                const value = String(line.value);\n                for (let i = 0; i < value.length; i++) {\n                    const char = value[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            case Format_1.Format.SUPERIMPOSE: {\n                const under = String(line.under);\n                for (let i = 0; i < under.length; i++) {\n                    const char = under[i];\n                    if (subSuperscript_1.subscript[char]) {\n                        text.push(subSuperscript_1.subscript[char]);\n                    }\n                    else {\n                        throw new Error(`Subscript problem with: ${char}`);\n                    }\n                }\n                const over = String(line.over);\n                for (let i = 0; i < over.length; i++) {\n                    const char = over[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            default:\n                text.push(line.value);\n        }\n    }\n    return text.join('');\n}\n//# sourceMappingURL=toText.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFInternal = void 0;\nconst Kind_1 = require(\"./Kind\");\nconst ensureCase_1 = require(\"./ensureCase\");\nconst parse_1 = require(\"./parse\");\nconst flatten_1 = require(\"./util/flatten\");\nconst getEA_1 = require(\"./util/getEA\");\nconst getElements_1 = require(\"./util/getElements\");\nconst getInfo_1 = require(\"./util/getInfo\");\nconst getIsotopesInfo_1 = require(\"./util/getIsotopesInfo\");\nconst partsToDisplay_1 = require(\"./util/partsToDisplay\");\nconst partsToMF_1 = require(\"./util/partsToMF\");\nconst toDisplay_1 = require(\"./util/toDisplay\");\nconst toHtml_1 = require(\"./util/toHtml\");\nconst toParts_1 = require(\"./util/toParts\");\nconst toText_1 = require(\"./util/toText\");\n/** @typedef {import('./util/getIsotopesInfo.types').IsotopesInfo} IsotopesInfo */\n/** @typedef {import('./util/getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./util/getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n * Class allowing to deal with molecular formula and derived information\n */\nclass MFInternal {\n    constructor(mf, options = {}) {\n        const { flattenLimit = 0 } = options;\n        if (options.ensureCase) {\n            mf = (0, ensureCase_1.ensureCase)(mf);\n        }\n        this.parsed = (0, parse_1.parse)(mf);\n        // This is definitely not the fastest way to do it but it allows to flatten the formula if needed and then parse it again to have a clean structure without multiplier ranges. We can consider doing it in one pass in the future if performance is an issue.\n        if (flattenLimit > 0 &&\n            this.parsed.some((entry) => entry.kind === Kind_1.Kind.MULTIPLIER_RANGE)) {\n            try {\n                const flattened = (0, flatten_1.flatten)(this.parsed, { limit: flattenLimit });\n                this.parsed = (0, parse_1.parse)(flattened.join('.'));\n            }\n            catch (error) {\n                // eslint-disable-next-line no-console\n                console.error(error.toString());\n            }\n        }\n        this.cache = {};\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     * @returns {{kind: string, value: string}[]}\n     */\n    toDisplay() {\n        if (!this.cache.displayed)\n            this.cache.displayed = (0, toDisplay_1.toDisplay)(this.parsed);\n        return this.cache.displayed;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     * @returns {string}\n     */\n    toHtml() {\n        if (!this.cache.html) {\n            this.toDisplay();\n            this.cache.html = (0, toHtml_1.toHtml)(this.cache.displayed);\n        }\n        return this.cache.html;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     * @returns {string}\n     */\n    toText() {\n        if (!this.cache.text) {\n            this.toDisplay();\n            this.cache.text = (0, toText_1.toText)(this.cache.displayed);\n        }\n        return this.cache.text;\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     * @returns {string}\n     */\n    toCanonicText() {\n        if (!this.cache.canonicText) {\n            this.cache.canonicText = new MFInternal(this.toMF()).toText();\n        }\n        return this.cache.canonicText;\n    }\n    toParts(options) {\n        if (options) {\n            return (0, toParts_1.toParts)(this.parsed, options);\n        }\n        // we don't want to cache the parts if we are using options\n        if (!this.cache.parts) {\n            this.cache.parts = (0, toParts_1.toParts)(this.parsed, options);\n        }\n        return this.cache.parts;\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     * @param {object} [options={}] options\n     * @param {object} [options.customUnsaturations={}] custom unsaturations\n     * @param {string} [options.emFieldName='monoisotopicMass'] name of the monoisotopic mass field\n     * @param {string} [options.msemFieldName='observedMonoisotopicMass'] name of the observed monoisotopic mass field\n     * @returns {MFInfo|MFInfoWithParts}\n     */\n    getInfo(options = {}) {\n        if (!this.cache.info) {\n            this.toParts();\n            this.cache.info = (0, getInfo_1.getInfo)(this.cache.parts, options);\n        }\n        return this.cache.info;\n    }\n    /**\n     * Returns an object with the elemental analysis\n     * @returns {*[]}\n     */\n    getEA() {\n        if (!this.cache.ea) {\n            this.toParts();\n            this.cache.ea = (0, getEA_1.getEA)(this.cache.parts);\n        }\n        return this.cache.ea;\n    }\n    /**\n     * Get the different elements for each part\n     * @returns {*[]}\n     */\n    getElements() {\n        if (!this.cache.elements) {\n            this.toParts();\n            this.cache.elements = (0, getElements_1.getElements)(this.cache.parts);\n        }\n        return this.cache.elements;\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     * @returns {IsotopesInfo}\n     */\n    getIsotopesInfo(options = {}) {\n        if (!this.cache.isotopesInfo) {\n            this.toParts();\n            this.cache.isotopesInfo = (0, getIsotopesInfo_1.getIsotopesInfo)(this.cache.parts, options);\n        }\n        return this.cache.isotopesInfo;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toMF() {\n        if (!this.cache.mf) {\n            this.toParts();\n            this.cache.mf = (0, partsToMF_1.partsToMF)(this.cache.parts);\n        }\n        return this.cache.mf;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toNeutralMF() {\n        if (!this.cache.neutralMF) {\n            this.toParts();\n            this.cache.neutralMF = (0, partsToMF_1.partsToMF)(this.cache.parts, { neutral: true });\n        }\n        return this.cache.neutralMF;\n    }\n    canonize() {\n        this.toParts();\n        this.cache.displayed = (0, partsToDisplay_1.partsToDisplay)(this.cache.parts);\n        this.cache.html = undefined;\n    }\n    flatten(options) {\n        return (0, flatten_1.flatten)(this.parsed, options);\n    }\n}\nexports.MFInternal = MFInternal;\n//# sourceMappingURL=MFInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MF = void 0;\nconst MFInternal_1 = require(\"./MFInternal\");\nclass MF {\n    internal;\n    constructor(mf, options = {}) {\n        this.internal = new MFInternal_1.MFInternal(mf, options);\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     */\n    toDisplay() {\n        return this.internal.toDisplay();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     */\n    toHtml() {\n        return this.internal.toHtml();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     */\n    toText() {\n        return this.internal.toText();\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     */\n    toCanonicText() {\n        return this.internal.toCanonicText();\n    }\n    toParts(options) {\n        return this.internal.toParts(options);\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     */\n    getInfo(options) {\n        return this.internal.getInfo(options);\n    }\n    /**\n     * Returns an object with the elemental analysis\n     */\n    getEA() {\n        return this.internal.getEA();\n    }\n    /**\n     * Get the different elements for each part\n     */\n    getElements() {\n        return this.internal.getElements();\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     */\n    getIsotopesInfo(options = {}) {\n        return this.internal.getIsotopesInfo(options);\n    }\n    /**\n     * Get a canonized parsable Molecule Formula\n     */\n    toMF() {\n        return this.internal.toMF();\n    }\n    /**\n     * Get a canonized MF\n     */\n    toNeutralMF() {\n        return this.internal.toNeutralMF();\n    }\n    canonize() {\n        return this.internal.canonize();\n    }\n    flatten(options) {\n        return this.internal.flatten(options);\n    }\n}\nexports.MF = MF;\n//# sourceMappingURL=MF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseToHtml = parseToHtml;\nconst parse_js_1 = require(\"./parse.js\");\nconst toDisplay_js_1 = require(\"./util/toDisplay.js\");\nconst toHtml_js_1 = require(\"./util/toHtml.js\");\n/**\n * Parse a molecular formula and converts it to an HTML code\n * @param {String} mf String containing the molecular formula\n */\nfunction parseToHtml(mf) {\n    let parsed = (0, parse_js_1.parse)(mf);\n    let display = (0, toDisplay_js_1.toDisplay)(parsed);\n    return (0, toHtml_js_1.toHtml)(display);\n}\n//# sourceMappingURL=parseToHtml.js.map","\"use strict\";\n/**\n * @param {object}   [entry={}]\n * @param {object}   [options={}]\n * @param {number}   [options.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.onlyNonInteger=false] - Non integer unsaturation\n * @return {boolean}\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationMatcher = unsaturationMatcher;\nfunction unsaturationMatcher(entry, options = {}) {\n    const { min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER, onlyInteger, onlyNonInteger, } = options;\n    if (entry.unsaturation !== undefined) {\n        if (entry.unsaturation < min || entry.unsaturation > max)\n            return false;\n        if (onlyInteger && !Number.isInteger(entry.unsaturation))\n            return false;\n        if (onlyNonInteger && Number.isInteger(entry.unsaturation))\n            return false;\n    }\n    return true;\n}\n//# sourceMappingURL=unsaturationMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalMatcher = generalMatcher;\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * Returns true if the entry containing MF information match\n * @param {object}   [entry={}] - object containing mw, ...\n * @param {object}   [options={}]\n * @param {number}   [options.minMW=0] - Minimal molecular weight\n * @param {number}   [options.maxMW=+Infinity] - Maximal molecular weight\n * @param {number}   [options.minEM=0] - Minimal monoisotopic mass\n * @param {number}   [options.maxEM=+Infinity] - Maximal monoisotopic mass\n * @param {number}   [options.minCharge=-Infinity] - Minimal charge\n * @param {number}   [options.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}   [options.unsaturation={}]\n * @param {number}   [options.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}   [options.atoms] - object of atom:{min, max}\n * @return {boolean}\n */\nfunction generalMatcher(entry, options = {}) {\n    const { minMW = 0, maxMW = +Infinity, minEM = 0, maxEM = +Infinity, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, atoms, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (entry.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(entry.charge) : entry.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=generalMatcher.js.map","\"use strict\";\n/**\n * Ensure that the sequence is in uppercase taking into account possible modifications\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureUppercaseSequence = ensureUppercaseSequence;\nfunction ensureUppercaseSequence(sequence) {\n    let parenthesisCounter = 0;\n    let parts = [];\n    let part = '';\n    for (let i = 0; i < sequence.length; i++) {\n        let currentSymbol = sequence[i];\n        if (currentSymbol === '(' && parenthesisCounter === 0 && part) {\n            parts.push(part);\n            part = currentSymbol;\n        }\n        else if (currentSymbol === ')' && parenthesisCounter === 0) {\n            part += currentSymbol;\n            parts.push(part);\n            part = '';\n        }\n        else {\n            part += currentSymbol;\n        }\n    }\n    if (part)\n        parts.push(part);\n    for (let i = 0; i < parts.length; i++) {\n        if (!parts[i].startsWith('(') && parts[i].match(/^[a-z]+$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureUppercaseSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEutrophicationPotential = getEutrophicationPotential;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getEutrophicationPotential(mfString) {\n    let parsed = new mf_parser_1.MF(mfString);\n    let info = parsed.getInfo();\n    let mf = info.mf;\n    let mw = info.mass;\n    let nC = info.atoms.C || 0;\n    let nO = info.atoms.O || 0;\n    let nN = info.atoms.N || 0;\n    let nP = info.atoms.P || 0;\n    let nH = info.atoms.H || 0;\n    let atoms = Object.keys(info.atoms);\n    for (let atom of atoms) {\n        if (!['C', 'H', 'N', 'O', 'P'].includes(atom)) {\n            return {\n                log: `EP can not be calculated because the MF contains the element: ${atom}`,\n            };\n        }\n    }\n    let vRef = 1;\n    let mwRef = 94.97;\n    let thOD = nC + (nH - 3 * nN) / 4 - nO / 2;\n    let v = nP + nN / 16 + thOD / 138;\n    let ep = v / mw / (vRef / mwRef);\n    return {\n        v,\n        thOD,\n        ep,\n        mf,\n        mw,\n        log: 'Successful calculation',\n    };\n}\n//# sourceMappingURL=getEutrophicationPotential.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsem = getMsem;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getMsem(em, charge) {\n    if (charge > 0) {\n        return em / charge - chemical_elements_1.ELECTRON_MASS;\n    }\n    else if (charge < 0) {\n        return em / (charge * -1) + chemical_elements_1.ELECTRON_MASS;\n    }\n    else {\n        return 0;\n    }\n}\n//# sourceMappingURL=getMsem.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsInfo = getMsInfo;\nconst getMsem_1 = require(\"./getMsem\");\n/**\n * Returns an object containing:\n * {ms: {em, charge, ionization}, ionization: {}}\n * We return the ionization in order to know which one has been selected\n */\nfunction getMsInfo(entry, options = {}) {\n    const { allowNeutralMolecules, ionization = { mf: '', em: 0, charge: 0 }, forceIonization = false, targetMass, } = options;\n    let realIonization = ionization;\n    if (!forceIonization && entry.ionization && entry.ionization.mf !== '') {\n        realIonization = entry.ionization;\n    }\n    let ms = {\n        ionization: realIonization.mf,\n        em: 0,\n        charge: entry.charge + realIonization.charge,\n    };\n    if (ms.charge !== 0) {\n        ms.em = (0, getMsem_1.getMsem)(entry.em + realIonization.em, ms.charge);\n    }\n    else if (allowNeutralMolecules) {\n        ms.em = entry.em + realIonization.em;\n    }\n    if (targetMass) {\n        ms.delta = targetMass - ms.em;\n        ms.ppm = ((targetMass - ms.em) / ms.em) * 1e6;\n    }\n    return {\n        ms,\n        ionization: realIonization,\n    };\n}\n//# sourceMappingURL=getMsInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRangesForFragment = getRangesForFragment;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getRangesForFragment(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        // example ClBr2(CH2)0-2NO\n        // the idea is that as long as we don't have a range we don't really care\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                            max: item.value,\n                        });\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            newRanges.push({ mf: currentMF });\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (const range of ranges) {\n        if (range.max === 0)\n            continue;\n        let max = range.max === undefined ? 1 : range.max;\n        possibilities.push(`${range.mf}0-${max}`);\n    }\n    return possibilities.join(' ');\n}\n//# sourceMappingURL=getRangesForFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFRange = void 0;\nconst mf_parser_1 = require(\"mf-parser\");\nclass MFRange {\n    constructor(mf) {\n        this.range = getRange(mf);\n    }\n    isInRange(mf) {\n        const target = getRange(mf);\n        let rangeIndex = 0;\n        let targetIndex = 0;\n        while (rangeIndex < this.range.length && targetIndex < target.length) {\n            const rangeElement = this.range[rangeIndex];\n            const targetElement = target[targetIndex];\n            if (rangeElement.element === targetElement.element) {\n                // Check if the target's range is within the range's range\n                if (targetElement.range.from >= rangeElement.range.from &&\n                    targetElement.range.to <= rangeElement.range.to) {\n                    targetIndex++;\n                    rangeIndex++;\n                }\n                else {\n                    return false; // Target element is out of range\n                }\n            }\n            else if (rangeElement.element < targetElement.element) {\n                if (rangeElement.range.from > 0) {\n                    return false; // Remaining range elements must have a minimum of 1\n                }\n                rangeIndex++;\n            }\n            else {\n                return false; // Target element is not in the range\n            }\n        }\n        if (rangeIndex < this.range.length) {\n            if (this.range[rangeIndex].range.from > 0) {\n                return false; // Remaining range elements must have a minimum of 1\n            }\n            rangeIndex++;\n        }\n        if (targetIndex < target.length) {\n            return false; // Not all target elements were matched\n        }\n        return true; // All target elements are within the range\n    }\n}\nexports.MFRange = MFRange;\nfunction getRange(mf) {\n    const parsed = (0, mf_parser_1.parse)(mf, { expandGroups: true, simplify: true });\n    const ranges = [];\n    let currentRange;\n    for (const item of parsed) {\n        switch (item.kind) {\n            case 'atom':\n                currentRange = { element: item.value, range: { from: 1, to: 1 } };\n                ranges.push(currentRange);\n                break;\n            case 'isotope':\n                currentRange = {\n                    element: item.value.isotope + item.value.atom,\n                    range: { from: 1, to: 1 },\n                };\n                break;\n            case 'multiplier':\n                if (currentRange) {\n                    currentRange.range.from = item.value;\n                    currentRange.range.to = item.value;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier without preceding element in MF: ${mf}`);\n                }\n                break;\n            case 'multiplierRange':\n                if (currentRange) {\n                    currentRange.range.from = item.value.from;\n                    currentRange.range.to = item.value.to;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier range without preceding element in MF: ${mf}`);\n                }\n                break;\n            default:\n                throw new Error(`MFRange: Unknown kind: ${item.kind} in MF: ${mf}`);\n        }\n    }\n    return ranges.toSorted((a, b) => {\n        if (a.element < b.element)\n            return -1;\n        if (a.element > b.element)\n            return 1;\n        return 0;\n    });\n}\n//# sourceMappingURL=MFRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfDiff = mfDiff;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction mfDiff(mfString1, mfString2) {\n    let mf1 = new mf_parser_1.MF(mfString1).getInfo().atoms;\n    let mf2 = new mf_parser_1.MF(mfString2).getInfo().atoms;\n    let atoms = Object.keys(mf1);\n    for (const atom of Object.keys(mf2)) {\n        if (!atoms.includes(atom))\n            atoms.push(atom);\n    }\n    let mf = '';\n    for (let atom of atoms) {\n        let diff = (mf1[atom] || 0) - (mf2[atom] || 0);\n        if (diff)\n            mf += atom + diff;\n    }\n    return new mf_parser_1.MF(mf).toMF();\n}\n//# sourceMappingURL=mfDiff.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessIonizations = preprocessIonizations;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessIonizations(ionizationsString = '') {\n    if (Array.isArray(ionizationsString))\n        return ionizationsString;\n    const ionizations = ionizationsString.split(/ *[\\t\\n\\r,.;]+ */);\n    // it is allowed to have ranges in Ionizations. We need to explode them.\n    const results = [];\n    for (const ionization of ionizations) {\n        const parts = new mf_parser_1.MF(ionization).flatten();\n        for (const part of parts) {\n            const info = new mf_parser_1.MF(part).getInfo();\n            results.push({\n                mf: part,\n                em: info.monoisotopicMass,\n                charge: info.charge,\n                atoms: info.atoms,\n            });\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=preprocessIonizations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessRanges = preprocessRanges;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessRanges(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        let current = {\n            mf: '',\n            min: 1,\n            max: 1,\n        };\n        // example ClBr2(CH2)0-2NO\n        // the idea is that has long as we don't have a range we don't really care\n        // but the range should only applied on the previous atom, group or parenthesis\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF + item.value;\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            current.mf += currentMF;\n        }\n        if (current.mf) {\n            newRanges.push(current);\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        let min = range.min === undefined ? 0 : range.min;\n        let max = range.max === undefined ? 1 : range.max;\n        let possibility = {\n            mf: range.mf,\n            originalMinCount: min, // value defined by the user\n            originalMaxCount: max, // value defined by the user\n            currentMinCount: min,\n            currentMaxCount: max,\n            currentCount: min,\n            currentMonoisotopicMass: 0,\n            currentCharge: 0,\n            currentUnsaturation: 0,\n            initialOrder: i,\n            minInnerMass: 0,\n            maxInnerMass: 0,\n            minInnerCharge: 0,\n            maxInnerCharge: 0,\n            minCharge: 0,\n            maxCharge: 0,\n            minMass: 0,\n            maxMass: 0,\n            innerCharge: false,\n        };\n        possibilities.push(possibility);\n        let info = new mf_parser_1.MF(range.mf).getInfo();\n        possibility.em = range.em || info.monoisotopicMass;\n        possibility.charge = range.charge || info.charge;\n        possibility.unsaturation =\n            range.unsaturation === undefined\n                ? (info.unsaturation - 1) * 2\n                : range.unsaturation;\n        possibility.atoms = info.atoms;\n        if (possibility.mf !== info.mf) {\n            possibility.isGroup = true;\n        }\n    }\n    possibilities = possibilities.filter((r) => r.originalMinCount !== 0 || r.originalMaxCount !== 0);\n    // we will sort the way we analyse the data\n    // 1. The one possibility parameter\n    // 2. The charged part\n    // 3. Decreasing em\n    possibilities.sort((a, b) => {\n        if (a.originalMinCount === a.originalMaxCount)\n            return -1; // should be in front, they are 'static'\n        if (b.originalMinCount === b.originalMaxCount)\n            return 1;\n        if (a.charge && b.charge) {\n            if (Math.abs(a.charge) > Math.abs(b.charge))\n                return -1;\n            if (Math.abs(a.charge) < Math.abs(b.charge))\n                return 1;\n            return b.em - a.em;\n        }\n        if (a.charge)\n            return -1;\n        if (b.charge)\n            return 1;\n        return b.em - a.em;\n    });\n    // we calculate couple of fixed values\n    for (let i = 0; i < possibilities.length; i++) {\n        for (let j = i; j < possibilities.length; j++) {\n            let possibility = possibilities[j];\n            if (possibility.em > 0) {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMinCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMaxCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMinCount;\n            }\n            if (possibility.charge > 0) {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMinCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMinCount;\n            }\n        }\n    }\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i < possibilities.length - 1) {\n            let possibility = possibilities[i];\n            let innerPossibility = possibilities[i + 1];\n            possibility.minInnerMass = innerPossibility.minMass;\n            possibility.maxInnerMass = innerPossibility.maxMass;\n            possibility.minInnerCharge = innerPossibility.minCharge;\n            possibility.maxInnerCharge = innerPossibility.maxCharge;\n            if (possibility.minInnerCharge || possibility.maxInnerCharge) {\n                possibility.innerCharge = true;\n            }\n        }\n    }\n    return possibilities;\n}\n//# sourceMappingURL=preprocessRanges.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.msemMatcher = msemMatcher;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * @typedef {object} MSEMFilterOptions\n * @property {object}         [ionization={ mf: '', em: 0, charge: 0 }] - ionization method\n * @property {boolean}        [forceIonization=false] - If true ignore existing ionizations\n * @property {number}         [precision=1000] - The precision on the experimental mass\n * @property {number}         [targetMass] - Target mass, allows to calculate error and filter results\n * @property {number[]}       [targetMasses] - Target masses: SORTED array of numbers\n * @property {number[]}       [targetIntensities] - Target intensities: SORTED array of numbers\n * @property {number}         [minMW=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxMW=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minEM=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxEM=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minMSEM=-Infinity] - Minimal monoisotopic mass observed by mass\n * @property {number}         [maxMSEM=+Infinity] - Maximal monoisotopic mass observed by mass\n * @property {number}         [minCharge=-Infinity] - Minimal charge\n * @property {number}         [maxCharge=+Infinity] - Maximal charge\n * @property {boolean}        [absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @property {boolean}        [allowNegativeAtoms=false] - Allow to have negative number of atoms\n * @property {object}         [unsaturation={}]\n * @property {number}         [unsaturation.min=-Infinity] - Minimal unsaturation\n * @property {number}         [unsaturation.max=+Infinity] - Maximal unsaturation\n * @property {boolean}        [unsaturation.onlyInteger=false] - Integer unsaturation\n * @property {boolean}        [unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @property {boolean}        [atoms] - object of atom:{min, max}\n * @property {Function}       [callback] - a function that contains information about the current MF\n */\n/**\n * @param {object}             [entry={}]\n * @param {MSEMFilterOptions}  [options={}]\n * @return {boolean}\n */\n/**\n * We always recalculate msem\n */\nfunction msemMatcher(entry, options = {}) {\n    const { ionization = { mf: '', em: 0, charge: 0, atoms: {} }, forceIonization = false, precision = 1000, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, targetMass, // if present we will calculate the errors\n    targetMasses, // if present we will calculate the smallest error\n    targetIntensities, // if present it will be added in the report\n    minEM = -Infinity, maxEM = +Infinity, minMSEM = -Infinity, maxMSEM = +Infinity, minMW = -Infinity, maxMW = +Infinity, allowNegativeAtoms = false, atoms, callback, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    let msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n        ionization,\n        forceIonization,\n        targetMass,\n    });\n    let ms = msInfo.ms;\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (ms.em !== undefined && (ms.em < minMSEM || ms.em > maxMSEM)) {\n        return false;\n    }\n    if (targetMass && Math.abs(ms.ppm) > precision) {\n        return false;\n    }\n    if (ms.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(ms.charge) : ms.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    if (entry.atoms !== undefined && !allowNegativeAtoms) {\n        const ionizationAtoms = (msInfo.ionization && msInfo.ionization.atoms) || {};\n        const atomKeys = new Set(Object.keys(ionizationAtoms).concat(Object.keys(entry.atoms)));\n        for (let atom of atomKeys) {\n            if ((entry.atoms[atom] || 0) + (ionizationAtoms[atom] || 0) < 0) {\n                return false;\n            }\n        }\n    }\n    if (targetMasses && targetMasses.length > 0) {\n        let index = (0, ml_spectra_processing_1.xFindClosestIndex)(targetMasses, ms.em);\n        let closestMass = targetMasses[index];\n        msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n            ionization,\n            forceIonization,\n            targetMass: closestMass,\n        });\n        msInfo.ms.target = { mass: closestMass };\n        if (targetIntensities) {\n            msInfo.ms.target.intensity = targetIntensities[index];\n        }\n        // need to find the closest targetMasses\n        if (Math.abs(msInfo.ms.ppm) > precision)\n            return false;\n    }\n    if (callback && !callback(entry))\n        return false;\n    return msInfo;\n}\n//# sourceMappingURL=msemMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TargetMassCache = void 0;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * returns all the possible neutral mass for a defined experimental (targetMass) mass\n */\nclass TargetMassCache {\n    /**\n     * @param {number} targetMass\n     * @param {Array} possibilities\n     * @param {object} [options={}]\n     * @param {boolean} [options.allowNeutral=false]\n     * @param {number} [options.charge=0]\n     * @param {number} [options.precision=100]\n     * @param {object} [options.filter={}]\n     * @param {number} [options.filter.minCharge=Number.MIN_SAFE_INTEGER]\n     * @param {number} [options.filter.maxCharge=Number.MAX_SAFE_INTEGER]\n     * @returns\n     */\n    constructor(targetMass, possibilities, options = {}) {\n        const { allowNeutral = false, // msem because em in this case !\n        filter = {}, charge = 0, precision = 100, } = options;\n        const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, } = filter;\n        if (!possibilities || possibilities.length === 0)\n            return;\n        let firstPossibility = possibilities[0];\n        let currentMinCharge = Math.max(minCharge, firstPossibility.minCharge + charge);\n        let currentMaxCharge = Math.min(maxCharge, firstPossibility.maxCharge + charge);\n        this.minCharge = currentMinCharge;\n        this.maxCharge = currentMaxCharge;\n        let size = this.maxCharge - this.minCharge + 1;\n        this.data = [];\n        let minMass = 0;\n        let maxMass = 0;\n        let range = (targetMass * precision) / 1e6;\n        for (let i = 0; i < size; i++) {\n            let currentCharge = i + this.minCharge;\n            if (currentCharge === 0) {\n                if (allowNeutral) {\n                    minMass = targetMass - range;\n                    maxMass = targetMass + range;\n                }\n                else {\n                    minMass = Number.MAX_SAFE_INTEGER;\n                    maxMass = Number.MIN_SAFE_INTEGER;\n                }\n            }\n            else {\n                minMass =\n                    (targetMass - range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n                maxMass =\n                    (targetMass + range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n            }\n            this.data.push({\n                charge: currentCharge,\n                minMass,\n                maxMass,\n            });\n        }\n    }\n    getMinMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].minMass\n            : Number.MAX_SAFE_INTEGER;\n    }\n    getMaxMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].maxMass\n            : Number.MIN_SAFE_INTEGER;\n    }\n}\nexports.TargetMassCache = TargetMassCache;\n//# sourceMappingURL=TargetMassCache.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFsSync = findMFsSync;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst TargetMassCache_1 = require(\"./TargetMassCache\");\n/**\n * @param {number}        targetMass - Monoisotopic mass\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {boolean}       [options.uniqueMFs=true]\n * @param {number}        [options.limit=1000] - Maximum number of results\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string|{mf:string,min:number,max:number}[]}        [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}        [options.precision=100] - Allowed mass range based on precision\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @returns {object}\n */\nfunction findMFsSync(targetMass, options = {}) {\n    const { filter = {}, maxIterations = 1e8, limit = 1000, allowNeutral = true, // if there is no msem we use em !\n    uniqueMFs = false, // if there is no msem we use em !\n    ranges = [\n        { mf: 'C', min: 0, max: 100 },\n        { mf: 'H', min: 0, max: 100 },\n        { mf: 'O', min: 0, max: 100 },\n        { mf: 'N', min: 0, max: 100 },\n    ], } = options;\n    let targetMassCache;\n    const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, unsaturation = {}, } = filter;\n    let filterUnsaturation = !!unsaturation;\n    // we calculate not the real unsaturation but the one before dividing by 2 + 1\n    let fakeMinUnsaturation = unsaturation.min === undefined\n        ? Number.MIN_SAFE_INTEGER\n        : (unsaturation.min - 1) * 2;\n    let fakeMaxUnsaturation = unsaturation.max === undefined\n        ? Number.MAX_SAFE_INTEGER\n        : (unsaturation.max - 1) * 2;\n    let filterCharge = minCharge !== Number.MIN_SAFE_INTEGER ||\n        maxCharge !== Number.MAX_SAFE_INTEGER;\n    let advancedFilter;\n    if (filter.atoms || filter.callback) {\n        advancedFilter = {\n            atoms: filter.atoms,\n            callback: filter.callback,\n        };\n    }\n    let result = {\n        mfs: [],\n        info: {\n            numberMFEvaluated: 0,\n            numberResults: 0,\n        },\n    };\n    let orderMapping = []; // used to sort the atoms\n    // we need to make the processing for all the ionizations\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    for (let ionization of ionizations) {\n        let currentIonization = {\n            currentMonoisotopicMass: ionization.em || 0,\n            currentCharge: ionization.charge,\n            currentUnsaturation: 0, // we don't take into account the unsaturation of the ionization agent\n        };\n        // if (DEBUG) console.log('new ionization', ionization.mf, ionization.em, ionization.charge);\n        // ionization em and charge will be used to set the first atom value\n        let possibilities = (0, mf_utilities_1.preprocessRanges)(ranges);\n        orderMapping = getOrderMapping(possibilities);\n        if (possibilities.length === 0)\n            return { mfs: [] };\n        targetMassCache = new TargetMassCache_1.TargetMassCache(targetMass, possibilities, {\n            ...options,\n            charge: ionization.charge,\n        });\n        let theEnd = false;\n        let maxPosition = possibilities.length;\n        let lastPosition = possibilities.length - 1;\n        let currentPosition = 0;\n        let currentAtom;\n        let previousAtom;\n        let lastPossibility = possibilities[lastPosition];\n        initializePossibilities(possibilities, currentIonization, targetMassCache);\n        //  if (DEBUG) console.log('possibilities', possibilities.map((a) => `${a.mf + a.originalMinCount}-${a.originalMaxCount}`));\n        let isValid = false; // designed so that the first time it is not a valid solution\n        while (!theEnd) {\n            if (result.info.numberMFEvaluated++ > maxIterations) {\n                throw new Error(`Iteration number is over the current maximum of: ${maxIterations}`);\n            }\n            if (filterUnsaturation) {\n                let unsaturationValue = lastPossibility.currentUnsaturation;\n                let isOdd = Math.abs(unsaturationValue % 2);\n                if ((unsaturation.onlyInteger && isOdd === 1) ||\n                    (unsaturation.onlyNonInteger && isOdd === 0) ||\n                    fakeMinUnsaturation > unsaturationValue ||\n                    fakeMaxUnsaturation < unsaturationValue) {\n                    isValid = false;\n                }\n            }\n            if (filterCharge &&\n                (lastPossibility.currentCharge < minCharge ||\n                    lastPossibility.currentCharge > maxCharge)) {\n                isValid = false;\n            }\n            if (isValid) {\n                let minMass = targetMassCache.getMinMass(lastPossibility.currentCharge);\n                let maxMass = targetMassCache.getMaxMass(lastPossibility.currentCharge);\n                if (lastPossibility.currentMonoisotopicMass < minMass ||\n                    lastPossibility.currentMonoisotopicMass > maxMass) {\n                    isValid = false;\n                }\n            }\n            if (isValid) {\n                result.info.numberResults++;\n                let newResult = getResult(possibilities, targetMass, allowNeutral, ionization, orderMapping);\n                if (advancedFilter) {\n                    isValid = (0, mf_matcher_1.msemMatcher)(newResult, advancedFilter) !== false;\n                }\n                if (isValid) {\n                    result.mfs.push(newResult);\n                    if (result.mfs.length > 2 * limit) {\n                        if (uniqueMFs)\n                            ensureUniqueMF(result);\n                        result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n                        result.mfs.length = limit;\n                    }\n                }\n            }\n            isValid = true;\n            // we need to set up all the arrays if possible\n            while (currentPosition < maxPosition && currentPosition >= 0) {\n                currentAtom = possibilities[currentPosition];\n                previousAtom =\n                    currentPosition === 0\n                        ? currentIonization\n                        : possibilities[currentPosition - 1];\n                if (currentAtom.currentCount < currentAtom.currentMaxCount) {\n                    currentAtom.currentCount++;\n                    updateCurrentAtom(currentAtom, previousAtom);\n                    if (currentPosition < lastPosition) {\n                        currentPosition++;\n                        setCurrentMinMax(possibilities[currentPosition], possibilities[currentPosition - 1], targetMassCache);\n                    }\n                    else {\n                        break;\n                    }\n                }\n                else {\n                    currentPosition--;\n                }\n            }\n            if (currentPosition < 0) {\n                theEnd = true;\n            }\n        }\n    }\n    if (uniqueMFs)\n        ensureUniqueMF(result);\n    result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    if (result.mfs.length > limit) {\n        result.mfs.length = limit;\n    }\n    for (const mf of result.mfs) {\n        delete mf.currentCounts;\n    }\n    return result;\n}\n/**\n * Ensure that we have only once the same MF\n * In order to improve the speed we just consider the em\n * @param {object} result\n */\nfunction ensureUniqueMF(result) {\n    result.mfs.sort((a, b) => a.em - b.em);\n    let previousEM = 0;\n    let bestCounts = [];\n    const mfs = [];\n    next: for (let current of result.mfs) {\n        if (current.em - previousEM > 1e-8) {\n            previousEM = current.em;\n            bestCounts = current.currentCounts;\n            mfs.push(current);\n        }\n        else {\n            for (let i = 0; i < current.currentCounts.length; i++) {\n                // better priority ???\n                if (current.currentCounts[i] > bestCounts[i]) {\n                    mfs.pop();\n                    mfs.push(current);\n                    bestCounts = current.currentCounts;\n                }\n                else if (current.currentCounts[i] < bestCounts[i]) {\n                    continue next;\n                }\n            }\n        }\n    }\n    result.mfs = mfs;\n}\nfunction updateCurrentAtom(currentAtom, previousAtom) {\n    currentAtom.currentMonoisotopicMass =\n        previousAtom.currentMonoisotopicMass +\n            currentAtom.em * currentAtom.currentCount;\n    currentAtom.currentCharge =\n        previousAtom.currentCharge + currentAtom.charge * currentAtom.currentCount;\n    currentAtom.currentUnsaturation =\n        previousAtom.currentUnsaturation +\n            currentAtom.unsaturation * currentAtom.currentCount;\n}\nfunction getResult(possibilities, targetMass, allowNeutralMolecules, ionization, orderMapping) {\n    let lastPossibility = possibilities.at(-1);\n    let result = {\n        em: lastPossibility.currentMonoisotopicMass - ionization.em,\n        unsaturation: lastPossibility.currentUnsaturation,\n        mf: '',\n        charge: lastPossibility.currentCharge - ionization.charge,\n        ionization,\n        atoms: {},\n        groups: {},\n        currentCounts: possibilities.map((possibility) => possibility.currentCount),\n    };\n    // we check that the first time we meet the ionization group it does not end\n    // in the final result\n    for (let i = 0; i < possibilities.length; i++) {\n        let possibility = possibilities[orderMapping[i]];\n        if (possibility.currentCount !== 0) {\n            if (possibility.isGroup) {\n                if (possibility.currentCount === 1) {\n                    result.mf += `${possibility.mf}`;\n                }\n                else if (possibility.mf.match(/^\\([^()]*\\)$/)) {\n                    result.mf += `${possibility.mf}${possibility.currentCount}`;\n                }\n                else {\n                    result.mf += `(${possibility.mf})${possibility.currentCount}`;\n                }\n                if (result.groups[possibility.mf]) {\n                    result.groups[possibility.mf] += possibility.currentCount;\n                }\n                else {\n                    result.groups[possibility.mf] = possibility.currentCount;\n                }\n            }\n            else {\n                result.mf += possibility.mf;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n            for (let atom in possibility.atoms) {\n                if (result.atoms[atom]) {\n                    result.atoms[atom] +=\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n                else {\n                    result.atoms[atom] =\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n            }\n        }\n    }\n    result.unsaturation = (result.unsaturation + Math.abs(result.charge)) / 2 + 1;\n    result.ms = (0, mf_utilities_1.getMsInfo)(result, { targetMass, allowNeutralMolecules }).ms;\n    return result;\n}\nfunction setCurrentMinMax(currentAtom, previousAtom, targetMassCache) {\n    // the current min max can only be optimize if the charge will not change anymore\n    // and the currentAtom.em >= 0\n    if (currentAtom.innerCharge === true ||\n        currentAtom.charge !== 0 ||\n        currentAtom.em < 0) {\n        currentAtom.currentMinCount = currentAtom.originalMinCount;\n        currentAtom.currentMaxCount = currentAtom.originalMaxCount;\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n    else {\n        // no more change of charge, we can optimize\n        let currentMass = previousAtom !== undefined ? previousAtom.currentMonoisotopicMass : 0;\n        let currentCharge = previousAtom !== undefined ? previousAtom.currentCharge : 0;\n        currentAtom.currentMinCount = Math.max(Math.floor((targetMassCache.getMinMass(currentCharge) -\n            currentMass -\n            currentAtom.maxInnerMass) /\n            currentAtom.em), currentAtom.originalMinCount);\n        currentAtom.currentMaxCount = Math.min(Math.floor((targetMassCache.getMaxMass(currentCharge) -\n            currentMass -\n            currentAtom.minInnerMass) /\n            currentAtom.em), currentAtom.originalMaxCount);\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n}\nfunction initializePossibilities(possibilities, currentIonization, targetMassCache) {\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i === 0) {\n            updateCurrentAtom(possibilities[i], currentIonization);\n            setCurrentMinMax(possibilities[i], currentIonization, targetMassCache);\n        }\n        else {\n            updateCurrentAtom(possibilities[i], possibilities[i - 1]);\n        }\n    }\n}\n// eslint-disable-next-line no-unused-vars\nfunction possibilitiesToString(possibilities) {\n    return possibilities.map((a) => [\n        `mf:${a.mf}`,\n        `current:${a.currentCount}`,\n        `min:${a.currentMinCount}`,\n        `max:${a.currentMaxCount}`,\n        `charge:${a.currentCharge}`,\n    ]);\n}\nfunction getOrderMapping(possibilities) {\n    let mapping = possibilities.map((p, i) => ({ atom: p.mf, index: i }));\n    mapping.sort((a, b) => {\n        return (0, atom_sorter_1.atomSorter)(a.atom, b.atom);\n    });\n    return mapping.map((a) => a.index);\n}\n//# sourceMappingURL=findMFsSync.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFs = findMFs;\nconst findMFsSync_1 = require(\"./findMFsSync\");\n/** @typedef {import('./types').MFResult} MFResult */\n/** @typedef {import('./types').MFFinderOptions} MFFinderOptions */\n/**\n * @param {number} targetMass - Monoisotopic mass\n * @param {MFFinderOptions} [options={}]\n * @returns {Promise<MFResult[]>}\n */\nasync function findMFs(targetMass, options = {}) {\n    return (0, findMFsSync_1.findMFsSync)(targetMass, options);\n}\n//# sourceMappingURL=findMFs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfIncluded = mfIncluded;\nconst mf_parser_1 = require(\"mf-parser\");\nconst findMFsSync_js_1 = require(\"./findMFsSync.js\");\n/**\n * @param {string}        mf - the molecular formula to check\n * @param {string}        range - the range of MF to explore\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {object}        [options.filter={}]\n * @param {number}        [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}        [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}       [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}        [options.filter.unsaturation={}]\n * @param {number}        [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}        [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}        [options.filter.atoms] - object of atom:{min, max}\n * @param {function}      [options.filter.callback] - a function to filter the MF\n * @returns {boolean}\n */\nfunction mfIncluded(mf, range, options = {}) {\n    let targetEM = new mf_parser_1.MF(mf).getInfo().monoisotopicMass;\n    let results = (0, findMFsSync_js_1.findMFsSync)(targetEM, {\n        allowNeutral: true,\n        ...options,\n        ranges: range,\n        precision: 0.0000001,\n        limit: 1,\n    });\n    return results.mfs.length > 0;\n}\n//# sourceMappingURL=mfIncluded.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMonoisotopicMass = fromMonoisotopicMass;\nconst mf_finder_1 = require(\"mf-finder\");\n/**\n * Generates a database 'monoisotopic' from a monoisotopic mass and various options\n * @param {number|string|array}    masses - Monoisotopic mass\n * @param {object}    [options={}]\n * @param {number}    [options.maxIterations=10000000] - Maximum number of iterations\n * @param {function}  [options.onStep] - Callback to do after each step\n * @param {boolean}   [options.allowNeutral=true]\n * @param {boolean}   [options.uniqueMFs=true]\n * @param {number}    [options.limit=1000] - Maximum number of results\n * @param {string}    [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string}    [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}    [options.precision=100] - Allowed mass range based on precision\n * @param {object}    [options.filter={}]\n * @param {number}    [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}    [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}   [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}    [options.filter.unsaturation={}]\n * @param {number}    [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}    [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}    [options.filter.atoms] - object of atom:{min, max}\n * @param {function}  [options.filter.callback] - a function to filter the MF\n * @returns {Promise}\n */\nasync function fromMonoisotopicMass(masses, options = {}) {\n    if (typeof masses === 'string') {\n        masses = masses.split(/[\\t\\n\\r ,;]/).map(Number);\n    }\n    if (typeof masses === 'number') {\n        masses = [masses];\n    }\n    let results = [];\n    for (let mass of masses) {\n        results.push(await (0, mf_finder_1.findMFs)(mass, options));\n    }\n    return {\n        mfs: results.flatMap((entry) => entry.mfs),\n        info: {\n            numberMFEvaluated: results.reduce((sum, current) => sum + current.info.numberMFEvaluated, 0),\n            numberResults: results.reduce((sum, current) => sum + current.info.numberResults, 0),\n        },\n    };\n}\n//# sourceMappingURL=fromMonoisotopicMass.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaks = getPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getPeaks(peaks, options = {}) {\n    const { from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, threshold = 0.01, limit, sumValue, } = options;\n    let maxY = Number.MIN_SAFE_INTEGER;\n    for (let peak of peaks) {\n        if (peak.y > maxY)\n            maxY = peak.y;\n    }\n    let minY = maxY * threshold;\n    peaks = peaks.filter((peak) => peak.x >= from && peak.x <= to && peak.y >= minY);\n    if (limit && peaks.length > limit) {\n        peaks.sort((a, b) => b.y - a.y);\n        peaks = peaks.slice(0, limit);\n    }\n    if (sumValue) {\n        peaks = structuredClone(peaks);\n        const currentSum = (0, ml_spectra_processing_1.xyObjectSumY)(peaks);\n        const ratio = sumValue / currentSum;\n        for (const peak of peaks) {\n            peak.y *= ratio;\n        }\n    }\n    return peaks.toSorted((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentPeaks = getFragmentPeaks;\nconst mf_parser_1 = require(\"mf-parser\");\nconst fromMonoisotopicMass_1 = require(\"./from/fromMonoisotopicMass\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {string} mf - Molecular formula of the parent molecule\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {string} [options.ionizations]\n * @param {number} [options.precision]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nasync function getFragmentPeaks(peaks, mf, options = {}) {\n    const { ionizations = '', precision } = options;\n    const mfInfo = new mf_parser_1.MF(mf).getInfo();\n    const ranges = Object.keys(mfInfo.atoms)\n        .map((key) => `${key}0-${mfInfo.atoms[key]}`)\n        .join(' ');\n    peaks = (0, getPeaks_js_1.getPeaks)(peaks, options);\n    for (let peak of peaks) {\n        const { mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(peak.x, {\n            precision,\n            ranges,\n            ionizations,\n        });\n        peak.mfs = mfs;\n    }\n    peaks = peaks.filter((peak) => peak.mfs.length > 0);\n    return peaks;\n}\n//# sourceMappingURL=getFragmentPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMassRemainder = getMassRemainder;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Remove an integer number of time the specifiedd monoisotopic mass.\n * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n * @param {object} spectrum\n * @param {number} mass\n * @param {object} [options={}]\n * @param {number} [options.delta=0.001]\n */\nfunction getMassRemainder(spectrum, mass, options = {}) {\n    const { delta = 0.001 } = options;\n    const x = spectrum.x.slice();\n    const y = spectrum.y;\n    for (let i = 0; i < x.length; i++) {\n        const factor = Math.floor(x[i] / mass);\n        x[i] = x[i] - factor * mass;\n    }\n    // we sort and join\n    return (0, ml_spectra_processing_1.xyJoinX)((0, ml_spectra_processing_1.xySortX)({ x, y }), { delta });\n}\n//# sourceMappingURL=getMassRemainder.js.map","export function calculateOverlapFromDiff(diffs) {\n    if (diffs[1].length === 0)\n        return 0;\n    let sumPos = 0;\n    for (let i = 0; i < diffs[1].length; i++) {\n        sumPos += Math.abs(diffs[1][i]);\n    }\n    return 1 - sumPos;\n}\n//# sourceMappingURL=calculateOverlapFromDiff.js.map","/**\n * This code requires the use of an array like  [[x1,y1],[x2,y2], ...]\n * If it is not the right format, we will just convert it\n * Otherwise we return the correct format\n * @param {Peaks} peaks\n * @returns [number[], number[]]\n */\nexport function checkPeaks(peaks) {\n    // if it is already a 2D array of points, we just return them\n    if (Array.isArray(peaks) && Array.isArray(peaks[0]) && peaks.length === 2) {\n        return peaks;\n    }\n    if (Array.isArray(peaks.x) && Array.isArray(peaks.y)) {\n        return [peaks.x, peaks.y];\n    }\n    const x = new Array(peaks.length);\n    const y = new Array(peaks.length);\n    for (let i = 0; i < peaks.length; i++) {\n        x[i] = peaks[i][0];\n        y[i] = peaks[i][1];\n    }\n    return [x, y];\n}\n//# sourceMappingURL=checkPeaks.js.map","export function extract(array, from, to) {\n    const newArray = [[], []];\n    let j = 0;\n    const length = array[0] ? array[0].length : 0;\n    for (let i = 0; i < length; i++) {\n        if ((!from || array[0][i] >= from) && (!to || array[0][i] <= to)) {\n            newArray[0][j] = array[0][i];\n            newArray[1][j] = array[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=extract.js.map","// returns an new array based on array1 where there is a peak of array2 at a distance under width/2\nexport function getCommonArray(array1, array2, width) {\n    const newArray = [[], []];\n    let pos2 = 0;\n    width /= 2;\n    let j = 0;\n    const array1Length = array1[0] ? array1[0].length : 0;\n    const array2Length = array2[0] ? array2[0].length : 0;\n    for (let i = 0; i < array1Length; i++) {\n        while (pos2 < array2Length && array1[0][i] > array2[0][pos2] + width) {\n            pos2++;\n        }\n        if (pos2 < array2Length && array1[0][i] > array2[0][pos2] - width) {\n            newArray[0][j] = array1[0][i];\n            newArray[1][j] = array1[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=getCommonArray.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","'use strict';\n\nvar arrayStat = require('./array');\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\nexports.max = function max(matrix) {\n    var max = -Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] > max) max = matrix[i][j];\n        }\n    }\n    return max;\n};\n\nexports.min = function min(matrix) {\n    var min = Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] < min) min = matrix[i][j];\n        }\n    }\n    return min;\n};\n\nexports.minMax = function minMax(matrix) {\n    var min = Infinity;\n    var max = -Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] < min) min = matrix[i][j];\n            if (matrix[i][j] > max) max = matrix[i][j];\n        }\n    }\n    return {\n        min:min,\n        max:max\n    };\n};\n\nexports.entropy = function entropy(matrix, eps) {\n    if (typeof (eps) === 'undefined') {\n        eps = 0;\n    }\n    var sum = 0,\n        l1 = matrix.length,\n        l2 = matrix[0].length;\n    for (var i = 0; i < l1; i++) {\n        for (var j = 0; j < l2; j++) {\n            sum += matrix[i][j] * Math.log(matrix[i][j] + eps);\n        }\n    }\n    return -sum;\n};\n\nexports.mean = function mean(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theMean, N, i, j;\n\n    if (dimension === -1) {\n        theMean = [0];\n        N = rows * cols;\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theMean[0] += matrix[i][j];\n            }\n        }\n        theMean[0] /= N;\n    } else if (dimension === 0) {\n        theMean = new Array(cols);\n        N = rows;\n        for (j = 0; j < cols; j++) {\n            theMean[j] = 0;\n            for (i = 0; i < rows; i++) {\n                theMean[j] += matrix[i][j];\n            }\n            theMean[j] /= N;\n        }\n    } else if (dimension === 1) {\n        theMean = new Array(rows);\n        N = cols;\n        for (j = 0; j < rows; j++) {\n            theMean[j] = 0;\n            for (i = 0; i < cols; i++) {\n                theMean[j] += matrix[j][i];\n            }\n            theMean[j] /= N;\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theMean;\n};\n\nexports.sum = function sum(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theSum, i, j;\n\n    if (dimension === -1) {\n        theSum = [0];\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theSum[0] += matrix[i][j];\n            }\n        }\n    } else if (dimension === 0) {\n        theSum = new Array(cols);\n        for (j = 0; j < cols; j++) {\n            theSum[j] = 0;\n            for (i = 0; i < rows; i++) {\n                theSum[j] += matrix[i][j];\n            }\n        }\n    } else if (dimension === 1) {\n        theSum = new Array(rows);\n        for (j = 0; j < rows; j++) {\n            theSum[j] = 0;\n            for (i = 0; i < cols; i++) {\n                theSum[j] += matrix[j][i];\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theSum;\n};\n\nexports.product = function product(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theProduct, i, j;\n\n    if (dimension === -1) {\n        theProduct = [1];\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theProduct[0] *= matrix[i][j];\n            }\n        }\n    } else if (dimension === 0) {\n        theProduct = new Array(cols);\n        for (j = 0; j < cols; j++) {\n            theProduct[j] = 1;\n            for (i = 0; i < rows; i++) {\n                theProduct[j] *= matrix[i][j];\n            }\n        }\n    } else if (dimension === 1) {\n        theProduct = new Array(rows);\n        for (j = 0; j < rows; j++) {\n            theProduct[j] = 1;\n            for (i = 0; i < cols; i++) {\n                theProduct[j] *= matrix[j][i];\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theProduct;\n};\n\nexports.standardDeviation = function standardDeviation(matrix, means, unbiased) {\n    var vari = exports.variance(matrix, means, unbiased), l = vari.length;\n    for (var i = 0; i < l; i++) {\n        vari[i] = Math.sqrt(vari[i]);\n    }\n    return vari;\n};\n\nexports.variance = function variance(matrix, means, unbiased) {\n    if (typeof (unbiased) === 'undefined') {\n        unbiased = true;\n    }\n    means = means || exports.mean(matrix);\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length;\n    var vari = new Array(cols);\n\n    for (var j = 0; j < cols; j++) {\n        var sum1 = 0, sum2 = 0, x = 0;\n        for (var i = 0; i < rows; i++) {\n            x = matrix[i][j] - means[j];\n            sum1 += x;\n            sum2 += x * x;\n        }\n        if (unbiased) {\n            vari[j] = (sum2 - ((sum1 * sum1) / rows)) / (rows - 1);\n        } else {\n            vari[j] = (sum2 - ((sum1 * sum1) / rows)) / rows;\n        }\n    }\n    return vari;\n};\n\nexports.median = function median(matrix) {\n    var rows = matrix.length, cols = matrix[0].length;\n    var medians = new Array(cols);\n\n    for (var i = 0; i < cols; i++) {\n        var data = new Array(rows);\n        for (var j = 0; j < rows; j++) {\n            data[j] = matrix[j][i];\n        }\n        data.sort(compareNumbers);\n        var N = data.length;\n        if (N % 2 === 0) {\n            medians[i] = (data[N / 2] + data[(N / 2) - 1]) * 0.5;\n        } else {\n            medians[i] = data[Math.floor(N / 2)];\n        }\n    }\n    return medians;\n};\n\nexports.mode = function mode(matrix) {\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        modes = new Array(cols),\n        i, j;\n    for (i = 0; i < cols; i++) {\n        var itemCount = new Array(rows);\n        for (var k = 0; k < rows; k++) {\n            itemCount[k] = 0;\n        }\n        var itemArray = new Array(rows);\n        var count = 0;\n\n        for (j = 0; j < rows; j++) {\n            var index = itemArray.indexOf(matrix[j][i]);\n            if (index >= 0) {\n                itemCount[index]++;\n            } else {\n                itemArray[count] = matrix[j][i];\n                itemCount[count] = 1;\n                count++;\n            }\n        }\n\n        var maxValue = 0, maxIndex = 0;\n        for (j = 0; j < count; j++) {\n            if (itemCount[j] > maxValue) {\n                maxValue = itemCount[j];\n                maxIndex = j;\n            }\n        }\n\n        modes[i] = itemArray[maxIndex];\n    }\n    return modes;\n};\n\nexports.skewness = function skewness(matrix, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var means = exports.mean(matrix);\n    var n = matrix.length, l = means.length;\n    var skew = new Array(l);\n\n    for (var j = 0; j < l; j++) {\n        var s2 = 0, s3 = 0;\n        for (var i = 0; i < n; i++) {\n            var dev = matrix[i][j] - means[j];\n            s2 += dev * dev;\n            s3 += dev * dev * dev;\n        }\n\n        var m2 = s2 / n;\n        var m3 = s3 / n;\n        var g = m3 / Math.pow(m2, 3 / 2);\n\n        if (unbiased) {\n            var a = Math.sqrt(n * (n - 1));\n            var b = n - 2;\n            skew[j] = (a / b) * g;\n        } else {\n            skew[j] = g;\n        }\n    }\n    return skew;\n};\n\nexports.kurtosis = function kurtosis(matrix, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var means = exports.mean(matrix);\n    var n = matrix.length, m = matrix[0].length;\n    var kurt = new Array(m);\n\n    for (var j = 0; j < m; j++) {\n        var s2 = 0, s4 = 0;\n        for (var i = 0; i < n; i++) {\n            var dev = matrix[i][j] - means[j];\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            kurt[j] = a * b - 3 * c;\n        } else {\n            kurt[j] = m4 / (m2 * m2) - 3;\n        }\n    }\n    return kurt;\n};\n\nexports.standardError = function standardError(matrix) {\n    var samples = matrix.length;\n    var standardDeviations = exports.standardDeviation(matrix);\n    var l = standardDeviations.length;\n    var standardErrors = new Array(l);\n    var sqrtN = Math.sqrt(samples);\n\n    for (var i = 0; i < l; i++) {\n        standardErrors[i] = standardDeviations[i] / sqrtN;\n    }\n    return standardErrors;\n};\n\nexports.covariance = function covariance(matrix, dimension) {\n    return exports.scatter(matrix, undefined, dimension);\n};\n\nexports.scatter = function scatter(matrix, divisor, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    if (typeof (divisor) === 'undefined') {\n        if (dimension === 0) {\n            divisor = matrix.length - 1;\n        } else if (dimension === 1) {\n            divisor = matrix[0].length - 1;\n        }\n    }\n    var means = exports.mean(matrix, dimension);\n    var rows = matrix.length;\n    if (rows === 0) {\n        return [[]];\n    }\n    var cols = matrix[0].length,\n        cov, i, j, s, k;\n\n    if (dimension === 0) {\n        cov = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            cov[i] = new Array(cols);\n        }\n        for (i = 0; i < cols; i++) {\n            for (j = i; j < cols; j++) {\n                s = 0;\n                for (k = 0; k < rows; k++) {\n                    s += (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]);\n                }\n                s /= divisor;\n                cov[i][j] = s;\n                cov[j][i] = s;\n            }\n        }\n    } else if (dimension === 1) {\n        cov = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            cov[i] = new Array(rows);\n        }\n        for (i = 0; i < rows; i++) {\n            for (j = i; j < rows; j++) {\n                s = 0;\n                for (k = 0; k < cols; k++) {\n                    s += (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]);\n                }\n                s /= divisor;\n                cov[i][j] = s;\n                cov[j][i] = s;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    return cov;\n};\n\nexports.correlation = function correlation(matrix) {\n    var means = exports.mean(matrix),\n        standardDeviations = exports.standardDeviation(matrix, true, means),\n        scores = exports.zScores(matrix, means, standardDeviations),\n        rows = matrix.length,\n        cols = matrix[0].length,\n        i, j;\n\n    var cor = new Array(cols);\n    for (i = 0; i < cols; i++) {\n        cor[i] = new Array(cols);\n    }\n    for (i = 0; i < cols; i++) {\n        for (j = i; j < cols; j++) {\n            var c = 0;\n            for (var k = 0, l = scores.length; k < l; k++) {\n                c += scores[k][j] * scores[k][i];\n            }\n            c /= rows - 1;\n            cor[i][j] = c;\n            cor[j][i] = c;\n        }\n    }\n    return cor;\n};\n\nexports.zScores = function zScores(matrix, means, standardDeviations) {\n    means = means || exports.mean(matrix);\n    if (typeof (standardDeviations) === 'undefined') standardDeviations = exports.standardDeviation(matrix, true, means);\n    return exports.standardize(exports.center(matrix, means, false), standardDeviations, true);\n};\n\nexports.center = function center(matrix, means, inPlace) {\n    means = means || exports.mean(matrix);\n    var result = matrix,\n        l = matrix.length,\n        i, j, jj;\n\n    if (!inPlace) {\n        result = new Array(l);\n        for (i = 0; i < l; i++) {\n            result[i] = new Array(matrix[i].length);\n        }\n    }\n\n    for (i = 0; i < l; i++) {\n        var row = result[i];\n        for (j = 0, jj = row.length; j < jj; j++) {\n            row[j] = matrix[i][j] - means[j];\n        }\n    }\n    return result;\n};\n\nexports.standardize = function standardize(matrix, standardDeviations, inPlace) {\n    if (typeof (standardDeviations) === 'undefined') standardDeviations = exports.standardDeviation(matrix);\n    var result = matrix,\n        l = matrix.length,\n        i, j, jj;\n\n    if (!inPlace) {\n        result = new Array(l);\n        for (i = 0; i < l; i++) {\n            result[i] = new Array(matrix[i].length);\n        }\n    }\n\n    for (i = 0; i < l; i++) {\n        var resultRow = result[i];\n        var sourceRow = matrix[i];\n        for (j = 0, jj = resultRow.length; j < jj; j++) {\n            if (standardDeviations[j] !== 0 && !isNaN(standardDeviations[j])) {\n                resultRow[j] = sourceRow[j] / standardDeviations[j];\n            }\n        }\n    }\n    return result;\n};\n\nexports.weightedVariance = function weightedVariance(matrix, weights) {\n    var means = exports.mean(matrix);\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length;\n    var vari = new Array(cols);\n\n    for (var j = 0; j < cols; j++) {\n        var sum = 0;\n        var a = 0, b = 0;\n\n        for (var i = 0; i < rows; i++) {\n            var z = matrix[i][j] - means[j];\n            var w = weights[i];\n\n            sum += w * (z * z);\n            b += w;\n            a += w * w;\n        }\n\n        vari[j] = sum * (b / (b * b - a));\n    }\n\n    return vari;\n};\n\nexports.weightedMean = function weightedMean(matrix, weights, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length,\n        means, i, ii, j, w, row;\n\n    if (dimension === 0) {\n        means = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            means[i] = 0;\n        }\n        for (i = 0; i < rows; i++) {\n            row = matrix[i];\n            w = weights[i];\n            for (j = 0; j < cols; j++) {\n                means[j] += row[j] * w;\n            }\n        }\n    } else if (dimension === 1) {\n        means = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            means[i] = 0;\n        }\n        for (j = 0; j < rows; j++) {\n            row = matrix[j];\n            w = weights[j];\n            for (i = 0; i < cols; i++) {\n                means[j] += row[i] * w;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    var weightSum = arrayStat.sum(weights);\n    if (weightSum !== 0) {\n        for (i = 0, ii = means.length; i < ii; i++) {\n            means[i] /= weightSum;\n        }\n    }\n    return means;\n};\n\nexports.weightedCovariance = function weightedCovariance(matrix, weights, means, dimension) {\n    dimension = dimension || 0;\n    means = means || exports.weightedMean(matrix, weights, dimension);\n    var s1 = 0, s2 = 0;\n    for (var i = 0, ii = weights.length; i < ii; i++) {\n        s1 += weights[i];\n        s2 += weights[i] * weights[i];\n    }\n    var factor = s1 / (s1 * s1 - s2);\n    return exports.weightedScatter(matrix, weights, means, factor, dimension);\n};\n\nexports.weightedScatter = function weightedScatter(matrix, weights, means, factor, dimension) {\n    dimension = dimension || 0;\n    means = means || exports.weightedMean(matrix, weights, dimension);\n    if (typeof (factor) === 'undefined') {\n        factor = 1;\n    }\n    var rows = matrix.length;\n    if (rows === 0) {\n        return [[]];\n    }\n    var cols = matrix[0].length,\n        cov, i, j, k, s;\n\n    if (dimension === 0) {\n        cov = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            cov[i] = new Array(cols);\n        }\n        for (i = 0; i < cols; i++) {\n            for (j = i; j < cols; j++) {\n                s = 0;\n                for (k = 0; k < rows; k++) {\n                    s += weights[k] * (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]);\n                }\n                cov[i][j] = s * factor;\n                cov[j][i] = s * factor;\n            }\n        }\n    } else if (dimension === 1) {\n        cov = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            cov[i] = new Array(rows);\n        }\n        for (i = 0; i < rows; i++) {\n            for (j = i; j < rows; j++) {\n                s = 0;\n                for (k = 0; k < cols; k++) {\n                    s += weights[k] * (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]);\n                }\n                cov[i][j] = s * factor;\n                cov[j][i] = s * factor;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    return cov;\n};\n","'use strict';\n\nexports.array = require('./array');\nexports.matrix = require('./matrix');\n","import { array as StatArray } from 'ml-stat';\nexport function normalize(array) {\n    const min = StatArray.min(array[1]);\n    const max = StatArray.max(array[1]);\n    const sum = StatArray.sum(array[1]);\n    const length = array[1] ? array[1].length : 0;\n    if (sum !== 0) {\n        for (let i = 0; i < length; i++) {\n            array[1][i] /= sum;\n        }\n    }\n    return {\n        sum,\n        min,\n        max,\n    };\n}\n//# sourceMappingURL=normalize.js.map","import { extract } from './extract';\nimport { getCommonArray } from './getCommonArray';\nimport { normalize } from './normalize';\nimport { COMMON_SECOND, COMMON_FIRST } from './index';\n// this method will systematically take care of both array\nexport function commonExtractAndNormalize(array1, array2, width, from, to, common) {\n    if (!Array.isArray(array1) || !Array.isArray(array2)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const extract1 = extract(array1, from, to);\n    const extract2 = extract(array2, from, to);\n    let common1, common2, info1, info2;\n    if (common & COMMON_SECOND) {\n        common1 = getCommonArray(extract1, extract2, width);\n        info1 = normalize(common1);\n    }\n    else {\n        common1 = extract1;\n        info1 = normalize(common1);\n    }\n    if (common & COMMON_FIRST) {\n        common2 = getCommonArray(extract2, extract1, width);\n        info2 = normalize(common2);\n    }\n    else {\n        common2 = extract2;\n        info2 = normalize(common2);\n    }\n    return {\n        info1,\n        info2,\n        data1: common1,\n        data2: common2,\n    };\n}\n//# sourceMappingURL=commonExtractAndNormalize.js.map","import { extract } from './extract';\nimport { normalize } from './normalize';\nexport function extractAndNormalize(array, from, to) {\n    if (!Array.isArray(array)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const newArray = extract(array, from, to);\n    const info = normalize(newArray);\n    return {\n        info,\n        data: newArray,\n    };\n}\n//# sourceMappingURL=extractAndNormalize.js.map","// Adapted from: http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/1968345#1968345\nexport function getIntersection(segment1, segment2) {\n    const p0X = segment1[0][0];\n    const p0Y = segment1[0][1];\n    const p1X = segment1[1][0];\n    const p1Y = segment1[1][1];\n    const p2X = segment2[0][0];\n    const p2Y = segment2[0][1];\n    const p3X = segment2[1][0];\n    const p3Y = segment2[1][1];\n    const s1X = p1X - p0X;\n    const s1Y = p1Y - p0Y;\n    const s2X = p3X - p2X;\n    const s2Y = p3Y - p2Y;\n    const s = (-s1Y * (p0X - p2X) + s1X * (p0Y - p2Y)) / (-s2X * s1Y + s1X * s2Y);\n    const t = (s2X * (p0Y - p2Y) - s2Y * (p0X - p2X)) / (-s2X * s1Y + s1X * s2Y);\n    if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n        return {\n            x: p0X + t * s1X,\n            y: p0Y + t * s1Y,\n        };\n    }\n    return null; // No collision\n}\n//# sourceMappingURL=getIntersection.js.map","import { calculateOverlapFromDiff } from './calculateOverlapFromDiff';\nimport { checkPeaks } from './checkPeaks';\nimport { commonExtractAndNormalize } from './commonExtractAndNormalize';\nimport { extract } from './extract';\nimport { extractAndNormalize } from './extractAndNormalize';\nimport { getCommonArray } from './getCommonArray.js';\nimport { getIntersection } from './getIntersection';\nimport { normalize } from './normalize';\nexport const COMMON_NO = 0;\nexport const COMMON_FIRST = 1;\nexport const COMMON_SECOND = 2;\nexport const COMMON_BOTH = 3;\n/**\n * A number, or a string containing a number.\n * @typedef {([number[],number[]]|[number,number][]|{x:number[],y:number[]})} Peaks\n */\n/**\n * Create a comparator class\n * {object} [options={}]\n * {string} [options.common=''] should we take only common peaks 'first', 'second', 'both', ''\n * {number} [options.widthBottom=2] bottom trapezoid width for similarity evaluation\n * {number} [options.widthTop=1] top trapezoid width for similarity evaluation\n * {number} [options.from] from region used for similarity calculation\n * {number} [options.to] to region used for similarity calculation\n */\nexport class Comparator {\n    constructor(options = {}) {\n        this.array1 = [];\n        this.array2 = [];\n        this.setOptions(options);\n    }\n    /*\n       2 formats are allowed:\n       [[x1,x2,...],[y1,y2,...]] or [[x1,y1],[x2,y2], ...]\n      */\n    setOptions(options = {}) {\n        if (typeof options.common === 'string') {\n            if (options.common.toLowerCase() === 'first') {\n                this.common = COMMON_FIRST;\n            }\n            else if (options.common.toLowerCase() === 'second') {\n                this.common = COMMON_SECOND;\n            }\n            else if (options.common.toLowerCase() === 'both') {\n                this.common = COMMON_BOTH;\n            }\n            else {\n                this.common = COMMON_NO;\n            }\n        }\n        else if (options.common === true) {\n            this.common = COMMON_BOTH;\n        }\n        else {\n            this.common = COMMON_NO;\n        }\n        this.trapezoid = options.trapezoid;\n        this.commonFactor = options.commonFactor || this.commonFactor || 4;\n        const { widthBottom = this.widthBottom || 2, widthTop = this.widthTop || 1, from = this.from, to = this.to, } = options;\n        this.setTrapezoid(widthBottom, widthTop);\n        this.setFromTo(from, to);\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks1(peaks) {\n        this.array1 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract.data;\n            this.array1ExtractInfo = extract.info;\n        }\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks2(peaks) {\n        this.array2 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract.data;\n            this.array2ExtractInfo = extract.info;\n        }\n    }\n    getExtract1() {\n        return this.array1Extract;\n    }\n    getExtract2() {\n        return this.array2Extract;\n    }\n    getExtractInfo1() {\n        return this.array1ExtractInfo;\n    }\n    getExtractInfo2() {\n        return this.array2ExtractInfo;\n    }\n    /**\n     * Set the new bottom and top width of the trapezoid\n     * @param {number} newWidthBottom\n     * @param {number} newWidthTop\n     */\n    setTrapezoid(newWidthBottom, newWidthTop) {\n        this.widthTop = newWidthTop;\n        this.widthBottom = newWidthBottom;\n        this.widthSlope = (this.widthBottom - this.widthTop) / 2;\n        if (this.widthBottom < this.widthTop) {\n            throw new Error('widthBottom has to be larger than widthTop');\n        }\n    }\n    /**\n     * Set the from / to for comparison\n     * @param {number} newFrom - set the new from value\n     * @param {number} newTo - set the new to value\n     * @returns\n     */\n    setFromTo(newFrom, newTo) {\n        if (newFrom === this.from && newTo === this.to)\n            return;\n        this.from = newFrom;\n        this.to = newTo;\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common, this.commonFactor);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            let extract1 = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract1.data;\n            this.array1ExtractInfo = extract1.info;\n            let extract2 = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract2.data;\n            this.array2ExtractInfo = extract2.info;\n        }\n    }\n    /**\n     *\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @returns\n     */\n    getOverlap(x1, y1, x2, y2) {\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        // TAKE CARE !!! We multiply the diff by 2 !!!\n        const diff = Math.abs(x1 - x2) * 2;\n        if (diff > this.widthBottom)\n            return 0;\n        if (diff <= this.widthTop) {\n            return Math.min(y1, y2);\n        }\n        const maxValue = (Math.max(y1, y2) * (this.widthBottom - diff)) /\n            (this.widthBottom - this.widthTop);\n        return Math.min(y1, y2, maxValue);\n    }\n    /**\n     * This is the old trapezoid similarity\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @param {number} widthTop\n     * @param {number} widthBottom\n     * @returns\n     */\n    getOverlapTrapezoid(x1, y1, x2, y2, widthTop, widthBottom) {\n        // eslint-disable-next-line no-console\n        console.error('getOverlapTrapezoid should not be used anymore');\n        const factor = 2 / (widthTop + widthBottom); // correction for surface=1\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        if (x1 === x2) {\n            // they have the same position\n            return Math.min(y1, y2);\n        }\n        const diff = Math.abs(x1 - x2);\n        if (diff >= widthBottom)\n            return 0;\n        if (y1 === y2) {\n            // do they have the same height ???\n            // we need to find the common length\n            if (diff <= widthTop) {\n                return ((widthTop + widthBottom) / 2 - diff) * y1 * factor;\n            }\n            else if (diff <= widthBottom) {\n                return ((((((widthBottom - diff) * y1) / 2) * (diff - widthTop)) /\n                    (widthBottom - widthTop)) *\n                    factor);\n            }\n            return 0;\n        }\n        else {\n            // the height are different and not the same position ...\n            // we need to consider only one segment to find its intersection\n            const small = Math.min(y1, y2);\n            const big = Math.max(y1, y2);\n            const targets = [\n                [\n                    [0, 0],\n                    [this.widthSlope, small],\n                ],\n                [\n                    [this.widthSlope, small],\n                    [this.widthSlope + widthTop, small],\n                ],\n                [\n                    [widthTop + this.widthSlope, small],\n                    [widthBottom, 0],\n                ],\n            ];\n            let segment;\n            if ((x1 > x2 && y1 > y2) || (x1 < x2 && y1 < y2)) {\n                segment = [\n                    [diff, 0],\n                    [diff + this.widthSlope, big],\n                ];\n            }\n            else {\n                segment = [\n                    [diff + this.widthSlope, big],\n                    [diff, 0],\n                ];\n            }\n            for (let i = 0; i < 3; i++) {\n                const intersection = getIntersection(targets[i], segment);\n                if (intersection) {\n                    switch (i) {\n                        case 0:\n                            return small - ((diff * intersection.y) / 2) * factor;\n                        case 1: // to simplify ...\n                            //     console.log(\"           \",widthSlope,small,big,intersection.x)\n                            return ((((this.widthSlope * small) / (2 * big)) * small +\n                                (widthTop + this.widthSlope - intersection.x) * small +\n                                (this.widthSlope * small) / 2) *\n                                factor);\n                        case 2:\n                            return (((widthBottom - diff) * intersection.y) / 2) * factor;\n                        default:\n                            throw new Error(`unexpected intersection value: ${i}`);\n                    }\n                }\n            }\n        }\n        return NaN;\n    }\n    /**\n     * This method calculates the total diff. The sum of positive value will yield to overlap\n     * @returns\n     */\n    calculateDiff() {\n        // we need to take 2 pointers\n        // and travel progressively between them ...\n        const newFirst = [\n            this.array1Extract[0].slice(),\n            this.array1Extract[1].slice(),\n        ];\n        const newSecond = [\n            this.array2Extract[0].slice(),\n            this.array2Extract[1].slice(),\n        ];\n        const array1Length = this.array1Extract[0]\n            ? this.array1Extract[0].length\n            : 0;\n        const array2Length = this.array2Extract[0]\n            ? this.array2Extract[0].length\n            : 0;\n        let pos1 = 0;\n        let pos2 = 0;\n        let previous2 = 0;\n        while (pos1 < array1Length) {\n            const diff = newFirst[0][pos1] - this.array2Extract[0][pos2];\n            if (Math.abs(diff) < this.widthBottom) {\n                // there is some overlap\n                let overlap;\n                if (this.trapezoid) {\n                    // old trapezoid overlap similarity\n                    overlap = this.getOverlapTrapezoid(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                else {\n                    overlap = this.getOverlap(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                newFirst[1][pos1] -= overlap;\n                newSecond[1][pos2] -= overlap;\n                if (pos2 < array2Length - 1) {\n                    pos2++;\n                }\n                else {\n                    pos1++;\n                    pos2 = previous2;\n                }\n            }\n            else if (diff > 0 && pos2 < array2Length - 1) {\n                pos2++;\n                previous2 = pos2;\n            }\n            else {\n                pos1++;\n                pos2 = previous2;\n            }\n        }\n        return newSecond;\n    }\n    /**\n     * Set the new peaks and return info\n     * @param {Peaks} newPeaks1\n     * @param {Peaks} newPeaks2\n     * @returns\n     */\n    getSimilarity(newPeaks1, newPeaks2) {\n        if (newPeaks1)\n            this.setPeaks1(newPeaks1);\n        if (newPeaks2)\n            this.setPeaks2(newPeaks2);\n        const diff = this.calculateDiff();\n        return {\n            diff,\n            extract1: this.getExtract1(),\n            extract2: this.getExtract2(),\n            extractInfo1: this.getExtractInfo1(),\n            extractInfo2: this.getExtractInfo2(),\n            similarity: calculateOverlapFromDiff(diff),\n            widthBottom: this.widthBottom,\n            widthTop: this.widthTop,\n        };\n    }\n    /**\n     * This works mainly when you have a array1 that is fixed\n     * newPeaks2 have to be normalized ! (sum to 1)\n     * @param {Peaks} newPeaks2\n     * @param {number} from\n     * @param {number} to\n     * @returns\n     */\n    fastSimilarity(newPeaks2, from, to) {\n        this.array1Extract = extract(this.array1, from, to);\n        this.array2Extract = newPeaks2;\n        if (this.common & COMMON_SECOND) {\n            this.array1Extract = getCommonArray(this.array1Extract, this.array2Extract, this.widthBottom);\n        }\n        normalize(this.array1Extract);\n        const diff = this.calculateDiff();\n        return calculateOverlapFromDiff(diff);\n    }\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeakChargeBySimilarity = getPeakChargeBySimilarity;\nconst peaks_similarity_1 = require(\"peaks-similarity\");\n/**\n * @param {object}   [options={}]\n * @param {number}   [options.minCharge=1]\n * @param {number}   [options.maxCharge=10]\n * @param {object}   [options.similarity={}]\n * @param {number}   [options.similarity.widthBottom]\n * @param {number}   [options.similarity.widthTop]\n * @param {object}   [options.similarity.widthFunction] - function called with mass that should return an object width containing top and bottom\n * @param {object}   [options.similarity.zone={}]\n * @param {number}   [options.similarity.zone.low=-0.5] - window shift based on observed monoisotopic mass\n * @param {number}   [options.similarity.zone.high=2.5] - to value for the comparison window\n * @param {string}   [options.similarity.common]\n */\nconst NEUTRON_MASS = 1;\nfunction getPeakChargeBySimilarity(spectrum, targetMass, options = {}) {\n    let { similarity = {}, minCharge = 1, maxCharge = 10 } = options;\n    let { zone = {}, widthFunction } = similarity;\n    let { low = -0.5, high = 2.5 } = zone;\n    if (!spectrum || spectrum.data.x.length === 0) {\n        throw new Error('You need to add an experimental spectrum first using setMassSpectrum');\n    }\n    let width = {\n        bottom: similarity.widthBottom,\n        top: similarity.widthTop,\n    };\n    similarity = structuredClone(similarity);\n    similarity.common = 'second';\n    let experimentalData = spectrum.data;\n    let similarityProcessor = new peaks_similarity_1.Comparator(similarity);\n    similarityProcessor.setPeaks1([experimentalData.x, experimentalData.y]);\n    if (widthFunction && typeof widthFunction === 'string') {\n        // eslint-disable-next-line no-new-func\n        widthFunction = new Function('mass', widthFunction);\n        let checkTopBottom = widthFunction(123);\n        if (!checkTopBottom.bottom || !checkTopBottom.top) {\n            throw new Error('widthFunction should return an object with bottom and top properties');\n        }\n    }\n    let fromCharge = minCharge * maxCharge > 0\n        ? Math.round(Math.min(Math.abs(minCharge), Math.abs(maxCharge)))\n        : 1;\n    let toCharge = Math.round(Math.max(Math.abs(minCharge), Math.abs(maxCharge)));\n    let fromIsotope = Math.ceil(low);\n    let toIsotope = Math.floor(high);\n    let isotopeHeight = 1 / (toIsotope - fromIsotope + 1);\n    let results = [];\n    for (let charge = fromCharge; charge < toCharge + 1; charge++) {\n        let isotopePositions = { x: [], y: [] };\n        for (let isotopePosition = fromIsotope; isotopePosition < toIsotope + 1; isotopePosition++) {\n            isotopePositions.x.push(targetMass + (isotopePosition * NEUTRON_MASS) / charge);\n            isotopePositions.y.push(isotopeHeight);\n        }\n        let from = targetMass + low / Math.abs(charge);\n        let to = targetMass + high / Math.abs(charge);\n        similarityProcessor.setFromTo(from, to);\n        if (widthFunction) {\n            width = widthFunction(targetMass);\n            similarityProcessor.setTrapezoid(width.bottom, width.top);\n        }\n        similarityProcessor.setPeaks2([isotopePositions.x, isotopePositions.y]);\n        let result = similarityProcessor.getSimilarity();\n        results.push({ charge, similarity: result.similarity });\n    }\n    return results.toSorted((a, b) => b.similarity - a.similarity)[0].charge;\n}\n//# sourceMappingURL=getPeakChargeBySimilarity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksWithCharge = getPeaksWithCharge;\n// We can not really take the real value of the neutron because it varies from one element to another.\nconst NEUTRON_MASS = 1;\n/**\n *\n * @param {Array} selectedPeaks\n * @param {Array} allPeaks\n * @param {object} [options={}]\n * @param {number} [options.min=1]\n * @param {number} [options.max=10]\n * @param {number} [options.low=-1]\n * @param {number} [options.high=1]\n * @param {number} [options.precision=30]\n * @returns\n */\nfunction getPeaksWithCharge(selectedPeaks, allPeaks, options = {}) {\n    let { precision = 100, low = -1, high = 1, min: minCharge = 1, max: maxCharge = 10, } = options;\n    let fromCharge = minCharge * maxCharge > 0\n        ? Math.round(Math.min(Math.abs(minCharge), Math.abs(maxCharge)))\n        : 1;\n    let toCharge = Math.round(Math.max(Math.abs(minCharge), Math.abs(maxCharge)));\n    let fromIsotope = Math.ceil(low);\n    let toIsotope = Math.floor(high);\n    let numberIsotopes = toIsotope - fromIsotope + 1;\n    let isotopeIntensity = 1 / numberIsotopes;\n    let fromIndex = 0;\n    let localFromIndex = 0;\n    let localToIndex = 0;\n    const peaksWithCharge = [];\n    for (const peak of selectedPeaks) {\n        let targetMass = peak.x;\n        localFromIndex = fromIndex;\n        let bestCharge = fromCharge;\n        let bestChargeMatch = 0;\n        for (let charge = fromCharge; charge < toCharge + 1; charge++) {\n            let theoreticalPositions = {\n                x: [],\n                y: new Array(numberIsotopes).fill(isotopeIntensity),\n            };\n            let massRange = precision * 1e-6 * targetMass;\n            for (let isotopePosition = fromIsotope; isotopePosition < toIsotope + 1; isotopePosition++) {\n                theoreticalPositions.x.push(targetMass + (isotopePosition * NEUTRON_MASS) / charge);\n            }\n            let fromMass = targetMass + low / Math.abs(charge) - massRange;\n            let toMass = targetMass + high / Math.abs(charge) + massRange;\n            if (charge === 1) {\n                // we may move the fromIndex\n                while (allPeaks[fromIndex].x < fromMass) {\n                    fromIndex++;\n                }\n            }\n            /*\n             * Find the from / to index for the specific peak and specific charge\n             */\n            while (allPeaks[localFromIndex].x < fromMass) {\n                localFromIndex++;\n            }\n            localToIndex = localFromIndex;\n            let localHeightSum = 0;\n            while (localToIndex < allPeaks.length &&\n                allPeaks[localToIndex].x < toMass) {\n                localHeightSum += allPeaks[localToIndex].y;\n                localToIndex++;\n            }\n            localToIndex--;\n            //  console.log({ localFromIndex, localToIndex });\n            /*\n              Calculate the overlap for a specific peak and specific charge\n            */\n            let currentTheoreticalPosition = 0;\n            let theoreticalMaxValue = 1 / numberIsotopes;\n            let totalMatch = 0;\n            for (let index = localFromIndex; index <= localToIndex; index++) {\n                let minMass = theoreticalPositions.x[currentTheoreticalPosition] -\n                    massRange / charge;\n                let maxMass = theoreticalPositions.x[currentTheoreticalPosition] +\n                    massRange / charge;\n                while (maxMass < allPeaks[index].x) {\n                    currentTheoreticalPosition++;\n                    theoreticalMaxValue = 1 / numberIsotopes;\n                    minMass =\n                        theoreticalPositions.x[currentTheoreticalPosition] -\n                            massRange / charge;\n                    maxMass =\n                        theoreticalPositions.x[currentTheoreticalPosition] +\n                            massRange / charge;\n                }\n                while (index < allPeaks.length && allPeaks[index].x < minMass) {\n                    index++;\n                }\n                //    console.log({ index, minMass, maxMass, massRange, localHeightSum });\n                if (index < allPeaks.length && allPeaks[index].x <= maxMass) {\n                    while (index < allPeaks.length && allPeaks[index].x <= maxMass) {\n                        if (allPeaks[index].x >= minMass && allPeaks[index].x <= maxMass) {\n                            let value = allPeaks[index].y / localHeightSum;\n                            //      console.log({ theoreticalMaxValue, value });\n                            value = Math.min(theoreticalMaxValue, value);\n                            theoreticalMaxValue -= value;\n                            totalMatch += value;\n                        }\n                        index++;\n                    }\n                    index--;\n                }\n                if (totalMatch > bestChargeMatch) {\n                    bestCharge = charge;\n                    bestChargeMatch = totalMatch;\n                }\n            }\n        }\n        peaksWithCharge.push({ ...peak, charge: bestCharge });\n    }\n    return peaksWithCharge;\n}\n//# sourceMappingURL=getPeaksWithCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isContinuous = isContinuous;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * When a spectrum is continous ?\n * - has more than 100 points\n * - deltaX change can not be more than a factor 2\n * - deltaX may not be larger than 0.1\n * - if y is zero it does not count\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.minLength=100]\n * @param {number} [options.relativeHeightThreshold=0.001] // Under this value the\n * @param {number} [options.maxDeltaRatio=3]\n */\nfunction isContinuous(spectrum, options = {}) {\n    const { minLength = 100, maxDeltaRatio = 3, relativeHeightThreshold = 0.001, } = options;\n    const minHeight = (0, ml_spectra_processing_1.xMaxValue)(spectrum.data.y) * relativeHeightThreshold;\n    const minRadio = 1 / maxDeltaRatio;\n    const maxRatio = 1 * maxDeltaRatio;\n    if (spectrum.continuous === undefined) {\n        let xs = spectrum.data.x;\n        let ys = spectrum.data.y;\n        if (xs.length < minLength) {\n            spectrum.continuous = false;\n        }\n        else {\n            let previousDelta = xs[1] - xs[0];\n            spectrum.continuous = true;\n            let success = 0;\n            let failed = 0;\n            for (let i = 0; i < xs.length - 1; i++) {\n                if (ys[i] < minHeight || ys[i + 1] < minHeight) {\n                    previousDelta = 0;\n                    continue;\n                }\n                let delta = xs[i + 1] - xs[i];\n                if (previousDelta) {\n                    let ratio = delta / previousDelta;\n                    if ((Math.abs(delta) > 0.1 || ratio < minRadio || ratio > maxRatio) &&\n                        ys[i] !== 0 &&\n                        ys[i + 1] !== 0) {\n                        failed++;\n                    }\n                    else {\n                        success++;\n                    }\n                }\n                previousDelta = delta;\n            }\n            if (success / failed < 10) {\n                spectrum.continuous = false;\n            }\n        }\n    }\n    return spectrum.continuous;\n}\n//# sourceMappingURL=isContinuous.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm\n * @param [ys] Array of y values\n * @param [xs] Array of X or deltaX\n * @return  Array containing the new ys (same length)\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (typeof xs === 'undefined') {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","export function getMinMaxIntervalsDy(y, x, dY, dX) {\n    let lastMax = null;\n    let lastMin = null;\n    const intervalL = [];\n    const intervalR = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n    }\n    return { intervalL, intervalR };\n}\n//# sourceMappingURL=getMinMaxIntervals.js.map","export function tryMatchOneIntervalWithMinData(options) {\n    const { x, lastK, minData, yThreshold, intervalWidth, intervalCenter, yData, } = options;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let possible = -1;\n    let newLastIndex = lastK;\n    for (let k = newLastIndex + 1; k < minData.length; k++) {\n        const centerIndex = minData[k];\n        if (yData[centerIndex] <= yThreshold) {\n            continue;\n        }\n        const deltaX = x[centerIndex];\n        const currentDistance = Math.abs(deltaX - intervalCenter);\n        if (currentDistance < intervalWidth) {\n            if (currentDistance < minDistance) {\n                possible = k;\n            }\n            newLastIndex = k;\n        }\n        if (currentDistance >= minDistance)\n            break;\n        minDistance = currentDistance;\n    }\n    return { lastIndex: newLastIndex, possible };\n}\n//# sourceMappingURL=tryMatchOneIntervalWithMinData.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\nexport function autoAlgorithm(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const crossDy = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < 0 && dY[i + 1] > 0) || (dY[i] > 0 && dY[i + 1] < 0)) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        // Handle exact zero\n        if (dY[i] === 0 &&\n            dY[i] < Math.abs(dY[i + 1]) &&\n            dY[i] < Math.abs(dY[i - 1])) {\n            crossDy.push(i);\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    const peaks = [];\n    let [lastK, lastJ] = [-1, -1];\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        let yIndex = -1;\n        let match = tryMatchOneIntervalWithMinData({\n            x,\n            yData,\n            lastK,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            minData: crossDy,\n        });\n        lastK = match.lastIndex;\n        if (match.possible !== -1) {\n            yIndex = crossDy[match.possible];\n        }\n        else {\n            match = tryMatchOneIntervalWithMinData({\n                x,\n                yData,\n                yThreshold,\n                lastK: lastJ,\n                intervalWidth,\n                intervalCenter,\n                minData: minddY,\n            });\n            if (match.possible !== -1) {\n                yIndex = minddY[match.possible];\n            }\n            lastJ = match.lastIndex;\n        }\n        if (yIndex !== -1) {\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[yIndex],\n                y: y[yIndex],\n                width,\n                index: yIndex,\n                ddY: ddY[yIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n    }\n    return peaks;\n}\n//# sourceMappingURL=autoAlgorithm.js.map","import { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\nexport function getPeakFromIntervals(options) {\n    let lastK = -1;\n    const peaks = [];\n    const { x, ddY, yData, yThreshold, intervalR, intervalL, minData } = options;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        const { possible = -1, lastIndex } = tryMatchOneIntervalWithMinData({\n            x,\n            lastK,\n            minData,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            yData,\n        });\n        if (possible !== -1) {\n            const centerIndex = minData[possible];\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[centerIndex],\n                y: yData[centerIndex],\n                width,\n                index: centerIndex,\n                ddY: ddY[centerIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n        lastK = lastIndex;\n    }\n    return peaks;\n}\n//# sourceMappingURL=getPeaksFromIntervals.js.map","/**\n * Finds the indices where the first derivative crosses zero (sign change),\n * which are potential peak positions. This function does not detect zero-crossings\n * in regions with consecutive zero values in the derivative (flat regions).\n *\n * @param input - Object containing the y values and their first derivative (dY).\n * @returns Array of indices where the first derivative crosses zero (excluding consecutive zeros).\n */\nexport function xGetCrossZeroPoints(input) {\n    const { y, dY } = input;\n    const crossDy = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if (isLessAndGreaterThanZero(dY[i], dY[i + 1])) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        else if (\n        // Handle exact zero\n        dY[i] === 0 &&\n            isLessAndGreaterThanZero(dY[i - 1], dY[i + 1])) {\n            crossDy.push(i);\n        }\n    }\n    return crossDy;\n}\nfunction isLessAndGreaterThanZero(back, next) {\n    return (back < 0 && next > 0) || (back > 0 && next < 0);\n}\n//# sourceMappingURL=xGetCrossZeroPoints.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\nimport { xGetCrossZeroPoints } from \"./xGetCrossZeroPoints.js\";\nexport function firstDerivative(input) {\n    const { y, x, dY, dX, yData, yThreshold, ddY } = input;\n    const crossDy = xGetCrossZeroPoints(input);\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    return getPeakFromIntervals({\n        minData: crossDy,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=firstDerivative.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\nexport function secondDerivative(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < y.length - 1; ++i) {\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    return getPeakFromIntervals({\n        minData: minddY,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=secondDerivative.js.map","/**\n * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // interpolation to a sin() function\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = 20 * Math.log10(y[currentIndex - 1]);\n            const beta = 20 * Math.log10(y[currentIndex]);\n            const gamma = 20 * Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { autoAlgorithm } from \"./algorithms/autoAlgorithm.js\";\nimport { firstDerivative } from \"./algorithms/firstDerivative.js\";\nimport { secondDerivative } from \"./algorithms/secondDerivative.js\";\nimport { optimizeTop } from \"./utils/optimizeTop.js\";\n/**\n * Global spectra deconvolution\n * @param  data - Object data with x and y arrays. Values in x has to be growing\n * @param options\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, peakDetectionAlgorithm = 'second', } = options;\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    //rescale;\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const isEquallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (isEquallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else if (!maxCriteria) {\n        noiseLevel *= -1;\n    }\n    if (!maxCriteria) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = isEquallySpaced ? x[1] - x[0] : x;\n    const yData = smoothY\n        ? sgg(y, xValue, {\n            ...sgOptions,\n            derivative: 0,\n        })\n        : y;\n    const { min: minY, max: maxY } = xMinMaxValues(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const dY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 1,\n    });\n    const ddY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 2,\n    });\n    const yThreshold = Math.max(noiseLevel, minY + (maxY - minY) * minMaxRatio);\n    const dX = x[1] - x[0];\n    const peakData = { x, y, yData, dY, ddY, dX, yThreshold };\n    let peaks = [];\n    if (peakDetectionAlgorithm === 'first') {\n        peaks = firstDerivative(peakData);\n    }\n    else if (peakDetectionAlgorithm === 'second') {\n        peaks = secondDerivative(peakData);\n    }\n    else {\n        peaks = autoAlgorithm(peakData);\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    peaks.forEach((peak) => {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    });\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\n/**\n * Calculate the height of the gaussian function of a specific width (fwhm) at a speicifc\n * x position (the gaussian is centered on x=0)\n * @param x\n * @param fwhm\n * @returns y\n */\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return fwhm ** 2 / (4 * x ** 2 + fwhm ** 2);\n};\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { ROOT_THREE } from '../../../util/constants';\n/**\n * This shape is a linear combination of rational function (n|n+2), for n = 0 (lorentzian function) and n = 2\n * the parameter that combines those two functions is `gamma` and it is called the kurtosis parameter, it is an\n * implementation of generalized lorentzian shape published by Stanislav Sykora in the SMASH 2010. DOI:10.3247/SL3nmr10.006\n * @link http://www.ebyte.it/stan/Talk_ML_UserMeeting_SMASH_2010_GeneralizedLorentzian.html\n */\nexport class GeneralizedLorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500, gamma = 0.5 } = options;\n        this.fwhm = fwhm;\n        this.gamma = gamma;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return generalizedLorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return generalizedLorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return generalizedLorentzianFct(x, this.fwhm, this.gamma);\n    }\n    getArea(height = 1) {\n        return getGeneralizedLorentzianArea({\n            fwhm: this.fwhm,\n            height,\n            gamma: this.gamma,\n        });\n    }\n    getFactor(area) {\n        return getGeneralizedLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getGeneralizedLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        const { gamma, fwhm } = this;\n        return calculateGeneralizedLorentzianHeight({ fwhm, area, gamma });\n    }\n    getParameters() {\n        return ['fwhm', 'gamma'];\n    }\n}\nexport const calculateGeneralizedLorentzianHeight = ({ fwhm = 1, gamma = 1, area = 1, }) => {\n    return (area / fwhm / (3.14159 - 0.420894 * gamma)) * 2;\n};\n/**\n * expression of integral generated by Mathematica of the function\n */\nexport const getGeneralizedLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1, gamma = 1 } = options;\n    return (height * fwhm * (3.14159 - 0.420894 * gamma)) / 2;\n};\nexport const generalizedLorentzianFct = (x, fwhm, gamma) => {\n    const u = ((2 * x) / fwhm) ** 2;\n    return (1 - gamma) / (1 + u) + (gamma * (1 + u / 2)) / (1 + u + u ** 2);\n};\nexport const generalizedLorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const generalizedLorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getGeneralizedLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getGeneralizedLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500, gamma = 1 } = shape;\n    let { length, factor = getGeneralizedLorentzianFactor(), height = calculateGeneralizedLorentzianHeight({ fwhm, area: 1, gamma }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = generalizedLorentzianFct(i - center, fwhm, gamma) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=GeneralizedLorentzian.js.map","import { GAUSSIAN_EXP_FACTOR } from '../../../util/constants';\nimport { getGaussianFactor, gaussianFwhmToWidth, gaussianWidthToFWHM, } from '../../1d/gaussian/Gaussian';\nexport class Gaussian2D {\n    constructor(options = {}) {\n        let { fwhm = 20, sd } = options;\n        fwhm = ensureFWHM2D(fwhm, sd);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n    fct(x, y) {\n        return gaussian2DFct(x, y, this.fwhmX, this.fwhmY);\n    }\n    getData(options = {}) {\n        return getGaussian2DData({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        }, options);\n    }\n    getFactor(volume = 1) {\n        return getGaussianFactor(volume);\n    }\n    getVolume(height = calculateGaussian2DHeight({\n        fwhm: { x: this.fwhmX, y: this.fwhmY },\n        volume: 1,\n    })) {\n        return getGaussian2DVolume({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n            height,\n        });\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fwhmToWidth(fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    calculateHeight(volume = 1) {\n        return calculateGaussian2DHeight({\n            volume,\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        });\n    }\n    set fwhm(fwhm) {\n        fwhm = ensureXYNumber(fwhm);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n}\nexport const gaussian2DFct = (x, y, xFWHM, yFWHM) => {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * (Math.pow(x / xFWHM, 2) + Math.pow(y / yFWHM, 2)));\n};\nexport const getGaussian2DData = (shape, options = {}) => {\n    let { fwhm = 50, sd } = shape;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    let { factor = getGaussianFactor(), length = { x: 0, y: 0 }, height = calculateGaussian2DHeight({ fwhm, volume: 1 }), } = options;\n    factor = ensureXYNumber(factor);\n    length = ensureXYNumber(length);\n    for (const axis of ['x', 'y']) {\n        if (!length[axis]) {\n            length[axis] = Math.min(Math.ceil(fwhm[axis] * factor[axis]), Math.pow(2, 25) - 1);\n            if (length[axis] % 2 === 0)\n                length[axis]++;\n        }\n    }\n    const xCenter = (length.x - 1) / 2;\n    const yCenter = (length.y - 1) / 2;\n    const data = new Array(length.x);\n    for (let i = 0; i < length.x; i++) {\n        data[i] = new Float64Array(length.y);\n    }\n    for (let i = 0; i < length.x; i++) {\n        for (let j = 0; j < length.y; j++) {\n            data[i][j] =\n                gaussian2DFct(i - xCenter, j - yCenter, fwhm.x, fwhm.y) * height;\n        }\n    }\n    return data;\n};\nexport const calculateGaussian2DHeight = (options = {}) => {\n    let { volume = 1, fwhm = 50, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (volume * Math.LN2 * 4) / (Math.PI * fwhm.y * fwhm.x);\n};\nexport const getGaussian2DVolume = (options = {}) => {\n    let { fwhm = 50, height = 1, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (height * Math.PI * fwhm.y * fwhm.x) / Math.LN2 / 4;\n};\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\nfunction ensureFWHM2D(fwhm, sd) {\n    if (sd !== undefined) {\n        let sdObject = ensureXYNumber(sd);\n        return {\n            x: gaussianWidthToFWHM(2 * sdObject.x),\n            y: gaussianWidthToFWHM(2 * sdObject.y),\n        };\n    }\n    else if (fwhm !== undefined) {\n        return ensureXYNumber(fwhm);\n    }\n    else {\n        throw new Error('ensureFWHM2D must have either fwhm or sd defined');\n    }\n}\n//# sourceMappingURL=Gaussian2D.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { GeneralizedLorentzian } from './generalizedLorentzian/GeneralizedLorentzian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        case 'generalizedLorentzian':\n            return new GeneralizedLorentzian(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","import { Gaussian2D } from './gaussian2D/Gaussian2D';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape2D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian2D(shape);\n        default: {\n            const unHandled = kind;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape2D.js.map","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param internalPeaks\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        return (x) => {\n            let totalY = 0;\n            for (const peak of internalPeaks) {\n                const peakX = parameters[peak.fromIndex];\n                const y = parameters[peak.fromIndex + 1];\n                for (let i = 2; i < parameters.length; i++) {\n                    const shapeFctKey = peak.parameters[i];\n                    peak.shapeFct[shapeFctKey] = parameters[peak.fromIndex + i];\n                }\n                totalY += y * peak.shapeFct.fct(x - peakX);\n            }\n            return totalY;\n        };\n    };\n}\n//# sourceMappingURL=getSumOfShapes.js.map","/**\n * Asserts that value is truthy.\n *\n * @param value - Value to check.\n * @param message - Optional error message to throw.\n */\nexport function assert(value, message) {\n    if (!value) {\n        throw new Error(message ? message : 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","export const DefaultParameters = {\n    x: {\n        init: (peak) => peak.x,\n        min: (peak, peakShape) => peak.x - peakShape.fwhm * 2,\n        max: (peak, peakShape) => peak.x + peakShape.fwhm * 2,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    y: {\n        init: (peak) => peak.y,\n        min: (peak) => (peak.y < 0 ? -1.1 : 0),\n        max: (peak) => (peak.y < 0 ? 0 : 1.1),\n        gradientDifference: () => 1e-3,\n    },\n    fwhm: {\n        init: (peak, peakShape) => peakShape.fwhm,\n        min: (peak, peakShape) => peakShape.fwhm * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    mu: {\n        init: (peak, peakShape) => peakShape.mu,\n        min: () => 0,\n        max: () => 1,\n        gradientDifference: () => 0.01,\n    },\n    gamma: {\n        init: (peak, peakShape) => peakShape.gamma || 0.5,\n        min: () => -1,\n        max: () => 2,\n        gradientDifference: () => 0.01,\n    },\n};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from \"../assert.js\";\nimport { DefaultParameters } from \"./DefaultParameters.js\";\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param minMaxY\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, minMaxY, options = {}) {\n    let index = 0;\n    const internalPeaks = [];\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedPeaks = peaks.map((peak) => {\n        return {\n            ...peak,\n            y: (peak.y - shiftValue) / minMaxY.range,\n        };\n    });\n    for (const peak of normalizedPeaks) {\n        const { id, shape = options.shape ? options.shape : { kind: 'gaussian' } } = peak;\n        const shapeFct = getShape1D(shape);\n        const parameters = ['x', 'y', ...shapeFct.getParameters()];\n        const propertiesValues = {\n            min: [],\n            max: [],\n            init: [],\n            gradientDifference: [],\n        };\n        for (const parameter of parameters) {\n            for (const property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak?.parameters?.[parameter]?.[property];\n                if (propertyValue) {\n                    propertyValue = getNormalizedValue(propertyValue, parameter, property, minMaxY, options.baseline);\n                    propertiesValues[property].push(propertyValue);\n                    continue;\n                }\n                // check if there are some global option, it could be a number or a callback\n                let generalParameterValue = options?.parameters?.[parameter]?.[property];\n                if (generalParameterValue) {\n                    if (typeof generalParameterValue === 'number') {\n                        generalParameterValue = getNormalizedValue(generalParameterValue, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(generalParameterValue);\n                        continue;\n                    }\n                    else {\n                        let value = generalParameterValue(peak);\n                        value = getNormalizedValue(value, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(value);\n                        continue;\n                    }\n                }\n                // we just need to take the default parameters\n                assert(DefaultParameters[parameter], `No default parameter for ${parameter}`);\n                const defaultParameterValues = DefaultParameters[parameter][property];\n                //@ts-expect-error should never happen\n                propertiesValues[property].push(defaultParameterValues(peak, shapeFct));\n            }\n        }\n        const fromIndex = index;\n        const toIndex = fromIndex + parameters.length - 1;\n        index += toIndex - fromIndex + 1;\n        internalPeaks.push({\n            id,\n            shape,\n            shapeFct,\n            parameters,\n            propertiesValues,\n            fromIndex,\n            toIndex,\n        });\n    }\n    return internalPeaks;\n}\nfunction getNormalizedValue(value, parameter, property, minMaxY, baseline) {\n    if (parameter === 'y') {\n        if (property === 'gradientDifference') {\n            return value;\n        }\n        else {\n            return baseline !== undefined\n                ? (value - baseline) / minMaxY.range\n                : (value - minMaxY.min) / minMaxY.range;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=getInternalPeaks.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, options) {\n    const { timeout, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    let { minValues, maxValues } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('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    if (!(initialValues && initialValues.length > 0)) {\n        throw new Error('The initialValues option is mandatory and must be an array');\n    }\n    const parameters = Array.from(initialValues);\n    const 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    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    const gradientDifferenceArray = getGradientDifferenceArray(gradientDifference, parameters);\n    const filler = getFiller(weights, data.x.length);\n    const checkTimeout = getCheckTimeout(timeout);\n    const weightSquare = Array.from({ length: data.x.length }, (_, i) => filler(i));\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: gradientDifferenceArray,\n        improvementThreshold,\n    };\n}\nfunction getGradientDifferenceArray(gradientDifference, parameters) {\n    if (typeof gradientDifference === 'number') {\n        return new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        const parLen = parameters.length;\n        if (gradientDifference.length !== parLen) {\n            return new Array(parLen).fill(gradientDifference[0]);\n        }\n        return Array.from(gradientDifference);\n    }\n    throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n}\nfunction getFiller(weights, dataLength) {\n    if (typeof weights === 'number') {\n        const value = 1 / weights ** 2;\n        return () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < dataLength) {\n            const value = 1 / weights[0] ** 2;\n            return () => value;\n        }\n        return (i) => 1 / weights[i] ** 2;\n    }\n    throw new Error('weights should be a number or array with length equal to the number of data points');\n}\nfunction getCheckTimeout(timeout) {\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        const endTime = Date.now() + timeout * 1000;\n        return () => Date.now() > endTime;\n    }\n    else {\n        return () => false;\n    }\n}\n//# sourceMappingURL=check_options.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameters - Array of current parameter values\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weightSquare - Square of weights (must be same length as data.x)\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += (data.y[i] - func(data.x[i])) ** 2 / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=error_calculation.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @param data Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n * @param params - Array of previous parameter values\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param paramFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    const ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        const funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            const funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradient_function.js.map","import { inverse, Matrix } from 'ml-matrix';\nimport gradientFunction from \"./gradient_function.js\";\n/**\n * Matrix function over the samples\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    const ans = new Matrix(m, 1);\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 * Iteration for Levenberg-Marquardt\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param params - Array of previous parameter values\n * @param damping - Levenberg-Marquardt parameter\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weights - scale the gradient and residual error by weights\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights) {\n    const identity = Matrix.eye(params.length, params.length, damping);\n    const func = parameterizedFunction(params);\n    const 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    const gradientFunc = gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    const residualError = matrixFunction(data, evaluatedData);\n    const inverseMatrix = inverse(identity.add(gradientFunc.mmul(gradientFunc.transpose().scale('row', { scale: weights }))));\n    const jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    const perturbations = inverseMatrix.mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import checkOptions from \"./check_options.js\";\nimport errorCalculation from \"./error_calculation.js\";\nimport step from \"./step.js\";\n/**\n * Curve fitting algorithm\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameterizedFunction - Takes an array of parameters and returns a function with the independent variable as its sole argument\n * @param options - Options object\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options) {\n    const checkedOptions = checkOptions(data, options);\n    const { checkTimeout, minValues, maxValues, parameters, weightSquare, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkedOptions;\n    let damping = checkedOptions.damping;\n    let error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n    let optimalError = error;\n    let optimalParameters = parameters.slice();\n    let converged = error <= errorTolerance;\n    let iteration = 0;\n    for (; iteration < maxIterations && !converged; iteration++) {\n        const previousError = error;\n        const { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        const improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=levenberg_marquardt.js.map","/**\n * Preparata, F. P., & Shamos, M. I. (2012). Computational geometry: an introduction. Springer Science & Business Media.\n * @param {Array} x - The array with x coordinates of the points.\n * @param {Array} y - The array with y coordinates of the points.\n * @return {Array} The indices of the points of anticlockwise lower convex hull\n * @private\n */\nexport default function antiLowerConvexHull(x, y) {\n  if (x.length !== y.length) {\n    throw new RangeError('X and Y vectors has different dimensions');\n  }\n\n  const nbPoints = x.length - 1;\n  if (nbPoints === 0) return [0];\n  if (nbPoints === 1) return [0, 1];\n\n  let currentPoint = 0;\n  let result = new Array(x.length).fill(true);\n  while (true) {\n    const a = currentPoint;\n    const b = moveOn(currentPoint, nbPoints, result);\n    const c = moveOn(moveOn(currentPoint, nbPoints, result), nbPoints, result);\n\n    const det =\n      x[c] * (y[a] - y[b]) + x[a] * (y[b] - y[c]) + x[b] * (y[c] - y[a]);\n\n    const leftTurn = det >= 0;\n\n    if (leftTurn) {\n      currentPoint = b;\n    } else {\n      result[b] = false;\n      currentPoint = moveBack(currentPoint, nbPoints, result);\n    }\n    if (c === nbPoints) break;\n  }\n\n  return result\n    .map((item, index) => (item === false ? false : index))\n    .filter((item) => item !== false);\n}\n\n/**\n * @param {number} currentPoint - The index of the current point to make the move\n * @param {number} nbPoints - The total number of points in the array\n * @param {Array} vector - The array with the points\n * @return {number} the index of the point after the move\n * @private\n */\n\nfunction moveBack(currentPoint, nbPoints, vector) {\n  let counter = currentPoint - 1;\n  while (vector[counter] === false) counter--;\n  return currentPoint === 0 ? nbPoints : counter;\n}\n\nfunction moveOn(currentPoint, nbPoints, vector) {\n  let counter = currentPoint + 1;\n  while (vector[counter] === false) counter++;\n  return currentPoint === nbPoints ? 0 : counter;\n}\n","import { xNorm, xMaxValue, xMinValue } from 'ml-spectra-processing';\n\nimport antiLowerConvexHull from './util/antiLowerConvexHull';\n\n/**\n * Performs a global optimization of required parameters\n * It will return an object containing:\n * - `minFunctionValue`: The minimum value found for the objetive function\n * - `optima`: Array of Array of values for all the variables where the function reach its minimum value\n * - `iterations`: Number of iterations performed in the process\n * - `finalState`: Internal state allowing to continue optimization (initialState)\n * @param {function} objectiveFunction Function to evaluate. It should accept an array of variables\n * @param {Array} lowerBoundaries Array containing for each variable the lower boundary\n * @param {Array} upperBoundaries Array containing for each variable the higher boundary\n * @param {Object} [options={}]\n * @param {number} [options.iterations] - Number of iterations.\n * @param {number} [options.epsilon] - Tolerance to choose best current value.\n * @param {number} [options.tolerance] - Minimum tollerance of the function.\n * @param {number} [options.tolerance2] - Minimum tollerance of the function.\n * @param {Object} [options.initialState={}}] - finalState of previous optimization.\n * @return {Object} {finalState, iterations, minFunctionValue}\n * */\n\nexport default function direct(\n  objectiveFunction,\n  lowerBoundaries,\n  upperBoundaries,\n  options = {},\n) {\n  const {\n    iterations = 50,\n    epsilon = 1e-4,\n    tolerance = 1e-16,\n    tolerance2 = 1e-12,\n    initialState = {},\n  } = options;\n\n  if (\n    objectiveFunction === undefined ||\n    lowerBoundaries === undefined ||\n    upperBoundaries === undefined\n  ) {\n    throw new RangeError('There is something undefined');\n  }\n\n  lowerBoundaries = new Float64Array(lowerBoundaries);\n  upperBoundaries = new Float64Array(upperBoundaries);\n\n  if (lowerBoundaries.length !== upperBoundaries.length) {\n    throw new Error(\n      'Lower bounds and Upper bounds for x are not of the same length',\n    );\n  }\n\n  //-------------------------------------------------------------------------\n  //                        STEP 1. Initialization\n  //-------------------------------------------------------------------------\n  let n = lowerBoundaries.length;\n  let diffBorders = upperBoundaries.map((x, i) => x - lowerBoundaries[i]);\n\n  let {\n    numberOfRectangles = 0,\n    totalIterations = 0,\n    unitaryCoordinates = [new Float64Array(n).fill(0.5)],\n    middlePoint = new Float64Array(n).map((value, index) => {\n      return (\n        lowerBoundaries[index] +\n        unitaryCoordinates[0][index] * diffBorders[index]\n      );\n    }),\n    bestCurrentValue = objectiveFunction(middlePoint),\n    fCalls = 1,\n    smallerDistance = 0,\n    edgeSizes = [new Float64Array(n).fill(0.5)],\n    diagonalDistances = [Math.sqrt(n * 0.5 ** 2)],\n    functionValues = [bestCurrentValue],\n    differentDistances = diagonalDistances,\n    smallerValuesByDistance = [bestCurrentValue],\n    choiceLimit = undefined,\n  } = initialState;\n  if (\n    initialState.originalCoordinates &&\n    initialState.originalCoordinates.length > 0\n  ) {\n    bestCurrentValue = xMinValue(functionValues);\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n    );\n\n    unitaryCoordinates = initialState.originalCoordinates.slice();\n    for (let j = 0; j < unitaryCoordinates.length; j++) {\n      for (let i = 0; i < lowerBoundaries.length; i++) {\n        unitaryCoordinates[j][i] =\n          (unitaryCoordinates[j][i] - lowerBoundaries[i]) / diffBorders[i];\n      }\n    }\n  }\n\n  let iteration = 0;\n  //-------------------------------------------------------------------------\n  //                          Iteration loop\n  //-------------------------------------------------------------------------\n\n  while (iteration < iterations) {\n    //----------------------------------------------------------------------\n    //  STEP 2. Identify the set S of all potentially optimal rectangles\n    //----------------------------------------------------------------------\n\n    let S1 = [];\n    let idx = differentDistances.findIndex(\n      // eslint-disable-next-line no-loop-func\n      (e) => e === diagonalDistances[smallerDistance],\n    );\n    let counter = 0;\n    for (let i = idx; i < differentDistances.length; i++) {\n      for (let f = 0; f < functionValues.length; f++) {\n        if (\n          (functionValues[f] === smallerValuesByDistance[i]) &\n          (diagonalDistances[f] === differentDistances[i])\n        ) {\n          S1[counter++] = f;\n        }\n      }\n    }\n\n    let optimumValuesIndex, S3;\n    if (differentDistances.length - idx > 1) {\n      let a1 = diagonalDistances[smallerDistance];\n      let b1 = functionValues[smallerDistance];\n      let a2 = differentDistances[differentDistances.length - 1];\n      let b2 = smallerValuesByDistance[differentDistances.length - 1];\n      let slope = (b2 - b1) / (a2 - a1);\n      let constant = b1 - slope * a1;\n      let S2 = new Uint32Array(counter);\n      counter = 0;\n      for (let i = 0; i < S2.length; i++) {\n        let j = S1[i];\n        if (\n          functionValues[j] <=\n          slope * diagonalDistances[j] + constant + tolerance2\n        ) {\n          S2[counter++] = j;\n        }\n      }\n\n      let xHull = [];\n      let yHull = [];\n      for (let i = 0; i < counter; i++) {\n        xHull.push(diagonalDistances[S2[i]]);\n        yHull.push(functionValues[S2[i]]);\n      }\n\n      let lowerIndexHull = antiLowerConvexHull(xHull, yHull);\n\n      S3 = [];\n      for (let i = 0; i < lowerIndexHull.length; i++) {\n        S3.push(S2[lowerIndexHull[i]]);\n      }\n    } else {\n      S3 = S1.slice(0, counter);\n    }\n    optimumValuesIndex = S3;\n    //--------------------------------------------------------------\n    // STEPS 3,5: Select any rectangle j in S\n    //--------------------------------------------------------------\n    for (let k = 0; k < optimumValuesIndex.length; k++) {\n      let j = optimumValuesIndex[k];\n      let largerSide = xMaxValue(edgeSizes[j]);\n      let largeSidesIndex = new Uint32Array(edgeSizes[j].length);\n      counter = 0;\n      for (let i = 0; i < edgeSizes[j].length; i++) {\n        if (Math.abs(edgeSizes[j][i] - largerSide) < tolerance) {\n          largeSidesIndex[counter++] = i;\n        }\n      }\n      let delta = (2 * largerSide) / 3;\n      let bestFunctionValues = [];\n      for (let r = 0; r < counter; r++) {\n        let i = largeSidesIndex[r];\n        let firstMiddleCenter = unitaryCoordinates[j].slice();\n        let secondMiddleCenter = unitaryCoordinates[j].slice();\n        firstMiddleCenter[i] += delta;\n        secondMiddleCenter[i] -= delta;\n        let firstMiddleValue = new Float64Array(firstMiddleCenter.length);\n        let secondMiddleValue = new Float64Array(secondMiddleCenter.length);\n        for (let i = 0; i < firstMiddleCenter.length; i++) {\n          firstMiddleValue[i] =\n            lowerBoundaries[i] + firstMiddleCenter[i] * diffBorders[i];\n          secondMiddleValue[i] =\n            lowerBoundaries[i] + secondMiddleCenter[i] * diffBorders[i];\n        }\n        let firstMinValue = objectiveFunction(firstMiddleValue);\n        let secondMinValue = objectiveFunction(secondMiddleValue);\n        fCalls += 2;\n        bestFunctionValues.push({\n          minValue: Math.min(firstMinValue, secondMinValue),\n          index: r,\n        });\n        // [Math.min(firstMinValue, secondMinValue), r];\n        unitaryCoordinates.push(firstMiddleCenter, secondMiddleCenter);\n        functionValues.push(firstMinValue, secondMinValue);\n      }\n\n      let b = bestFunctionValues.sort((a, b) => a.minValue - b.minValue);\n      for (let r = 0; r < counter; r++) {\n        let u = largeSidesIndex[b[r].index];\n        let ix1 = numberOfRectangles + 2 * (b[r].index + 1) - 1;\n        let ix2 = numberOfRectangles + 2 * (b[r].index + 1);\n        edgeSizes[j][u] = delta / 2;\n        edgeSizes[ix1] = edgeSizes[j].slice();\n        edgeSizes[ix2] = edgeSizes[j].slice();\n        diagonalDistances[j] = xNorm(edgeSizes[j]);\n        diagonalDistances[ix1] = diagonalDistances[j];\n        diagonalDistances[ix2] = diagonalDistances[j];\n      }\n      numberOfRectangles += 2 * counter;\n    }\n\n    //--------------------------------------------------------------\n    //                  Update\n    //--------------------------------------------------------------\n\n    bestCurrentValue = xMinValue(functionValues);\n\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n      iteration,\n    );\n\n    differentDistances = Array.from(new Set(diagonalDistances));\n    differentDistances = differentDistances.sort((a, b) => a - b);\n\n    smallerValuesByDistance = [];\n    for (let i = 0; i < differentDistances.length; i++) {\n      let minIndex;\n      let minValue = Number.POSITIVE_INFINITY;\n      for (let k = 0; k < diagonalDistances.length; k++) {\n        if (diagonalDistances[k] === differentDistances[i]) {\n          if (functionValues[k] < minValue) {\n            minValue = functionValues[k];\n            minIndex = k;\n          }\n        }\n      }\n      smallerValuesByDistance.push(functionValues[minIndex]);\n    }\n\n    let currentMin = [];\n    for (let j = 0; j < functionValues.length; j++) {\n      if (functionValues[j] === bestCurrentValue) {\n        let temp = [];\n        for (let i = 0; i < lowerBoundaries.length; i++) {\n          temp.push(\n            lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i],\n          );\n        }\n        currentMin.push(temp);\n      }\n    }\n    iteration += 1;\n  }\n  //--------------------------------------------------------------\n  //                  Saving results\n  //--------------------------------------------------------------\n\n  let result = {};\n  result.minFunctionValue = bestCurrentValue;\n  result.iterations = iteration;\n  let originalCoordinates = [];\n  for (let j = 0; j < numberOfRectangles + 1; j++) {\n    let pair = [];\n    for (let i = 0; i < lowerBoundaries.length; i++) {\n      pair.push(lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i]);\n    }\n    originalCoordinates.push(pair);\n  }\n\n  result.finalState = {\n    numberOfRectangles,\n    totalIterations: (totalIterations += iterations),\n    originalCoordinates,\n    middlePoint,\n    fCalls,\n    smallerDistance,\n    edgeSizes,\n    diagonalDistances,\n    functionValues,\n    differentDistances,\n    smallerValuesByDistance,\n    choiceLimit,\n  };\n\n  let minimizer = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    if (functionValues[i] === bestCurrentValue) {\n      minimizer.push(originalCoordinates[i]);\n    }\n  }\n\n  result.optima = minimizer;\n  return result;\n}\n\nfunction getMinIndex(\n  functionValues,\n  diagonalDistances,\n  choiceLimit,\n  bestCurrentValue,\n) {\n  let item = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    item[i] =\n      Math.abs(functionValues[i] - (bestCurrentValue + choiceLimit)) /\n      diagonalDistances[i];\n  }\n  const min = xMinValue(item);\n  let result = item.findIndex((x) => x === min);\n  return result;\n}\n","import direct from 'ml-direct';\nexport function directOptimization(data, sumOfShapes, options) {\n    const { minValues, maxValues, maxIterations, epsilon, tolerance, tolerance2, initialState, } = options;\n    const objectiveFunction = getObjectiveFunction(data, sumOfShapes);\n    const result = direct(objectiveFunction, \n    // direct internally converts ArrayLike to Float64Array,\n    // so we can safely cast minValues and maxValues to number[]\n    minValues, maxValues, {\n        iterations: maxIterations,\n        epsilon,\n        tolerance,\n        tolerance2,\n        initialState,\n    });\n    const { optima } = result;\n    return {\n        parameterError: result.minFunctionValue,\n        iterations: result.iterations,\n        parameterValues: optima[0],\n    };\n}\nfunction getObjectiveFunction(data, sumOfShapes) {\n    const { x, y } = data;\n    const nbPoints = x.length;\n    return (parameters) => {\n        const fct = sumOfShapes(parameters);\n        let error = 0;\n        for (let i = 0; i < nbPoints; i++) {\n            error += (y[i] - fct(x[i])) ** 2;\n        }\n        return error;\n    };\n}\n//# sourceMappingURL=directOptimization.js.map","import { levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport { directOptimization } from \"./wrappers/directOptimization.js\";\n/** Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    const { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        case 'direct': {\n            return {\n                algorithm: directOptimization,\n                optimizationOptions: {\n                    iterations: 20,\n                    epsilon: 1e-4,\n                    tolerance: 1e-16,\n                    tolerance2: 1e-12,\n                    initialState: {},\n                    ...options,\n                },\n            };\n        }\n        default:\n            throw new Error(`Unknown fitting algorithm`);\n    }\n}\n//# sourceMappingURL=selectMethod.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getSumOfShapes } from \"./shapes/getSumOfShapes.js\";\nimport { getInternalPeaks } from \"./util/internalPeaks/getInternalPeaks.js\";\nimport { selectMethod } from \"./util/selectMethod.js\";\n/**\n * Fits a set of points to the sum of a set of bell functions.\n *\n * @param data - An object containing the x and y data to be fitted.\n * @param peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Options for optimize\n * @returns - An object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n    // rescale data\n    const temp = xMinMaxValues(data.y);\n    const minMaxY = { ...temp, range: temp.max - temp.min };\n    const internalPeaks = getInternalPeaks(peaks, minMaxY, options);\n    // need to rescale what is related to Y\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedY = new Float64Array(data.y.length);\n    for (let i = 0; i < data.y.length; i++) {\n        normalizedY[i] = (data.y[i] - shiftValue) / minMaxY.range;\n    }\n    const nbParams = internalPeaks[internalPeaks.length - 1].toIndex + 1;\n    const minValues = new Float64Array(nbParams);\n    const maxValues = new Float64Array(nbParams);\n    const initialValues = new Float64Array(nbParams);\n    const gradientDifferences = new Float64Array(nbParams);\n    let index = 0;\n    for (const peak of internalPeaks) {\n        for (let i = 0; i < peak.parameters.length; i++) {\n            minValues[index] = peak.propertiesValues.min[i];\n            maxValues[index] = peak.propertiesValues.max[i];\n            initialValues[index] = peak.propertiesValues.init[i];\n            gradientDifferences[index] = peak.propertiesValues.gradientDifference[i];\n            index++;\n        }\n    }\n    const { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    const sumOfShapes = getSumOfShapes(internalPeaks);\n    const fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapes, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    const fittedValues = fitted.parameterValues;\n    const newPeaks = [];\n    for (const peak of internalPeaks) {\n        const { id, shape, parameters, fromIndex } = peak;\n        let newPeak = { x: 0, y: 0, shape };\n        if (id) {\n            newPeak = { ...newPeak, id };\n        }\n        newPeak.x = fittedValues[fromIndex];\n        newPeak.y = fittedValues[fromIndex + 1] * minMaxY.range + shiftValue;\n        for (let i = 2; i < parameters.length; i++) {\n            //@ts-expect-error should be fixed once\n            newPeak.shape[parameters[i]] = fittedValues[fromIndex + i];\n        }\n        newPeaks.push(newPeak);\n    }\n    return {\n        error: fitted.parameterError,\n        iterations: fitted.iterations,\n        peaks: newPeaks,\n    };\n}\n//# sourceMappingURL=index.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * add missing property if it does not exist in the peak,\n * if shape exists but fwhm doesn't, it will be calculated from peak.width\n */\nexport function addMissingShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = structuredClone(peaks) } = options;\n    const shapeInstance = getShape1D(shape);\n    return output.map((peak) => {\n        if (hasShape(peak)) {\n            if (!('fwhm' in peak.shape)) {\n                const shapeInstance = getShape1D(peak.shape);\n                peak.shape.fwhm = shapeInstance.widthToFWHM(peak.width);\n            }\n            return peak;\n        }\n        return {\n            ...peak,\n            shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n        };\n    });\n}\nfunction hasShape(peak) {\n    return 'shape' in peak;\n}\n//# sourceMappingURL=addMissingShape.js.map","/**\n * Group peaks based on factor\n * In order to group peaks we only need the x and width value. This means that\n * in the current implementation we don't take into account the asymmetry of peaks\n */\nexport function groupPeaks(peaks, options = {}) {\n    if (peaks?.length === 0)\n        return [];\n    const { factor = 1 } = options;\n    peaks = JSON.parse(JSON.stringify(peaks));\n    peaks.sort((a, b) => a.x - b.x);\n    let previousPeak = peaks[0];\n    let currentGroup = [previousPeak];\n    const groups = [currentGroup];\n    for (let i = 1; i < peaks.length; i++) {\n        const peak = peaks[i];\n        if ((peak.x - previousPeak.x) / ((peak.width + previousPeak.width) / 2) <=\n            factor) {\n            currentGroup.push(peak);\n        }\n        else {\n            currentGroup = [peak];\n            groups.push(currentGroup);\n        }\n        previousPeak = peak;\n    }\n    return groups;\n}\n//# sourceMappingURL=groupPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { optimize } from 'ml-spectra-fitting';\nimport { xGetFromToIndex } from 'ml-spectra-processing';\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { groupPeaks } from \"../utils/groupPeaks.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n */\nexport function optimizePeaksWithLogs(data, peakList, options = {}) {\n    const { fromTo = {}, baseline, shape = { kind: 'gaussian' }, groupingFactor = 1, factorLimits = 2, optimization = {\n        kind: 'lm',\n        options: {\n            timeout: 10,\n        },\n    }, } = options;\n    /*\n    The optimization algorithm will take some group of peaks.\n    We can not simply optimize everything because there would be too many variables to optimize\n    and it would be too time consuming.\n  */\n    const groups = groupPeaks(peakList, { factor: groupingFactor });\n    const logs = [];\n    const results = [];\n    groups.forEach((peakGroup) => {\n        const start = Date.now();\n        // In order to make optimization we will add fwhm and shape on all the peaks\n        const peaks = addMissingShape(peakGroup, { shape });\n        const firstPeak = peaks[0];\n        const lastPeak = peaks[peaks.length - 1];\n        const { from = firstPeak.x - firstPeak.width * factorLimits, to = lastPeak.x + lastPeak.width * factorLimits, } = fromTo;\n        const { fromIndex, toIndex } = xGetFromToIndex(data.x, { from, to });\n        const x = data.x instanceof Float64Array\n            ? data.x.subarray(fromIndex, toIndex)\n            : data.x.slice(fromIndex, toIndex);\n        const y = data.y instanceof Float64Array\n            ? data.y.subarray(fromIndex, toIndex)\n            : data.y.slice(fromIndex, toIndex);\n        const log = {\n            range: { from, to },\n            parameters: optimization,\n            groupSize: peakGroup.length,\n            time: Date.now() - start,\n        };\n        if (x.length > 5) {\n            const { iterations, error, peaks: optimizedPeaks, } = optimize({ x, y }, peaks, {\n                shape,\n                baseline,\n                optimization,\n            });\n            for (let i = 0; i < peaks.length; i++) {\n                results.push({\n                    ...optimizedPeaks[i],\n                    width: getShape1D(peaks[i].shape).fwhmToWidth(optimizedPeaks[i].shape.fwhm),\n                });\n            }\n            logs.push({\n                ...log,\n                iterations,\n                error,\n                message: 'optimization successful',\n            });\n        }\n        else {\n            results.push(...peaks);\n            logs.push({\n                ...log,\n                iterations: 0,\n                message: 'x length too small for optimization',\n            });\n        }\n    });\n    return { logs, optimizedPeaks: results };\n}\n//# sourceMappingURL=optimizePeaksWithLogs.js.map","import { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n */\nexport function optimizePeaks(data, peakList, options = {}) {\n    return optimizePeaksWithLogs(data, peakList, options).optimizedPeaks;\n}\n//# sourceMappingURL=optimizePeaks.js.map","export function addMissingIDs(peaks, options = {}) {\n    const { output = structuredClone(peaks) } = options;\n    for (const peak of output) {\n        if (!('id' in peak)) {\n            peak.id = crypto.randomUUID();\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=addMissingIDs.js.map","import { addMissingIDs } from \"../utils/addMissingIDs.js\";\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\nexport function joinBroadPeaks(peakList, options = {}) {\n    const { shape = { kind: 'gaussian' }, optimization = { kind: 'lm', options: { timeout: 10 } }, broadWidth = 0.25, broadRatio = 0.0025, } = options;\n    let max = 0;\n    let maxI = 0;\n    let count = 1;\n    const broadLines = [];\n    if (peakList.length < 2) {\n        return addMissingIDs(addMissingShape(peakList.map(getGSDPeakOptimizedStructure), { shape }));\n    }\n    let maxDdy = peakList[0].ddY;\n    for (let i = 1; i < peakList.length; i++) {\n        if (Math.abs(peakList[i].ddY) > maxDdy)\n            maxDdy = Math.abs(peakList[i].ddY);\n    }\n    const newPeaks = [];\n    for (const peak of peakList) {\n        if (Math.abs(peak.ddY) <= broadRatio * maxDdy) {\n            broadLines.push(peak);\n        }\n        else {\n            newPeaks.push(getGSDPeakOptimizedStructure(peak));\n        }\n    }\n    //@ts-expect-error Push a feke peak\n    broadLines.push({ x: Number.MAX_VALUE, y: 0 });\n    let candidates = {\n        x: [broadLines[0].x],\n        y: [broadLines[0].y],\n    };\n    let indexes = [0];\n    for (let i = 1; i < broadLines.length; i++) {\n        if (Math.abs(broadLines[i - 1].x - broadLines[i].x) < broadWidth) {\n            candidates.x.push(broadLines[i].x);\n            candidates.y.push(broadLines[i].y);\n            if (broadLines[i].y > max) {\n                max = broadLines[i].y;\n                maxI = i;\n            }\n            indexes.push(i);\n            count++;\n        }\n        else {\n            if (count > 2) {\n                const initialWidth = Math.abs(candidates.x[candidates.x.length - 1] - candidates.x[0]);\n                const { logs, optimizedPeaks } = optimizePeaksWithLogs(candidates, [\n                    {\n                        id: crypto.randomUUID(),\n                        x: broadLines[maxI].x,\n                        y: max,\n                        width: initialWidth,\n                        parameters: {\n                            width: { max: initialWidth * 4, min: initialWidth * 0.8 },\n                        },\n                    },\n                ], { shape: { kind: 'pseudoVoigt' }, optimization });\n                [max, maxI] = [0, 0];\n                const log = logs.find((l) => l.message === 'optimization successful');\n                if (log) {\n                    const { error } = log;\n                    if (error < 0.2) {\n                        newPeaks.push(optimizedPeaks[0]);\n                    }\n                    else {\n                        pushBackPeaks(broadLines, indexes, newPeaks);\n                    }\n                }\n                else {\n                    pushBackPeaks(broadLines, indexes, newPeaks);\n                }\n            }\n            else {\n                pushBackPeaks(broadLines, indexes, newPeaks);\n            }\n            candidates = { x: [broadLines[i].x], y: [broadLines[i].y] };\n            indexes = [i];\n            max = broadLines[i].y;\n            maxI = i;\n            count = 1;\n        }\n    }\n    newPeaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return addMissingIDs(newPeaks, { output: newPeaks });\n}\nfunction pushBackPeaks(broadLines, indexes, peaks) {\n    for (const index of indexes) {\n        peaks.push(getGSDPeakOptimizedStructure(broadLines[index]));\n    }\n}\nfunction getGSDPeakOptimizedStructure(peak) {\n    const { id, shape, x, y, width } = peak;\n    const newPeak = {\n        x,\n        y,\n        width,\n        shape,\n    };\n    if (id)\n        newPeak.id = id;\n    return newPeak;\n}\n//# sourceMappingURL=joinBroadPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * This method will allow to enlarge peaks while preventing overlap between peaks\n * A typical application in chromatography peak picking.\n * We should not make the hypothesis that x is equidistant\n * Because peaks may not be symmetric after we add 2 properties, from and to.\n * @return {Array} peakList\n */\nexport function broadenPeaks(peakList, options = {}) {\n    const { factor = 2, overlap = false } = options;\n    const peaks = mapPeaks(peakList, factor);\n    if (!overlap) {\n        for (let i = 0; i < peaks.length - 1; i++) {\n            const peak = peaks[i];\n            const nextPeak = peaks[i + 1];\n            if (peak.to.x > nextPeak.from.x) {\n                // we do it proportional to the width of the peaks\n                peak.to.x =\n                    (peak.width / (nextPeak.width + peak.width)) * (nextPeak.x - peak.x) +\n                        peak.x;\n                nextPeak.from.x = peak.to.x;\n            }\n        }\n    }\n    for (const peak of peaks) {\n        peak.width = peak.to.x - peak.from.x;\n        if (peak.shape) {\n            const { shape, width } = peak;\n            if (shape.fwhm !== undefined) {\n                const shapeFct = getShape1D(shape);\n                peak.shape.fwhm = shapeFct.widthToFWHM(width);\n            }\n        }\n    }\n    return peaks;\n}\nfunction mapPeaks(peaks, factor) {\n    return peaks.map((peak) => {\n        const { id, shape } = peak;\n        const xFrom = peak.x - (peak.x - peak.inflectionPoints.from.x) * factor;\n        const xTo = peak.x + (peak.inflectionPoints.to.x - peak.x) * factor;\n        let result = {\n            x: peak.x,\n            y: peak.y,\n            index: peak.index,\n            width: xTo - xFrom,\n            from: { x: xFrom },\n            to: { x: xTo },\n        };\n        if (id) {\n            result = { ...result, id };\n        }\n        if (shape) {\n            result = { ...result, shape };\n        }\n        return result;\n    });\n}\n//# sourceMappingURL=broadenPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nconst { parse, stringify } = JSON;\n/**\n * Append 2 properties to the peaks, shape and fwhm\n */\nexport function setShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = parse(stringify(peaks)), } = options;\n    const shapeInstance = getShape1D(shape);\n    return output.map((peak) => ({\n        ...peak,\n        shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n    }));\n}\n//# sourceMappingURL=setShape.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peakPicking = peakPicking;\nconst ml_gsd_1 = require(\"ml-gsd\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {import('./Spectrum')} spectrum - array of all the peaks\n * @returns {array}\n */\nfunction peakPicking(spectrum) {\n    if (!spectrum.peaks || spectrum.peaks.length === 0) {\n        spectrum.peaks = [];\n        const keys = Object.keys(spectrum.data).filter((key) => key !== 'x' && key !== 'y');\n        if (spectrum.isContinuous()) {\n            // some experimental data are really problematic and we need to add this line\n            const data = (0, ml_spectra_processing_1.xyEnsureGrowingX)(spectrum.data);\n            const gsdPeaks = (0, ml_gsd_1.gsd)(data, {\n                minMaxRatio: spectrum.options.threshold || 0.00025, // Threshold to determine if a given peak should be considered as a noise\n                realTopDetection: true,\n                smoothY: false,\n                sgOptions: { windowSize: 7, polynomial: 3 },\n            });\n            for (let gsdPeak of gsdPeaks) {\n                const peak = { x: gsdPeak.x, y: gsdPeak.y, width: gsdPeak.width };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][gsdPeak.index];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n        else {\n            spectrum.peaks = [];\n            let data = spectrum.data;\n            for (let i = 0; i < data.x.length; i++) {\n                const peak = {\n                    x: data.x[i],\n                    y: data.y[i],\n                    width: 0,\n                };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][i];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n    }\n    return spectrum.peaks;\n}\n//# sourceMappingURL=peakPicking.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\n/**\n * Class representing simple linear regression.\n * The regression uses OLS to calculate intercept and slope.\n */\nexport class SimpleLinearRegression extends BaseRegression {\n    /**\n     * @param x - explanatory variable\n     * @param y - response variable\n     */\n    constructor(x, y) {\n        super();\n        // @ts-expect-error internal use of the constructor, from `this.load`\n        if (x === true) {\n            // @ts-expect-error internal use of the constructor, from `this.load`\n            const yObj = y;\n            this.slope = yObj.slope;\n            this.intercept = yObj.intercept;\n            this.coefficients = [yObj.intercept, yObj.slope];\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y);\n            this.slope = result.slope;\n            this.intercept = result.intercept;\n            this.coefficients = [result.intercept, result.slope];\n        }\n    }\n    /**\n     * Get the parameters and model name in JSON format\n     * @returns\n     */\n    toJSON() {\n        return {\n            name: 'simpleLinearRegression',\n            slope: this.slope,\n            intercept: this.intercept,\n        };\n    }\n    _predict(x) {\n        return this.slope * x + this.intercept;\n    }\n    /**\n     * Finds x for the given y value.\n     * @param y - response variable value\n     * @returns - x value\n     */\n    computeX(y) {\n        return (y - this.intercept) / this.slope;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toString(precision) {\n        let result = 'f(x) = ';\n        if (this.slope !== 0) {\n            const xFactor = maybeToPrecision(this.slope, precision);\n            result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n            if (this.intercept !== 0) {\n                const absIntercept = Math.abs(this.intercept);\n                const operator = absIntercept === this.intercept ? '+' : '-';\n                result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n            }\n        }\n        else {\n            result += maybeToPrecision(this.intercept, precision);\n        }\n        return result;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toLaTeX(precision) {\n        return this.toString(precision);\n    }\n    /**\n     * Class instance from a JSON Object.\n     * @param json\n     * @returns\n     */\n    static load(json) {\n        if (json.name !== 'simpleLinearRegression') {\n            throw new TypeError('not a SLR model');\n        }\n        // @ts-expect-error internal use of the constructor\n        return new SimpleLinearRegression(true, json);\n    }\n}\n/**\n * Internal  function.\n * It determines the parameters (slope, intercept) of the line that best fit the `x,y` vector-data (simple linear regression).\n * @param x - explanatory variable\n * @param y - response variable\n * @returns - slope and intercept of the best fit line\n */\nfunction regress(x, y) {\n    const n = x.length;\n    let xSum = 0;\n    let ySum = 0;\n    let xSquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n        xSum += x[i];\n        ySum += y[i];\n        xSquared += x[i] * x[i];\n        xY += x[i] * y[i];\n    }\n    const numerator = n * xY - xSum * ySum;\n    const slope = numerator / (n * xSquared - xSum * xSum);\n    return {\n        slope,\n        intercept: (1 / n) * ySum - slope * (1 / n) * xSum,\n    };\n}\n//# sourceMappingURL=index.js.map","import {\n  BaseRegression,\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\nimport { SimpleLinearRegression } from 'ml-regression-simple-linear';\n\nexport class PowerRegression extends BaseRegression {\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // reloading model\n      this.A = y.A;\n      this.B = y.B;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y);\n    }\n  }\n\n  _predict(newInputs) {\n    return this.A * newInputs ** this.B;\n  }\n\n  toJSON() {\n    return {\n      name: 'powerRegression',\n      A: this.A,\n      B: this.B,\n    };\n  }\n\n  toString(precision) {\n    return `f(x) = ${maybeToPrecision(\n      this.A,\n      precision,\n    )} * x^${maybeToPrecision(this.B, precision)}`;\n  }\n\n  toLaTeX(precision) {\n    let latex = '';\n    if (this.B >= 0) {\n      latex = `f(x) = ${maybeToPrecision(\n        this.A,\n        precision,\n      )}x^{${maybeToPrecision(this.B, precision)}}`;\n    } else {\n      latex = `f(x) = \\\\frac{${maybeToPrecision(\n        this.A,\n        precision,\n      )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n    }\n    latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n    return latex;\n  }\n\n  static load(json) {\n    if (json.name !== 'powerRegression') {\n      throw new TypeError('not a power regression model');\n    }\n    return new PowerRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y) {\n  const n = x.length;\n  const xl = new Array(n);\n  const yl = new Array(n);\n  for (let i = 0; i < n; i++) {\n    xl[i] = Math.log(x[i]);\n    yl[i] = Math.log(y[i]);\n  }\n\n  const linear = new SimpleLinearRegression(xl, yl);\n  pr.A = Math.exp(linear.intercept);\n  pr.B = linear.slope;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peaksWidth = peaksWidth;\nconst ml_regression_power_1 = require(\"ml-regression-power\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nfunction peaksWidth(peaks) {\n    let xs = peaks.map((peak) => peak.x);\n    let widths = peaks.map((peak) => peak.width);\n    if (xs.length < 2) {\n        throw new Error(`peaksWidth: not enough peaks (less than 2) for automatic width calculation: ${xs.length}`);\n    }\n    let regression = new ml_regression_power_1.PowerRegression(xs, widths);\n    if (Number.isNaN(regression.A) || Number.isNaN(regression.B)) {\n        throw new Error('peaksWidth: can not calculate regression');\n    }\n    let from = (0, ml_spectra_processing_1.xMinValue)(xs);\n    let to = (0, ml_spectra_processing_1.xMaxValue)(xs);\n    let regressionChart = { x: [], y: [] };\n    for (let x = from; x <= to; x += (to - from) / 1000) {\n        regressionChart.x.push(x);\n        regressionChart.y.push(regression.predict(x));\n    }\n    return {\n        widths: {\n            x: xs,\n            y: widths,\n        },\n        fit: regressionChart,\n        score: regression.score(xs, widths),\n        predictFct: regression.predict.bind(regression),\n        tex: regression.toLaTeX(3),\n        A: regression.A,\n        B: regression.B,\n        predictFctString: `${regression.A} * mass ** ${regression.B}`,\n    };\n}\n//# sourceMappingURL=peaksWidth.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Spectrum = void 0;\nexports.fromPeaks = fromPeaks;\nexports.fromText = fromText;\nconst is_any_array_1 = require(\"is-any-array\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst xy_parser_1 = require(\"xy-parser\");\nconst getBestPeaks_js_1 = require(\"./getBestPeaks.js\");\nconst getFragmentPeaks_js_1 = require(\"./getFragmentPeaks.js\");\nconst getMassRemainder_js_1 = require(\"./getMassRemainder.js\");\nconst getPeakChargeBySimilarity_js_1 = require(\"./getPeakChargeBySimilarity.js\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\nconst getPeaksWithCharge_js_1 = require(\"./getPeaksWithCharge.js\");\nconst isContinuous_js_1 = require(\"./isContinuous.js\");\nconst peakPicking_js_1 = require(\"./peakPicking.js\");\nconst peaksWidth_js_1 = require(\"./peaksWidth.js\");\nconst defaultData = { x: [], y: [] };\n/**\n * Class dealing with mass spectra and peak picking\n */\nclass Spectrum {\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} data\n     * @param {object} [options={}]\n     * @param {number} [options.threshold=0.00025]\n     */\n    constructor(data = defaultData, options = {}) {\n        if (typeof data !== 'object' ||\n            !(0, is_any_array_1.isAnyArray)(data.x) ||\n            !(0, is_any_array_1.isAnyArray)(data.y)) {\n            throw new TypeError('Spectrum data must be an object with x:[], y:[]');\n        }\n        this.data = { ...data };\n        this.options = { threshold: 0.00025, ...options };\n        Object.defineProperty(this.data, 'xOriginal', {\n            enumerable: false,\n            writable: true,\n        });\n        if (this.data && this.data.x.length > 0) {\n            this.info = {\n                minX: (0, ml_spectra_processing_1.xMinValue)(this.data.x),\n                maxX: (0, ml_spectra_processing_1.xMaxValue)(this.data.x),\n                minY: (0, ml_spectra_processing_1.xMinValue)(this.data.y),\n                maxY: (0, ml_spectra_processing_1.xMaxValue)(this.data.y),\n            };\n        }\n        else {\n            this.info = {\n                minX: Number.NaN,\n                maxX: Number.NaN,\n                minY: Number.NaN,\n                maxY: Number.NaN,\n            };\n        }\n        this.cache = {};\n        /**\n         * someProperty is an example property that is set to `true`\n         * @type {array}\n         * @public\n         */\n        this.peaks = [];\n    }\n    minMaxX() {\n        return (0, ml_spectra_processing_1.xMinMaxValues)(this.data.x);\n    }\n    /**\n     *\n     * @param {import('ml-spectra-processing').XYMaxYOptions} options\n     * @returns\n     */\n    maxY(options) {\n        return (0, ml_spectra_processing_1.xyMaxY)(this.data, options);\n    }\n    sumY() {\n        if (!this.cache.sumY) {\n            this.cache.sumY = (0, ml_spectra_processing_1.xSum)(this.data.y);\n        }\n        return this.cache.sumY;\n    }\n    scaleY(intensity = 1) {\n        this.data.y = Array.from((0, ml_spectra_processing_1.xNormed)(this.data.y, { value: intensity, algorithm: 'max' }));\n        return this;\n    }\n    rescaleX(callback) {\n        this.ensureOriginalX();\n        for (let i = 0; i < this.data.x.length; i++) {\n            this.data.x[i] = callback(this.data.xOriginal[i]);\n        }\n        return this;\n    }\n    ensureOriginalX() {\n        if (!this.data.xOriginal) {\n            this.data.xOriginal = this.data.x.slice(0);\n        }\n    }\n    normedY(total = 1) {\n        this.data.y = (0, ml_spectra_processing_1.xNormed)(this.data.y, { value: total });\n        return this;\n    }\n    peakPicking() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return this.peaks;\n    }\n    peaksWidth() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, peaksWidth_js_1.peaksWidth)(this.peaks);\n    }\n    getBestPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getBestPeaks_js_1.getBestPeaks)(this.peaks, options);\n    }\n    /**\n     * This is a very intensive function so better to calculate it on a selection of peaks\n     * @param {Array} selectedPeaks\n     * @param {object} [options={}]\n     * @param {number} [options.min=1]\n     * @param {number} [options.max=10]\n     * @param {number} [options.low=-1]\n     * @param {number} [options.high=1]\n     * @param {number} [options.precision=30]\n     * @returns\n     */\n    getSelectedPeaksWithCharge(selectedPeaks, options) {\n        return (0, getPeaksWithCharge_js_1.getPeaksWithCharge)(selectedPeaks, this.peaks, options);\n    }\n    getPeakChargeBySimilarity(targetMass, options) {\n        return (0, getPeakChargeBySimilarity_js_1.getPeakChargeBySimilarity)(this, targetMass, options);\n    }\n    getPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n    }\n    getPeaksAsDataXY(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        const peaks = (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n        return {\n            x: peaks.map((peak) => peak.x),\n            y: peaks.map((peak) => peak.y),\n        };\n    }\n    /**\n     * Returns also peaks possible for a specific molecular formula\n     * @example\n     *  const spectrum = new Spectrum({x:[], y:[]})\n     *  await spectrum.getFragmentPeaks();\n     * @param {string} mf\n     * @param {object} options\n     * @returns\n     */\n    getFragmentPeaksFct(mf, options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getFragmentPeaks_js_1.getFragmentPeaks)(this.peaks, mf, options);\n    }\n    isContinuous() {\n        return (0, isContinuous_js_1.isContinuous)(this);\n    }\n    /**\n     * Remove an integer number of time the specifiedd monoisotopic mass\n     * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n     */\n    getMassRemainderFct(mass, options = {}) {\n        return (0, getMassRemainder_js_1.getMassRemainder)(this.data, mass, options);\n    }\n}\nexports.Spectrum = Spectrum;\nfunction fromPeaks(peaks) {\n    if (peaks.length === 0)\n        return new Spectrum();\n    const data = {};\n    for (let key of Object.keys(peaks[0])) {\n        data[key] = peaks.map((peak) => peak[key]);\n    }\n    return new Spectrum(data);\n}\nfunction fromText(text, options) {\n    const data = (0, xy_parser_1.parseXY)(text);\n    return new Spectrum(data, options);\n}\n//# sourceMappingURL=Spectrum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MSComparator = void 0;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nclass MSComparator {\n    /**\n     * Create a class that will be able to get the similarity between 2 spectra\n     * The similarity is based on 'cosine' similarity. The goal is 2 prepare 2 vectors\n     * on which the similarity is calculated.\n     * The vectors are created by taking the mass and the intensity of the peaks.\n     * @param {object} [options={}]\n     * @param {number} [options.nbPeaks] - Before comparing spectra how many peaks should be kept\n     * @param {number} [options.minNbCommonPeaks] - Minimum number of peaks in common to consider any similarity\n     * @param {number} [options.minIntensity] - What is the minimal relative intensity to keep a peak\n     * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n     * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n     * @param {number[]} [options.selectedMasses] - List of allowed masses.\n     * @param {number|Function} [options.delta=0.1] - Tolerance in Da (u) to consider 2 peaks as aligned. If a function is provided it will be called with the mass of the peak\n     */\n    constructor(options = {}) {\n        this.options = {\n            massPower: 3,\n            intensityPower: 0.6,\n            delta: 0.1,\n            ...options,\n        };\n        this.cache = new WeakMap();\n    }\n    /**\n     * Get the similarity between a spectrum and a list of masses.\n     * The main issue is that we don't have the intensity of the peaks.\n     * So we will use the intensity of the closest peak.\n     * @param {import('cheminfo-types').DataXY} dataXY\n     * @param {number[]} masses\n     */\n    getSimilarityToMasses(dataXY, masses) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY, this.options);\n        const data2 = {\n            x: Float64Array.from(masses),\n            y: new Float64Array(masses.length).fill(1),\n        };\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        // because we don't have any idea of the intensity we will use the intensity of the experimental peak\n        // and otherwise we ignore the theoretical peak\n        for (let i = 0; i < aligned.ys[0].length; i++) {\n            if (aligned.ys[0][i] === 0) {\n                aligned.ys[1][i] = 0;\n            }\n            if (aligned.ys[0][i] > 0 && aligned.ys[1][i] !== 0) {\n                aligned.ys[1][i] = aligned.ys[0][i];\n            }\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} dataXY1\n     * @param {import('cheminfo-types').DataXY} dataXY2\n     */\n    getSimilarity(dataXY1, dataXY2) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY1, this.options);\n        const data2 = normalizeAndCacheData(this.cache, dataXY2, this.options);\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n}\nexports.MSComparator = MSComparator;\n/**\n *\n * @param {WeakMap} cache\n * @param {import('cheminfo-types').DataXY} dataXY\n * @param {object} [options={}]\n * @param {number} [options.nbPeaks]\n * @param {number} [options.minIntensity]\n */\nfunction normalizeAndCacheData(cache, dataXY, options = {}) {\n    const { nbPeaks, minIntensity } = options;\n    if (cache.has(dataXY))\n        return cache.get(dataXY);\n    let data = { ...dataXY };\n    if ((0, ml_spectra_processing_1.xIsMonotonic)(data.x) !== 1) {\n        data = (0, ml_spectra_processing_1.xySortX)(data);\n    }\n    if (minIntensity !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterMinYValue)(data, minIntensity);\n    }\n    if (nbPeaks !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterTopYValues)(data, nbPeaks);\n    }\n    cache.set(dataXY, data);\n    return data;\n}\n/**\n *\n * @param {*} aligned\n * @param {object} [options={}]\n * @param {number} [options.massPower]\n * @param {number} [options.intensityPower]\n * @param {number} [options.minNbCommonPeaks]\n\n * @returns\n */\nfunction returnSimilarity(aligned, options = {}) {\n    const { massPower, intensityPower, minNbCommonPeaks } = options;\n    let nbCommonPeaks = 0;\n    let nbPeaks1 = 0;\n    let nbPeaks2 = 0;\n    for (let i = 0; i < aligned.ys[0].length; i++) {\n        if (aligned.ys[0][i] !== 0) {\n            nbPeaks1++;\n        }\n        if (aligned.ys[1][i] !== 0) {\n            nbPeaks2++;\n        }\n        if (aligned.ys[0][i] !== 0 && aligned.ys[1][i] !== 0) {\n            nbCommonPeaks++;\n        }\n    }\n    if (nbCommonPeaks === 0 ||\n        (minNbCommonPeaks && nbCommonPeaks < minNbCommonPeaks)) {\n        return {\n            nbCommonPeaks,\n            nbPeaks1,\n            nbPeaks2,\n            tanimoto: 0,\n            cosine: 0,\n        };\n    }\n    const vector1 = new Float64Array(aligned.x.length);\n    const vector2 = new Float64Array(aligned.x.length);\n    for (let i = 0; i < aligned.x.length; i++) {\n        vector1[i] = aligned.x[i] ** massPower * aligned.ys[0][i] ** intensityPower;\n        vector2[i] = aligned.x[i] ** massPower * aligned.ys[1][i] ** intensityPower;\n    }\n    return {\n        nbCommonPeaks,\n        nbPeaks1,\n        nbPeaks2,\n        tanimoto: nbCommonPeaks / (nbPeaks1 + nbPeaks2 - nbCommonPeaks),\n        cosine: cosineSimilarity(vector1, vector2),\n    };\n}\n/**\n * Returns the average of cosine distances between vectors a and b\n * Copied from https://github.com/mljs/distance/blob/0b15acd6476413f4111cb4852ca1bec9edaa2805/src/similarities/cosine.ts\n * @param a {import('cheminfo-types').NumberArray} - first vector\n * @param b {import('cheminfo-types').NumberArray} - second vector\n * @returns {number} - cosine similarity\n */\nfunction cosineSimilarity(a, b) {\n    let p = 0;\n    let p2 = 0;\n    let q2 = 0;\n    for (let i = 0; i < a.length; i++) {\n        p += a[i] * b[i];\n        p2 += a[i] * a[i];\n        q2 += b[i] * b[i];\n    }\n    return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n//# sourceMappingURL=MSComparator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksAnnotation = getPeaksAnnotation;\nconst fromMonoisotopicMass_1 = require(\"../from/fromMonoisotopicMass\");\n/**\n *\n * @param {array} bestPeaks\n * @param {object} [options={}]\n * @param {number} [options.numberDigits=5]\n * @param {number} [options.numberMFs=0]\n * @param {boolean} [options.showMF=false]\n * @param {array} [options.mfColors={}]\n * @param {number} [options.charge=1]\n * @param {number} [options.shift=0]\n * @param {object} [options.mfPrefs]\n * @param {number} [options.displayCharge=true]\n * @param {number} [options.displayProperties=[]] Array of properties name to display\n * @returns {Promise}\n */\nasync function getPeaksAnnotation(bestPeaks, options = {}) {\n    let { numberDigits = 5, shift = 0, showMF = false, numberMFs = 0, charge = 1, mfPrefs = {}, displayCharge = true, displayProperties = [], mfColors = [\n        { limit: 3, color: 'green' },\n        { limit: 20, color: 'lightgreen' },\n        { limit: 50, color: 'lightorange' },\n    ], } = options;\n    if (showMF && !numberMFs)\n        numberMFs = 1;\n    let annotations = [];\n    bestPeaks.sort((a, b) => (a.close ? -1 : b.close ? 1 : 0));\n    for (let peak of bestPeaks) {\n        let textLine = 0;\n        let annotation;\n        if (peak.close) {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n            };\n            annotations.push(annotation);\n            annotation = {\n                type: 'ellipse',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n                props: {\n                    rx: '3px',\n                    ry: '3px',\n                    fillOpacity: 0.3,\n                },\n            };\n        }\n        else {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-25px',\n                        x: peak.x,\n                    },\n                ],\n                labels: [\n                    {\n                        text: (peak.x + shift).toFixed(numberDigits),\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    },\n                ],\n            };\n            if (displayCharge && peak.charge !== undefined) {\n                annotation.labels.push({\n                    text: `Z:${peak.charge}`,\n                    color: 'grey',\n                    position: {\n                        x: peak.x,\n                        y: peak.y,\n                        dy: '-4px',\n                        dx: '2px',\n                    },\n                });\n            }\n            let mfs = [];\n            if (numberMFs) {\n                // we have 2 cases. Either there is a shift and we deal with differences\n                // otherwise it is absolute\n                // if there is a shift we consider only a neutral loss and the parameter charge is important\n                // we also check that the selected peak (for relative mass) is not the current peak\n                if (shift && Math.abs(peak.x + shift) > Number.EPSILON) {\n                    // neutral loss\n                    let currentMfPrefs = {\n                        ...mfPrefs,\n                        allowNeutral: true,\n                        ionizations: '',\n                    };\n                    // we need to deal with the precision and increase it\n                    currentMfPrefs.precision =\n                        (currentMfPrefs.precision / Math.max(Math.abs(peak.x + shift), 1)) *\n                            peak.x;\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs((peak.x + shift) * charge), currentMfPrefs));\n                }\n                else {\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs(peak.x * charge), mfPrefs));\n                }\n                let numberOfMFS = Math.min(mfs.length, numberMFs);\n                for (let i = 0; i < numberOfMFS; i++) {\n                    let mf = mfs[i];\n                    let ppm = shift ? (mf.ms.ppm / shift) * mfs[0].ms.em : mf.ms.ppm;\n                    annotation.labels.push({\n                        text: mf.mf,\n                        color: getColor(mfColors, Math.abs(ppm)),\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n            if (displayProperties.length > 0) {\n                for (let property of displayProperties) {\n                    annotation.labels.push({\n                        text: peak[property],\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n        }\n        annotations.push(annotation);\n    }\n    return annotations;\n}\nfunction getColor(colors, value) {\n    for (let color of colors) {\n        if (value < color.limit)\n            return color.color;\n    }\n    return 'lightgrey';\n}\n//# sourceMappingURL=getPeaksAnnotation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsGraph = void 0;\nconst getPeaksAnnotation_js_1 = require(\"./getPeaksAnnotation.js\");\nexports.JsGraph = {\n    getPeaksAnnotation: getPeaksAnnotation_js_1.getPeaksAnnotation,\n};\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendFragmentsInfo = appendFragmentsInfo;\nconst mf_finder_1 = require(\"mf-finder\");\n/**\n *\n * @param {object}   experimentalSpectrum\n * @param {object}   database\n * @param {object}   [options={}]\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {string}   [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number}   [options.precision=100] - Allowed mass range based on precision\n */\nasync function appendFragmentsInfo(experimentalSpectrum, database, options = {}) {\n    const { ionizations, onStep, precision } = options;\n    if (!experimentalSpectrum) {\n        throw new Error('Experimental spectrum is not defined');\n    }\n    if (!database) {\n        throw new Error('Database is not defined');\n    }\n    const peaks = experimentalSpectrum.getPeaks({ sumValue: 1 });\n    for (let entry of database) {\n        const ranges = Object.keys(entry.atoms)\n            .map((atom) => `${atom}0-${entry.atoms[atom]}`)\n            .join(' ');\n        entry.fragments = {\n            nbFound: 0,\n            intensityFound: 0,\n            assignments: [],\n        };\n        for (let i = 0; i < peaks.length; i++) {\n            if (onStep)\n                await onStep(i);\n            const peak = peaks[i];\n            const possibleMFs = await (0, mf_finder_1.findMFs)(peak.x, {\n                ionizations,\n                precision,\n                ranges,\n            });\n            if (possibleMFs.mfs.length > 0) {\n                entry.fragments.nbFound++;\n                entry.fragments.intensityFound += peak.y;\n                entry.fragments.assignments.push({\n                    peak,\n                    bestMF: possibleMFs.mfs[0],\n                });\n            }\n        }\n    }\n}\n//# sourceMappingURL=appendFragmentsInfo.js.map","'use strict';\n\n/**\n * Modify object a to join it with b and make the sum of each of the keys\n * @param {*} a\n * @param {*} source1\n *\n * @return {object}\n */\n\nfunction sum(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        let toSum = arguments[i];\n        for (var key of Object.keys(toSum)) {\n            if (target[key]) {\n                target[key] += toSum[key];\n            } else {\n                target[key] = toSum[key];\n            }\n        }\n    }\n    return target;\n}\n\nmodule.exports = sum;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateMFs = generateMFs;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst sum_object_keys_1 = __importDefault(require(\"sum-object-keys\"));\n/**\n * Generate all the possible combinations of molecular formula and calculate\n * for each of them the monoisotopic mass and observed monoisotopic mass (m/z)\n * In the molecular formula there may be a comment after the '$' symbol\n *\n * @param {Array}         ranges\n * @param {object}        [options={}]\n * @param {number}        [options.limit=10000000] - Maximum number of results\n * @param {boolean}       [options.estimate=false] - estimate the number of MF without filters\n * @param {boolean}       [options.canonizeMF=true] - Canonize molecular formula\n * @param {boolean}       [options.uniqueMFs=true] - Force canonization and make MF unique\n * @param {string}        [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {function}      [options.onStep] - Callback to do after each step\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @param {string}        [options.filterFct]\n * @param {object}        [options.links]\n * @param {boolean}       [options.links.filter] We filter all the MF that do not match the '*X'\n * @returns {Promise}\n */\nasync function generateMFs(ranges, options = {}) {\n    if (!Array.isArray(ranges)) {\n        throw new Error('Ranges must be an array of string or object');\n    }\n    options = { ...options };\n    let { limit = 100000, uniqueMFs = true, estimate = false, onStep } = options;\n    options.filterFctVariables = {};\n    for (let i = 0; i < ranges.length; i++) {\n        const range = ranges[i];\n        if (typeof range === 'object' && range.name) {\n            options.filterFctVariables[range.name] = i;\n            ranges[i] = range.value;\n        }\n    }\n    if (options.filterFct) {\n        // we create a real javascript function\n        let variables = Object.keys(options.filterFctVariables);\n        variables.push('mm', 'mz', 'charge', 'unsaturation', 'atoms');\n        // eslint-disable-next-line no-new-func\n        options.filterFct = new Function(...variables, `return ${options.filterFct}`);\n    }\n    if (uniqueMFs === true)\n        options.canonizeMF = true;\n    if (options.canonizeMF === undefined)\n        options.canonizeMF = true;\n    options.ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    // we allow String delimited by \". or ;\" instead of an array\n    for (let i = 0; i < ranges.length; i++) {\n        if (!Array.isArray(ranges[i])) {\n            ranges[i] = ranges[i].split(/[,.]/);\n        }\n    }\n    // we allow ranges in a string ...\n    // problem with ranges is that we need to know to what the range applies\n    for (let i = 0; i < ranges.length; i++) {\n        let parts = ranges[i];\n        let newParts = [];\n        for (let j = 0; j < parts.length; j++) {\n            let part = parts[j];\n            if (part.match(/\\d-[\\d-]/)) {\n                // deal with negative numbers\n                // there are ranges ... we are in trouble !\n                newParts = newParts.concat(new mf_parser_1.MF(part).flatten({ groupIdentical: false, limit }));\n            }\n            else {\n                newParts.push(parts[j]); // the part with the comments !\n            }\n        }\n        ranges[i] = newParts;\n    }\n    if (estimate) {\n        let total = ranges.reduce((previous, current) => previous * current.length, 1);\n        return total * options.ionizations.length;\n    }\n    let results = [];\n    let sizes = [];\n    let currents = [];\n    for (let i = 0; i < ranges.length; i++) {\n        sizes.push(ranges[i].length - 1);\n        currents.push(0);\n    }\n    let position = 0;\n    let evolution = 0;\n    while (position < currents.length) {\n        if (currents[position] < sizes[position]) {\n            if (onStep)\n                await onStep(evolution);\n            evolution++;\n            appendResult(results, currents, ranges, options);\n            currents[position]++;\n            for (let i = 0; i < position; i++) {\n                currents[i] = 0;\n            }\n            position = 0;\n        }\n        else {\n            position++;\n        }\n        if (evolution > limit) {\n            throw new Error(`You have reached the limit of ${limit}. You could still change this value using the limit option but it is likely to crash.`);\n        }\n    }\n    appendResult(results, currents, ranges, options);\n    if (uniqueMFs) {\n        let uniqueMFsObject = {};\n        for (const result of results) {\n            uniqueMFsObject[result.mf + result.ionization.mf] = result;\n        }\n        results = Object.keys(uniqueMFsObject).map((k) => uniqueMFsObject[k]);\n    }\n    results.sort((a, b) => a.em - b.em);\n    return results;\n}\nlet ems = {};\n// internal method used as a cache\nfunction getMonoisotopicMass(mfString) {\n    if (!ems[mfString]) {\n        // we need to calculate based on the mf but not very often ...\n        let mf = new mf_parser_1.MF(mfString);\n        let info = mf.getInfo();\n        ems[mfString] = {\n            em: info.monoisotopicMass,\n            charge: info.charge,\n            mw: info.mass,\n            unsaturation: (info.unsaturation - 1) * 2,\n            atoms: info.atoms,\n        };\n    }\n    return ems[mfString];\n}\nfunction getEMFromParts(parts, currents, ionization) {\n    let charge = 0;\n    let em = 0;\n    let mw = 0;\n    let unsaturation = 0;\n    let validUnsaturation = true;\n    let atoms = {};\n    for (let i = 0; i < parts.length; i++) {\n        let part = parts[i][currents[i]];\n        if (part) {\n            let info = getMonoisotopicMass(part);\n            charge += info.charge;\n            em += info.em;\n            mw += info.mw;\n            (0, sum_object_keys_1.default)(atoms, info.atoms);\n            if (info.unsaturation && validUnsaturation) {\n                unsaturation += info.unsaturation;\n            }\n        }\n    }\n    return {\n        charge,\n        em,\n        mw,\n        ionization,\n        unsaturation: validUnsaturation ? unsaturation / 2 + 1 : undefined,\n        atoms,\n    };\n}\nfunction appendResult(results, currents, keys, options = {}) {\n    const { canonizeMF, filter, ionizations, links = {} } = options;\n    // this script is designed to combine molecular formula\n    // that may contain comments after a \"$\" sign\n    // therefore we should put all the comments at the ned\n    if (links.filter) {\n        let sharps = [];\n        for (let i = 0; i < keys.length; i++) {\n            let anchors = keys[i][currents[i]].match(/#\\d+/g);\n            if (anchors)\n                sharps.push(...anchors);\n        }\n        if (sharps.length % 2 === 1)\n            return;\n        sharps = sharps.toSorted();\n        for (let i = 0; i < sharps.length; i += 2) {\n            if (sharps[i] !== sharps[i + 1])\n                return;\n        }\n    }\n    for (let ionization of ionizations) {\n        let result = getEMFromParts(keys, currents, ionization);\n        if (options.filterFct) {\n            let variables = [];\n            for (let key in options.filterFctVariables) {\n                variables.push(currents[options.filterFctVariables[key]]);\n            }\n            variables.push(result.em, (result.em + ionization.em - ionization.charge * chemical_elements_1.ELECTRON_MASS) /\n                Math.abs(ionization.charge), result.charge + result.ionization.charge, result.unsaturation, result.atoms);\n            if (!options.filterFct.apply(null, variables))\n                continue;\n        }\n        result.parts = [];\n        result.mf = '';\n        let comments = [];\n        for (let i = 0; i < keys.length; i++) {\n            let key = keys[i][currents[i]];\n            if (key) {\n                if (key.includes('$')) {\n                    comments.push(key.replace(/^[^$]*\\$/, ''));\n                    key = key.replace(/\\$.*/, '');\n                }\n                result.parts[i] = key;\n                result.mf += key;\n            }\n        }\n        if (comments.length > 0) {\n            result.comment = comments.join(' ');\n        }\n        let match = (0, mf_matcher_1.msemMatcher)(result, filter);\n        if (!match)\n            continue;\n        result.ms = match.ms;\n        result.ionization = match.ionization;\n        if (canonizeMF) {\n            result.mf = new mf_parser_1.MF(result.mf).toMF();\n        }\n        results.push(result);\n    }\n}\n//# sourceMappingURL=generateMFs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromArray = fromArray;\nconst mf_generator_1 = require(\"mf-generator\");\n/**\n * Generates a database 'generated' from an array of molecular formula\n * @param {array} mfsArray - Array of string or Array of array containing the parts to combine\n * @param {object} [options={}]\n * @param {boolean} [options.estimate=false] - estimate the number of MF without filters\n * @param {string} [options.databaseName='generated']\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {number} [options.limit=10000000] - Maximum number of results\n * @param {boolean} [options.canonizeMF=true] - Canonize molecular formula\n * @param {boolean} [options.uniqueMFs=true] - Force canonization and make MF unique\n * @param {string} [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {object} [options.filter={}]\n * @param {number} [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number} [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number} [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number} [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number} [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number} [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number} [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number} [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object} [options.filter.unsaturation={}]\n * @param {number} [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number} [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object} [options.filter.atoms] - object of atom:{min, max}\n * @param {function} [options.filter.callback] - a function to filter the MF\n * @param {string}  [options.filterFct] - A string representing a function\n *\n * @example\n *\n * const {EMDB} = require('emdb');\n * let emdb = new EMDB();\n * let array = ['C1-10', 'H1-10'];\n * emdb.fromArray(array); // create a database 'generated' combining all possibilies\n * console.log(emdb.get('generated').length); // 100\n *\n * @example\n * const {EMDB} = require('emdb');\n * let emdb = new EMDB();\n * let array = ['C1-10 H1-10'];\n * emdb.fromArray(array); // create a database 'generated' combining all possibilies\n * console.log(emdb.get('generated').length); // 100\n *\n * @example\n * const {EMDB} = require('emdb');\n * let emdb = new EMDB();\n * // in case of an array of array, one of the group is allwed\n * let array = [['C1-10','H1-10'],'Cl0-1 Br0-1'];\n * emdb.fromArray(array); // create a database 'generated' combining all possibilies\n * console.log(emdb.get('generated').length); // 80\n *\n * @example\n * <script src=\"https://www.lactame.com/lib/mass-tools/HEAD/mass-tools.js\" />\n * <script>\n *   let emdb = new MassTools.EMDB();\n *   let array = ['C1-10', 'H1-10'];\n *   emdb.fromArray(array); // create a database 'generated' combining all possibilities\n *   console.log(emdb.get('generated').length); // 100\n * </script>\n *\n * // from the browser\n */\nasync function fromArray(mfsArray, options = {}) {\n    return (0, mf_generator_1.generateMFs)(mfsArray, options);\n}\n//# sourceMappingURL=fromArray.js.map","let xAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getXAtomicNumber(molecule) {\n    if (!xAtomicNumber) {\n        const OCL = molecule.getOCL();\n        xAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('X', OCL.Molecule.cPseudoAtomX);\n    }\n    return xAtomicNumber;\n}\n//# sourceMappingURL=getXAtomicNumber.js.map","/**\n * Check if a specific atom is a sp3 carbon\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} atomID\n */\nexport function isCsp3(molecule, atomID) {\n    if (molecule.getAtomicNo(atomID) !== 6)\n        return false;\n    if (molecule.getAtomCharge(atomID) !== 0)\n        return false;\n    if (molecule.getImplicitHydrogens(atomID) + molecule.getConnAtoms(atomID) !==\n        4) {\n        return false;\n    }\n    return true;\n}\n//# sourceMappingURL=isCsp3.js.map","/**\n * This method put all the chiral centers in the molecule in the same group and racemic\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @param {object} [options={}]\n * @param {object} [options.OCL] - openchemlib library\n */\nexport function makeRacemic(molecule) {\n    const { Molecule } = molecule.getOCL();\n    // if we don't calculate this we have 2 epimers\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n    // we need to make one group \"AND\" for chiral (to force to racemic, this means diastereotopic and not enantiotopic)\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomParity(i) !== Molecule.cAtomParityNone) {\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0); // changed to group 0; TLS 9.Nov.2015\n        }\n    }\n    // after the change we need to recalculate the CIP\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n}\n//# sourceMappingURL=makeRacemic.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Tag an atom to be able to visualize it\n * @param molecule\n * @param iAtom\n */\nexport function tagAtom(molecule, iAtom) {\n    const customLabel = `${molecule.getAtomLabel(iAtom)}*`;\n    molecule.setAtomCustomLabel(iAtom, customLabel);\n    if (molecule.getAtomicNo(iAtom) === 1) {\n        molecule.setAtomicNo(iAtom, getXAtomicNumber(molecule));\n    }\n    else {\n        // we can not use X because we would have problems with valencies if it is\n        // expanded hydrogens or not\n        // we can not only use a custom label because it does not count for the canonisation\n        molecule.setAtomMass(iAtom, molecule.getAtomMass(iAtom) + 5);\n    }\n    return customLabel;\n}\n//# sourceMappingURL=tagAtom.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\nimport { isCsp3 } from '../util/isCsp3.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns an array of hose code fragments for the specified molecule.\n * @param molecule - The OCL molecule to process.\n * @param options - Options for generating hose codes.\n * @returns An array of hose code fragments.\n */\nexport function getHoseCodesForAtomsAsFragments(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { allowedCustomLabels, minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, tagAtoms = [], tagAtomFct = tagAtom, } = options;\n    const rootAtoms = options.rootAtoms ? options.rootAtoms.slice() : [];\n    molecule = molecule.getCompactCopy();\n    if (tagAtoms.length > 0) {\n        internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct);\n    }\n    else {\n        // this force reordering of atoms in order to have hydrogens at the end\n        molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    }\n    if (rootAtoms.length === 0) {\n        for (let j = 0; j < molecule.getAllAtoms(); j++) {\n            if (allowedCustomLabels?.includes(molecule.getAtomCustomLabel(j) ?? '') ||\n                molecule.getAtomCustomLabel(j)) {\n                rootAtoms.push(j);\n            }\n        }\n    }\n    const fragments = [];\n    // keep track of the atoms when creating the fragment\n    const mappings = [];\n    let min = 0;\n    let max = 0;\n    const atomMask = new Array(molecule.getAllAtoms()).fill(false);\n    const atomList = new Array(molecule.getAllAtoms());\n    for (let sphere = 0; sphere <= maxSphereSize; sphere++) {\n        if (max === 0) {\n            for (const rootAtom of rootAtoms) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        switch (kind) {\n                            case FULL_HOSE_CODE:\n                                atomMask[connAtom] = true;\n                                atomList[newMax++] = connAtom;\n                                break;\n                            case HOSE_CODE_CUT_C_SP3_SP3:\n                                if (!(isCsp3(molecule, atom) && isCsp3(molecule, connAtom))) {\n                                    atomMask[connAtom] = true;\n                                    atomList[newMax++] = connAtom;\n                                }\n                                break;\n                            default:\n                                throw new Error('getHoseCoesForAtom unknown kind');\n                        }\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        if (sphere >= minSphereSize) {\n            const fragment = new OCL.Molecule(0, 0);\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, mappings);\n            // we using atomMapNo field in order to keep track of the original atom number even if we remove hydrogens\n            for (let i = 0; i < fragment.getAllAtoms(); i++) {\n                fragment.setAtomMapNo(i, mappings.indexOf(i) + 1);\n            }\n            fragment.removeExplicitHydrogens();\n            makeRacemic(fragment);\n            // we encode atom characteristics in the query features\n            addQueryFeaturesAndRemoveMapNo(fragment, molecule);\n            fragments.push(fragment);\n        }\n    }\n    return fragments;\n}\n/**\n * If the atom is not an halogen, X or an hydrogen\n * we add query features to the atom\n * This includes aromaticity, ring size, number of hydrogens\n * @param fragment\n * @param molecule\n */\nfunction addQueryFeaturesAndRemoveMapNo(fragment, molecule) {\n    const Molecule = molecule.getOCL().Molecule;\n    for (let i = 0; i < fragment.getAllAtoms(); i++) {\n        const mapping = fragment.getAtomMapNo(i) - 1;\n        fragment.setAtomMapNo(i, 0);\n        if ([1, 9, 17, 35, 53, getXAtomicNumber(molecule)].includes(fragment.getAtomicNo(i))) {\n            continue;\n        }\n        // aromaticity\n        const isAromatic = molecule.isAromaticAtom(mapping);\n        if (isAromatic) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, true);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, false);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, true);\n        }\n        // cycles\n        const smallestRing = molecule.getAtomRingSize(mapping);\n        switch (smallestRing) {\n            case 0:\n                break;\n            case 3:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize3, true);\n                break;\n            case 4:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize4, true);\n                break;\n            case 5:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize5, true);\n                break;\n            case 6:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize6, true);\n                break;\n            case 7:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize7, true);\n                break;\n            default:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSizeLarge, true);\n        }\n        const nbHydrogens = molecule.getAllHydrogens(mapping);\n        if (nbHydrogens === 0) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, true);\n        }\n        if (nbHydrogens === 1) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, true);\n        }\n        if (nbHydrogens === 2) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, true);\n        }\n        if (nbHydrogens === 3) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, true);\n        }\n    }\n}\n// tagging atoms may change the order of the atoms because hydrogens must be at the end of the file\n// in order to remember the rootAtoms we will tag before\nfunction internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct) {\n    const OCL = molecule.getOCL();\n    if (tagAtoms) {\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            molecule.setAtomMapNo(i, i + 1);\n        }\n        if (tagAtoms.length > 0) {\n            for (const atom of tagAtoms) {\n                tagAtomFct(molecule, atom);\n            }\n        }\n    }\n    // this force reordering of atoms in order to have hydrogens at the end\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    if (rootAtoms.length > 0) {\n        const mapping = new Int32Array(molecule.getAllAtoms());\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            mapping[molecule.getAtomMapNo(i) - 1] = i;\n        }\n        for (let i = 0; i < rootAtoms.length; i++) {\n            rootAtoms[i] = mapping[rootAtoms[i]];\n        }\n    }\n}\n//# sourceMappingURL=getHoseCodesForAtomsAsFragments.js.map","/**\n * We need to create an array of atoms\n * that contains an array of pathLength\n * that contains an array of object\n * @param molecule\n * @param options\n * @returns\n */\nexport function getAllAtomsPaths(molecule, options = {}) {\n    const { maxPathLength = 5 } = options;\n    const allAtomsPaths = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const oneAtomPaths = [];\n        allAtomsPaths.push(oneAtomPaths);\n        let atomPaths = [{ path: [i], pathLength: 0 }];\n        oneAtomPaths.push(atomPaths);\n        let nextIndexes = [0];\n        let nextAtoms = [i];\n        for (let sphere = 1; sphere <= maxPathLength; sphere++) {\n            atomPaths = [];\n            oneAtomPaths.push(atomPaths);\n            const currentIndexes = nextIndexes;\n            const currentAtoms = nextAtoms;\n            nextIndexes = [];\n            nextAtoms = [];\n            for (let i = 0; i < currentIndexes.length; i++) {\n                const atom = currentAtoms[i];\n                const index = currentIndexes[i];\n                const previousPath = oneAtomPaths[sphere - 1]?.[index]?.path;\n                if (!previousPath) {\n                    throw new Error(`Unexpected missing previousPath for sphere ${sphere - 1} and index ${index}`);\n                }\n                for (let conn = 0; conn < molecule.getAllConnAtoms(atom); conn++) {\n                    const connectedAtom = molecule.getConnAtom(atom, conn);\n                    if (previousPath.includes(connectedAtom))\n                        continue;\n                    nextIndexes.push(atomPaths.length);\n                    nextAtoms.push(connectedAtom);\n                    atomPaths.push({\n                        path: [...previousPath, connectedAtom],\n                        pathLength: sphere,\n                    });\n                }\n            }\n        }\n    }\n    return allAtomsPaths;\n}\n//# sourceMappingURL=getAllAtomsPaths.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Algorithm that finds the shortest distance from one node to the other\n * @param {Matrix} adjMatrix - A squared adjacency matrix\n * @return {Matrix} - Distance from a node to the other, -1 if the node is unreachable\n */\nexport function floydWarshall(adjMatrix) {\n    if (Matrix.isMatrix(adjMatrix) && adjMatrix.columns !== adjMatrix.rows) {\n        throw new TypeError('The adjacency matrix should be squared');\n    }\n    const numVertices = adjMatrix.columns;\n    let distMatrix = new Matrix(numVertices, numVertices);\n    distMatrix.apply((row, column) => {\n        // principal diagonal is 0\n        if (row === column) {\n            distMatrix.set(row, column, 0);\n        }\n        else {\n            let val = adjMatrix.get(row, column);\n            if (val || Object.is(val, -0)) {\n                // edges values remain the same\n                distMatrix.set(row, column, val);\n            }\n            else {\n                // 0 values become infinity\n                distMatrix.set(row, column, Number.POSITIVE_INFINITY);\n            }\n        }\n    });\n    for (let k = 0; k < numVertices; ++k) {\n        for (let i = 0; i < numVertices; ++i) {\n            for (let j = 0; j < numVertices; ++j) {\n                let dist = distMatrix.get(i, k) + distMatrix.get(k, j);\n                if (distMatrix.get(i, j) > dist) {\n                    distMatrix.set(i, j, dist);\n                }\n            }\n        }\n    }\n    // When there's no connection the value is -1\n    distMatrix.apply((row, column) => {\n        if (distMatrix.get(row, column) === Number.POSITIVE_INFINITY) {\n            distMatrix.set(row, column, -1);\n        }\n    });\n    return distMatrix;\n}\n//# sourceMappingURL=index.js.map","import { floydWarshall } from 'ml-floyd-warshall';\nimport { Matrix } from 'ml-matrix';\n/**\n * Returns a connectivity matrix\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.pathLength=false] - get the path length between atoms\n * @param {boolean} [options.mass=false] - set the nominal mass of the atoms on diagonal\n * @param {boolean} [options.atomicNo=false] - set the atomic number of the atom on diagonal\n * @param {boolean} [options.negativeAtomicNo=false] - set the atomic number * -1 of the atom on diagonal\n * @param {boolean} [options.sdt=false] - set 1, 2 or 3 depending if single, double or triple bond\n * @param {boolean} [options.sdta=false] - set 1, 2, 3 or 4 depending if single, double, triple or aromatic  bond\n */\nexport function getConnectivityMatrix(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const nbAtoms = molecule.getAllAtoms();\n    let result = new Array(nbAtoms).fill();\n    result = result.map(() => new Array(nbAtoms).fill(0));\n    if (!options.pathLength) {\n        if (options.atomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.negativeAtomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = -molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.mass) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = OCL.Molecule.cRoundedMass[molecule.getAtomicNo(i)];\n            }\n        }\n        else {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = 1;\n            }\n        }\n    }\n    if (options.sdt) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n            }\n        }\n    }\n    else if (options.sdta) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                const bondNumber = molecule.getConnBond(i, j);\n                if (molecule.isAromaticBond(bondNumber)) {\n                    result[i][molecule.getConnAtom(i, j)] = 4;\n                }\n                else {\n                    result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n                }\n            }\n        }\n    }\n    else {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = 1;\n            }\n        }\n    }\n    if (options.pathLength) {\n        result = floydWarshall(new Matrix(result)).to2DArray();\n    }\n    return result;\n}\n//# sourceMappingURL=getConnectivityMatrix.js.map","/**\n * Creates a compact copy of the molecule without custom labels.\n * We don't want that custom labels interfere with hose code and diaID generation.\n * @param molecule\n * @returns\n */\nexport function getCompactCopyWithoutCustomLabels(molecule) {\n    const tempMolecule = molecule.getCompactCopy();\n    for (let i = 0; i < tempMolecule.getAllAtoms(); i++) {\n        tempMolecule.setAtomCustomLabel(i, '');\n    }\n    return tempMolecule;\n}\n//# sourceMappingURL=getCompactCopyWithoutCustomLabels.js.map","import { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nexport function getCanonizedDiaIDs(diaMol, options) {\n    const { logger, maxNbAtoms } = options;\n    const moleculeWithH = diaMol.moleculeWithH;\n    if (moleculeWithH.getAllAtoms() > maxNbAtoms) {\n        logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${moleculeWithH.getAllAtoms()} > ${maxNbAtoms}`);\n        return [];\n    }\n    const heterotopicSymmetryRanks = diaMol.heterotopicSymmetryRanks;\n    const finalRanks = diaMol.finalRanks;\n    const canonizedDiaIDs = new Array(moleculeWithH.getAllAtoms());\n    moleculeWithH.ensureHelperArrays(diaMol.molecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    const cache = {};\n    for (let i = 0; i < diaMol.moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            canonizedDiaIDs[finalRanks[i]] = cache[rank].diaID;\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(diaMol.moleculeWithH);\n        tagAtom(tempMolecule, i);\n        makeRacemic(tempMolecule);\n        const diaID = tempMolecule.getCanonizedIDCode(diaMol.molecule.getOCL().Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        canonizedDiaIDs[finalRanks[i]] = diaID;\n    }\n    return canonizedDiaIDs;\n}\n//# sourceMappingURL=getCanonizedDiaIDs.js.map","import { getHoseCodesForAtomsAsFragments } from './getHoseCodesForAtomsAsFragments.js';\n/**\n * Returns an array of strings (idCodes) specified molecule. Each string corresponds to a\n * hose code. By default it will calculate the hose codes for sphere 0 to 4 and will reuse\n * the existing tagged atoms.\n * @param molecule - The OCL molecule to process.\n * @param options - Options for generating hose codes.\n * @returns An array of hose code strings.\n */\nexport function getHoseCodesForAtomsAsStrings(molecule, options = {}) {\n    const fragments = getHoseCodesForAtomsAsFragments(molecule, options);\n    const OCL = molecule.getOCL();\n    const hoses = [];\n    for (const fragment of fragments) {\n        hoses.push(fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS));\n    }\n    return hoses;\n}\n//# sourceMappingURL=getHoseCodesForAtomsAsStrings.js.map","import { getHoseCodesForAtomsAsStrings } from '../hose/getHoseCodesForAtomsAsStrings.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\n/**\n * Get the canonized hose codes for a topic molecule. It will use the moleculeWithH\n * @param topicMolecule - The topic molecule to get the hose codes for.\n * @returns The canonized hose codes.\n */\nexport function getCanonizedHoseCodes(topicMolecule) {\n    const options = topicMolecule.options;\n    const heterotopicSymmetryRanks = topicMolecule.heterotopicSymmetryRanks;\n    const moleculeWithH = topicMolecule.moleculeWithH;\n    const finalRanks = topicMolecule.finalRanks;\n    const canonizedHoseCodes = new Array(moleculeWithH.getAllAtoms());\n    moleculeWithH.ensureHelperArrays(topicMolecule.molecule.getOCL().Molecule\n        .cHelperSymmetryStereoHeterotopicity);\n    const cache = {};\n    for (let i = 0; i < topicMolecule.moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            canonizedHoseCodes[finalRanks[i]] = cache[rank].diaID;\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(moleculeWithH);\n        tagAtom(tempMolecule, i);\n        const hoses = getHoseCodesForAtomsAsStrings(tempMolecule, options);\n        canonizedHoseCodes[finalRanks[i]] = hoses;\n    }\n    return canonizedHoseCodes;\n}\n//# sourceMappingURL=getCanonizedHoseCodes.js.map","import { getHoseCodesForAtomsAsStrings } from \"../hose/getHoseCodesForAtomsAsStrings.js\";\n/**\n * For each atom we will return an array of objects\n * @param topicMolecule\n * @param options\n * @returns\n */\nexport function getCanonizedHoseCodesForPath(topicMolecule, options = {}) {\n    const { minPathLength = 0, maxPathLength = topicMolecule.options.maxPathLength, toAtomicNo, fromAtomicNo, } = options;\n    if (maxPathLength > topicMolecule.options.maxPathLength) {\n        throw new Error(`maxPathLength cannot be larger than the one defined in topicMolecule: ${topicMolecule.options.maxPathLength}`);\n    }\n    const atomsPaths = topicMolecule.atomsPaths;\n    const molecule = topicMolecule.moleculeWithH;\n    const results = new Array(molecule.getAllAtoms());\n    for (let fromAtom = 0; fromAtom < molecule.getAllAtoms(); fromAtom++) {\n        results[fromAtom] = {\n            fromDiaID: topicMolecule.diaIDs[fromAtom],\n            paths: [],\n        };\n        if (fromAtomicNo && molecule.getAtomicNo(fromAtom) !== fromAtomicNo) {\n            continue;\n        }\n        for (let pathLength = minPathLength; pathLength <= maxPathLength; pathLength++) {\n            const pathOfSpecificLength = atomsPaths[fromAtom][pathLength];\n            for (const path of pathOfSpecificLength) {\n                const toAtom = path.path.at(-1);\n                if (toAtomicNo && molecule.getAtomicNo(toAtom) !== toAtomicNo) {\n                    continue;\n                }\n                results[fromAtom].paths.push({\n                    toDiaID: topicMolecule.diaIDs[toAtom],\n                    pathLength: path.pathLength,\n                    path: path.path,\n                    hoses: getHoseCodesForAtomsAsStrings(topicMolecule.moleculeWithH, {\n                        ...options,\n                        rootAtoms: path.path,\n                        tagAtoms: [fromAtom, toAtom],\n                    }),\n                });\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getCanonizedHoseCodesForPaths.js.map","export function getDiaIDsAndInfo(diaMol, canonizedDiaIDs) {\n    const newDiaIDs = [];\n    const molecule = diaMol.moleculeWithH;\n    const counts = {};\n    for (const diaID of canonizedDiaIDs) {\n        if (!counts[diaID]) {\n            counts[diaID] = 0;\n        }\n        counts[diaID]++;\n    }\n    for (let i = 0; i < canonizedDiaIDs.length; i++) {\n        const diaID = canonizedDiaIDs[diaMol.finalRanks[i]];\n        if (!diaID) {\n            throw new Error(`Unexpected missing canonized diaID for atom ${i}`);\n        }\n        const count = counts[diaID];\n        if (!count) {\n            throw new Error(`Unexpected missing count for diaID ${diaID}`);\n        }\n        const newDiaID = {\n            idCode: diaID,\n            attachedHydrogensIDCodes: [],\n            attachedHydrogens: [],\n            nbAttachedHydrogens: 0,\n            atomLabel: molecule.getAtomLabel(i),\n            nbEquivalentAtoms: count,\n            heavyAtom: undefined,\n            atomMapNo: molecule.getAtomMapNo(i),\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = canonizedDiaIDs[diaMol.finalRanks[atom]];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbAttachedHydrogens++;\n                newDiaID.attachedHydrogens.push(atom);\n                const hydrogenDiaID = canonizedDiaIDs[diaMol.finalRanks[atom]];\n                if (!hydrogenDiaID) {\n                    throw new Error(`Unexpected missing canonized diaID for atom ${atom}`);\n                }\n                if (!newDiaID.attachedHydrogensIDCodes.includes(hydrogenDiaID)) {\n                    newDiaID.attachedHydrogensIDCodes.push(hydrogenDiaID);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiaIDsAndInfo.js.map","/**\n * Get a unique atomic number for a X\n * @param xMolecule\n * @returns\n */\nexport function getHeterotopicSymmetryRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        symmetryRanks.push(xMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\nexport function getFinalRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    return xMolecule.getFinalRanks(0).map((rank) => rank - 1);\n}\n//# sourceMappingURL=getHeterotopicSymmetryRanks.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * Returns the atoms that are chiral or pseudo chiral.\n * There could be some issues if the original molecule lacks chiral bonds.\n * The function will add them and this could lead to some issues in the case of pseudochiral atoms.\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number[]}\n */\nexport function getChiralOrHeterotopicCarbons(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomicNumber = getXAtomicNumber(molecule);\n    const internalMolecule = molecule.getCompactCopy();\n    // hydrogens may be diastereotopic, we need to add them\n    internalMolecule.addImplicitHydrogens();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomicNumber);\n        }\n    }\n    addPossibleChiralBonds(internalMolecule);\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (internalMolecule.getAtomicNo(i) === xAtomicNumber) {\n            continue;\n        }\n        if (molecule.getAtomicNo(i) !== internalMolecule.getAtomicNo(i)) {\n            throw new Error('getChiralOrHeterotopicCarbons: mismatching atomic numbers');\n        }\n        if (internalMolecule.getAtomicNo(i) !== 6) {\n            continue;\n        }\n        const neighbourSymmetries = getNeighbourSymmetries(internalMolecule, i);\n        if (neighbourSymmetries.length === 4) {\n            atoms.push(i);\n        }\n    }\n    return atoms;\n}\nfunction addPossibleChiralBonds(molecule) {\n    const { Molecule } = molecule.getOCL();\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    for (let i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) !== 6)\n            continue;\n        if (molecule.getStereoBond(i) >= 0)\n            continue;\n        const neighbourSymmetries = getNeighbourSymmetries(molecule, i);\n        if (neighbourSymmetries.length <= 2)\n            continue;\n        const stereoBond = molecule.getAtomPreferredStereoBond(i);\n        if (stereoBond !== -1) {\n            molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n            if (molecule.getBondAtom(1, stereoBond) === i) {\n                const connAtom = molecule.getBondAtom(0, stereoBond);\n                molecule.setBondAtom(0, stereoBond, i);\n                molecule.setBondAtom(1, stereoBond, connAtom);\n            }\n            // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0);\n        }\n    }\n}\nfunction getNeighbourSymmetries(molecule, iAtom) {\n    const neighbourSymmetries = [];\n    for (let j = 0; j < molecule.getAllConnAtoms(iAtom); j++) {\n        const connAtom = molecule.getConnAtom(iAtom, j);\n        const symmetryRank = molecule.getSymmetryRank(connAtom);\n        if (!neighbourSymmetries.includes(symmetryRank)) {\n            neighbourSymmetries.push(molecule.getSymmetryRank(connAtom));\n        }\n    }\n    return neighbourSymmetries;\n}\n//# sourceMappingURL=getChiralOrHeterotopicCarbons.js.map","import { getChiralOrHeterotopicCarbons } from './getChiralOrHeterotopicCarbons.js';\n/**\n * This function will add missing chiral bonds on carbons ensure that all enantiotopic\n * or diastereotopic atoms can be identified uniquely\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {number} [options.esrType=Molecule.cESRTypeAnd]\n * @param {boolean} [options.atLeastThreeAtoms=true] - if true, only carbons with at least three atoms will be considered\n */\nexport function ensureHeterotopicChiralBonds(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { esrType = Molecule.cESRTypeAnd, atLeastThreeAtoms = true } = options;\n    molecule.ensureHelperArrays(Molecule.cHelperBitNeighbours);\n    const heterotopicCarbons = getChiralOrHeterotopicCarbons(molecule);\n    for (const i of heterotopicCarbons) {\n        if (atLeastThreeAtoms && molecule.getAllConnAtoms(i) < 3)\n            continue;\n        if (molecule.getStereoBond(i) === -1) {\n            const stereoBond = molecule.getAtomPreferredStereoBond(i);\n            if (stereoBond !== -1) {\n                molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n                if (molecule.getBondAtom(1, stereoBond) === i) {\n                    const connAtom = molecule.getBondAtom(0, stereoBond);\n                    molecule.setBondAtom(0, stereoBond, i);\n                    molecule.setBondAtom(1, stereoBond, connAtom);\n                }\n                // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n                molecule.setAtomESR(i, esrType, 0);\n            }\n        }\n    }\n}\n//# sourceMappingURL=ensureHeterotopicChiralBonds.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\n/**\n * Expand all the implicit hydrogens and ensure chiral bonds on heterotopic bonds\n * @param molecule\n * @param options\n * @returns\n */\nexport function getMoleculeWithH(molecule, options) {\n    const { logger, maxNbAtoms } = options;\n    const moleculeWithH = molecule.getCompactCopy();\n    moleculeWithH.addImplicitHydrogens();\n    if (moleculeWithH.getAllAtoms() > maxNbAtoms) {\n        logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${moleculeWithH.getAllAtoms()} > ${maxNbAtoms}`);\n    }\n    else {\n        ensureHeterotopicChiralBonds(moleculeWithH);\n    }\n    return moleculeWithH;\n}\n//# sourceMappingURL=getMoleculeWithH.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * In order to be able to give a unique ID to all the atoms we are replacing the H by X\n * @param moleculeWithH\n * @returns\n */\nexport function getXMolecule(moleculeWithH) {\n    const xAtomNumber = getXAtomicNumber(moleculeWithH);\n    const xMolecule = moleculeWithH.getCompactCopy();\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (xMolecule.getAtomicNo(i) === 1) {\n            xMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    return xMolecule;\n}\n//# sourceMappingURL=getXMolecule.js.map","import { getHoseCodesForAtomsAsFragments } from '../hose/getHoseCodesForAtomsAsFragments.js';\nimport { getAllAtomsPaths } from \"../path/getAllAtomsPaths.js\";\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getCanonizedDiaIDs } from \"./getCanonizedDiaIDs.js\";\nimport { getCanonizedHoseCodes } from \"./getCanonizedHoseCodes.js\";\nimport { getCanonizedHoseCodesForPath } from \"./getCanonizedHoseCodesForPaths.js\";\nimport { getDiaIDsAndInfo } from \"./getDiaIDsAndInfo.js\";\nimport { getFinalRanks, getHeterotopicSymmetryRanks, } from \"./getHeterotopicSymmetryRanks.js\";\nimport { getMoleculeWithH } from \"./getMoleculeWithH.js\";\nimport { getXMolecule } from \"./getXMolecule.js\";\n/**\n * This class deals with topicity information and hose codes\n * It is optimized to avoid recalculation of the same information\n */\nexport class TopicMolecule {\n    originalMolecule;\n    molecule;\n    idCode;\n    options;\n    cache;\n    constructor(molecule, options = {}) {\n        this.originalMolecule = molecule;\n        this.options = {\n            maxPathLength: 5,\n            maxNbAtoms: 250,\n            logger: console,\n            ...options,\n        };\n        this.idCode = molecule.getIDCode();\n        this.molecule = this.originalMolecule.getCompactCopy();\n        this.molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        this.molecule.ensureHelperArrays(this.molecule.getOCL().Molecule.cHelperNeighbours);\n        this.cache = {};\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo corresponding to the atom number.\n     * It will enforce mapNo in molecule and moleculeWithH\n     * We start numbering the atoms at 1\n     */\n    setAtomNoInMapNo() {\n        const molecules = [this.molecule, this.moleculeWithH];\n        for (const molecule of molecules) {\n            for (let i = 0; i < molecule.getAllAtoms(); i++) {\n                molecule.setAtomMapNo(i, i + 1, false);\n            }\n        }\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo in the molecule (and not the moleculeWithH! )\n     */\n    ensureMapNo() {\n        const existingMapNo = {};\n        for (let i = 0; i < this.molecule.getAllAtoms(); i++) {\n            const mapNo = this.molecule.getAtomMapNo(i);\n            if (mapNo) {\n                if (existingMapNo[mapNo]) {\n                    throw new Error('The molecule contains several atoms with the same mapNo');\n                }\n                existingMapNo[mapNo] = true;\n            }\n        }\n        let nextMapNo = 1;\n        for (let i = 0; i < this.molecule.getAllAtoms(); i++) {\n            const mapNo = this.molecule.getAtomMapNo(i);\n            if (!mapNo) {\n                while (existingMapNo[nextMapNo]) {\n                    nextMapNo++;\n                }\n                existingMapNo[nextMapNo] = true;\n                this.molecule.setAtomMapNo(i, nextMapNo, false);\n            }\n        }\n    }\n    /**\n     * For each atom we will return an array of objects that contains the\n     * different possible path as well as the canonic hose codes\n     * @param options\n     * @returns\n     */\n    getHoseCodesForPath(options = {}) {\n        return getCanonizedHoseCodesForPath(this, options);\n    }\n    /**\n     * Return one fragment for a specific sphere size and specific root atoms\n     * @param rootAtoms\n     * @param options\n     * @returns\n     */\n    getHoseFragment(rootAtoms, options = {}) {\n        const { sphereSize = 2, tagAtoms = rootAtoms, tagAtomFct } = options;\n        const fragments = getHoseCodesForAtomsAsFragments(this.moleculeWithH, {\n            rootAtoms,\n            minSphereSize: sphereSize,\n            maxSphereSize: sphereSize,\n            tagAtoms,\n            tagAtomFct,\n        });\n        return fragments[0];\n    }\n    getAtomPathsFrom(atom, options = {}) {\n        const { minPathLength = 1, maxPathLength = this.options.maxPathLength, toAtomicNo, } = options;\n        if (maxPathLength > this.options.maxPathLength) {\n            throw new Error('The maxPathLength is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom];\n        if (!atomPaths) {\n            throw new Error('Unexpected missing atom path');\n        }\n        const paths = [];\n        for (let i = minPathLength; i <= maxPathLength; i++) {\n            const atomPathValue = atomPaths[i];\n            if (!atomPathValue) {\n                throw new Error(`Unexpected missing atom path at index ${i}`);\n            }\n            for (const atomPath of atomPathValue) {\n                if (!toAtomicNo ||\n                    this.moleculeWithH.getAtomicNo(atomPath.path.at(-1)) ===\n                        toAtomicNo) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    getAtomPaths(atom1, atom2, options = {}) {\n        const { pathLength } = options;\n        if (pathLength !== undefined && pathLength > this.options.maxPathLength) {\n            throw new Error('The distance is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom1];\n        if (!atomPaths) {\n            throw new Error('Unexpected missing atom path');\n        }\n        const minDistance = pathLength || 0;\n        const maxDistance = pathLength || this.options.maxPathLength;\n        const paths = [];\n        for (let i = minDistance; i <= maxDistance; i++) {\n            const atomPathValue = atomPaths[i];\n            if (!atomPathValue) {\n                throw new Error(`Unexpected missing atom path at index ${i}`);\n            }\n            for (const atomPath of atomPathValue) {\n                if (atomPath.path.at(-1) === atom2) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    get atomsPaths() {\n        if (this.cache.atomsPaths)\n            return this.cache.atomsPaths;\n        this.cache.atomsPaths = getAllAtomsPaths(this.moleculeWithH, {\n            maxPathLength: this.options.maxPathLength,\n        });\n        return this.cache.atomsPaths;\n    }\n    toMolfile(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.molecule.toMolfile();\n        }\n        return this.molecule.toMolfileV3();\n    }\n    getMolecule() {\n        return this.molecule;\n    }\n    /**\n     * Returns a new TopicMolecule but will copy precalculated information\n     * if possible (same idCode). This is very practical when expanding hydrogens\n     * for example.\n     * @param molecule\n     * @returns\n     */\n    fromMolecule(molecule) {\n        const idCode = molecule.getIDCode();\n        if (idCode !== this.idCode) {\n            // no way for optimisation\n            return new TopicMolecule(molecule);\n        }\n        const topicMolecule = new TopicMolecule(molecule);\n        topicMolecule.cache = {\n            canonizedDiaIDs: this.cache.canonizedDiaIDs,\n            canonizedHoseCodes: this.cache.canonizedHoseCodes,\n        };\n        return topicMolecule;\n    }\n    /**\n     * Returns a molecule with all the hydrogens added. The order is NOT canonized\n     */\n    get moleculeWithH() {\n        if (this.cache.moleculeWithH)\n            return this.cache.moleculeWithH;\n        this.cache.moleculeWithH = getMoleculeWithH(this.molecule, {\n            maxNbAtoms: this.options.maxNbAtoms,\n            logger: this.options.logger,\n        });\n        return this.cache.moleculeWithH;\n    }\n    get xMolecule() {\n        if (this.cache.xMolecule)\n            return this.cache.xMolecule;\n        this.cache.xMolecule = getXMolecule(this.moleculeWithH);\n        return this.cache.xMolecule;\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get diaIDs() {\n        if (this.cache.diaIDs)\n            return this.cache.diaIDs;\n        const diaIDs = [];\n        if (this.moleculeWithH.getAllAtoms() > this.options.maxNbAtoms) {\n            this.options.logger.warn(`too many atoms to evaluate heterotopicity: ${this.moleculeWithH.getAllAtoms()} > ${this.options.maxNbAtoms}`);\n        }\n        else {\n            for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n                diaIDs.push(this.canonizedDiaIDs[this.finalRanks[i]]);\n            }\n        }\n        this.cache.diaIDs = diaIDs;\n        return diaIDs;\n    }\n    /**\n     * We return the atomIDs corresponding to the specified diaID as well has the attached hydrogens or heavy atoms\n     * @param diaID\n     * @returns\n     */\n    getDiaIDsObject() {\n        return groupDiastereotopicAtomIDsAsObject(this.diaIDs, this.molecule, this.moleculeWithH);\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get hoseCodes() {\n        if (this.cache.hoseCodes)\n            return this.cache.hoseCodes;\n        const hoseCodes = [];\n        for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n            hoseCodes.push(this.canonizedHoseCodes[this.finalRanks[i]]);\n        }\n        this.cache.hoseCodes = hoseCodes;\n        return hoseCodes;\n    }\n    get canonizedDiaIDs() {\n        if (this.cache.canonizedDiaIDs)\n            return this.cache.canonizedDiaIDs;\n        this.cache.canonizedDiaIDs = getCanonizedDiaIDs(this, {\n            maxNbAtoms: this.options.maxNbAtoms,\n            logger: this.options.logger,\n        });\n        return this.cache.canonizedDiaIDs;\n    }\n    get canonizedHoseCodes() {\n        if (this.cache.canonizedHoseCodes) {\n            return this.cache.canonizedHoseCodes;\n        }\n        this.cache.canonizedHoseCodes = getCanonizedHoseCodes(this);\n        return this.cache.canonizedHoseCodes;\n    }\n    /**\n     * Returns the distance matrix for the current moleculeWithH\n     */\n    get distanceMatrix() {\n        return getConnectivityMatrix(this.moleculeWithH, { pathLength: true });\n    }\n    get diaIDsAndInfo() {\n        if (this.cache.diaIDsAndInfo) {\n            return this.cache.diaIDsAndInfo;\n        }\n        this.cache.diaIDsAndInfo = getDiaIDsAndInfo(this, this.canonizedDiaIDs);\n        return this.cache.diaIDsAndInfo;\n    }\n    /**\n     * Returns symmetryRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get heterotopicSymmetryRanks() {\n        if (this.cache.heterotopicSymmetryRanks) {\n            return this.cache.heterotopicSymmetryRanks;\n        }\n        this.cache.heterotopicSymmetryRanks = getHeterotopicSymmetryRanks(this.xMolecule);\n        return [...this.cache.heterotopicSymmetryRanks];\n    }\n    /**\n     * Returns finalRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * All the atoms have a unique identifier.j\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get finalRanks() {\n        if (this.cache.finalRanks)\n            return this.cache.finalRanks;\n        this.cache.finalRanks = getFinalRanks(this.xMolecule);\n        return this.cache.finalRanks;\n    }\n    toMolfileWithH(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.moleculeWithH.toMolfile();\n        }\n        return this.moleculeWithH.toMolfileV3();\n    }\n    toMolfileWithoutH(options = {}) {\n        const molecule = this.molecule.getCompactCopy();\n        molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        const atomsToDelete = [];\n        for (let atomID = 0; atomID < molecule.getAtoms(); atomID++) {\n            if (molecule.getExplicitHydrogens(atomID) > 0) {\n                for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n                    const connectedAtom = molecule.getConnAtom(atomID, i);\n                    if (molecule.getAtomicNo(connectedAtom) === 1) {\n                        atomsToDelete.push(connectedAtom);\n                    }\n                }\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n        const { version = 2 } = options;\n        if (version === 2) {\n            return molecule.toMolfile();\n        }\n        return molecule.toMolfileV3();\n    }\n    /**\n     * Returns an array of objects containing the oclID and the corresponding hydrogens and atoms\n     * for the specified atomLabel (if any)\n     * This always applied to the molecule with expanded hydrogens and chirality\n     * @param options\n     * @returns\n     */\n    getGroupedDiastereotopicAtomIDs(options = {}) {\n        if (!this.diaIDs)\n            return undefined;\n        return groupDiastereotopicAtomIDs(this.diaIDs, this.moleculeWithH, options);\n    }\n    /**\n     * This method returns a mapping between the diaIDs of the current molecule.\n     * It expects that the initial molfile and the final molfile contains atomMapNo\n     * in order to track which atom becomes which one.\n     * @param molecule\n     */\n    getDiaIDsMapping(molecule) {\n        const topicMolecule = new TopicMolecule(molecule);\n        const originalDiaIDs = this.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const destinationDiaIDs = topicMolecule.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const mapping = {};\n        // we first check all the atoms present in the molfile\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            const newIDCode = destinationDiaID.idCode;\n            const oldIDCode = originalDiaID.idCode;\n            if (oldIDCode in mapping) {\n                if (mapping[oldIDCode] !== newIDCode) {\n                    mapping[oldIDCode] = undefined;\n                }\n            }\n            else {\n                mapping[oldIDCode] = newIDCode;\n            }\n        }\n        // we now check all the attached hydrogens that are not defined in the molfile and were not yet mapped\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            for (let i = 0; i < originalDiaID.attachedHydrogensIDCodes.length; i++) {\n                const oldHydrogenIDCode = originalDiaID.attachedHydrogensIDCodes.at(i);\n                if (mapping[oldHydrogenIDCode])\n                    continue;\n                const newHydrogenIDCode = destinationDiaID.attachedHydrogensIDCodes[i];\n                if (oldHydrogenIDCode && newHydrogenIDCode) {\n                    if (oldHydrogenIDCode in mapping) {\n                        if (mapping[oldHydrogenIDCode] !== newHydrogenIDCode) {\n                            mapping[oldHydrogenIDCode] = undefined;\n                        }\n                    }\n                    else {\n                        mapping[oldHydrogenIDCode] = newHydrogenIDCode;\n                    }\n                }\n            }\n        }\n        return mapping;\n    }\n}\nexport function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const diaIDsObject = groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, molecule, options);\n    return Object.values(diaIDsObject);\n}\nfunction groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, moleculeWithH, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || moleculeWithH.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    oclID: diaID,\n                    atomLabel: moleculeWithH.getAtomLabel(i),\n                    atoms: [],\n                    existingAtoms: [],\n                    heavyAtoms: [],\n                    attachedHydrogens: [],\n                    customLabels: [],\n                    attachedHydrogensCustomLabels: [],\n                    heavyAtomsCustomLabels: [],\n                };\n            }\n            const customLabel = moleculeWithH\n                .getAtomCustomLabel(i)\n                ?.replace(/^\\]/, '');\n            if (customLabel &&\n                !diaIDsObject[diaID].customLabels.includes(customLabel)) {\n                diaIDsObject[diaID].customLabels.push(customLabel);\n            }\n            if (moleculeWithH.getAtomicNo(i) === 1) {\n                const connected = moleculeWithH.getConnAtom(i, 0);\n                if (!diaIDsObject[diaID].heavyAtoms.includes(connected)) {\n                    diaIDsObject[diaID].heavyAtoms.push(connected);\n                }\n                const heavyAtomCustomLabel = molecule\n                    .getAtomCustomLabel(connected)\n                    ?.replace(/^\\]/, '');\n                if (heavyAtomCustomLabel &&\n                    !diaIDsObject[diaID].heavyAtomsCustomLabels.includes(heavyAtomCustomLabel)) {\n                    diaIDsObject[diaID].heavyAtomsCustomLabels.push(heavyAtomCustomLabel);\n                }\n                if (molecule.getAtomicNo(i)) {\n                    diaIDsObject[diaID].existingAtoms.push(i);\n                }\n                else if (!diaIDsObject[diaID].existingAtoms.includes(connected)) {\n                    diaIDsObject[diaID].existingAtoms.push(connected);\n                }\n            }\n            else {\n                for (let j = 0; j < moleculeWithH.getAllConnAtoms(i); j++) {\n                    const connected = moleculeWithH.getConnAtom(i, j);\n                    if (moleculeWithH.getAtomicNo(connected) === 1) {\n                        const attachedHydrogenCustomLabel = molecule\n                            .getAtomCustomLabel(connected)\n                            ?.replace(/^\\]/, '');\n                        if (attachedHydrogenCustomLabel &&\n                            !diaIDsObject[diaID].attachedHydrogensCustomLabels.includes(attachedHydrogenCustomLabel)) {\n                            diaIDsObject[diaID].attachedHydrogensCustomLabels.push(attachedHydrogenCustomLabel);\n                        }\n                        diaIDsObject[diaID].attachedHydrogens.push(connected);\n                    }\n                }\n                diaIDsObject[diaID].existingAtoms.push(i);\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    for (const diaIDObject of Object.values(diaIDsObject)) {\n        diaIDObject.existingAtoms.sort((a, b) => a - b);\n        diaIDObject.attachedHydrogens.sort((a, b) => a - b);\n    }\n    return diaIDsObject;\n}\n//# sourceMappingURL=TopicMolecule.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Returns an array of symmetry ranks.\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getSymmetryRanks(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomNumber = getXAtomicNumber(molecule);\n    // most of the molecules have some symmetry\n    const internalMolecule = molecule.getCompactCopy();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        symmetryRanks.push(internalMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\n//# sourceMappingURL=getSymmetryRanks.js.map","import { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { ensureHeterotopicChiralBonds } from './ensureHeterotopicChiralBonds.js';\n/**\n * Returns an array of diastereotopic ID (as idCode)\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDs(molecule) {\n    const { Molecule } = molecule.getOCL();\n    ensureHeterotopicChiralBonds(molecule);\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const numberAtoms = molecule.getAllAtoms();\n    const ids = [];\n    const cache = {};\n    for (let iAtom = 0; iAtom < numberAtoms; iAtom++) {\n        const rank = symmetryRanks[iAtom];\n        if (rank && cache[rank]) {\n            ids[iAtom] = cache[rank];\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(molecule);\n        tagAtom(tempMolecule, iAtom);\n        makeRacemic(tempMolecule);\n        // We need to ensure the helper array in order to get correctly the result of racemisation\n        ids[iAtom] = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        cache[rank] = ids[iAtom];\n    }\n    return ids;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDsAndH(molecule) {\n    const OCL = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    molecule.addImplicitHydrogens();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const newDiaIDs = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const diaID = diaIDs[i];\n        const newDiaID = {\n            oclID: diaID,\n            hydrogenOCLIDs: [],\n            nbHydrogens: 0,\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = diaIDs[atom];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbHydrogens++;\n                if (!newDiaID.hydrogenOCLIDs.includes(diaIDs[atom])) {\n                    newDiaID.hydrogenOCLIDs.push(diaIDs[atom]);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsAndH.js.map","export function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || molecule.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    atoms: [],\n                    oclID: diaID,\n                    atomLabel: molecule.getAtomLabel(i),\n                };\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    return Object.keys(diaIDsObject).map((key) => diaIDsObject[key]);\n}\n//# sourceMappingURL=groupDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\nimport { groupDiastereotopicAtomIDs } from './groupDiastereotopicAtomIDs.js';\n/**\n * This function groups the diasterotopic atomIds of the molecule based on equivalence of atoms. The output object contains\n * a set of chemically equivalent atoms(element.atoms) and the groups of magnetically equivalent atoms (element.magneticGroups)\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.atomLabel] - Select atoms of the given atomLabel. By default it returns all the explicit atoms in the molecule\n * @returns {Array}\n */\nexport function getGroupedDiastereotopicAtomIDs(molecule, options = {}) {\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    return groupDiastereotopicAtomIDs(diaIDs, molecule, options);\n}\n//# sourceMappingURL=getGroupedDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Parse a molfile and returns an object containing the molecule, the map and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} molfile\n * @returns\n */\nexport function getDiastereotopicAtomIDsFromMolfile(OCL, molfile) {\n    const { map, molecule } = OCL.Molecule.fromMolfileWithAtomMap(molfile);\n    const diaIDsArray = getDiastereotopicAtomIDsAndH(molecule);\n    const diaIDs = {};\n    for (let i = 0; i < map.length; i++) {\n        diaIDs[map[i]] = { source: map[i], destination: i, ...diaIDsArray[i] };\n    }\n    return { map: diaIDs, molecule, diaIDs: diaIDsArray };\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsFromMolfile.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Returns a SVG\n * @param {*} molecule\n * @param {*} [options={}]\n */\nexport function toDiastereotopicSVG(molecule, options = {}) {\n    const { width = 300, height = 200, prefix = 'ocl', heavyAtomHydrogen = false, } = options;\n    let svg = options.svg;\n    let diaIDs = [];\n    const hydrogenInfo = {};\n    for (const line of getDiastereotopicAtomIDsAndH(molecule)) {\n        hydrogenInfo[line.oclID] = line;\n    }\n    if (heavyAtomHydrogen) {\n        for (let i = 0; i < molecule.getAtoms(); i++) {\n            diaIDs.push([]);\n        }\n        const groupedDiaIDs = molecule.getGroupedDiastereotopicAtomIDs();\n        for (const diaID of groupedDiaIDs) {\n            if (hydrogenInfo[diaID.oclID] &&\n                hydrogenInfo[diaID.oclID].nbHydrogens > 0) {\n                for (const atom of diaID.atoms) {\n                    for (const id of hydrogenInfo[diaID.oclID].hydrogenOCLIDs) {\n                        if (!diaIDs[atom * 1].includes(id))\n                            diaIDs[atom].push(id);\n                    }\n                }\n            }\n        }\n    }\n    else {\n        diaIDs = molecule.getDiastereotopicAtomIDs().map((a) => [a]);\n    }\n    if (!svg)\n        svg = molecule.toSVG(width, height, prefix);\n    svg = svg.replaceAll(/Atom:\\d+\"/g, (value) => {\n        const atom = value.replaceAll(/\\D/g, '');\n        return `${value} data-diaid=\"${diaIDs[atom].join(',')}\"`;\n    });\n    return svg;\n}\n//# sourceMappingURL=toDiastereotopicSVG.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns the hose codes for all atoms in the molecule\n * @param {*} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodes(molecule, options = {}) {\n    const { atomLabels, minSphereSize, maxSphereSize } = options;\n    const { Molecule } = molecule.getOCL();\n    const atomicNumbers = atomLabels?.map((label) => Molecule.getAtomicNoFromLabel(label));\n    const internalMolecule = getCompactCopyWithoutCustomLabels(molecule);\n    internalMolecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(internalMolecule);\n    const hoses = [];\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        if (atomicNumbers &&\n            !atomicNumbers.includes(internalMolecule.getAtomicNo(i))) {\n            hoses.push(undefined);\n        }\n        else {\n            const tempMolecule = internalMolecule.getCompactCopy();\n            tagAtom(tempMolecule, i);\n            hoses.push(getHoseCodesForAtomsAsStrings(tempMolecule, {\n                minSphereSize,\n                maxSphereSize,\n            }));\n        }\n    }\n    return hoses;\n}\n//# sourceMappingURL=getHoseCodes.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns an object containing a molfile, molfile with hydrogens, hoses codes and optionally the diaIDs\n * and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {boolean} [options.calculateDiastereotopicIDs=true]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodesAndInfo(molecule, options = {}) {\n    const { minSphereSize, maxSphereSize, calculateDiastereotopicIDs = true, } = options;\n    const { Molecule } = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    // this will force reordering of the hydrogens to the end, just to have the same order as in the molfile\n    molecule.ensureHelperArrays(Molecule.cHelperNeighbours);\n    const newMolfile = molecule.toMolfile();\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const newMolfileWithH = molecule.toMolfile();\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const cache = {};\n    const hoses = [];\n    const diaIDs = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const rank = symmetryRanks[i];\n        if (rank && cache[rank]) {\n            diaIDs.push(cache[rank].diaID);\n            hoses.push(cache[rank].hose);\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(molecule);\n        tagAtom(tempMolecule, i);\n        let diaID;\n        if (calculateDiastereotopicIDs) {\n            makeRacemic(tempMolecule);\n            diaID = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n            diaIDs.push(diaID);\n        }\n        const hose = getHoseCodesForAtomsAsStrings(tempMolecule, {\n            minSphereSize,\n            maxSphereSize,\n        });\n        hoses.push(hose);\n        cache[rank] = { diaID, hose };\n    }\n    const distanceMatrix = getConnectivityMatrix(molecule, { pathLength: true });\n    return {\n        molfile: newMolfile,\n        molfileWithH: newMolfileWithH,\n        hoses,\n        diaIDs: calculateDiastereotopicIDs ? diaIDs : undefined,\n        moleculeWithHydrogens: molecule,\n        distanceMatrix,\n    };\n}\n//# sourceMappingURL=getHoseCodesAndInfo.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns the hose code for specific atom numbers\n * @param {import('openchemlib').Molecule} originalMolecule - The OCL molecule to be fragmented\n * @param {number[]} rootAtoms\n * @param {object} [options={}]\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtoms(originalMolecule, rootAtoms = [], options = {}) {\n    const { minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, } = options;\n    const molecule = getCompactCopyWithoutCustomLabels(originalMolecule);\n    // those 2 lines should be done only once\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    const allowedCustomLabels = [];\n    for (const rootAtom of rootAtoms) {\n        allowedCustomLabels.push(tagAtom(molecule, rootAtom));\n    }\n    return getHoseCodesForAtomsAsStrings(molecule, {\n        minSphereSize,\n        maxSphereSize,\n        allowedCustomLabels,\n        kind,\n    });\n}\n//# sourceMappingURL=getHoseCodesForAtoms.js.map","import { getHoseCodesForAtoms } from './getHoseCodesForAtoms.js';\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} originalMolecule\n * @param {number} rootAtom\n * @param {object} [options={}]\n * @param {boolean} [options.isTagged] - Specify is the atom is already tagged\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtom(originalMolecule, rootAtom, options = {}) {\n    return getHoseCodesForAtoms(originalMolecule, [rootAtom], options);\n}\n//# sourceMappingURL=getHoseCodesForAtom.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns an array of strings (idCodes) specified molecule. Each string corresponds to a\n * hose code. By default it will calculate the hose codes for sphere 0 to 4 and will reuse\n * the existing tagged atoms.\n * This method ensure implicity hydrogens and possible missing chiral bonds.\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to process.\n * @param {object} options - Options for generating hose codes.\n * @param {string[]} [options.allowedCustomLabels] - Array of the custom labels that are considered as root atoms. By default all atoms having a customLabel\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n *  @param {number[]} [options.rootAtoms=[]] - Array of atom from which we should start to create the HOSE. By default we will used the taggedAtoms\n * @param {number[]} [options.tagAtoms=[]] - Array of atom indices to tag as root atoms\n * @param {Function} [options.tagAtomFct=tagAtom] - Function to tag an atom as root atom. By default it is defined internal\n * @returns {Array} - An array of hose code fragments.\n */\nexport function getHoseCodesFromDiastereotopicID(molecule, options = {}) {\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    return getHoseCodesForAtomsAsStrings(molecule, options);\n}\n//# sourceMappingURL=getHoseCodesFromDiastereotopicID.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nlet fragment;\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} molecule\n * @param from\n * @param to\n * @param maxLength\n */\nexport function getHoseCodesForPath(molecule, from, to, maxLength) {\n    const OCL = molecule.getOCL();\n    const originalFrom = from;\n    const originalTo = to;\n    molecule = getCompactCopyWithoutCustomLabels(molecule);\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    const tag1 = tagAtom(molecule, from);\n    const tag2 = tagAtom(molecule, to);\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    from = -1;\n    to = -1;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (tag1 === tag2) {\n            if (molecule.getAtomCustomLabel(i) === tag1) {\n                if (from === -1) {\n                    from = i;\n                }\n                else {\n                    to = i;\n                }\n            }\n        }\n        else {\n            if (tag1 === molecule.getAtomCustomLabel(i)) {\n                from = i;\n            }\n            if (tag2 === molecule.getAtomCustomLabel(i)) {\n                to = i;\n            }\n        }\n    }\n    if (!fragment)\n        fragment = new OCL.Molecule(0, 0);\n    const atoms = [];\n    molecule.getPath(atoms, from, to, maxLength + 1);\n    let min = 0;\n    let max = 0;\n    const atomMask = new Array(molecule.getAllAtoms()).fill(false);\n    const atomList = new Array(molecule.getAllAtoms()).fill(-1);\n    const hoses = [];\n    for (let sphere = 0; sphere <= 2; sphere++) {\n        if (max === 0) {\n            for (const atom of atoms) {\n                atomMask[atom] = true;\n                atomList[max++] = atom;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        atomMask[connAtom] = true;\n                        atomList[newMax++] = connAtom;\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        const atomMap = [];\n        molecule.copyMoleculeByAtoms(fragment, atomMask, true, atomMap);\n        makeRacemic(fragment);\n        const oclID = fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        hoses.push({\n            sphere,\n            oclID,\n        });\n    }\n    return {\n        atoms: originalAtoms,\n        from: originalFrom,\n        to: originalTo,\n        torsion,\n        hoses,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getHoseCodesForPath.js.map","/**\n * Create a polymer from a unit, alpha and omega groups\n * A unit must contain a R1 and a R2\n * An alpha end group must contain a R1\n * An omega end group must contain a R2\n * @param {import('openchemlib').Molecule} unit - an instance of OCL.Molecule\n * @param {object} options\n * @param {number} [options.count=10] - number of units\n * @param {boolean} [options.markMonomer=false] - mark the different units of the polymer in the atom map\n * @param {import('openchemlib').Molecule} [options.alpha] - alpha end group, default is an hydrogen\n * @param {import('openchemlib').Molecule} [options.gamma] - omega end group, default is an hydrogen\n */\nexport function createPolymer(unit, options = {}) {\n    const { count = 10 } = options;\n    checkEntity(unit, 'unit');\n    const { Molecule } = unit.getOCL();\n    const { alpha, gamma } = getAlphaGamma(unit, options);\n    checkEntity(alpha, 'alpha');\n    checkEntity(gamma, 'gamma');\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    const polymer = alpha.getCompactCopy();\n    polymer.addMolecule(getUnit(unit, 1, options));\n    addBond(polymer, r1AtomicNo, r1AtomicNo);\n    for (let i = 0; i < count - 1; i++) {\n        polymer.addMolecule(getUnit(unit, i + 2, options));\n        addBond(polymer, r2AtomicNo, r1AtomicNo);\n    }\n    polymer.addMolecule(gamma);\n    addBond(polymer, r2AtomicNo, r2AtomicNo);\n    polymer.ensureHelperArrays(Molecule.cHelperNeighbours);\n    // encoding directly in atomNapNo didn't work out because it was removed when deleting atoms\n    for (let i = 0; i < polymer.getAtoms(); i++) {\n        polymer.setAtomMapNo(i, (polymer.getAtomCustomLabel(i) || '').replace(/monomer_/, ''));\n        polymer.setAtomCustomLabel(i, '');\n    }\n    return polymer;\n}\nfunction getUnit(unit, index, options) {\n    const { markMonomer = false } = options;\n    if (markMonomer) {\n        unit = unit.getCompactCopy();\n        unit.ensureHelperArrays(unit.getOCL().Molecule.cHelperNeighbours);\n        for (let j = 0; j < unit.getAtoms(); j++) {\n            unit.setAtomCustomLabel(j, `monomer_${index}`);\n        }\n    }\n    return unit;\n}\nfunction addBond(molecule, firstAtomicNo, secondAtomicNo) {\n    molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n    let i, j;\n    loop: for (i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === firstAtomicNo) {\n            for (j = i + 1; j < molecule.getAtoms(); j++) {\n                if (molecule.getAtomicNo(j) === secondAtomicNo) {\n                    molecule.addBond(molecule.getConnAtom(i, 0), molecule.getConnAtom(j, 0), 1);\n                    break loop;\n                }\n            }\n        }\n    }\n    molecule.deleteAtoms([i, j]);\n}\nfunction checkEntity(unit, kind) {\n    let nbR1 = 1;\n    let nbR2 = 1;\n    switch (kind) {\n        case 'unit':\n            break;\n        case 'alpha':\n            nbR2 = 0;\n            break;\n        case 'gamma':\n            nbR1 = 0;\n            break;\n        default:\n            throw new Error('Unknown kind');\n    }\n    if (!unit) {\n        throw new Error('unit is required');\n    }\n    const { Molecule } = unit.getOCL();\n    // unit must contain ONE R1 and ONE R2\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    let r1Count = 0;\n    let r2Count = 0;\n    for (let i = 0; i < unit.getAtoms(); i++) {\n        if (unit.getAtomicNo(i) === r1AtomicNo) {\n            r1Count++;\n        }\n        if (unit.getAtomicNo(i) === r2AtomicNo) {\n            r2Count++;\n        }\n    }\n    if (r1Count !== nbR1) {\n        throw new Error(`${kind} must contain ${nbR1} R1`);\n    }\n    if (r2Count !== nbR2) {\n        throw new Error(`${kind} must contain ${nbR2} R2`);\n    }\n}\nfunction getAlphaGamma(unit, options) {\n    let { alpha, gamma } = options;\n    const { Molecule } = unit.getOCL();\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    if (!alpha) {\n        alpha = Molecule.fromSmiles('CC');\n        alpha.setAtomicNo(0, r1AtomicNo);\n        alpha.setAtomicNo(1, 1);\n    }\n    if (!gamma) {\n        gamma = Molecule.fromSmiles('CC');\n        gamma.setAtomicNo(0, r2AtomicNo);\n        gamma.setAtomicNo(1, 1);\n    }\n    return { alpha, gamma };\n}\nfunction getR1R2AtomicNo(Molecule) {\n    const r1AtomicNo = Molecule.getAtomicNoFromLabel('R1', Molecule.cPseudoAtomsRGroups);\n    const r2AtomicNo = Molecule.getAtomicNoFromLabel('R2', Molecule.cPseudoAtomsRGroups);\n    return { r1AtomicNo, r2AtomicNo };\n}\n//# sourceMappingURL=createPolymer.js.map","var Cl=class{copyMolecule(Z){let Bt=Z.getIDCodeAndCoordinates();navigator.clipboard.writeText(`${Bt.idCode} ${Bt.coordinates}`)}pasteMolecule(){return null}};var DS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",JU=new Uint8Array(256);for(let w=0;w<DS.length;w++)JU[DS.charCodeAt(w)]=w;function uS(w){let Z=w.length*.75,Bt=w.length,ot,Ft=0,H1,bt,y1,i1;w.at(-1)===\"=\"&&(Z--,w.at(-2)===\"=\"&&Z--);let L1=new ArrayBuffer(Z),u1=new Uint8Array(L1);for(ot=0;ot<Bt;ot+=4)H1=JU[w.charCodeAt(ot)],bt=JU[w.charCodeAt(ot+1)],y1=JU[w.charCodeAt(ot+2)],i1=JU[w.charCodeAt(ot+3)],u1[Ft++]=H1<<2|bt>>4,u1[Ft++]=(bt&15)<<4|y1>>2,u1[Ft++]=(y1&3)<<6|i1&63;return L1}function Ml(w){return w.toString(16).padStart(2,\"0\")}var hr=globalThis.devicePixelRatio||1;var z2=class{constructor(Z){this.ctx=Z,this.ctx.textAlign=\"left\",this.ctx.textBaseline=\"top\",this.currentFontSize=12,this.currentFont=\"12px sans-serif\",this.ctx.font=this.currentFont,this.currentColor=\"#000000\",this.currentLineWidth=1,this.canvasCache=new Map}clearRect(Z,Bt,ot,Ft){this.ctx.clearRect(Z,Bt,ot,Ft)}getBackgroundRGB(){return 16777215}getForegroundRGB(){return 0}getSelectionBackgroundRGB(){return 12310268}getLineWidth(){return this.currentLineWidth}setRGB(Z){let Bt=Z>>>16&255,ot=Z>>>8&255,Ft=Z>>>0&255;this.currentColor=`#${Ml(Bt)}${Ml(ot)}${Ml(Ft)}`,this.ctx.fillStyle=this.currentColor,this.ctx.strokeStyle=this.currentColor}setFont(Z,Bt,ot){this.currentFontSize=Z,this.currentFont=`${Bt?\"bold\":\"\"} ${ot?\"italic\":\"\"} ${Z}px sans-serif`,this.ctx.font=this.currentFont}getFontSize(){return this.currentFontSize}getBounds(Z){let Bt=this.ctx.measureText(Z);return{x:Bt.actualBoundingBoxLeft,y:Bt.actualBoundingBoxAscent,width:Bt.actualBoundingBoxRight,height:Bt.actualBoundingBoxAscent}}drawString(Z,Bt,ot){this.ctx.fillText(ot,Z,Bt)}drawCenteredString(Z,Bt,ot){this.ctx.textAlign=\"center\",this.ctx.textBaseline=\"middle\",this.ctx.fillText(ot,Z,Bt),this.ctx.textAlign=\"left\",this.ctx.textBaseline=\"top\"}setLineWidth(Z){this.currentLineWidth=Z,this.ctx.lineWidth=Z}fillRectangle(Z,Bt,ot,Ft){this.ctx.fillRect(Z,Bt,ot,Ft)}fillCircle(Z,Bt,ot){let Ft=ot/2;this.ctx.beginPath(),this.ctx.arc(Z+Ft,Bt+Ft,Ft,0,2*Math.PI),this.ctx.fill()}drawLine(Z,Bt,ot,Ft){this.ctx.beginPath(),this.ctx.moveTo(Z,Bt),this.ctx.lineTo(ot,Ft),this.ctx.stroke()}drawPolygon(Z){this.ctx.beginPath(),this.ctx.moveTo(Z.getX(0),Z.getY(0));for(let Bt=1;Bt<Z.getSize();Bt++)this.ctx.lineTo(Z.getX(Bt),Z.getY(Bt));this.ctx.stroke()}drawRectangle(Z,Bt,ot,Ft){this.ctx.strokeRect(Z,Bt,ot,Ft)}fillPolygon(Z){this.ctx.beginPath(),this.ctx.moveTo(Z.getX(0),Z.getY(0));for(let Bt=1;Bt<Z.getSize();Bt++)this.ctx.lineTo(Z.getX(Bt),Z.getY(Bt));this.ctx.fill()}drawImage(Z,Bt,ot,Ft,H1,bt,y1,i1,L1){if(arguments.length!==9)throw new Error(`drawImage call with ${arguments.length} arguments unimplemented`);let u1=this.canvasCache.get(Z);if(!u1){u1=document.createElement(\"canvas\");let n0=Z.imageData;u1.width=n0.width,u1.height=n0.height;let N0=u1.getContext(\"2d\");N0.globalAlpha=0,N0.putImageData(n0,0,0),this.canvasCache.set(Z,u1)}this.ctx.drawImage(u1,Bt,ot,Ft,H1,bt,y1,i1,L1)}isDarkBackground(){return!1}};var Hl=class{constructor(Z,Bt){this.canvasElement=Z,this.changeListener=Bt,this.drawContext=new z2(this.canvasElement.getContext(\"2d\"))}getBackgroundRGB(){return 16777215}getCanvasWidth(){return this.canvasElement.width}getCanvasHeight(){return this.canvasElement.height}getDrawContext(){return this.drawContext}onChange(Z,Bt){this.changeListener?.({what:Z,isUserEvent:Bt})}getClipboardHandler(){return new Cl}};var BPt=`\n/* We can customize editor styles here. */\n`,Gc;function QS(){if(Gc)return Gc;let w=new CSSStyleSheet;return w.replaceSync(BPt),Gc=w,w}function Jc(w,Z,Bt){let ot=-1;function Ft(bt,y1,i1=0){y1.button>0||Z.fireMouseEvent(bt,y1.button+1,i1,Math.round(y1.offsetX*hr),Math.round(y1.offsetY*hr),y1.shiftKey,y1.ctrlKey,y1.altKey,y1.button===2)}w.addEventListener(\"pointerdown\",bt=>{ot===-1&&(ot=bt.pointerId,Ft(Bt.MOUSE_EVENT_PRESSED,bt))});function H1(bt){ot===bt.pointerId&&(ot=-1,Ft(Bt.MOUSE_EVENT_RELEASED,bt))}return document.addEventListener(\"pointerup\",H1),w.addEventListener(\"click\",bt=>{Ft(Bt.MOUSE_EVENT_CLICKED,bt,bt.detail)}),w.addEventListener(\"pointerenter\",bt=>{Ft(Bt.MOUSE_EVENT_ENTERED,bt)}),w.addEventListener(\"pointerleave\",bt=>{Ft(Bt.MOUSE_EVENT_EXITED,bt)}),w.addEventListener(\"pointermove\",bt=>{ot!==-1?ot===bt.pointerId&&Ft(Bt.MOUSE_EVENT_DRAGGED,bt):Ft(Bt.MOUSE_EVENT_MOVED,bt)}),()=>{document.removeEventListener(\"pointerup\",H1)}}function US(w,Z,Bt,ot,Ft){let H1=typeof navigator<\"u\"&&navigator.platform===\"MacIntel\",bt=i1=>H1&&i1.metaKey||!H1&&i1.ctrlKey;function y1(i1,L1){let u1=vPt(L1,ot);u1!==null&&Bt.fireKeyEvent(i1,u1,L1.altKey,L1.ctrlKey,L1.shiftKey,bt(L1))}Z.addEventListener(\"keydown\",i1=>{bt(i1)&&i1.key===\"c\"||bt(i1)&&i1.key===\"v\"||y1(ot.KEY_EVENT_PRESSED,i1)}),Z.addEventListener(\"keyup\",i1=>{y1(ot.KEY_EVENT_RELEASED,i1)}),w.addEventListener(\"paste\",i1=>{let L1=i1.clipboardData.getData(\"text\"),u1=Ft.fromText(L1);u1&&u1.getAllAtoms()>0&&Bt.addPastedOrDropped(u1)})}function vPt(w,Z){switch(w.key){case\"Control\":return Z.KEY_CTRL;case\"Alt\":return Z.KEY_ALT;case\"Shift\":return Z.KEY_SHIFT;case\"Delete\":case\"Backspace\":return Z.KEY_DELETE;case\"F1\":return Z.KEY_HELP;case\"Escape\":return Z.KEY_ESCAPE;case\"Enter\":return Z.KEY_ENTER;default:return w.key.length===1?w.key.codePointAt(0):null}}var Vl=class{constructor(Z){this.canvasElement=Z,this.drawContext=new z2(this.canvasElement.getContext(\"2d\"))}setDimensions(Z,Bt){this.canvasElement.width=Z,this.canvasElement.style.width=`${Z/hr}px`,this.canvasElement.height=Bt,this.canvasElement.style.height=`${Bt/hr}px`}getDrawContext(){return this.drawContext}getBackgroundRGB(){return 16777215}getForegroundRGB(){return 0}};var oS={\"chain.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAB2UlEQVR4XmNgGJmAkYGJgQULZGXAhCygIGICQg4GdjTIARRDh5xAEQwNKYzXeK4xY1Oez3SNfz8TmoYUxq+6m9bfqLjDI4tmfhzLff9VR17FoWhwZXpkOm2v1C+79+cbD4gga8lneuhrfdv6/+ItSBpSGB+bTDos9IfzP9N/k3cX6+7wwByWz/TWR/E1w/+kO+8j4BpSGL9rz9wh+Efs14TF3heY/tu/vlF2hxtkSxzLY2/FVyz/om69jT0G8kM6QyNDM9MT41nbZX9y/J/ct1/4iU7aIYb/9q8uVx0UbmF64mV7i/1/0s0HSVM5dRgYrjB84/8U+bh80iH+34z/17Xc51ZhUGX8qpkK1GL6+krltyClVyz/c+69C57CwQsK1v+Sl9rdvgr8Z/7P9WvKxNs8fsD44ABqeWLkdYHhv9sL8e+s/xJuv4k4yajEAI6H/+6llxn+g6DUh75gSXhgugEdmXIUJB5150HSFA59oHKIBteGSyBhpv+q9wsVQaZDICdDKuNnneRjCY9exU3l5AUrh2gQelAQ/8Tgve2Tb25NjIgYBkmnMl5Sumi+hQmiGKqhgaGB57Pts4Bfek0sjkjmIxQhs8BpiZFBh0EPCLGlTnQxcGod8gAAp9es6fCW8G8AAAAASUVORK5CYII=)\",\"eraser.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAC1UlEQVR4XnWU309SYRjHn8OYTTM3zTmjC8NFFBR10dJu27wx11VX/QNdeGebTsvua93mRbUmLhURzYgKRZRJUJLibLPpRDCZC3/b1AMc4Tw97+EAR2e8FzD4fr7v53nPOQDCDkT/s2KAKiwROOXvFP8JLnDDGHhgArzgg28wCQGYgiDMw6E+1pY2rsECLEIIIrAC1O2CV/AWzPAOLGCFQbDDJ/hC+CQktU5bXWJoMGlaVv0iPAy/GeCmeBf0QB/YYECKO6kkzAl6Z/+t+BmsSJotgmmN4lFYZcA4tfdQez+1D8Fnio+S1oHe5TAcFuJHVBNit4nGLYrHGOCBbin+ntodMEzxKMkMWy8LpfgSEUN4niC7TTBtqzYYMCG3Z9xHadgD/bC1hi+U4uw1TkhFsqs3adpngJdGHSAZB8VHYAZ4vdt+RSjED3KcvYWYWMJuFY0E+MjdQe5MZgYE7YhFL8soCJzDU1iKwdcE+HOjBoG/NNJbq5DJI40EPNiIPCLgO/Wzk4lS3D2kPyaTQe5hETZsLDfxRRQLkLuLDjJd7u8wJs/mRs22J7CR4re3Qq3xIpENPUUHG+biuqX2UVsVX41epTp9ZjINm0ttqTIEZECQboK0ztd/Ya951t+nRi2GFYgksxluSlO7BMTYLVblMVcmOOTEZ9N+i4YvkREmAySz2JaNE4CqtM5jvrZHcbbE5lmLU8NrJTEmc3drsT1VlmmXdsCbgTdSu7wKUi2zPqsaq7GWZCjeJBZnwxlAN9dRyecBtsvzH/4+DV+MNdsLT4/GJSU0jHde3T2KtMxYnA8X5tvT5cp2eehDLnVxrPPoLgWpx4Hd+8Lp/Zx7boYoe/g40eDtViIF6Se+xPX8qPl96DqECImrRMOY2fg3e1atwd16UX1cR75wEXr4VmGdxL52atbpX2HnxfTenfiJcelKr9CjvQp/IMWJ57AO62ndOKk7890/iSWBU4XaZc0AAAAASUVORK5CYII=)\",\"fist.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAABj0lEQVR4Xu2S3yuDYRTHz7IZsfdCUrYLG4VCpJV6d0mS/A1zg79ArRArP4q5s4ulVousFCn/gX/g5WK7wkZMzIXMxjZ793XeMdn7vpM/wDn1PD1P53PO95znIfq3rwmYyU5tZPr7PJYoTjGaZ8xB1t+xZQqyP60iAEeWsThFGKpqbiE9CRECrnCHLnTAj17QbLV4E3mFXALbcOAGSXRiClnMgZLkZR/QYg0UEpDBDuxI4IHzT6OADdRiEK2gE12gBWmWE8Yj7weQIGOT650zaoiqAVtjDx2KeEWR8xZ4lUt+jEWkWJxJBYgkWa7NLy5WXWl5FilzhfoKwEAzzkwYI3DhTQUoVYpYR10FYCTPaDbJ2heQUwGfR0kFELmt6Utu9Jmz6dmFpmmR7v141w1XBiCBNFNacyKmCxT59kgHGBIQ4g7UkpRzESuwaCoQ+YZxqwGUGaUwrvvStqazLeRLj/bTZUTQB5rQfg1jjac9e8qAzFgZKbDMALpj1Kz3Z0WKjiGIfex++x6H98PgK4d/APiDpdwStyBoAAAAAElFTkSuQmCC)\",\"hand.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAB50lEQVR4Xq2TwUsUcRzF3yy52TboHiKVLBCElb1479g5kgKPCkKs4ME6eAiiP0GELileStew6NLJq5Sihw6BG2VlECymB2PVXd10Zl7vN+OuOjNLl35fZhiY+fzee9/vb4D/tAow9fafu90BsqrvnXzNBwSTTBAZ2I3BkSbeYBMzLHNRn9/nEFHCvYZAutDHDfb5wDvanOVnoozBhkBzIUeHOQEHfO8DW0QV0xjC3VjoUh2onAC/ZPAme4giemMQo+BKoaeusCmdSa41MmYL8HxLgUKe27q/UKLzSSxcwUOMwk7VgTKX6sBz7oeA61hJHSUP8ST1raZQA7Z8hb0QkO1WE+d5lZdlx+UbTsjSR95i0bc0E7GUzfIHdziouRqFPzwU5ii4IzOP+SFiqe3i8jyP1A1bgKPyVGa5/M2S7iaDdWZ8KUwNe1Uus923FHx8ujwZPA9YGO48+CK/Ywp4un8N8SIZgG78fCTvFV1n9w+ePe6GFMzMJ7u4zuOInQDYYaKcDB3Ba63FGQWPLk8mt2MAWKv96kk0sKM2TBFfkQ4fvkx6fyHSH9NalwO0PkXPaktirt8rhRpqelblbV6IASzkmivP9NrEdE9AM/FXbCPG4v+6p+3VcZ2ql5zTZSqv+XcQ6+gKgL8a/RiIJPdySgAAAABJRU5ErkJggg==)\",\"handPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACAUlEQVR4Xq2Tz0sUcRjGn1lytW2wPUQamSAIK3vp7kk6i1LgMUGIFTqUBw9BiPsPhNAlpUtuKhpdOnVUKqlDh6CNsh+CsJQdjC13ddOZeXq+M7uTzu7SpXmZLwvzfr7P8/5Y4D89eZh48s/bhoC04nMXH/EmwThjRAp2c/B6C7vZwhRLXFP6NY4RRVxpCiTzw/zCYR94RpsP+Z4oYbQp0JbP0GFGwB6f+8A2UcF9jOFyQ+hkCJSrwDcZ7GcfUcDFBohRcKXQFyp8lc4s3zYzZgvwfEuBwgK/65xXRccrsXAGE7gBOxECJb4IgQfcjQAX8DJxEN/HVOJTTaEGbPsKvyJAuldNXOZZnpIdl485I0tveIkF31KuzlI6zU3ucFRzNQq/uS/MUeGOzNzm6zpLHa3ryzxQN2wBjsIT4JE6f7Co09RgHRlfAnPjXoXr7PQtmdSsNqn2eDJ4HLAw3rX3QX4nVaC534sA0bYCvdi6Je9lveb+mkLw2+PPiIKZ+WwPN3ioj9MyczQMsMNYKR5ZwfOnCzkVTq7KTpYDgrKCp5XuyGw9AOvViHoSmPhryaS7nCM+IhldvlRy92nYmaBLQWtdXqX1rn5X22OLI16xihhjBjA9q3CQJxoAFjJt5Xv6bBLdKmgmvsIOYrLxv+5uZ+WOtmqJi3pNLGj+54gN9ATAH0reBFwT+FQbAAAAAElFTkSuQmCC)\",\"invisible.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACjUlEQVR4XnWTS09TURSF178wMUExvhIfiY+0Q6MThwwEHYk6MODAqHHgzD9gHDgWYhQBAUWMqY/SogSkCGJJNAiFUiyV2qqURkFa7cPvnJZiBXMH7Tl3rbXX2ntf5bWgyH+emPI8v8reAn8nj3r0Qr3qU78GNKghDWtEfk3ot2LKKq6AphTUjGYF26ObuqU7alabOvRQj/VEz6APKS23jvI/rY/6AD2ksCH0AG9Sq9r1QJ0W/hyREFbcOqQNcqiL/3FuIpozhJeot6J+H/VHegrci60lSA7t0VVtlRNqTvPAY4bQqxYL70LdxSsvd2l164B2qVHLVN4L0U2VhL4aQl9RveDdS9gl4IcBNWpRUShNUJxUT3OG0E/UTo4u4N0a1U9SHdRu3QOQIOw8N+0Yc/A2ZwgDeHfh3ZgZpbBH+zDTAPy7Jok6qU/K0Jht2k91CL5SVD9aHh1BvYHiCxYe1nV9w9h5bVcdk4DwGn3TmYg1Y9Rb8P2FQYVQbOM+qjPaDDwMguMw3j00Mst0narUDaUgBICPI5VgAhe5rUVguZBhhMaGOEzrrU6pQpfpdoqeB8k2hvoF7UB9mhxmsyD4WYIs0c/ifEKnoVxSEsptQke5rdQ5vGdRt4SYXTEf2lWq1l1s1GojlDiAgpmTLN4KHEKegw+NKvsco8oglApd0XtoOzEzhZmCuq2QJ7RRX3lqmO84xjaxGltUj/dVcJEwhuIqwVRptsZMZwL/wG2FPIHryijVVBnUNdJlS1ZKlmJEzkApr1JDj5KsyeJaQsR+fDlW8G/KCWyl1tgpziEIxczwVcnYcT6p5LpwO7gZ5jzH7mT0hmbW0+IO/UBixXX5L4RZlmpOn8u6vT7Y3P4BKLGmkBK1qvgAAAAASUVORK5CYII=)\",\"lasso.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAADg0lEQVR4Xk2UXWxTZRjHn7XYfWhh4DKlIFLRdlucImbGr2gEwYwsAjGRXXihRlTOFrOoF0RcdWwhEVnQdgOmbgzoliEhAZJlvZwdMQg6No/U2IYOWVrK1q1d19q1Pef8fU7bsy3/nIvznv/ved/n47xEZKDivNpK8RoE6XC4J9gX7A/2hXukwxCwta1UcxhUu4PcLFHnqZnaf+/E0FhTqDpiiaqqjjSFhsbvnZja76kRdarLQRzbTSjAuozgczaHVoJYhShX1krlSmH2bSWaQz5nRsA6MJQDrHMtx0Y3y4QS7Eo0eTpG3K5rP7tdHSNNnl2JNQxtlo+NzrXAmgXEDcnWA/5ihbAtOeyKtKf3wmIvs6+2l8GS3hv51u3aliQUKwf8yVZxA2GNIvSIBCNaJmPt/jrR6KZfyL6omQdQF2tvmTTyPt2iIhDq/f1mth/1LtjCVTa9QAIN8dEl8tK8mgJBj6oF21GvEWb4+wlft08Sds+FHbPmDl2A/mOl2Ran7SQylkV0MIcdu+cI7J3utUb0aL2q1DZSlDiRvObpKdpCZymVf1dqW6/qYY1QsM8SXYULw3jcq8XLWlSghOrJpYUwXxpeDUuUZn6smNWheUx6l7uxGD8HrKXz9A2doQidJnnPoWt6VEQItm4/4aX0LSd2wLCEqMB6+otmqYt8K1LVd3+oTRA6/yXUTXe+mCHsjE048QbWw8R6EHoNAMlGbA+d/PSOAZXKZC9tKbr19m+DFZztc/E/B2/3jp//x5logyC/8oyBd9DBIjeODj4/X8hTcO4PZZ/a6RKpYfBKWb6CuTQ+i41elD5A5cLHga7jPjOvWDIDv6e/EE25WXo49N0mPmF21OR3wm/FTahMf3/dNtLoe4GPa1LeC9y4xGUxacNnvHnykfTG+IWxJzOlyhnPzHH7bUJRvgINiSuu+CE8i2Jw8NwORq/jidRDktMz4COU46twnVyEx+brwxfFQDc+weu4P0drQFHq/Z+uP73UZq7vh8FAV6oeL2OTZl4OFMCUaZw4NXDjyNTBWENylaLDwXFpH+5Tm5mku4sN1XZQFwrkR+OvyjvxpvT5kTuEHcmpDh5i/qIQ/1l5LQd4RifUOS1A1XTnRq76r5dhzRlTPBxx7vlSDstmiA0r8NGXUcLZm6jJARkGZvnJAtqtod4JmhJbT/9tiZ4bS9QsX83dGv8DIrFVpnd+f4UAAAAASUVORK5CYII=)\",\"lassoPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAADiklEQVR4XlVUbWxTVRh+12K3oYWBy9SCSAHbbXGRaGb8SoygmJFFICayH/5AIyrdYhb1BxFXHWswQRa03WVM3RzYjaEhYcZl/Tk6QhB0bN62xjV0yNJStm7tutbetvfex3N7e3XmyUnuOXme9+O8zz1EZKDyIhwVeBE28VisLzIQGYwMxPrEY7Bhh6NCYxgUuou8DLwuUD936G736GRrtC5uSSioi7dGR6fuds8dCtTzOoXlIhbbSyjBhrwt6G6LrgExlKJKfkiskksLuzVoiwbdeRs2gIlUgXWp/eTEdomwGnvSrYGuca/n2g9eT9d4a2BPej0TbZdOTiy1w1oQ8JsyHYdD5TJhZ2bME+/M7YfFWelc56yEJbc//oXXszNDKJcPhzId/CbCetnWxxOMaJ9NdoYaeaOXLpHg8HOCw0lOWrgPjcnO9lkjy9PLyzZCU2jQzOgnpgV7rNaut5GNRsnPEXzcstICQY9awX5i2ggzQoOEzzpnCXuXYq5Fc5cuTH8z5IoCnkRVooM55tq7RGDc+X5rXI+Oq3JDCyVILhTj54bPEYbPKV+CoyAhuaHjqh7WOEUGLIm1uDCGbdOFeEoxK+Hjilvz8Ng6WBK08E31og5tk+IBNg3GFBw+zlfMoHwJjrMUpzMk7Tt6TY/qOMHeGyI8l7vpxi4YtOBq0xvJR4vUQ8FV2bo7XzekCdxfhMZ57tk8YXdyxo1XsBEmhvv93ZoAJBnxcvT0B7cNqJFn++mJspuv/zJSzcb2VOr3kVv9Uz/+6U47BI/vZ+FzlkEHi9QyMfL0cilzwfnf5IPKpFeLzSOXK4s3qDb8YXLiovg2aoT3wj2ngmZ2YskP/Zr7mDepXnow+uVWVmHBatIbsddSJtTkvrpuH28JPsPKNclvhm8Ms2sxaeYz+k8/nNucujD5WL5CPhtYOOW8RSgr3kBz+rIndRRPohwsuJrBOO16NPuA6A4MBQlV+DTWKJVhy3JT7CIf7sX7eAn3qmpNUJZ969vrj7PGNRjwTiTck23C89iqkVcKSmDKt8x8N3Tj+NyRZHNmrazDkSnxIO5RhpmhO/9G0jIoByXSI6kXpN14Vfzo+G3CrsxcFzOx4iJif1YRKwXMozNssZi189xmdutXfoJVJWaZOVJs5v/18H+/rcK7nyQI3/tRrwryTLDIVkGgvRrKm6AhvePMH5bE+cl0/cpT9dX4B08ibwJFFp9KAAAAAElFTkSuQmCC)\",\"pointingHand.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADe0lEQVR4Xq2V+yvrYRzHnWwuaaUst9mY21iyHcVySghxJJLLDy7L2Y9S4geHThx+5ISc0vCDf0AS6fj1rPxkRJ2dJjvtjNolt1y+NMY+5/N5yonZbIunvm179nyf1/N+fy5PSMgLo6OjwxAWFgaxsbHQ2NhonJiYELy0Pqj/CgoKPqSmpjoGBgZgfHwciouLna2tre+D2uSlxXK5XJ2UlMTt7e2B2WyGjIwMiImJ+fhmADy9OjMzk7PZbHB0dAT4HXp6en6+GSA5OVktk8k4u90Ox8fHTEF3d/fvNwNIpVKm4AFACgYHB//Mzc0pUZ3o1SBPgEKhgKysLFd5ebkdlekTExMLUKUU56VVVVVhQQM9AdnZ2dDe3g5bW1tQU1MDKSkpNrTtr0qlsvT3939/NSA9PR2mp6fh7u4OhoaGWG2gXdDZ2Qnx8fFWBH3CR4P1IvMFe4feqoqKir7k5OQoSQEF2Wq1siwiwMzMDLjdbhgeHoa8vDw4OztjiiIiIqCyshLq6uoA39mRSCSKZ5DQ0FAxnuQXeutG+Yb8/Hwt1gIDHB4eMsDs7Czc399TsAFPCxzHwe7uLojFYlhdXQWDwQBKpZLDfdTeVMhra2vBaDRCV1cX2zAtLQ0IcHp6yuYWFxeZRfPz89DX18cAVIgYbNje3oaTkxPAJODwsN4BLS0tTPbGxgagTBCJRECFdnt7C+fn53B9fc0UXF1dweXlJbhcLnA4HAxmsVhYvVRUVHA8Hu85IDIyUl5SUgImk4mduKmp6T+ANiXvHz+Ag+ZJEYHpkxTgHt4VCIVCCTY009TUFNzc3MDk5CTlPRwcHLCN/A2CE6C0tNQ7IDw8nI8Z8LWhoeGWFGxubkJvby+THSyAz+d7jUEIpp46ISGB0+l0zHeKh9PpDAhACimd0QUuKirKO4BSC3uOTqPRwMXFBQvig/+BWER9C+8RLjo62jcAPayhvqPX6xmAgkf++hu0huKF2cdhivsGjIyMCAsLC81jY2PMHgIEMgiwvr4OcXFxHNaCbwDZ1NbW9q2srAz29/fZ6QOB0LrR0VHAdPd/ZwgEAhF6uaPVap/EwbMOHpTRPGUbKgfsBv5vPawJXn19/WfsR04qPMoozzg8hlEirK2tMUBzc3Pg93Zubq6uurqa9aCVlZUnz/LyMvu9tLQECwsLgPVD1f/Ds8n9AyubuM4FiwqZAAAAAElFTkSuQmCC)\",\"rect.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACc0lEQVR4Xo2UT0hUURTGf7uipMy8GbUwigx0WbiwpCgQKmgl1CYj3Plahtg/eguFUIoamNxUCEFCGlIgEhSORmQRNeVMSkhpWcSU1KSOQ9i8vvfmpiMZOB8Xzjv3fPPd8+dertPHQICX/OAVnTRTz1GOaNXL7pQvSdTG9KHwCVJMyzlMFw1UsJFC8lmtVSi7Qr4u7SUVk1KsmCkyZtJETchUmTKh3NSYk6ZBq0a276nSXtRMGc+kfMIkiRY3shQkWiZ9wjjxMN5SEAuPQ5qegBALe07a+eiMCj9lxZ0ZJ+N483A9oQf6qbWED6rITW4IcQGaGJuT/Y0f7rm1cJliS+jnLjNkAviEDXTwVbZ/2gwjobLESKgY6iiwhI5gyw/N/T2zKtljF0CN6p39SAZbCVyhTpwVLKOUM8wGmn4lEy35yGH+Jp1TKF9nrRp3mzbOMcp9m0MhtLPrvwRDr/6/mwda6cZ4ON24Hd5z1RISfGNIAdmDnWabtHtlzxLjtY1pgucM2o8rPOUhj+UZY0qDWGEJad5y0ca8mO90LLyKA+yjkirN6QWeaO0kwjvucZw8m0MwGinLzmelUi1nP3vYQrUCH3GNY5Qp+UpbpelcQjNnWcchVWRQhc2jiPWsYTl7aZRetvTBtP5VaJW7la0c5g4npFbCbk5xSzlNKPGRUKk6vYCwScIH2ax2lagH1VJ6wxdbNVUumKUFhGFNaMxiyEk4v3Jn1VmE4LluBK804W/5zdDA/+OxCtk58dzeNjcS7vYJ/v1bzGMJnm7rPDLmkzlvdph2E5/zRs13M2BS/p3OvhoLkVSBi7jE5zn/VPCy+K/GH86K+gV5WsL6AAAAAElFTkSuQmCC)\",\"rectPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACi0lEQVR4Xo2UT0hUQRzHP6c2KmrTnYoKjCAP+45FB0uKAqECT0FdMsKbr2OIUdE76EUpamHzUmoEGWmIgUnQn9UOWURp7ksJKSuLeCW1qesStq/fvB11lzr4vgzM/Ob3md+b3/xmuEYfA4Fe8ZMhOmmklmMclVYr/U6xpRg0Pn2I+yRpZsQ4Shd1lLGJCGHWSItIv0xsXTKXEp+0+AqZJqum1KCKqQpliXaqKnVK1Umrkr62VMjcoJpWvkprYAqvyUksRV7TlAYmcOP4S1EyPgEZegMgGfftjP3JHhf9kp5rz9pZ21+U44t6oZ9qA3yUjNygReSKoIEPC2H/oN19pxouUWKAfrqZJRtIAxvp4Jv09d9mGYtZ3lisBGooMkBHMKVd5QsRlSbfcxMl99tFUCX5zg1SwZSHI6qJ4q+wNHWGuSCmzqTXFEYMan7TeYlyBSi2ItymjXOMc9/sIQLt7C4AMiE36ka7K/HDlUXR1uh0qIcH9JCpd+OZ+u3wnisG8PjOCEOydr6S1hxJXhufBnjBsBlc5hkPeRS6bt2zbuUiWK1WJpThLReMz8vFk07GV3OQ/ZRTIXWqN11t7SLBO+5yglVmD0FppA0dZqWkcScH2MtmAVqsJ1zlOJZUbbnJ0kw+0MhZ1lEpGRnGCS2zVGgDa1nOPup5ahYNqnU+QrOYm9nGEe5wUqKVsofT3JRdTspZjMWictIFwBYJfIitcsClFHNYIr3hq7iapAW1VACMSoUmjUZsz/6dX6t2rvgKAN9xEvhRT0/oZaXg/7EYIFcnvvO4zUnEezSg79//LAbw5bYuKqs+q/Nqh2pX7oJ1UP1QAyqt73Tu1ShUShK8not8WbBPBy+LfjX+AjC0Avv8MQHTAAAAAElFTkSuQmCC)\",\"zoom.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACiUlEQVR4XpVTTUgUYRh+nJWCxUsNevBiYGm7UjAnFyoI9ORKSxt4a71Ei9I10EPg0VO7hOE1ikQSofXiYv6QRX9bkTAjbbM/B2mz8id3Z2f/ZvbtndR0NYn9XuYbPuZ55n3f730efMQCZjCLOX4/xyJe4BXe4C3e4QNi0JDCBu8JRPkURxIMm8BjjOMJJvEUU8jadUn36D79Zs5X8JhSyb6AX/iBzxxfLMIMwx/gIcYwXRMTNa86Mhrp23QXOwx3sW9zNKKOaF5NzAlrnCWBFXAx43jE8PeC0b4U9KstJmh/tJh+dSlotJeEDYZ/Bea5GAtudoZDkm5jcCP1poejd+XhaG+6kc82kvRwiDpLwha+A1RX8K4OaDfCU038UTQGk/GA2qO4lDbFpfbEA4NJ0QA1UThktOeFDBPOLd+/qF9PtOZBDi30LNU91FBfgz+rvmaoIdUVmnZo4CxLQU3cYsLJ7G1HebvqC7nIhHJ6G7y7mmsNKTQtGjbyq5p3Dnzv2au31i24QK35cEhpriQAzbUp92AS1GKqI7odL5F1jM9bzV7KzoyVLvfbDhKAoYZ4wGp/NFKU8Br6scS9VrM7Fw8a56/8A271ovb0pkF9m2UPy2AWGd/k4sYdpal/7+fH4cTxvaPsGo6C3EXysWYWQafIR2cqSnFyV237CM6ADOowyM8Si+xkkCsztB2RIYZCFT2QB1mYVdwSSSza/N85nD1qDl27cyA76EQ1k6bqtESiRagrXFsdyBxQq+ySnfIhtbJ6gHX2bBprQvmAHwKH/GDBmRCDyibP4Od/HLcNZ0KcCSnkmLQsKEd4mmvfgTMhybGCb0zI4RPb1bSbUtnDUvHz4yGJ7BUWx2+5Iu7Rc33AhQAAAABJRU5ErkJggg==)\"};var zc=Object.create(null),LS=3/4,El=class{constructor(Z){this.HOTSPOT_32=Z.HOTSPOT_32,this.IMAGE_NAME_32=Z.IMAGE_NAME_32,this.cPointerCursor=Z.cPointerCursor,this.cTextCursor=Z.cTextCursor}getCursor(Z){if(zc[Z])return zc[Z];if(this.IMAGE_NAME_32[Z])return this.buildCursor(Z);switch(Z){case this.cPointerCursor:return\"default\";case this.cTextCursor:return\"text\";default:throw new Error(`Unknown cursor: ${Z}`)}}buildCursor(Z){let Bt=this.IMAGE_NAME_32[Z],Ft=`${oS[Bt]} ${this.HOTSPOT_32[Z*2]*LS} ${this.HOTSPOT_32[Z*2+1]*LS}, default`;return zc[Z]=Ft,Ft}};var Sl=class{constructor(Z,Bt){this.title=Z,this.rootElement=Bt,this.elements=[],this.dialogElement=null}setLayout(Z,Bt){this.hLayout=sS(Z),this.vLayout=`${sS(Bt)} auto`}add(Z,Bt,ot,Ft,H1){this.elements.push({component:Z,x:Bt,y:ot,x2:Ft,y2:H1})}createTextField(Z,Bt){return new Kc(Z,Bt)}createLabel(Z){return new Yc(Z)}createComboBox(){return new Xc}createCheckBox(Z){return new Zc(Z)}setEventConsumer(Z){this.consumer=Z}showMessage(Z){window.alert(Z)}showDialog(Z){let Bt=document.createElement(\"dialog\"),ot=this.rootElement.getBoundingClientRect();Object.assign(Bt.style,{position:\"absolute\",marginBlock:0,left:`${ot.left}px`,right:`${document.body.parentElement.clientWidth-ot.right}px`,top:`${this.rootElement.offsetTop+30}px`}),this.dialogElement=Bt,this.rootElement.getRootNode().append(Bt);let Ft=document.createElement(\"form\");Ft.style.display=\"grid\",Ft.style.gridTemplateColumns=this.hLayout,Ft.style.gridTemplateRows=this.vLayout,Ft.addEventListener(\"submit\",i1=>{i1.preventDefault(),this.consumer.fireOk(),Z()}),Bt.append(Ft);for(let{component:i1,x:L1,y:u1,x2:n0,y2:N0}of this.elements){let H0=document.createElement(\"div\");n0===void 0?(H0.style.gridColumn=`${L1+1} / ${L1+2}`,H0.style.gridRow=`${u1+1} / ${u1+2}`):(H0.style.gridColumn=`${L1+1} / ${n0+2}`,H0.style.gridRow=`${u1+1} / ${N0+2}`),H0.append(i1.getElement()),Ft.append(H0)}let H1=document.createElement(\"div\");Object.assign(H1.style,{display:\"flex\",flexDirection:\"row-reverse\",gap:\"15px\",gridColumn:\"1 / -1\",gridRow:\"-1\"}),Ft.append(H1);let bt=document.createElement(\"button\");bt.type=\"submit\",bt.textContent=\"OK\",H1.append(bt);let y1=document.createElement(\"button\");y1.type=\"button\",y1.textContent=\"Cancel\",y1.addEventListener(\"click\",()=>{this.consumer.fireCancel(),Z()}),H1.append(y1),Bt.showModal(),Bt.addEventListener(\"cancel\",()=>{this.consumer.fireCancel(),Z()})}disposeDialog(){this.dialogElement!==null&&(this.dialogElement.remove(),this.dialogElement=null)}},Y2=class{setEventHandler(Z){this.eventHandler=Z}fireEvent(Z,Bt){this.eventHandler(Z,Bt)}},Yc=class extends Y2{constructor(Z){super(),this.element=document.createElement(\"label\"),this.setText(Z)}setText(Z){this.element.textContent=Z}getElement(){return this.element}},Kc=class extends Y2{constructor(){super(),this.element=document.createElement(\"input\"),this.element.type=\"text\"}setText(Z){this.element.value=Z}getText(){return this.element.value}getElement(){return this.element}},Xc=class extends Y2{constructor(){super(),this.element=document.createElement(\"select\"),this.element.addEventListener(\"change\",()=>{this.fireEvent(2,this.element.selectedIndex)})}setEnabled(Z){this.element.disabled=!Z}addItem(Z){let Bt=document.createElement(\"option\");Bt.textContent=Z,this.element.append(Bt)}getSelectedIndex(){return this.element.selectedIndex}setSelectedIndex(Z){this.element.selectedIndex=Z}setSelectedItem(Z){let Bt=this.element.options;for(let ot=0;ot<Bt.length;ot++)Bt[ot].textContent===Z&&(this.element.selectedIndex=ot)}getSelectedItem(){return this.element.options[this.element.selectedIndex].textContent}removeAllItems(){this.element.innerHTML=\"\"}setEditable(){}getElement(){return this.element}},Zc=class extends Y2{constructor(Z){super();let Bt=document.createElement(\"label\"),ot=document.createElement(\"input\");ot.type=\"checkbox\",ot.addEventListener(\"change\",()=>{this.fireEvent(3,ot.checked?1:0)}),Bt.append(ot),Bt.append(Z),this.element=Bt,this.checkBox=ot}setEnabled(Z){this.checkBox.disabled=!Z}isSelected(){return this.checkBox.checked}setSelected(Z){this.checkBox.checked=Z}getElement(){return this.element}};function sS(w){return w.map(Z=>Z>0?`${Z}px`:\"auto\").join(\" \")}var zU=class{constructor(Z){this.imageData=Z,this.dataView=new DataView(Z.data.buffer)}getWidth(){return this.imageData.width}getHeight(){return this.imageData.height}getRGB(Z,Bt){let ot=this.dataView.getInt32((Bt*this.imageData.width+Z)*4,!1);return(ot&255)<<24|ot>>>8}setRGB(Z,Bt,ot){let Ft=ot>>>24&255,H1=ot<<8|Ft;this.dataView.setInt32((Bt*this.imageData.width+Z)*4,H1,!1)}toDataURL(){let Z=document.createElement(\"canvas\"),Bt=Z.getContext(\"2d\");return Z.width=this.imageData.width,Z.height=this.imageData.height,Bt.putImageData(this.imageData,0,0),Z.toDataURL(\"image/png\")}};var ql=class{constructor(Z,Bt,ot){this.canvasElement=Z,this.dialogRoot=Bt,this.JavaEditorArea=ot}register(Z){this.javaUiHelper=Z,this.cursorManager=new El(this.JavaEditorArea,Z)}grabFocus(){this.canvasElement.focus({preventScroll:!0})}setCursor(Z){this.canvasElement.style.cursor=this.cursorManager.getCursor(Z)}showHelpDialog(){}createImage(Z,Bt){let ot=new ImageData(Z,Bt);return new zU(ot)}createImageFromBase64(Z,Bt,ot){ot=ot.replaceAll(/%\\d+%/g,y1=>\"A\".repeat(Number(y1.slice(1,-1))));let Ft=uS(ot),H1=new Uint8ClampedArray(Ft),bt=new ImageData(H1,Z,Bt);return new zU(bt)}createDialog(Z){return new Sl(Z,this.dialogRoot)}runLater(Z){typeof requestAnimationFrame==\"function\"?requestAnimationFrame(Z):typeof setImmediate==\"function\"?setImmediate(Z):setTimeout(Z,0)}};function yS(w,Z,Bt,ot,Ft,H1,bt,y1){let{readOnly:i1=!1,initialMode:L1=\"molecule\",initialFragment:u1=!1}=Z,n0=document.createElement(\"div\");n0.dataset.openchemlibCanvasEditor=\"true\",Object.assign(n0.style,{width:\"100%\",height:\"100%\",display:\"flex\",flexDirection:\"row\",alignItems:\"start\",backgroundColor:\"white\",touchAction:\"none\",userSelect:\"none\",webkitUserSelect:\"none\"});let N0=n0.attachShadow({mode:\"open\"});N0.adoptedStyleSheets=[QS()];let H0=null;i1||(H0=document.createElement(\"canvas\"),N0.append(H0));let Se=document.createElement(\"div\");Object.assign(Se.style,{width:\"100%\",height:\"100%\"}),N0.append(Se);let Xe=document.createElement(\"canvas\");Xe.tabIndex=0,Object.assign(Xe.style,{outline:\"none\"}),Se.append(Xe),w.append(n0);let j8=new H1(new ql(Xe,Se,ot)),GP=new ot(FPt(L1,ot),new Hl(Xe,Bt),j8);if(u1)if(L1===\"molecule\"){let jA=new bt(0,0);jA.setFragment(!0),GP.setMolecule(jA)}else{let jA=y1.create();jA.setFragment(!0),GP.setReaction(jA)}j8.setEditorArea(GP);let Nn=i1?null:new Ft(GP,new Vl(H0),j8);function K2(jA){Xe.style.width=`${jA.width}px`,Xe.width=Math.floor(jA.width*hr),Xe.style.height=`${jA.height}px`,Xe.height=Math.floor(jA.height*hr),jA.width>0&&jA.height>0&&GP.repaint()}let YU=Se.getBoundingClientRect();K2(YU);let X2=new ResizeObserver(([jA])=>{K2(jA.contentRect)});X2.observe(Se);let Z2=null,W2=null,_2=null;i1||(Z2=Jc(Xe,GP,ot),W2=US(Se,Xe,GP,ot,bt),_2=Jc(H0,Nn,ot));function KU(){n0.remove(),X2.disconnect(),Z2?.(),W2?.(),_2?.()}return{editorArea:GP,toolbar:Nn,uiHelper:j8,destroy:KU}}function FPt(w,Z){switch(w){case\"molecule\":return 0;case\"reaction\":return Z.MODE_REACTION|Z.MODE_MULTIPLE_FRAGMENTS;default:throw new Error(`Invalid initial mode: ${w}`)}}function lS(w,Z,Bt,ot,Ft){class H1{#t;#e;#P;#n;#f;#r;constructor(y1,i1={}){let{editorArea:L1,toolbar:u1,uiHelper:n0,destroy:N0}=yS(y1,i1,H0=>this.#i(H0),w,Z,Bt,ot,Ft);this.#t=L1,this.#e=u1,this.#P=n0,this.#n=null,this.#f={[w.EDITOR_EVENT_MOLECULE_CHANGED]:\"molecule\",[w.EDITOR_EVENT_SELECTION_CHANGED]:\"selection\",[w.EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED]:\"highlight-atom\",[w.EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED]:\"highlight-bond\"},this.#r=N0}getMode(){return this.#A(),this.#t.getMode()&w.MODE_REACTION!==0?\"reaction\":\"molecule\"}setMolecule(y1){this.#A(),this.#t.setMolecule(y1)}getMolecule(){return this.#A(),this.#t.getMolecule()}setReaction(y1){this.#A(),this.#t.setReaction(y1)}getReaction(){return this.#A(),this.#t.getReaction()}setOnChangeListener(y1){this.#A(),this.#n=y1}removeOnChangeListener(){this.#A(),this.#n=null}clearAll(){this.#A(),this.#t.clearAll()}destroy(){this.#A(),this.#r(),this.#t=null,this.#e=null,this.#P=null,this.#n=null,this.#r=null}get isDestroyed(){return!this.#t}moleculeChanged(){this.#A(),this.#t.moleculeChanged()}#A(){if(this.isDestroyed)throw new Error(\"CanvasEditor has been destroyed\")}#i(y1){if(!this.#n)return;let{what:i1,isUserEvent:L1}=y1;this.#n({type:this.#f[i1],isUserEvent:L1})}}return H1}function TS(w,Z,Bt,ot){class Ft extends HTMLElement{static MODE=Object.freeze(Object.create({MOLECULE:\"molecule\",REACTION:\"reaction\"}));static observedAttributes=Object.freeze([\"idcode\",\"fragment\",\"mode\",\"readonly\"]);#t={idcode:\"\",fragment:!1,mode:Ft.MODE_MOLECULE,readonly:!1};get idcode(){return this.#t.idcode}set idcode(bt){this.#t.idcode=String(bt),this.setAttribute(\"idcode\",this.#t.idcode)}get fragment(){return this.#t.fragment}set fragment(bt){this.#t.fragment=!!bt,this.#t.fragment?this.setAttribute(\"fragment\",\"\"):this.removeAttribute(\"fragment\")}get mode(){return this.#t.mode}set mode(bt){this.#t.mode=String(bt),this.setAttribute(\"mode\",this.#t.mode)}get readonly(){return this.#t.readonly}set readonly(bt){this.#t.readonly=!!bt,this.#t.readonly?this.setAttribute(\"readonly\",\"\"):this.removeAttribute(\"readonly\")}setMolecule(bt){this.fragment=bt.isFragment(),this.idcode=`${bt.getIDCode()} ${bt.getIDCoordinates()}`,this.#e.setMolecule(bt)}getMolecule(){return this.#e.getMolecule()}setReaction(bt){this.fragment=bt.isFragment(),this.idcode=ot.encode(bt,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER})??\"\",this.#e.setReaction(bt)}getReaction(){return this.#e.getReaction()}clearAll(){this.#e.clearAll(),this.idcode=\"\"}moleculeChanged(){this.#e.moleculeChanged()}#e;#P(){this.#e||(this.#e=new w(this,{readOnly:this.readonly,initialMode:this.mode}),this.#e.setOnChangeListener(this.#U),requestIdleCallback(()=>this.#n()))}#n(){switch(this.mode){case Ft.MODE.MOLECULE:return this.#r();case Ft.MODE.REACTION:return this.#A();default:throw new Error(`Mode ${this.mode} is not supported`)}}#f(bt){let y1=bt.indexOf(\" \");if(y1===-1)return Z.fromIDCode(bt);let i1=bt.slice(0,y1),L1=bt.slice(y1+1);return Z.fromIDCode(i1,L1)}#r(){let bt=this.#f(this.idcode);bt.setFragment(this.fragment),this.#e.setMolecule(bt)}#A(){let bt=ot.decode(this.idcode,{ensureCoordinates:!0})??Bt.create();bt.setFragment(this.fragment),this.#e.setReaction(bt)}#i=!1;#Q(bt){this.#i=!0;try{bt()}finally{this.#i=!1}}#U=bt=>{let y1=this.idcode,i1=this.fragment;this.#Q(()=>{if(bt.type===\"molecule\")switch(this.mode){case Ft.MODE.MOLECULE:{let u1=this.getMolecule();this.idcode=`${u1.getIDCode()} ${u1.getIDCoordinates()}`,this.fragment=u1.isFragment();break}case Ft.MODE.REACTION:{let u1=this.getReaction();this.idcode=ot.encode(u1,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER}),this.fragment=u1.isFragment();break}default:throw new Error(`Unsupported mode ${this.mode}`)}});let L1=new CustomEvent(\"change\",{detail:bt,bubbles:!0});if(this.dispatchEvent(L1),bt.mode===\"molecule\"){if(this.idcode!==y1){let u1=new CustomEvent(\"idcode-changed\",{detail:this.idcode,bubbles:!0});this.dispatchEvent(u1)}if(this.fragment!==i1){let u1=new CustomEvent(\"fragment-changed\",{detail:this.fragment,bubbles:!0});this.dispatchEvent(u1)}}};#D(){this.#e&&(this.#e.destroy(),this.#e=void 0)}#u(){this.#D(),this.#P()}connectedCallback(){this.#t={idcode:this.getAttribute(\"idcode\")||\"\",fragment:this.hasAttribute(\"fragment\"),mode:this.getAttribute(\"mode\")||Ft.MODE.MOLECULE,readonly:this.hasAttribute(\"readonly\")},this.#P()}disconnectedCallback(){this.#D()}adoptedCallback(){this.connectedCallback()}attributeChangedCallback(bt,y1,i1){if(!this.#e||this.#i)return;(()=>{switch(bt){case\"idcode\":return this.#t.idcode=String(i1),()=>this.#n();case\"fragment\":return this.#t.fragment=i1!==null,()=>this.#n();case\"mode\":return this.#t.mode=String(i1),()=>this.#u();case\"readonly\":return this.#t.readonly=i1!==null,()=>this.#u();default:throw new Error(\"unsupported attribute change\")}})()()}}return Ft}function Wc(w){let{GenericEditorArea:Z,GenericEditorToolbar:Bt,GenericUIHelper:ot,Molecule:Ft,Reaction:H1,ReactionEncoder:bt}=w,y1=lS(Z,Bt,ot,Ft,H1);function i1(){let L1=customElements.get(\"openchemlib-editor\");if(L1)return L1;let u1=TS(y1,Ft,H1,bt);customElements.define(\"openchemlib-editor\",u1);let n0=document.createElement(\"style\");return n0.id=\"openchemlib-editor-default-style\",n0.innerHTML=`\n    /* dynamicaly added from openchemlib registerCustomElement with low priority */\n    openchemlib-editor:defined {\n      display: block;\n      height: 400px;\n      width: 600px;\n    }\n    `,document.head.prepend(n0),u1}w.CanvasEditor=y1,w.registerCustomElement=i1,delete w.GenericEditorArea,delete w.GenericEditorToolbar,delete w.GenericUIHelper}function hS(w){w.prototype.changeCustomLabelPosition=function(Bt){switch(Bt){case\"superscript\":for(let ot=0;ot<this.getAllAtoms();ot++){let Ft=this.getAtomCustomLabel(ot);Ft&&!Ft.startsWith(\"]\")&&this.setAtomCustomLabel(ot,`]${Ft}`)}break;case\"normal\":for(let ot=0;ot<this.getAllAtoms();ot++){let Ft=this.getAtomCustomLabel(ot);Ft?.startsWith(\"]\")&&this.setAtomCustomLabel(ot,Ft.slice(1))}break;case\"auto\":for(let ot=0;ot<this.getAllAtoms();ot++){let Ft=this.getAtomCustomLabel(ot);Ft&&(this.getAtomLabel(ot)===\"C\"?Ft.startsWith(\"]\")&&this.setAtomCustomLabel(ot,Ft.slice(1)):Ft.startsWith(\"]\")||this.setAtomCustomLabel(ot,`]${Ft}`))}break;case void 0:break;default:break}}}function cS(w){w.prototype.getNextCustomAtomLabel=function(Bt){let ot=Bt||\"1\",Ft=new Set;for(let bt=0;bt<this.getAllAtoms();bt++){let y1=this.getAtomCustomLabel(bt);y1&&Ft.add(y1)}let H1=0;for(;Ft.has(ot)&&H1++<100;)ot=mPt(ot);return ot}}function mPt(w){let Z=w.match(/(\\d+)/);if(Z){let ot=Number.parseInt(Z[1],10);return w.replace(/(\\d+)/,(ot+1).toString())}let Bt=w.match(/([a-yA-Y])([^a-zA-Z]*)$/);if(Bt){let ot=Bt[1],Ft=String.fromCodePoint(ot.codePointAt(0)+1);return Ft===\"Z\"||Ft===\"z\"?\"1\":w.replace(/([a-yA-Y])([^a-zA-Z]*)$/,`${Ft}$2`)}return\"1\"}function wS(w){let Z=w.fromMolfile;w.fromMolfile=function(ot,Ft={}){let{customLabelPosition:H1}=Ft,bt=Z.call(this,ot),y1=ot.includes(`\\r\n`)?`\\r\n`:`\n`,i1=ot.split(y1);if(i1.length<4||!i1[3].includes(\"V2000\"))return bt;let L1=i1.slice(4+bt.getAllAtoms()+bt.getAllBonds());for(let u1=0;u1<L1.length;u1++){let n0=L1[u1];if(n0.startsWith(\"A  \")){let N0=Number(n0.slice(3)),H0=L1[u1+1]?.trim();u1++,!Number.isNaN(N0)&&N0<=bt.getAllAtoms()&&H0&&!bt.getAtomCustomLabel(N0-1)&&bt.setAtomCustomLabel(N0-1,H0)}if(n0.startsWith(\"V  \")){let N0=n0.split(\" \").filter(Boolean);if(N0.length>=3){let H0=Number(N0[1]),Se=N0.slice(2).join(\" \");!Number.isNaN(H0)&&H0<=bt.getAllAtoms()&&!bt.getAtomCustomLabel(H0-1)&&bt.setAtomCustomLabel(H0-1,Se)}}if(n0.startsWith(\"M  ZZC\")){let N0=Number(n0.slice(7,10).trim()),H0=n0.slice(10).trim();N0&&H0&&bt.setAtomCustomLabel(N0-1,H0)}}return bt.changeCustomLabelPosition(H1),bt}}var kPt=[\"M  STY\",\"M  SLB\",\"M  SAL\",\"M  SDT\",\"M  SDD\",\"M  SED\"];function gS(w){let Z=w.prototype.toMolfile;w.prototype.toMolfile=function(ot={}){let Ft=this.getCompactCopy(),{includeCustomAtomLabelsAsALines:H1=!1,includeCustomAtomLabelsAsVLines:bt=!1,customLabelPosition:y1,removeCustomAtomLabels:i1=!1}=ot;Ft.changeCustomLabelPosition(y1);let L1=Z.call(Ft);if(!H1&&!bt&&!i1)return L1;let u1=L1.includes(`\\r\n`)?`\\r\n`:`\n`,n0=L1.split(u1);if(i1&&(n0=n0.filter(Se=>!kPt.some(Xe=>Se.startsWith(Xe)))),n0.length<4||!n0[3].includes(\"V2000\"))return L1;let N0=[];for(let Se=0;Se<Ft.getAllAtoms();Se++){let Xe=Ft.getAtomCustomLabel(Se);if(Xe){let j8=String(Se+1).padStart(3,\" \");H1&&N0.push(`A  ${j8}`,Xe),bt&&N0.push(`V  ${j8} ${Xe}`)}}let H0=n0.findIndex(Se=>Se.startsWith(\"M  END\"));return H0===-1?L1:(n0.splice(H0,0,...N0),n0.join(u1))}}function BS(w){let Z=w.prototype.toRxn,Bt=w.prototype.toRxnV3;w.prototype.toRxn=function(Ft={}){return dS(this,Z,Ft)},w.prototype.toRxnV3=function(Ft={}){return dS(this,Bt,Ft)}}function dS(w,Z,Bt){let{programName:ot=\"\",keepIdCode:Ft=!1}=Bt,H1=Z.call(w,ot);return Ft?H1:H1.replace(/^OCL_RXN_V1.0:.*$/m,\"\")}function vS(w){let Z=w.prototype.toSVG;w.prototype.toSVG=function(ot,Ft,H1,bt){if(typeof ot!=\"number\"||typeof Ft!=\"number\")throw new Error(\"Molecule#toSVG requires width and height to be specified\");bt=bt||{};let y1=bt.factorTextSize||1,i1=bt.autoCrop===!0,L1=bt.autoCropMargin===void 0?5:bt.autoCropMargin,u1=Z.call(this,ot,Ft,y1,i1,L1,H1,bt),n0=/svg id=\"(.*)\" xmlns/.exec(u1)[1];return u1=u1.replace(\"<style>\",`<style> #${n0} text {font-family: sans-serif;}`),u1=u1.replace(\"line {\",`#${n0} line {`),u1=u1.replace(\"polygon {\",`#${n0} polygon {`),bt.fontWeight&&(u1=u1.replaceAll(\"font-size=\",`font-weight=\"${bt.fontWeight}\" font-size=`)),bt.strokeWidth&&(u1=u1.replaceAll(/stroke-width=\"[^\"]+\"/g,`stroke-width=\"${bt.strokeWidth}\"`)),u1}}function FS(w){let{ConformerGenerator:Z,ForceFieldMMFF94:Bt,Molecule:ot,Reaction:Ft}=w;Z.prototype.molecules=function*(){let L1;for(;(L1=this.getNextConformerAsMolecule())!==null;)yield L1};let H1={maxIts:4e3,gradTol:1e-4,funcTol:1e-6},bt=Bt.prototype._minimise;delete Bt.prototype._minimise,Bt.prototype.minimise=function(L1){return L1={...H1,...L1},bt.call(this,L1.maxIts,L1.gradTol,L1.funcTol)},hS(ot),cS(ot),wS(ot),gS(ot),BS(Ft,ot),vS(ot);function y1(i1){if(!i1)return null;if(i1.includes(\"V2000\")||i1.includes(\"V3000\"))return ot.fromMolfile(i1);try{return ot.fromSmiles(i1)}catch{}try{return ot.fromIDCode(i1)}catch{}return null}ot.fromText=function(L1){let u1=y1(L1);return u1&&u1.getAllAtoms()>0?u1:null},ot.prototype.getOCL=function(){return w}}function eD(){}function bPt(w){let Z=w.document,Bt={},ot={userAgent:\"webkit\"},Ft=eD;Ft.__moduleStartupDone=eD;let H1=eD,bt,y1;function i1(){}function L1(){}function u1(){}function n0(){}function N0(){}function H0(){}function Se(){}function Xe(){}function j8(){}function GP(){}function Nn(){}function K2(){}function YU(){}function X2(){}function Z2(){}function W2(){}function _2(){}function KU(){}function jA(){}function _c(){}function Il(){}function xl(){}function AD(){}function $c(){}function c9(){}function nD(){}function ac(){}function tw(){}function CPt(t){}function ew(){}function Aw(){}function Nl(){}function vi(){}function PD(){}function B1(){}function kS(){}function nw(){}function Pw(){}function rw(){}function u0(){}function iw(){}function fw(){}function XU(){}function Dw(){}function uw(){}function Qw(){}function Uw(){}function ow(){}function Lw(){}function sw(){}function Ol(){}function yw(){}function lw(){}function Tw(){}function hw(){}function cw(){}function ww(){}function gw(){}function dw(){}function Bw(){}function vw(){}function Fw(){}function mw(){}function kw(){}function bS(t,e){t.S=e}function Gl(t,e){t.I=e}function RS(t,e){t.T=e}function jS(t,e){t.O=e}function $2(t,e){t.P=e}function pS(t,e){t.G=e}function CS(t,e){t.d=e}function MS(t,e){t.f=e}function HS(t,e){t.i=e}function VS(t,e){t.i=e}function ES(t,e){t.f=e}function SS(t,e){t.n=e}function bw(t,e){t.p=e}function qS(t,e){t.b=e}function IS(t,e){t.e=e}function xS(t,e){t.r=e}function NS(t){t.a=t.b}function ZU(t){this.a=t}function cr(t){this.j=t}function GA(t){this.b=t}function Rw(t){this.e=t}function jw(t){this.e=t}function pw(t){this.a=t}function Cw(t){this.a=t}function Mw(t){this.a=t}function Hw(t){this.a=t}function Vw(t){this.a=t}function Ew(t){this.a=t}function Sw(t){this.a=t}function qw(t){this.a=t}function Iw(t){this.a=t}function a2(t){this.a=t}function WU(t){this.a=t}function rD(t){this.a=t}function xw(t){this.b=t}function tu(){this.i=0}function Nw(){this.i=1}function Ow(){this.a=-1}function Jl(){this.b=-1}function Fi(t){this.a=t}function eu(t){this.a=t}function zl(t){this.a=t}function Yl(t){this.a=t}function Kl(t){this.a=t}function iD(t){this.a=t}function Xl(t){this.a=t}function Zl(t){this.a=t}function fD(t){this.a=t}function DD(t){this.a=t}function Wl(t){this.c=t}function _l(t){this.b=t}function w9(t){this.a=t}function g9(t){this.a=t}function Wt(t){this.c=t}function _U(t){this.b=t}function Gw(t){this.a=t}function Jw(t){this.a=t}function $l(t){this.a=t}function zw(t){this.c=t}function Yw(t){this.c=t}function Kw(t){this.a=t}function Xw(t){this.a=t}function OS(t,e){t.a=e}function GS(t,e){t.a=e}function JS(t,e){t.d=e}function zS(t,e){t.e=e}function $U(t,e){t.n=e}function YS(t,e){t.T&=~e}function Zw(t,e){t.C[e]=-1}function al(t,e){mt(t.a,e)}function KS(t,e){mt(t.S,e)}function XS(t,e){DO(t.a,e)}function ZS(t,e){fO(t.a,e)}function WS(t,e){au(t.a,e)}function t3(t,e){mt(t.a,e)}function JP(t,e){mt(t.a,e)}function aU(t,e){LA(t.d,e)}function _S(t,e){XS(e,t.B)}function $S(t,e){ZS(e,t.v)}function aS(t,e){Wq(e,t.f)}function tq(t,e){t.H[e]=512}function eq(t,e,A){t.k[e]=A}function Au(){fo(this)}function f1(){cu(this)}function LP(){Cu(this)}function Ww(t){XK(this,t)}function to(){f1.call(this)}function _w(){f1.call(this)}function $w(){mr.call(this)}function aw(){e7.call(this)}function e3(){e7.call(this)}function A3(){mr.call(this)}function d9(){mr.call(this)}function Aq(){return++pV}function nq(t){return t>>>0}function Pq(t){return cK(t)}function rq(t){return FK(t)}function iq(t){t.a>0&&--t.a}function sP(t,e){t.u[e]|=Q0}function n3(t,e){t.F[e]|=I0}function fq(t,e){t.q=e,t.T=0}function Dq(t,e){t.r=e,t.T=0}function mi(t,e){t.length=e}function uq(t,e){mt(t.c,e)}function rA(t,e){Si(t.a,e)}function Qq(t){IE=t,pU=!0}function Uq(t){return $r(t)}function oq(){return kf(),sr}function t7(){this.a=new vo}function uD(){this.a=new f1}function e7(){this.a=new f1}function A7(){this.a=new f1}function nu(){this.c=new f1}function n7(){this.b=new k9}function c0(){c0=B1,JD()}function P3(){mr.call(this)}function P7(){mr.call(this)}function dA(){mr.call(this)}function r3(){mr.call(this)}function r7(){mr.call(this)}function i3(){LQ.call(this,0)}function i7(){Y8.call(this,2)}function f7(){A3.call(this)}function f3(){this.a=new TD}function QD(){this.a=new LP}function D3(){this.a=new lP}function D7(){this.a=new lP}function Pu(t){this.a=GJ(t)}function Lq(t){this.a=t,Qi(t)}function sq(t,e){rA(e,t.a.a)}function eo(t,e,A){t.k[e].a=A}function Ao(t,e,A){t.k[e].b=A}function no(t,e,A){t.k[e].c=A}function yq(t){_A(),Y1(),wn=t}function ki(t){SL(t),t.d=null}function u7(){wp(),this.b=It}function wr(t){V1.call(this,t)}function p1(t,e){return t.s[e]}function Q7(t,e){return t.J[e]}function UD(t,e){return t.e[e]}function Mt(t,e){return t.e[e]}function a1(t,e){return t.o[e]}function lq(t,e){return t.o[e]}function Tq(t,e){return t.X[e]}function hq(t,e){return t.Y[e]}function ye(t,e){return t.A[e]}function o0(t,e){return t.B[e]}function K(t,e){return t.C[e]}function ee(t,e){return t.G[e]}function l1(t,e){return t.H[e]}function O(t,e){return t.j[e]}function cq(t,e){return t.d[e]}function u3(t,e){return t.e[e]}function wq(t,e){return t.f[e]}function B9(t,e){return t.a[e]}function ru(t,e){return t.a[e]}function iu(t,e){return t.b[e]}function oD(t,e){return t.e[e]}function J0(t,e){return t.k[e]}function gq(t,e){return t.a[e]}function U7(t,e){return t.b[e]}function o7(t,e){return t.c[e]}function dq(t,e,A){t8(t.a,A,e)}function Bq(t){bJ(t.a,t.c,t.b)}function L7(t){wr.call(this,t)}function s7(t){fa.call(this,t)}function y7(t){No.call(this,t)}function l7(t){No.call(this,t)}function T7(t){No.call(this,t)}function h7(t){No.call(this,t)}function gr(t){wr.call(this,t)}function c7(t){wr.call(this,t)}function w7(t){zL.call(this,t)}function bi(t){t.b=null,t.c=0}function Ri(t){return U1(t),t}function LD(t){return U1(t),t}function vq(t){return nP*t*t}function Fq(t){return is(t,t.i)}function mq(t,e){return oz(t,e)}function kq(t,e){return tJ(t,e)}function bq(t,e){return t.db[e]}function Rq(t){return Ui(t),t.B}function jq(t){return Ui(t),t.H}function ji(){ji=B1,ul=new LP}function g7(){g7=B1,$4=new i1}function Q3(){Q3=B1,a4=new tw}function pq(t,e){t.g=new zr(e)}function sD(t,e){t.T|=248&(8|e)}function yD(t,e,A){bD(t.k[e],A)}function Cq(t){lx(t,t.length)}function Mq(t){ux(t,t.length)}function Hq(t){Qx(t,t.length)}function Vq(t){Tx(t,t.length)}function U3(t){Hu(t,t.length)}function Po(t){U1(t),this.a=t}function o3(t){new f1,this.a=t}function p8(t){wr.call(this,t)}function C8(t){wr.call(this,t)}function ro(t){wr.call(this,t)}function d7(t){wr.call(this,t)}function lD(t){wr.call(this,t)}function L3(t){gr.call(this,t)}function BA(t){EA.call(this,t,0)}function B7(t){return Iu(t,t.jb)}function zP(t){return!!t&&t.b}function v7(t){return t.b==t.c}function vA(t,e){return t.J[e].c}function kt(t,e){return t.J[e].a}function jt(t,e){return t.J[e].b}function d0(t,e){return t.u[e]&3}function qe(t,e){return t.F[e]&3}function Bn(t,e){return t.w[e]<0}function s3(t,e){return t.a[e]}function v9(t,e){return t.k[e].a}function F9(t,e){return t.k[e].b}function m9(t,e){return t.k[e].c}function d(t,e){return RB(t,e)}function F7(t){return 4e3*t*t}function Eq(t){return 8e3*t*t}function Sq(t){return t.c||cQ(t)}function qq(t){return _A(),ar(t)}function Iq(t){return _A(),ei(t)}function JA(){Y1(),$3.call(this)}function m7(t){gr.call(this,t)}function YP(t){C8.call(this,t)}function TD(){eu.call(this,\"\")}function fu(){eu.call(this,\"\")}function V0(){eu.call(this,\"\")}function k9(){eu.call(this,\"\")}function y3(t){Pu.call(this,t)}function io(t){_U.call(this,t)}function k7(t){Co.call(this,t)}function b7(t){io.call(this,t)}function R7(t){yB.call(this,t)}function l3(t){M8.call(this,t)}function j7(t){hD.call(this,t,0)}function p7(t){Lq.call(this,t.a)}function T3(t){Xw.call(this,t)}function C7(t){C9.call(this,t)}function pi(){M3.call(this,null)}function M7(){this.a=0,this.b=0}function H7(t){this.b=t,this.a=1}function fo(t){t.a=0,t.b=0,t.c=1}function xq(t,e){t.c=e,t.T&=-144}function E0(t,e,A){t.s[e]=A,t.T=0}function w0(t,e,A){t.H[e]=A,t.T=0}function Du(t,e){return t.A[e]==0}function FA(t,e){return t.u[e]&48}function Do(t,e){return t<e?t:t-e}function X1(t,e){return e*t.c+t.b}function Z1(t,e){return e*t.c+t.a}function h3(t,e){return N(t.j,e)}function V7(t,e){return N(t.k,e)}function c3(t,e){return bq(t.d,e)}function Nq(t,e){return lq(t.d,e)}function R0(t,e){return Ho(t.d,e)}function Oq(t,e){return N(t.a,e)}function w3(t,e){return N(t.f,e)}function dr(t,e){return N(t.g,e)}function uu(t,e){return pv(t,e)}function Gq(t,e){return ff(t.d,e)}function Qu(t){return yb(t,N5(t))}function E7(t){return t.l|t.m<<22}function Jq(t,e){cI(t.b,t.a,e)}function S7(t,e){mt(t.f,e),t.d=-1}function q7(t,e){mt(t.g,e),t.d=-1}function zq(t,e){return t.a+=e,t}function g3(t,e){return t.a+=e,t}function Uu(t){return Mo(t),t.n}function On(t){return ut(t,7),t.p}function I7(t){this.a=new s7(t.a)}function uo(t){this.a=new Ji(t)}function M8(t){this.a=(U1(t),t)}function b9(t){this.b=t,this.a=0}function R9(){R9=B1,wU=!1}function d3(){d3=B1,LE=(Wh(),kU)}function Yq(){CU!=0&&(CU=0),MU=-1}function x7(){nl==null&&(nl=[])}function Kq(){throw At(new dA)}function B3(){throw At(new dA)}function hD(t,e){this.k=t,this.j=e}function u(t,e){this.b=t,this.a=e}function Qo(t,e){ha.call(this,t,e)}function cD(t){GK.call(this,t,t.o)}function Uo(){gO.call(this,new c9)}function oo(){oo=B1,H4=SA(\"X\",32)}function N7(t,e,A){Dn(t,A),Ln(t,e)}function Ci(t,e){return X0[t.C[e]]}function ou(t,e){return t.u[e]&448}function Lu(t,e){return t.H[e]&127}function iA(t,e){return t.a[e]&w1}function yP(t,e){return t.c[e]&w1}function Xq(t,e){return t.C[e]==-1}function Ze(t,e,A,n){t.w[e]=n?-A:A}function wD(t,e){su.call(this,t,e)}function Mi(t,e){su.call(this,t,e)}function Lo(t,e){this.b=t,this.a=e}function gD(t,e){this.b=t,this.a=e}function O7(t,e){this.b=t,this.a=e}function KP(t,e){this.a=t,this.b=e}function su(t,e){this.a=t,this.b=e}function G7(t,e){this.a=t,this.b=e}function J7(t,e){this.a=t,this.b=e}function z7(t,e){this.a=t,this.b=e}function Y7(t,e){this.a=t,this.b=e}function We(t,e){this.a=t,this.b=e}function K7(t,e){this.a=t,this.b=e}function X7(t,e){this.a=t,this.b=e}function v3(t,e){this.a=t,this.b=e}function so(t,e){this.k=e,this.j=t}function nn(t){this.b=t,this.a=-2}function Z7(t){pD.call(this,t,0)}function W7(){yB.call(this,null)}function lP(){Ji.call(this,null)}function _7(){C9.call(this,null)}function $7(){d3(),pU||gL(),new Rj}function x1(){x1=B1,gi=new rw}function yo(){yo=B1,vl=new Aw}function Zq(t,e){UL(t.c,new Hw(e))}function Wq(t,e){uG(t.a,t.b,t.c,e)}function _q(t,e){ox(t),t.b._c(e)}function a7(t,e){return mt(t.a,e)}function tg(t,e){return ff(t.a,e)}function F3(t,e){return N(t.a,e).a}function eg(t,e){return N(t.a,e).b}function z(t,e,A){return t.D[e][A]}function _(t,e,A){return t.i[e][A]}function Ot(t,e,A){return t.k[e][A]}function pA(t,e,A){return t.n[e][A]}function $q(t,e){return t.H[e]==512}function dD(t){return t.a.c+t.c.c}function Ag(t){return sn(t,1,t.c)>0}function S1(t,e){return G(t,e)>0}function Hi(t,e){return G(t,e)<0}function yu(t,e){return wg(e,t.a)}function ng(t,e){return wg(e,t.a)}function j9(t,e){su.call(this,t,e)}function Pg(t){sp(),pa.call(this,t)}function Br(t){return t.b=WB(t.a)}function rg(t,e){return t.a.get(e)}function lo(t,e){return So(t.a,e)}function lu(t,e){su.call(this,t,e)}function To(t,e){su.call(this,t,e)}function TP(t,e){this.a=t,this.b=e}function ig(t,e){this.a=t,this.b=e}function fg(t,e){this.a=t,this.b=e}function Dg(t,e){this.b=t,this.a=e}function ug(t,e){this.b=t,this.a=e}function ho(t,e){this.c=t,this.d=e}function Qg(t,e){this.a=t,this.c=e}function co(t,e){V9(t,t.length,e)}function aq(t){return t.B?t.B.u:1}function tI(t){return Array.from(t)}function eI(){return new _P(new P8)}function Tu(t){return typeof t===w2}function Vi(t){return typeof t===nr}function H8(t){return typeof t===bf}function J1(t){return t??null}function m3(t,e){return t==e-1?0:t+1}function AI(t,e){return _A(),Je(t,e)}function nI(t,e){return _A(),SA(t,e)}function P0(t,e){return G(t,e)==0}function hu(t,e){return G(t,e)>=0}function Ug(t,e){return G(t,e)<=0}function gt(t,e){return G(t,e)!=0}function PI(t,e){i6.call(this,t,0,e)}function rI(t){w.clearTimeout(t)}function og(t){this.b=t,this.c=!1}function Lg(){pU||gL(),this.a=new Fm}function sg(){sg=B1,zf=(x1(),$A)}function yg(){yg=B1,B8=(x1(),$A)}function lg(t,e){return J1(t)===J1(e)}function k3(t,e,A){return t.e[e][A]}function b3(t,e,A){return t.f[e][A]}function Ei(t,e){return(t.u[e]&4)!=0}function wo(t,e){return(t.F[e]&4)!=0}function De(t,e){return t.i[e].length}function R3(t,e){return t.e[e]-t.j[e]}function go(t,e){return(t.u[e]&8)!=0}function Tg(t){return parseInt(t)||-1}function cu(t){t.a=h(uP,A0,1,0,5,1)}function Si(t,e){return t.a+=\"\"+e,t}function hg(t,e){return t.a+=\"\"+e,t}function J(t,e){return t.a+=\"\"+e,t}function Ie(t,e,A){t.J[e].b=A,t.T&=7}function Be(t,e,A){t.J[e].a=A,t.T&=7}function hP(t,e,A){t.J[e].c=A,t.T&=7}function iI(t,e,A){t8(t.f,A,e),t.d=-1}function fI(t,e,A){t8(t.g,A,e),t.d=-1}function DI(t,e,A){return M5(t.a,e,A)}function cg(t){return S0(t.l,t.m,t.h)}function XP(t){return t?t.ed():null}function wg(t,e){return t.toFixed(e)}function p9(t){return t.a<t.c.size()}function U0(t){return typeof t===nr}function gg(t,e){return e==0?t.i:t.j}function wu(t,e){Wi(t,0,t.length,e)}function j3(t,e){yx(t.a,t.a.length,e)}function Bo(t,e,A,n){t.a=e,t.b=A,t.c=n}function BD(t,e,A,n){t.D[e][A]=n,t.T=0}function uI(t,e){return t.j[e]-EL(t,e)}function fA(t,e){return(t.F[e]&64)!=0}function gu(t,e){return(t.F[e]&48)>>4}function V8(t){return wP(t,t.q,t.r,wn)}function du(t){a5(),sB.call(this,t,0)}function p3(t){PI.call(this,t,new k9)}function dg(t){WX.call(this,t,new k9)}function C3(t){P8.call(this),this.e=t}function M3(t){this.d=new f1,this.c=t}function Bg(){this.c=new lP,this.b=0}function vg(t,e){this.b=AP(e),this.a=t}function Fg(t,e){this.b=AP(e),this.a=t}function C9(t){this.f=t,this.g=!0}function mg(){Xw.call(this,\"UTF-8\")}function vo(){kf(),this.g=new Ni,_J()}function ZP(t,e,A){mt(t.a,new We(e,A))}function kg(t,e,A,n){t.e=e,t.c=A,t.d=n}function QI(t,e){return j0(t.a[e][3])}function UI(t,e){return j0(t.a[e][2])}function bg(t,e){return j0(t.a[e][2])}function Rg(t,e){return j0(t.a[e][1])}function oI(t){return t.e==null?\"\":t.e}function Fo(t){return t!=null?a8(t):0}function jg(t){ke(),QG.call(this,t)}function pg(t){XO.call(this,t,hN())}function Cg(){lu.call(this,\"Head\",1)}function Mg(){lu.call(this,\"Tail\",3)}function Hg(t){Wi(t,0,t.length,null)}function H3(t){ut(t,31),t.d&&CY(t.d)}function LI(){return _A(),Y1(),Y1(),wn}function Pn(t,e){return wP(t,t.q,t.r,e)}function Vg(t,e){return(t.u[e]&Q0)!=0}function vr(t,e){return(t.F[e]&Q0)!=0}function V3(t,e){return(t.F[e]&s8)!=0}function E3(t,e){return(t.F[e]&I0)!=0}function z0(t,e){return(t.u[e]&I0)!=0}function Fr(t,e){return(t.u[e]&nU)!=0}function E8(t,e){return(t.u[e]&Tn)!=0}function qi(t,e){return(t.u[e]&hn)!=0}function sI(t,e){return(t.u[e]&C0)!=0}function yI(t,e){return(t.u[e]&ge)!=0}function i0(t,e){return(t.a[e]&Q0)!=0}function Re(t,e){return(t.c[e]&Q0)!=0}function S8(t,e){return(t.c[e]&I0)!=0}function lI(t,e){return(t.a[e]&I0)!=0}function S3(t,e){return(t.a[e]&T8)!=0}function Bu(t,e){return(t.G[e]&y8)!=0}function r0(t,e){return(t.u[e]&512)!=0}function WP(t,e){return(t.F[e]&128)!=0}function cP(t,e){return(t.F[e]&768)>>8}function q3(t,e){return t<e?-1:t>e?1:0}function S0(t,e,A){return{l:t,m:e,h:A}}function mo(t,e,A){return t.j=e,f6(t,A)}function Eg(t,e){return t.a+=Te(e),t}function TI(t,e){t.H[e]=512,mf(t),t.T=0}function ko(t,e){LL(t,e),t.d&&(e.T=0)}function zA(t,e){Y1(),Fv.call(this,t,e)}function CA(t){_A(),AL.call(this,0,0,t)}function vu(t){xe.call(this,t.a,t.b,t.c)}function Sg(){dL.call(this,\"#\",\"\",\"\")}function qg(){lu.call(this,\"Range\",2)}function q8(t){return tP(t,0,t.length)}function hI(t,e,A){return FI(t.a,e,A)}function cI(t,e,A){GS(t,hI(e,t.a,A))}function wI(t,e){e.Nb(t.c),WO(e,t.a,t.b)}function I3(t,e){GB(e,t.c),CL(e,t.a,t.b)}function vn(t,e){return e<t.f&&i0(t.p,e)}function gI(t,e){return e<t.f&&S3(t.p,e)}function _e(t,e){return e<t.g&&Re(t.p,e)}function Zt(t,e){return t!=null&&Tz(t,e)}function Ae(t,e){return(t.u[e]&m1)>>18}function x3(t,e){return(t.G[e]&7680)>>9}function dI(t,e){return j0(t.b[e-1][2])}function Ig(t,e,A){return j0(t.a[e][A])}function N3(t,e){return N(t.k,e).length}function BI(t,e){return{type:e,value:t}}function O3(t,e,A){return e.kd(t.kd(A))}function vI(t,e,A,n){t.a.nd(A,e.kd(n))}function FI(t,e,A){return t.a.nd(e,A),e}function mt(t,e){return t.a.push(e),!0}function xg(t,e,A){t.i[0].a=e,t.i[0].b=A}function mI(t,e,A){t.a=e^1502,t.b=A^el}function kI(t,e){t.q=Eh(new kB(t.o,e),t)}function ue(t,e){t.d[t.c]=O1(t.d[t.c],e)}function G3(t){t.g=h(dE,h0,115,0,0,1)}function Ng(){this.a=h(uP,A0,1,8,5,1)}function bo(t){this.d=h(NA,a0,6,t,14,1)}function Og(t){this.c=t,this.b=t.length}function Ro(){this.a=0,this.b=0,this.c=0}function Gg(){this.b=new Jl,this.a=this.b}function Jg(t,e){this.a=new EA(t.a,VW(e))}function zg(t,e,A){this.a=new sj(t.a,e.a)}function Yg(t){pU||gL(),this.a=new pg(t)}function Kg(){pi.call(this),this.b=new f1}function mr(){G3(this),qT(this),this.jc()}function At(t){return t.backingJsObject}function vD(t){return t.$H||(t.$H=++pV)}function bI(t){return A1(nr,typeof t)}function RI(t){return A1(bf,typeof t)}function J3(t){return t.p==null?t.o.P:t.p}function jI(t){return t.l+t.m*fP+t.h*DP}function pI(t){return t>=56320&&t<=57343}function Ii(t,e){return le(t.a,J3(e.c))}function I8(t,e,A,n){t.a+=e,t.b+=A,t.c+=n}function FD(t,e,A){t.u[e]&=-449,t.u[e]|=A}function mD(t,e,A){return lF(t,e,e,A),t}function Fu(t,e,A){return WA(t,e,A,t.C[e])}function jo(t,e){return(t.u[e]&49152)>>14}function CI(t,e){return{molecule:t,map:e}}function MI(t,e,A){return vY(rp(t.a,e,A))}function kr(t,e){return e<0?null:N(t.d,e)}function po(t){t.e=Ve,t.a=null,t.d=null}function x8(t){this.a=t,_l.call(this,t)}function Xg(t){this.a=h(rt,ft,6,t,16,1)}function Zg(){this.a=h(F,k,6,0,15,1)}function Co(t){_U.call(this,t),this.a=t}function mu(t){ZF.call(this,t),this.e=NaN}function Fn(t){eu.call(this,(U1(t),t))}function Wg(t){if(!t)throw At(new P3)}function HI(t){if(!t)throw At(new P3)}function kD(t){if(!t)throw At(new r7)}function ku(t){if(!t)throw At(new P7)}function _g(t){if(!t)throw At(new r3)}function VI(t,e){ze(t.a,J3(e.c),new nd)}function bD(t,e){return Bo(t,e.a,e.b,e.c),t}function Mo(t){t.n==null&&fX(t)}function $g(t,e){t.t=w.Math.min(e,t.u)}function ag(t,e,A){t.Q=-6,t.F=e,t.D=A,Mb(t)}function td(t,e,A){t.F[e]&=-49,t.F[e]|=A<<4}function EI(t,e,A,n,P){jk(e,A,t.i[n][P])}function SI(t,e,A,n,P){return RX(t,e,A,n,P)}function wP(t,e,A,n){return kR(t,e,A,n,t.J)}function Ho(t,e){return t.g==null?-1:t.g[e]}function ed(t,e){return t.j==null?-1:t.j[e]}function Ad(t,e){return t&&e&&t instanceof e}function qI(t,e){return uu(new Array(e),t)}function II(t){return t<0?t+36:t>=36?t-36:t}function xI(t,e){return R9(),t==e?0:t?1:-1}function z3(t,e){this.c=1,this.a=t,this.b=e}function Gn(t,e){this.a=0,this.b=t,this.c=e}function nd(){this.b=new V0,this.c=new f1}function Pd(){this.e=new LP,this.c=5e5}function Y3(){_A(),AL.call(this,32,32,null)}function rd(t){cD.call(this,t),lh(this,t)}function K3(t,e){ji(),hB(ul,t)||SD(ul,t,e)}function NI(t,e){t.backingJsObject=e,Ub(t,e)}function $e(t,e){t.a=e,t.c=0,t.b=63,Mq(t.d)}function OI(t,e,A){t.ub(e-t.V/2,A-t.V/2,t.V)}function GI(t,e,A){return t.apply(e,A);var n}function RD(t,e){return l5(t,e,e.q,e.r,!0)}function id(t,e){return xN(t,e,t.a.length-1)}function xi(t,e){return t.i[e].length-t.e[e]}function fd(t,e){return U1(e),new TP(t,e)}function Dd(t,e){return U1(e),new TP(t,e)}function JI(t){return zt(DA(t,32))^zt(t)}function rn(t){return q8(h2(t,0,t.length))}function ud(t){return t.d.length-t.c.length}function Qd(t){return t.c==1&&t.a==0&&t.b==0}function A1(t,e){return U1(t),J1(t)===J1(e)}function br(t,e){return((t.u[e]&g8)>>>27)-1}function X3(t,e){return t.t==null?null:t.t[e]}function MA(t,e){return t.v==null?null:t.v[e]}function C1(t,e){return w.Math.abs(t.w[e])}function Ud(t){this.a=new w.Map,this.b=t}function od(t){this.a=new w.Map,this.b=t}function xe(t,e,A){this.a=t,this.b=e,this.c=A}function bu(t,e,A){this.b=t,this.c=e,this.a=A}function Z3(t,e,A){this.c=t,this.a=e,this.b=A}function W3(t,e,A){this.c=t,this.a=e,this.b=A}function gP(t,e,A){this.a=t,this.b=e,this.c=A}function Ld(t,e,A){this.a=t,this.b=e,this.c=A}function sd(t,e,A){this.a=t,this.c=e,this.b=A}function yd(t,e,A){this.a=t,this.c=e,this.b=A}function Vo(t,e,A){so.call(this,e,t),this.a=A}function q1(t,e,A){so.call(this,e,t),this.a=A}function N8(t){sG.call(this,t,(JT(),Lc))}function Ni(){this.c=8,this.O=new uo(new AD)}function ld(t,e){this.a=new mv(new b9(t),e)}function Td(t,e){return t.e[e]-t.j[e]+xt(t,e)}function Eo(t,e){return OF(e,KN(t,dT(e)))}function zI(t,e,A){return t.indexOf(k0(e),A)}function YI(t,e,A,n){return _A(),kA(t,e,A,n)}function So(t,e){var A;return A=e,!!G9(t,A)}function hd(t,e){var A;return A=t.d,t.d=e,A}function cd(t,e){return t.a*=e,t.b*=e,t.c*=e,t}function _3(t,e){t.u=new V0,t.t=6,t.v=0,t.r=e}function qo(t,e){Eu(e,t.R),Nu(e,t.v),pd(e,t.w)}function KI(t,e){z1(t),ER(t,OQ(e,!0,null))}function XI(t,e){zi(t.e,e)&&uL(t.d,e)}function Qe(t,e){return gt(V(t.B[e],Pe),0)}function wd(t,e){return t.e[e]-e0(t,e)+xt(t,e)}function j0(t){return Vi(t)?(U1(t),t):t.Xc()}function Rr(t){var e=t.Ic();e.disposeDialog()}function ZI(t,e){t.B=!1,UL(t.v,new J7(t,e))}function WI(t,e){t.v=!1,UL(t.s,new z7(t,e))}function _I(t,e){t.f=!1,UL(t.c,new G7(t,e))}function $I(t){t.b=!1,Ja(t.a,new a2(ad(t)))}function jD(t){this.c=t,this.O=new uo(new AD)}function gd(t,e,A){this.a=t,this.b=e,this.c=A}function Oi(t,e){this.a=t>e?t:e,this.b=t>e?e:t}function jr(t,e,A){t.A[e]=A,t.T&=t.C[e]==1?0:7}function aI(t,e){return t.d==null&&Rb(t,e),t.d}function tx(){var t;return t=qL(null),t.f=2,t}function dd(t){QL(t.a),vv(t.c,t.b),t.b=null}function Io(t,e){if(!t)throw At(new C8(e))}function Bd(t,e){if(t!=e)throw At(new r3)}function vd(t){ji(),K5.call(this,t,Sy,new LP)}function $3(){Y1(),this.M=this.N=256,FR(this)}function Fd(t){this.a=t.a,this.b=t.b,this.c=t.c}function ex(t){return t.g.a.length+t.f.a.length}function md(t,e,A){P5(A,0,t,e,A.length,!1)}function kd(t,e,A,n,P){D6(t,e,A,0,A.length,n,P)}function Ax(t,e,A){return _0(t,e)||_0(t,A)?16:1}function Ne(t,e,A){t.u[e]&=-49,t.u[e]|=A,t.T&=7}function bd(t,e,A){t.u[e]&=-49153,t.u[e]|=A<<14}function pD(t,e){this.e=e,yh(this,(U1(t),t))}function Rd(t,e){this.a=t,this.c=e,this.b=!0}function a3(t){this.f=t,this.e=2,this.a=vs(t)}function tT(t){var e;return e=t.slice(),pv(e,t)}function H(t){var e;return e=qL(t),Kv(t,e),e}function Gi(t){var e=t.Ec();return e.getText()}function xo(t){var e=t.Kc();return e.getWidth()}function CD(t,e){var A=t.Ic();A.showMessage(e)}function jd(t,e){return mF(e,t.c)||mF(e,t.a)}function Jn(t){return pn(px(U0(t)?pe(t):t))}function nx(t){return R9(),A1(w2,typeof t)}function Px(t){return _A(),new CA(KB(new tu,t))}function rx(t){return!_4&&(_4=new vo),Ts(_4,t)}function N(t,e){return ve(e,t.a.length),t.a[e]}function pd(t,e){e.a=e.a*t.c+t.a,e.b=e.b*t.c+t.b}function ix(t,e){return e==1?t.a+t.f++:t.i+t.g++}function M9(t,e){return t.p&&e<t.f?iA(t.p,e):0}function pr(t,e){return t.p&&e<t.g?yP(t.p,e):0}function Cr(t,e){return t.H[e]==257||t.H[e]==129}function zn(t,e,A){A?t.u[e]|=I0:t.u[e]&=gy}function Cd(t,e){e?this.a=e:this.a=new C3(t)}function No(t){this.b=t,this.a=new f1,CN(this,t)}function Ru(t){return t.p==null&&(t.p=hW(t)),t.p}function fx(t){return t.d==null&&Rb(t,10240),t.d}function Dx(t){return dD(new iD(t.e).a)<t.c}function ju(t,e){return U1(t),t+(\"\"+(U1(e),e))}function le(t,e){var A;return A=e,XP(G9(t,A))}function ae(t,e){var A=t.Jc();return A.setRGB(e)}function Oo(t){var e=t.Kc();return e.getHeight()}function Md(t){var e=t.Bc();return e.grabFocus()}function YA(t){var e=t.Ec();return e.isSelected()}function Gt(t,e){var A=t.Ec();return A.addItem(e)}function Go(t,e){var A=t.Ec();return A.setText(e)}function O8(t,e){var A=t.Ec();return A.setText(e)}function Jo(t,e,A,n){var P=t.Kc();P.setRGB(e,A,n)}function ux(t,e){var A;for(A=0;A<e;++A)t[A]=0}function Qx(t,e){var A;for(A=0;A<e;++A)t[A]=2}function je(t,e){t.K!=e&&(t.K=e,e||Yb(t),t.T=0)}function Hd(t,e){this.c=t,this.a=e,this.b=!1}function eT(t){oj(),this.a=\"Helvetica\",this.b=t}function _P(t){t?this.a=t:this.a=new C3(null)}function Vd(){fF(),XD.call(this,4,(e9(),Bl))}function Ed(){Ed=B1,rc=h(yPt,Ye,143,256,0,1)}function Sd(){Sd=B1,Pc=h(sPt,Ye,142,256,0,1)}function qd(){qd=B1,nc=h(LPt,Ye,141,128,0,1)}function R1(t,e,A,n,P,r){return kk(t,e,A,n,P,0,r)}function Id(t,e,A,n){return(n[t]&n[e]&~n[A])!=0}function dP(t,e,A){A?t.u[e]|=512:t.u[e]&=-513}function Ux(t,e){!t.b&&(t.b=new pi),X8(t.b,k1(e))}function ox(t){t.b||(t.b=t.a.Tb(),t.a.size())}function Yn(t){return Vi(t)?vt((U1(t),t)):t.Yc()}function AT(t){return Array.isArray(t)&&t.ud===PD}function H9(t){return t.length==0?0:c1(t,o1,It)}function Lx(){return B(d(NV,1),k,6,15,[0,1,2])}function sx(t,e,A){Zq(new iv(t._,e),new sd(t,e,A))}function yx(t,e,A){rm(0,e,t.length),Wi(t,0,e,A)}function BP(t,e,A){mQ(),jL.call(this,t,e,A,255)}function V9(t,e,A){var n;for(n=0;n<e;++n)t[n]=A}function lx(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function Tx(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function nT(t){var e;for(e=0;e<t.q;e++)t.u[e]&=gy}function xd(t){var e;for(e=0;e<t.q;e++)t.u[e]&=-449}function hx(t){var e;for(e=0;e<t.q;e++)t.u[e]&=-513}function Nd(t){var e;return e=t.a[0],t.e>0?e:-e|0}function Mr(t){var e;return e=qL(t),e.k=t,e.f=1,e}function cx(t,e){return!t&&(t=[]),t[t.length]=e,t}function Od(t,e){return hA(0,t,0,e.a.length,!0,e)}function Gd(t,e,A,n){return hA(1,e,0,A,n,new ZU(t))}function zt(t){return U0(t)?t|0:E7(t)}function Jd(t){return t.N==null&&(Ui(t),lZ(t)),t.N}function n1(t){t.b||(t.b=!0,sL(t.f,new Ew(t)))}function MD(t){t.a||(t.a=!0,sL(t.e,new qw(t)))}function V1(t){G3(this),this.f=t,qT(this),this.jc()}function PT(t){return!Array.isArray(t)&&t.ud===PD}function $P(t,e){return t.a.get(e)!==void 0}function M1(t,e){return pn(Xk(U0(t)?pe(t):t,e))}function q0(t,e){return pn(u5(U0(t)?pe(t):t,e))}function DA(t,e){return pn(nK(U0(t)?pe(t):t,e))}function zd(t,e,A){return t.c?$8(e.b,A.b):Qm(e,A)}function wx(t,e){return S0(t.l&e.l,t.m&e.m,t.h&e.h)}function gx(t,e){return S0(t.l|e.l,t.m|e.m,t.h|e.h)}function dx(t,e){return S0(t.l^e.l,t.m^e.m,t.h^e.h)}function zo(t,e){return t==null?e:e==null?t:t+\",\"+e}function Bx(t,e,A){return A<0?-1:t.lastIndexOf(e,A)}function vx(t,e,A){A?t.F[e]|=s8:t.F[e]&=-32769}function Fx(t,e,A){A?t.F[e]|=Q0:t.F[e]&=-65537}function pu(t,e){if(t<0||t>=e)throw At(new f7)}function rT(t,e){if(t==null)throw At(new c7(e))}function Cu(t){t.a=new Ud(t),t.c=new od(t),++t.b}function Hr(t,e){return t.a+=e.a,t.b+=e.b,t.c+=e.c,t}function mx(t,e){return t.a-=e.a,t.b-=e.b,t.c-=e.c,t}function Yd(t,e){var A=t.Bc();return A.setCursor(e)}function vP(t,e){var A=t.Ec();return A.setEnabled(e)}function Kd(t,e,A){var n=t.Kc();return n.getRGB(e,A)}function kx(t){var e;return e=ri(gn,t),e?Os(e):null}function bx(t){var e;return e=ri(gn,t),e?Zj(e):null}function Rx(t){var e;return e=ri(gn,t),e?bj(e):null}function Te(t){return U0(t)?\"\"+t:fR(t)}function Ji(t){this.b=null,this.a=(yo(),t||vl)}function iT(t){this.c=0,this.d=0,this.b=t,this.a=0}function Xd(t,e){this.k=t,this.c=0,this.g=e,Fs(this)}function Ue(t,e,A){ke(),this.e=t,this.d=e,this.a=A}function Zd(t,e){$5(),Me.call(this,t),o_(this,e)}function Wd(t,e,A){C9.call(this,e),Ca(this,t,e,A)}function jx(t,e,A,n,P){for(;e<A;)n[P++]=Yi(t,e++)}function Mu(t,e){return H8(e)?hB(t,e):!!Eo(t.a,e)}function G8(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)}function px(t){return S0(~t.l&x0,~t.m&x0,~t.h&aA)}function _d(t,e,A){return D8(t,e,e.D[0][A],e.D[1][A])}function Cx(t,e,A){t.u[e]&=-67108865,A&&(t.u[e]|=Tn)}function $d(t){var e;for(e=0;e<t.r;e++)t.F[e]&=-98305}function Hu(t,e){var A;for(A=0;A<e;++A)t[A]=!1}function Mx(t,e){return G(t,e)<0?-1:G(t,e)>0?1:0}function FP(t){return t.e==0?t:new Ue(-t.e,t.d,t.a)}function Kn(t,e){for(U1(e);t.ad();)Jq(e,t.bd())}function aP(t,e){var A;return A=Sr(t.a,e,t),A==null}function zi(t,e){return ze(t.a,e,(R9(),wU))==null}function fT(t,e){VL.call(this,t,!0,e),this.a=!0}function HD(t,e){return Xt(e,t.length+1),t.substr(e)}function uA(t,e){var A=t.Ec();return A.setSelected(e)}function Hx(t,e){var A=t.Jc();return A.drawPolygon(e)}function Yo(t,e){var A=t.Jc();return A.fillPolygon(e)}function ad(t){var e=t.zc();return e.getDrawContext()}function tB(t){var e=t.Ac();return e.getDrawContext()}function VD(t){var e=t.zc();return e.getCanvasWidth()}function Vx(t,e,A){var n=t.zc();return n.onChange(e,A)}function Vr(t){var e=t.zc();return e.getCanvasHeight()}function eB(t,e){var A=t.Bc();return A.createDialog(e)}function Ko(t,e){var A=t.Jc();return A.setLineWidth(e)}function AB(t){var e;e=NK(t),this.a=e,this.b=new jD(e)}function J8(t){var e;for(e=0;t>0;)t>>=1,++e;return e}function nB(t,e){return t.a+=String.fromCharCode(e),t}function Oe(t,e){return t.a+=String.fromCharCode(e),t}function U1(t){if(t==null)throw At(new d9);return t}function Er(t,e){J(t.c,\"  \"),J(t.c,e),J(t.c,$A)}function z8(t,e){return new xe(t.a-e.a,t.b-e.b,t.c-e.c)}function DT(t,e){return t.f[e]&&(t.o[e]==1||t.o[e]==2)}function Ex(t,e){var A;A=e+1,A>t.length&&(t.length=A)}function t8(t,e,A){DL(e,t.a.length),t.a.splice(e,0,A)}function Sx(t,e,A,n,P,r){t.F=e,t.B=A,t.D=n,t.C=P,t.A=r}function Xo(t,e,A){A?t.u[e]|=nU:t.u[e]&=dy,t.T&=7}function uT(t,e,A){t.H[e]=A==1?1:A==2?2:A==3?4:16,t.T=0}function Zo(t,e){return t.j[e]==2&&t.o[e]==2&&t.C[e]<=7}function PB(t,e){return new gP(e.a-t.a,e.b-t.b,e.c-t.c)}function Xn(t){var e;return e=new zA(t.q,t.r),uf(t,e),e}function rB(t){z1(t),t.eb=w.Math.max(t.eb,3),n1(t.k)}function QT(){QT=B1,lE=(n6(),Zf),sE=$V,yE=aV,TE=tE}function qx(t){w.setTimeout(function(){throw t},0)}function iB(t,e){return t.c==null?null:t.c[e]}function Wo(t){if(t==null)throw At(new d9);return t}function fB(){nu.call(this),this.b=new f1,this.a=new f1}function Y8(t){this.e=t,(t&1)==0&&!mU&&!mU&&(mU=new yk)}function B0(t){var e=t.Ec();return e.getSelectedIndex()}function DB(t){var e=t.Jc();return e.getForegroundRGB()}function UT(t){var e=t.Jc();return e.getBackgroundRGB()}function _o(t,e,A){var n=t.Ic();return n.setLayout(e,A)}function Ix(t,e){var A;return A=Cj(t),A?es(A,e):null}function xx(t){var e;return e=t-10,(e<0?48+t:97+e)&w1}function Yi(t,e){return Xt(e,t.length),t.charCodeAt(e)}function Nx(t,e){t.c=e,t.e*w.Math.pow(10,-t.b/1.36)}function $o(t,e,A){t.d=6,t.e=A,t.c=e,t.f=(e[t.e]&63)<<11}function uB(t,e,A){this.i=t,this.d=e,this.f=iX(A,t,e)}function QA(t,e,A,n){this.c=t,this.d=e,this.b=A,this.a=n}function qt(t,e,A,n){this.c=t,this.b=e,this.d=A,this.a=n}function Ki(t,e,A,n){this.b=t,this.a=e,this.c=A,this.d=n}function oT(t,e){this.a=l4,this.d=t,this.b=e,this.c=-1}function ao(t){this.d=t,this.a=this.d.b,this.b=this.d.c}function QB(t,e,A,n){so.call(this,t,n),this.b=e,this.a=A}function UB(t,e,A){KO.call(this,t,e,e.D[0][A],e.D[1][A])}function Ox(t,e,A,n){return{x:t,y:e,width:A,height:n}}function Sr(t,e,A){return H8(e)?SD(t,e,A):Pb(t.a,e,A)}function qr(t,e){return H8(e)?xu(t,e):XP(Eo(t.a,e))}function LT(t,e){return new Su(t.d,t.a,t.b,t.c.jd(e))}function Zn(t){return/\\d/.test(String.fromCharCode(t))}function Gx(t){return String.fromCharCode.apply(null,t)}function sT(t,e){return J1(t)===J1(e)||t!=null&&VP(t,e)}function K8(t,e){return J1(t)===J1(e)||t!=null&&VP(t,e)}function tL(t,e,A){return O0(t,e,A,_0(t,e)||_0(t,A)?16:1)}function Vu(t,e,A,n){return A<n?t.a[e][n][A]:t.a[e][A][n]}function Jx(t,e,A,n){for(var P=0;P<=n;P++)t[P]=e[A+P]}function eL(t,e,A,n){var P=t.Jc();return P.setFont(e,A,n)}function zx(t,e){var A=t.Ec();return A.setSelectedItem(e)}function yT(t,e){var A;return A=t.C[e],A==7||A==15||A==33}function Yx(t,e){var A;return A=TK(t,e),A?es(A,e):null}function Kx(t,e){var A;return A=lY(t.a,e),t.a=gq(t.a,A),A}function oB(t,e){return t.c!=e.c?t.c>e.c?1:-1:0}function Xx(t){return t.a==t.b?-1:t.c[t.a++]}function lT(t,e){var A;return A=Cn(t,e),A+WA(t,e,A,t.C[e])}function Zx(t,e){var A;for(A=0;A<e.q;A++)bD(t.k[A],e.J[A])}function Wx(t,e){t.H=e,t.eb=w.Math.max(t.eb,1),n1(t.k)}function Eu(t,e){e.c*=t.c,e.a=e.a*t.c+t.a,e.b=e.b*t.c+t.b}function LB(t,e,A){e<A?t.u[A][e]=!0:t.u[e][A]=!0}function AL(t,e,A){_A(),A?this.a=A:this.a=new zA(t,e)}function Su(t,e,A,n){this.d=t,this.a=e,this.b=A,this.c=n}function sB(t,e){this.v=new nD,this.L=t,this.G=e,this.xb()}function yB(t){this.b=new wL(11),this.a=(yo(),t||vl)}function lB(t,e){return new Su(e.d,new fg(e,t),e.b,e.c)}function TB(t){return qr((!j4&&(j4=new hp),j4).b,k1(t))}function _x(t){return String.fromCodePoint(t).trim()===\"\"}function mn(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][2]}function HA(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][5]}function Ir(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][4]}function e8(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][3]}function hB(t,e){return e==null?!!Eo(t.a,null):$P(t.c,e)}function TT(t,e){Wl.call(this,t),DL(e,t.size()),this.a=e}function E9(t,e){var A;return A=qL(t),Kv(t,A),A.f=e?8:0,A}function ED(t,e,A){var n;return n=new xw(eB(t,e)),aJ(n,A),n}function $x(t,e){return t.b!=e.b?t.b<e.b?-1:1:0}function UA(t,e,A){return pt(e,A,t.length),t.substr(e,A-e)}function cB(t,e,A){var n=t.Ac();return n.setDimensions(e,A)}function _t(t,e){var A=t.Ec();return A.setSelectedIndex(e)}function wB(t,e){var A;return A=Uu(t.sd),e==null?A:A+\": \"+e}function hT(t,e,A){var n=t.Bc();return n.showHelpDialog(e,A)}function cT(t,e,A,n){var P=t.Jc();return P.drawString(e,A,n)}function nL(t,e,A,n){var P=t.Jc();return P.fillCircle(e,A,n)}function wT(t,e,A){Fd.call(this,PB(new FT(t,e),new FT(t,A)))}function v0(t,e,A){Fd.call(this,PB(new Xi(t,e),new Xi(t,A)))}function ax(t){var e;for(e=aj(t);e;)aT(t,e,fU),e=aj(t)}function tN(t){var e;for(e=Cv(t);e;)aT(t,e,TC),e=Cv(t)}function eN(t){var e;for(e=0;e<t.R.f;e++)Cx(t.R,e,t.M[e])}function AN(t,e){var A;for(A=0;A<e;++A)t[A]=new $l(t[A])}function gB(t){var e;this.a=t,e=this.Bc(),e.register(this)}function qu(t){var e;e=t.a,t.a=t.b,t.b=e,e=t.c,t.c=t.d,t.d=e}function nN(t,e){return Nr(t,e.c,e.d)&&Nr(t,e.c+e.b,e.d+e.a)}function PN(t,e){return Kr(t.toLowerCase(),e.toLowerCase())}function dB(t){return/[A-Z]/i.test(String.fromCharCode(t))}function BB(t){return/[A-Z]/i.test(String.fromCharCode(t))}function rN(t){return ET(t.$c().Vb(),oO(new iw,new fw))}function iN(t,e){return qr(t.a,e)!=null?qr(t.a,e):(X9(),x2)}function gT(t,e){return((t.G[e]&7680)>>9)+((t.G[e]&wy)>>13)}function fN(t,e){return Cr(t.V,e)&&(bs(t,e)!=-1||XL(t,e)!=-1)}function vt(t){return Math.max(Math.min(t,It),-2147483648)|0}function kn(t){return w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)}function DN(t){return t>=5&&t<=9||t>=15&&t<=17||t==35||t==53}function uN(t){return t==2||t==10||t==18||t==36||t==54||t==86}function PL(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][5].a}function rL(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][6]>0}function vB(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][8]>0}function A8(t,e,A,n){t.F[e]&=-131080,t.F[e]|=A,n&&(t.F[e]|=4)}function W0(t,e,A,n){var P;return P=W9(t,6),Bo(t.J[P],e,A,n),P}function FB(t,e,A,n){var P;return P=ZA(t,e,A),P!=-1&&oh(t,P,n)}function dT(t){var e;return t==null?0:(e=a8(t),e|0)}function QN(t){if(t.Wc())return null;var e=t.k;return cU[e]}function mB(t,e){return Zt(e,84)?dk(t.a,e):!1}function Iu(t,e){return t.s==null&&(Ui(t),z$(t,e,t.R.J)),t.s}function BT(t,e){var A,n;return A=e,n=new XU,kj(t,A,n),n.d}function iL(t,e){var A;A=t.b,t.b=e.b,e.b=A,A=t.d,t.d=e.d,e.d=A}function kB(t,e){Bs(),this.b=t,ut(this.b,63),this.d=e,$R(this)}function Xi(t,e){this.a=t[3*e],this.b=t[3*e+1],this.c=t[3*e+2]}function bB(t,e,A){pU||gL(),XZ(e),this.a=new K5(t.a,e,new LP)}function xr(t,e,A,n,P){var r=t.Jc();return r.drawLine(e,A,n,P)}function UN(t,e){return bF(t,e)?(eF(t),!0):!1}function RB(t,e){var A=t.a=t.a||[];return A[e]||(A[e]=t.Rc(e))}function mP(t,e){return(t.u[t.D[0][e]]&t.u[t.D[1][e]]&512)!=0}function xu(t,e){return e==null?XP(Eo(t.a,null)):rg(t.c,e)}function jB(t,e){return e===t?\"(this Map)\":e==null?Pr:$D(e)}function oN(t,e){t.b.a.length!=0&&J(t.b,\"<NL>\"),J(t.b,e)}function LN(t,e,A){t.b=null,t.a=e,A==null?t.c=Ts(t,e):t.c=A}function sN(t,e,A){t.e=null,t.d=e,A==null?t.f=Ts(t,e):t.f=A}function pB(t,e,A){this.k=t,this.c=2,this.g=A,this.j=e,Fs(this)}function yN(t,e,A,n,P){var r=t.Jc();return r.clearRect(e,A,n,P)}function SD(t,e,A){return e==null?Pb(t.a,null,A):sm(t.c,e,A)}function lN(t){var e;return q8(h2(t,0,(e=t.length,JD(),e)))}function TN(t,e){return n8(e),RP(t,h(q,I,6,e,15,1),0,e)}function qD(t,e){return n8(e),RP(t,h(yt,wt,6,e,15,1),0,e)}function bn(t,e){return n8(e),RP(t,h(F,k,6,e,15,1),0,e)}function fL(t,e){return n8(e),RP(t,h(Yt,at,6,e,15,1),0,e)}function hN(){return IU||(!IU&&(IU=new Pd),IU)}function vT(t){if(t<0)throw At(new gr(\"bitIndex < 0: \"+t))}function DL(t,e){if(t<0||t>e)throw At(new gr(L6+t+s6+e))}function ve(t,e){if(t<0||t>=e)throw At(new gr(L6+t+s6+e))}function Xt(t,e){if(t<0||t>=e)throw At(new L3(L6+t+s6+e))}function FT(t,e){this.a=t.J[e].a,this.b=t.J[e].b,this.c=t.J[e].c}function CB(t){Bs(),this.b=t,ut(this.b,63),this.d=xk(t),$R(this)}function cN(t){return/[A-Z\\d]/i.test(String.fromCharCode(t))}function wN(t){return t.r?\"Unresolved SMARTS features:\"+t.r:\"\"}function gN(t){throw new Error(\"missing static resource: \"+t)}function MB(t){var e,A;for(e=0,A=t-1;A>0;)A>>=1,++e;return e}function ID(t){var e=t.Jc();return e.getSelectionBackgroundRGB()}function HB(){this.a=lk(\"/resources/forcefield/mmff94/def.csv\")}function VB(){this.a=AP(\"/resources/forcefield/mmff94/dfsb.csv\")}function EB(){this.a=AP(\"/resources/forcefield/mmff94/bndk.csv\")}function SB(){this.a=lk(\"/resources/forcefield/mmff94/atom.csv\")}function qB(t){g7(),zL.call(this,t),this.a=\"\",this.b=t,this.a=\"\"}function IB(t,e){Ue.call(this,1,2,B(d(F,1),k,6,15,[t,e]))}function dN(){return iQ(),B(d(Fl,1),Ye,95,0,[qE,qU,sc])}function BN(){return X9(),B(d(Ltt,1),Ye,107,0,[J4,Y4,z4,Ti,x2])}function xB(t,e){return j0(t.a[hA(0,e,0,t.a.length,!0,t)][1])}function NB(t,e){return j0(t.a[hA(0,e,0,t.a.length,!0,t)][4])}function OB(t,e){return j0(t.a[hA(0,e,0,t.a.length,!0,t)][2])}function vN(t,e){return r0(t.u,z(t.u,0,e))&&r0(t.u,z(t.u,1,e))}function Nr(t,e,A){return e>=t.c&&e<=t.c+t.b&&A>=t.d&&A<=t.d+t.a}function Y0(t,e,A){return kA(t.J[e].a,t.J[e].b,t.J[A].a,t.J[A].b)}function FN(t,e,A){return gt(V(e.c[t.d[A]],M1(1,t.b[A])),0)}function V(t,e){return pn(wx(U0(t)?pe(t):t,U0(e)?pe(e):e))}function Y(t,e){return pn(gx(U0(t)?pe(t):t,U0(e)?pe(e):e))}function Or(t,e){return pn(dx(U0(t)?pe(t):t,U0(e)?pe(e):e))}function kP(t){return ke(),G(t,0)>=0?we(t):FP(we(p0(t)))}function Zi(t,e){var A;return A=Cn(t,e),A+WA(t,e,A,t.C[e])-G1(t,e)}function mN(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)?1.5:dt(t,e)}function Gr(t,e,A){return(t.H[e]==257||t.H[e]==129)&&t.D[0][e]==A}function GB(t,e){var A;for(A=0;A<t.q;A++)t.J[A].a*=e,t.J[A].b*=e}function mT(t,e,A,n,P){t.i[0].a=e,t.i[0].b=A,t.i[1].a=n,t.i[1].b=P}function uL(t,e){U1(e),t.a[t.c]=e,t.c=t.c+1&t.a.length-1,qz(t)}function t1(t){return kD(t.a<t.c.a.length),t.b=t.a++,t.c.a[t.b]}function Nu(t,e){e.c=e.c*t.c+t.a,e.d=e.d*t.c+t.b,e.b*=t.c,e.a*=t.c}function QL(t){ku(t.b!=-1),t.c.removeAtIndex(t.b),t.a=t.b,t.b=-1}function xD(t,e,A){lm(e,A,t.size()),this.c=t,this.a=e,this.b=A-e}function JB(t,e,A){var n;lm(e,A,t.a.length),n=A-e,t.a.splice(e,n)}function f0(t,e,A,n){var P=t.Ic(),r=e.Ec();return P.add(r,A,n)}function zB(t,e){var A;return A=1-e,t.a[A]=_u(t.a[A],A),_u(t,e)}function S9(t,e){var A,n;return n=V(t,h1),A=M1(e,32),Y(A,n)}function kT(t,e){if(e==null)throw At(new d9);return Mu(t.e,e)}function YB(t,e){if(e==null)throw At(new d9);return qr(t.e,e)}function KB(t,e){return t.j=null,f6(t,new nn(new b9(e)))?t.j:null}function bT(t,e,A){return A=wK(A),t.replace(new RegExp(e,\"g\"),A)}function kN(t,e){var A;return e==null?null:_5(t,KA((A=e,c0(),A)))}function XB(t,e){var A;return A=e.C[t],A<(c2(),IA).length?IA[A]:2}function bN(t,e){var A;return A=n$(t,e),A?new _P(A):null}function RT(t,e,A,n,P){var r=t.Jc();return r.fillRectangle(e,A,n,P)}function UL(t,e){var A=t.Ic();function n(){e.nc()}A.showDialog(n)}function RN(t,e,A){var n;n=nz();try{return GI(t,e,A)}finally{$N(n)}}function Jr(t){var e;return U0(t)?(e=t,e==-0?0:e):cO(t)}function ZB(t,e){var A;return A=YB(t,e),++t.a,A&&(++A.b,++t.b),A}function ND(t,e){var A;return A=t.b?le(t.b,k1(e)):null,A?A.a:e-1}function oL(t,e){var A;return A=t.c?le(t.c,k1(e)):null,A?A.a:e-1}function jN(t){var e,A;for(A=Fj(t);A;)e=UY(A),aT(t,e,uU),A=Fj(t)}function pN(t){Ms();var e,A;for(ut(t,1),A=t.f,e=0;e<A;e++)yp(t,e)}function CN(t,e){var A=t;e.setEventHandler(function(n,P){A.Dc(n,P)})}function jT(t,e,A,n){var P=t.Jc();return P.drawCenteredString(e,A,n)}function MN(t,e,A,n,P){var r=t.Jc();return r.drawDottedLine(e,A,n,P)}function pT(t,e,A,n,P){this.a=t,this.b=e,this.g=A,this.f=n,this.e=P}function LL(t,e){e.K=t.K,e.L=t.L,e.S=t.S,e.I=t.I,e.P=t.P,e.T=t.T&24}function Rn(t){for(;t.d>0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function WB(t){return kD(t.a<t.c.size()),t.c.getAtIndex(t.b=t.a++)}function HN(t){return function(){return RN(t,this,arguments);var e}}function VN(t){if(!(\"stack\"in t))try{throw t}catch{}return t}function EN(){return t9(),B(d(stt,1),Ye,97,0,[yl,sl,Ll,ll,bU,Tl])}function SN(){return JT(),B(d(cPt,1),Ye,80,0,[Lc,VE,EE,SE])}function CT(){CT=B1,JE=B(d(F,1),k,6,15,[40,20,20,100,20])}function mA(t,e){ke(),Ue.call(this,t,1,B(d(F,1),k,6,15,[e]))}function MT(t){this.a=h(F,k,6,t,15,1),this.b=h(F,k,6,t,15,1)}function _B(){this.a=AP(\"/resources/forcefield/mmff94/covrad.csv\")}function qN(){throw new Error(\"drug likeness must be assessed first\")}function oA(t){var e=t.Ic(),A=e.createComboBox();return new l7(A)}function oe(t,e){var A=t.Ic(),n=A.createLabel(e);return new T7(n)}function sL(t,e){var A=t,n=t.Bc();n.runLater(function(){A.Cc(e)})}function bP(t,e){return e.e==0||t.e==0?y9:(P9(),Hs(t,e))}function Ou(t,e){t.e&&(!t.r&&(t.r=new V0),J(t.r,\" \"),J(t.r,e))}function n8(t){if(t<0)throw At(new d7(\"Negative array size: \"+t))}function $B(t,e,A){return dD(new iD(t.e).a)<t.c?Hv(t,e,A):null}function OD(t,e,A){var n;return n=new uB(e,A,t.D),zS(n,Bz(t,n)),n}function aB(t,e){var A;return A=t-e,A>=Q1?A-=F0:A<b6&&(A+=F0),A}function X8(t,e){var A;return A=a9(t,e),A<0&&(A=-(A+1),t8(t.d,A,e)),A}function IN(t,e){var A;for(A=t.d-1;A>=0&&t.a[A]==e[A];A--);return A<0}function q9(t,e,A){var n;return n=(ve(e,t.a.length),t.a[e]),t.a[e]=A,n}function xN(t,e,A){for(;A>=0;--A)if(K8(e,t.a[A]))return A;return-1}function NN(t,e){var A=t.Fc(),n=new CA(e);return A.copyMolecule(n)}function HT(t,e){var A;return A=t.u[e]&hn,A==0?0:A==re?2:A==I1?3:4}function VT(t,e){var A;return A=t.C[e],A==8||A==16||A==34||A==52||A==84}function ON(t,e){var A;return A=t.C[e],A==9||A==17||A==35||A==53||A==85}function tv(t,e,A){var n;for(n=0;n<t.e.length;n++)t.a[n]+=e,t.b[n]+=A}function ev(t,e,A,n){var P=t.Bc();return P.createImageFromBase64(e,A,n)}function Av(t,e,A){t.b=e,t.a=A,t.c&&t.e*w.Math.pow(10,-e/1.36)}function nv(t){mi(t.g.a,0),mi(t.f.a,0),mi(t.a.a,0),t.b=null,t.d=-1}function Pv(t,e){return e<t.g.a.length?N(t.g,e):N(t.f,e-t.g.a.length)}function GN(t,e){return P9(),e<Qc.length?aX(t,Qc[e]):bP(t,ii(e))}function ET(t,e){var A;return e.c.kd(aO(t,e.d.pc(),(A=new Kw(e),A)))}function JN(t){var e,A;return A=_5(new i3,KA((e=t,JD(),e))),new _P(A)}function yL(t){var e;for(e=t.length-1;e>=0&&(t[e]|0)==0;--e);return e}function Wn(t){var e,A;e=Um(t);do A=e,dW(t),e=Um(t);while(A!=e);return e}function rv(t,e){var A;return A=new n7,A.c=e,ut(t,15),cp(A,t,!0),A.b.a}function iv(t,e){Nk(),this.c=ED(t,\"Edit Text\",this),this.e=e,v_(this)}function ST(t){this.d=t,this.b=this.d.a.entries(),this.a=this.b.next()}function fv(){this.a=AP(\"/resources/forcefield/mmff94/vanderwaals.csv\")}function zr(t){Sh(),mI(this,zt(V(q0(t,24),oi)),zt(V(t,oi)))}function Yr(t){Y1(),Fv.call(this,t?t.M:256,t?t.N:256),t&&uf(t,this)}function Dv(t){t.cb&&(uf(t.cb,t.V),t.I=t.bb?new us(t.bb):null)}function qT(t){return t.j&&(t.backingJsObject!==vp&&t.jc(),t.g=null),t}function zN(t,e){return t.a=(t.a+e.a)/2,t.b=(t.b+e.b)/2,t.c=(t.c+e.c)/2,t}function lL(t,e){return e[0]!=-1&&e[3]!=-1?IQ(t,e):P_(t.o,t,e)}function YN(t,e){var A;return A=OQ(t,e,null),A?new _P(A):null}function fn(t,e){var A=t.Ic(),n=A.createCheckBox(e);return new y7(n)}function KN(t,e){var A;return A=t.a.get(e),A??h(uP,A0,1,0,5,1)}function Dn(t,e){if(!e||e.q==0){t.H=null;return}t.H=e,t.L=!1,ut(t.H,1)}function Ge(t,e,A,n){n?t.G[e]|=A:t.G[e]&=~A,t.T=0,n&&A!=0&&(t.K=!0)}function uv(t,e,A){return t.f.k.D[0][e]==A?t.f.k.D[1][e]:t.f.k.D[0][e]}function XN(t,e){return w.Math.pow(10,w.Math.log10(2e3)*t/(e-1)-1)}function ZN(t){t.eb=w.Math.max(t.eb,4),n1(t.k),N1(t,new q1(t,1,!1))}function Qv(t,e){var A;t.b&&(z1(t),A=new Xm(t._,t.V,e),WI(A,new Cw(t)))}function N1(t,e){var A;A=e.j,(A&t.J)==0&&(sL(t._,new yd(t,A,e)),t.J|=A)}function TL(t,e,A){var n,P;n=e>>4,P=2*(e&15),t.a[n]&=~(3<<P),t.a[n]|=A<<P}function hL(t,e,A,n){var P;return P=h(F,k,6,e,15,1),jY(P,t,e,A,n),P}function Uv(t,e,A){var n=t.Bc(),P=n.createImage(e,A);return new WU(P)}function ov(t,e){var A,n;return A=e.dd(),n=G9(t,A),!!n&&K8(n.d,e.ed())}function Kr(t,e){var A,n;return A=(U1(t),t),n=(U1(e),e),A==n?0:A<n?-1:1}function WN(t){var e,A;return e=t.c.e.length,A=t.c.e.length,A<e?-1:A>e?1:0}function _N(t){var e,A;return e=t.c.e.length,A=t.c.e.length,e<A?-1:e>A?1:0}function cL(t){var e,A,n;return e=t&x0,A=t>>22&x0,n=t<0?aA:0,S0(e,A,n)}function Lv(t){var e;return!!(t.r&&(e=AG(t.r),YR(t,e)))}function $N(t){t&&mO((Q3(),a4)),--CU,t&&MU!=-1&&(rI(MU),MU=-1)}function sv(t){return t==5||t==6||t==7||t==8||t==15||t==16||t==33||t==34}function wL(t){cu(this),Io(t>=0,\"Initial capacity must not be negative\")}function gL(){throw new Error(\"static resources must be registered first\")}function yv(t){this.b=AP(\"/resources/forcefield/mmff94/stbn.csv\"),this.a=t}function lv(t){this.b=AP(\"/resources/forcefield/mmff94/bond.csv\"),this.a=t}function dL(t,e,A){this.b=t,this.d=e,this.e=A,this.c=this.d+(\"\"+this.e)}function I9(t,e){return e==0||t.e==0?t:e>0?Im(t,e):Xb(t,-e)}function IT(t,e){return e==0||t.e==0?t:e>0?Xb(t,e):Im(t,-e)}function BL(t,e){return H8(e)?e==null?i5(t.a,null):pF(t.c,e):i5(t.a,e)}function Tv(t,e){return t.a?J(t.a,t.b):t.a=new Fn(t.d),hg(t.a,e),t}function vL(t,e){var A;return A=h(F,k,6,e,15,1),sA(t,0,A,0,t.length),A}function FL(t,e){var A;for(A=t-e;A<b6;)A+=F0;for(;A>Q1;)A-=F0;return A}function hv(t,e){var A;vT(e),A=e/31|0,Ex(t.a,A),t.a[A]=t.a[A]|0|1<<e%31}function GD(t){var e;return e=(c2(),IA)[t<IA.length?t:6],e*(t==1,.9)}function cv(t,e){var A,n;return n=t.j.k[e],A=t.j.j[e],n==0?t.b:n==1?A:t.a+A}function he(t,e,A,n,P,r){var i=t.Ic(),f=e.Ec();return i.add(f,A,n,P,r)}function xT(t,e,A,n,P){C9.call(this,e),this.c=GX(this,t,n,e,A),this.b=P}function mL(t,e,A,n){var P;return P=h(F,k,6,e+1,15,1),vW(P,t,e,A,n),P}function h(t,e,A,n,P,r){var i;return i=Uk(P,n),P!=10&&B(d(t,r),e,A,P,i),i}function kL(t,e){t.eb=w.Math.max(t.eb,e),n1(t.k),N1(t,new q1(t,1,!0))}function LA(t,e){var A;return A=(ve(e,t.a.length),t.a[e]),t.a.splice(e,1),A}function wv(){return x1(),\"\"+null.vd(),null}function gv(){gv=B1,yc=B(d(NA,1),a0,6,14,[0,1,3,7,15,31,63,127])}function JD(){JD=B1,new mg,new T3(\"ISO-LATIN-1\"),new T3(\"ISO-8859-1\")}function aN(t){if(!t)throw At(new ro(\"Unable to add element to queue\"))}function pt(t,e,A){if(t<0||e>A||e<t)throw At(new L3(YQ+t+o6+e+mp+A))}function tO(t,e){return t.a[e]>-1?t.a[e]:t.C[e]==1?c$(t,e):u6(t,e)}function ce(t,e,A,n){t.u[e]&=-8,A!=3&&(t.u[e]&=dy),t.u[e]|=A,n&&(t.u[e]|=4)}function dv(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)?0:t.H[e]&127}function Bv(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)?0:t.H[e]&127}function vv(t,e){var A;return A=new XU,A.c=!0,A.d=e.ed(),kj(t,e.dd(),A)}function Z8(t,e){var A;return A=x9(t,e,0),A==-1?!1:(LA(t,A),!0)}function bL(t){var e;return e=-1,t.a!=-2?(e=t.a,t.a=-2):e=t.b.Oc(),e}function eO(t){var e;for(ut(t,15),e=0;e<t.q;e++)(t.u[e]&3)!=0&&He(t,e,1,0)}function zD(t,e){var A;return A=hA(0,e,0,t.a.length,!0,t),A>=0&&t.a[A][7]>0}function YD(t){this.b=h(yt,wt,6,t,15,1),this.c=h(yt,wt,6,t,15,1),this.a=0}function NT(t){this.e=t,this.d=h(F,k,6,0,15,1),this.c=h(F,k,6,0,15,1)}function OT(t){this.e=t,this.b=this.e.a.entries(),this.a=h(uP,A0,1,0,5,1)}function RL(t,e){ho.call(this,t,e),this.a=h(hPt,A0,123,2,0,1),this.b=!0}function Fv(t,e){this.M=w.Math.max(1,t),this.N=w.Math.max(1,e),FR(this)}function AO(t){return A1(nr,typeof t)||Ad(t,w.java.lang.Number$impl)}function nO(t,e){try{t.c=Qn(e)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function Gu(t,e,A){var n=t.Ic(),P=n.createTextField(e,A);return new h7(P)}function Ju(t,e){var A;for(A=e;A<t.length;A++)if(t[A]==62)return A;return-1}function GT(t){var e;for(e=0;e<t.q;e++)if(t.J[e].c!=0)return!0;return!1}function z1(t){!t.cb&&(t.cb=new $3),uf(t.V,t.cb),t.bb=t.I?new us(t.I):null}function W8(t,e,A,n,P,r,i){i.a=e.a+P,i.c=e.c+r,i.b=e.b+P,i.d=e.d+r,Hn(t,i,A,n)}function jL(t,e,A,n){mQ(),this.a=(n&255)<<24|(t&255)<<16|(e&255)<<8|A&255}function mv(t,e){mm(),this.d=e,this.i=new nn(t),this.g=new k9,this.b=new k9}function P8(){this.g=new f1,this.f=new f1,this.a=new f1,this.d=-1,this.c=!1}function kv(t,e,A){this.b=w.Math.max(t,e),this.c=w.Math.min(t,e),this.a=A}function bv(){this.b=h(yt,wt,6,64,15,1),this.c=h(yt,wt,6,64,15,1),this.a=0}function Rv(t){this.b=AP(\"/resources/forcefield/mmff94/angle.csv\"),this.a=t}function jv(){this.a=AP(\"/resources/forcefield/mmff94/herschbachlaurie.csv\")}function pv(t,e){return Sv(e)!=10&&B(_L(e),e.td,e.__elementTypeId$,Sv(e),t),t}function PO(t,e){var A;for(A=Dl[e]/2;t<-A;)t+=F0;for(;t>=A;)t-=Dl[e];return t}function r8(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return A;return-1}function x9(t,e,A){for(;A<t.a.length;++A)if(K8(e,t.a[A]))return A;return-1}function pL(t){return t.a.d!=t.c?rg(t.a,t.b.value[0]):t.b.value[1]}function rO(t){return G(t,0)==0&&2<VU.length?VU[2]:new nf(t,2)}function Cv(t){return t.d.a.length<2?null:new Kb(N(t.d,0),N(t.d,1))}function Mv(t,e,A,n){return U1(t),U1(e),U1(A),U1(n),new Su(t,e,A,new Dw)}function Wi(t,e,A,n){var P;n=(yo(),n||vl),P=t.slice(e,A),_h(P,t,e,A,-e,n)}function iO(t,e,A,n,P){pt(e,A,t.length),pt(P,P+(A-e),n.length),jx(t,e,A,n,P)}function Hv(t,e,A){if(e==null||A==null)throw At(new d9);return Sr(t.e,e,A)}function JT(){JT=B1,Lc=new lu(\"All\",0),VE=new Cg,EE=new qg,SE=new Mg}function zT(t,e){return new gP(t.b*e.c-t.c*e.b,t.c*e.a-t.a*e.c,t.a*e.b-t.b*e.a)}function _i(t,e){var A;return e==null||e.length==0?null:vh(t,KA((A=e,c0(),A)))}function Vv(t,e){return ut(t,7),t.o[e]==2&&t.j[e]==2?ib(t,e,!1):Ns(t,e,!1)}function fO(t,e){e&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)))}function DO(t,e){e&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)))}function uO(t,e){var A,n;for(n=new f1,A=0;A<e.r;A++)mt(n,new UB(t,e,A));return n}function YT(t,e){var A,n;for(n=new Wt(t.a);n.a<n.c.a.length;)A=t1(n),A.mc(e)}function QO(t,e){var A,n;for(n=new Wt(t.a);n.a<n.c.a.length;)A=t1(n),A.mc(e)}function UO(t){var e,A;return new _P((e=new P8,A=new nn(new b9(t)),cY(e,A),e))}function oO(t,e){return LT(nG(fd(t,new Ol),Dd(e,new Ol),new Lw),new sw)}function p0(t){var e;return U0(t)&&(e=0-t,!isNaN(e))?e:pn(Wr(t))}function KT(t,e,A,n){if(A==null||A.length==0){SL(e),e.d=null;return}gp(t,e,A,n,0)}function Ev(t,e){var A;for(A=0;A<e.length;A++)if(e[A]==t)return!0;return!1}function CL(t,e,A){var n;for(n=0;n<t.q;n++)t.J[n].a+=e,t.J[n].b+=A;t.U+=e,t.V+=A}function Je(t,e){Y1();var A;for(A=t-e;A<b6;)A+=F0;for(;A>Q1;)A-=F0;return A}function LO(t,e){var A;return A=t.C[e],A==3||A==11||A==19||A==37||A==55||A==87}function sO(t,e){var A;return A=t.C[e],A==4||A==12||A==20||A==38||A==56||A==88}function yO(t){return t==1||t>=5&&t<=9||t>=14&&t<=17||t>=32&&t<=35||t>=52&&t<=53}function Sv(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function ML(t){return t.v<<=t.t,(!t.r||t.v!=63)&&(t.v+=64),Oe(t.u,t.v&w1),t.u.a}function XT(t){var e;return e=t.b.a.length==0?null:N(t.b,0),e!=null&&$T(t,0),e}function lO(t,e){var A,n;for(A=0,n=0;n<t.b;n++)t.e[n][e]&&t.c[n]==-3&&++A;return A}function TO(t,e){return new xe(t.b*e.c-t.c*e.b,-(t.a*e.c-t.c*e.a),t.a*e.b-t.b*e.a)}function qv(t,e){this.a=j0(t.b[e][5]),this.b=j0(t.b[e][6]),this.c=j0(t.b[e][7])}function $i(t,e){return(t.F[e]&768)>>8!=1&&(t.F[e]&768)>>8!=2?-1:(t.F[e]&ln)>>10}function Iv(t,e,A){t8(t.g,A,e),t.b[e.a]=!0,e.g!=-1&&(t.c[D1(t.k,e.a,e.g)]=!0)}function hO(t,e){t.L||(o$(t,e),t.L=!0),t.r||(y_(t,e),x$(t),fY(t),t.r=!0)}function xv(t,e){return t.V.q!=0&&t.r?NN(t.r,e?qb(t.V):Xn(t.V)):!1}function cO(t){return jh(t,(Xr(),Ac))<0?-jI(Wr(t)):t.l+t.m*fP+t.h*DP}function wO(t,e,A,n,P){return U1(t),U1(e),U1(A),U1(n),U1(P),new Su(t,e,A,n)}function Nv(t,e,A,n,P,r){this.c=t,this.e=e,this.d=A,this.f=n,this.b=P,this.a=r}function gO(t){this.e=\"\",this.c=9,this.d=0,this.i=h(X4,A0,56,1,0,1),this.i[0]=t}function KD(){this.i=h(X4,A0,56,2,0,1),this.i[0]=new c9,this.i[1]=new c9,this.a=0}function Xr(){Xr=B1,tc=S0(x0,x0,524287),cE=S0(0,0,l8),ec=cL(1),cL(2),Ac=cL(0)}function dO(){return e9(),B(d(lPt,1),Ye,72,0,[ME,RE,bE,jE,Bl,pE,se,CE])}function ZT(t,e){return t.o[e]==2&&t.j[e]==2&&t.n[e][0]==2&&t.n[e][1]==2&&t.C[e]<=7}function BO(t){var e,A;for(A=t.a,e=0;e<t.b.length;e++)A+=t.b[e]*m4[t.c[e]];return A}function vO(t){var e,A;for(A=t.d,e=0;e<t.b.length;e++)A+=t.b[e]*k4[t.c[e]];return A}function FO(t){var e,A,n;for(e=jF(t),n=0,A=0;A<xP.length;A++)n+=e[A]*xP[A];return n}function WT(t,e,A){var n;for(n=N(t.k,e).length;A>=n;)A-=n;for(;A<0;)A+=n;return A}function zu(t,e){var A,n;for(n=yu(t.b,e),A=n.length;A<10;A++)Oe(t.a,32);J(t.a,n)}function Ov(t,e){var A,n;for(n=yu(t.a,e),A=n.length;A<10;A++)Oe(t.b,32);J(t.b,n)}function mO(t){var e,A;if(t.b){A=null;do e=t.b,t.b=null,A=Yk(e,A);while(t.b);t.b=A}}function kO(t){var e,A;if(t.a){A=null;do e=t.a,t.a=null,A=Yk(e,A);while(t.a);t.a=A}}function HL(t,e){return e?(ut(t,1),wP(t,t.f,t.g,wn)):wP(t,t.q,t.r,wn)}function bO(t,e){if(t.N!=0){t.C!=-4&&(t.C=-4,t.Bb(t.N));return}t.C=-5,t.P=e,t.Bb(e)}function RO(t,e){try{t.i[0].a=Qn(e)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function jO(t,e){try{t.i[0].b=Qn(e)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function pO(t,e){try{t.d=c1(e,o1,It)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function VL(t,e,A){fp.call(this,t),this.b=e,this.c=G(A,0)==0?new aD:new zr(A)}function Gv(t,e,A,n){var P;return P=0,e&&(P|=1),A&&(P|=2),n&&(P|=4),Ru(new hD(t.a,P))}function N9(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return!0;return!1}function Zr(t,e,A){var n,P;for(n=0,P=0;P<t.j[e];P++)K(t,t.i[e][P])==A&&++n;return n}function Jv(t,e){var A,n;for(A=t.o[e],n=0;n<t.j[e];n++)tA(t,t.i[e][n])&&++A;return A}function CO(t,e){var A;return vT(e),A=e/31|0,A<t.a.length&&((t.a[A]|0)>>>e%31&1)==1}function zv(t,e,A,n,P){var r;return r=Sb(t,e,A,n,P),r<0?Gb(t,e,A,n,P):j0(t.b[r][5])}function MO(t){var e,A;return e=h(F,k,6,t.q,15,1),A=n9(t,e,!1,!1),Aj(t,e,A)}function EL(t,e){var A,n;if(A=0,t.K)for(n=0;n<t.j[e];n++)Qe(t,t.i[e][n])&&++A;return A}function e0(t,e){var A,n;for(A=t.j[e],n=0;n<t.j[e];n++)t.C[t.i[e][n]]==1&&--A;return A}function _T(t,e){var A,n,P,r;return n=e/2|0,P=t>=n,P&&(t-=n),r=e/32,A=r*t/(n-t),P?-A:A}function _n(t,e){var A;return t.t==null||t.t[e]==null?null:rn((A=t.t[e],c0(),A))}function VA(t,e){return(t.u[e]&m1)>>18!=1&&(t.u[e]&m1)>>18!=2?-1:(t.u[e]&RA)>>20}function Yv(t){return t!=null&&(typeof t===fy||typeof t==\"function\")&&t.ud!==PD}function Yu(t){return Y1(),t>=0&&t<Lr.length&&Lr[t]!=null?Lr[t]:t>=171&&t<=190?HV:VV}function SL(t){t.q=0,t.r=0,t.K=!1,t.L=!1,t.I=0,t.v=null,t.t=null,t.P=null,t.T=0}function qL(t){var e;return e=new Uh,e.n=\"Class$\"+(t?\"S\"+t:\"\"+e.i),e.b=e.n,e.j=e.n,e}function HO(t){var e,A;for(ut(t,7),e=0,A=0;A<t.p.j.a.length;A++)u3(t.p,A)&&++e;return e}function IL(t,e,A){var n,P;for(n=0,P=0;P<Mt(t.f,A);P++)N9(e,_(t.f,A,P))&&++n;return n}function VO(t,e,A){var n,P;for(P=0;P<t.j[A];P++)if(n=t.i[A][P],n!=e)return n;return-1}function EO(t,e,A){var n;return n=eK(t,e,A),n&&A==386&&(ut(t,7),n=n&(t.F[e]&128)==0),n}function Fe(t,e,A){var n=function(){return t.apply(n,arguments)};return e.apply(n,A),n}function Kv(t,e){var A;if(t){e.k=t;var n=QN(e);if(!n){cU[t]=[e];return}n.sd=e}}function Xv(t,e){var A;if(t.i!=null)for(A=0;A<t.i.length;A++)t.i[A].a*=e,t.i[A].b*=e}function SO(){x7();for(var t=nl,e=0;e<arguments.length;e++)t.push(arguments[e])}function XD(t,e){Io(t>=0,\"Digits < 0\"),rT(e,\"null RoundingMode\"),this.a=t,this.b=e}function xL(t,e,A,n,P,r){C9.call(this,n),this.e=t,this.b=e,this.c=A,this.a=P,this.d=r}function Zv(t,e,A,n,P,r,i,f){this.e=t,this.a=e,this.b=A,this.f=n,this.d=i,this.c=P*r/f}function Wv(t,e){t&&(this.k=h(o9,or,26,1,0,1),this.k[0]=t),this.c=0,this.g=e,Fs(this)}function qO(t,e,A){t.a==null&&(t.a=h(q,I,6,t.R.f,15,1),Cq(t.a)),t.a[e]=A<<24>>24}function Ku(t,e,A){if(!t.c){if(t.e.a.length==4){t.c=!0;return}mt(t.e,new Z3(t,e,A))}}function IO(t,e){var A;return A=t.C[e]<Lr.length?Lr[t.C[e]]:null,A==null?6:A[A.length-1]}function xO(t,e){var A;for(A=0;A<t.j[e];A++)if(t.s[t.i[e][A]]<0)return!0;return!1}function _v(t,e){var A;for(A=0;A<t.j[e];A++)if(t.s[t.i[e][A]]>0)return!0;return!1}function $v(t,e){return t.b!=e.b?t.b>e.b?-1:1:t.c!=e.c?t.c>e.c?-1:1:0}function NO(t){var e,A;if(t.K)return 0;for(ut(t,1),A=0,e=0;e<t.f;e++)A+=xt(t,e);return A}function NL(t){var e;return e=t.e[t.d++]-48,Zn(t.e[t.d]&w1)&&(e=10*e+(t.e[t.d++]-48)),e}function OO(t){var e,A;return e=yL(t.a),e==-1?0:(A=t.a[e]|0,e*31+(32-$9(A)))}function av(t,e){var A;for(A=0;A<t.j[e];A++)if(p1(t,t.i[e][A])<0)return!0;return!1}function GO(t){var e,A;for(A=0,e=0;e<t.a.q;e++)(K(t.a,e)==7||K(t.a,e)==8)&&++A;return A}function JO(t,e){return t.d!=e.d?t.d<e.d?-1:1:t.e!=e.e?t.e<e.e?-1:1:0}function $n(t,e){for(var A in e)e[A].configurable=!0;Object.defineProperties(t,e)}function zO(t,e){typeof window===fy&&typeof window.$gwt===fy&&(window.$gwt[t]=e)}function tF(t,e,A){var n,P,r;for(r=t.a.length-1,P=t.b,n=0;n<A;P=P+1&r,++n)e[n]=t.a[P]}function YO(t,e){var A,n,P,r;if(t.e!=null)for(n=t.e,P=0,r=n.length;P<r;++P)A=n[P],A.J=e}function $T(t,e){var A;A=LA(t.b,t.b.a.length-1),e<t.b.a.length&&(q9(t.b,e,A),ub(t,e))}function eF(t){ku(t.c>=0),ZJ(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function me(t){return t.J==null&&(Ui(t),(t.Q&I1)==0&&(M$(t),cj(t,1),cj(t,2)),aa(t)),t.J}function OL(t){var e,A;if(t==0)return 32;for(A=0,e=1;(e&t)==0;e<<=1)++A;return A}function AF(t){var e;return e=h(yt,wt,6,2,15,1),e[0]=dn*(t/17|0)+v8,e[1]=dn*(t%17)+v8,e}function aT(t,e,A){var n;a$(e,A,(t.e&12)!=0),n=k5(t,e.b[0],e.b[1],0),dF(t,e.b[0],e.b[1],n)}function Xu(t,e,A,n){return vt(w.Math.round((t.a[e]*t.c[e]+n*t.c[A])/(t.c[e]+t.c[A])))}function T1(t,e,A,n){n?t.B[e]=Y(t.B[e],A):t.B[e]=V(t.B[e],Jn(A)),t.T=0,t.K=!0}function KO(t,e,A,n){this.d=e,this.a=A,this.b=n,this.e=y2(t.d,e,A,n),this.c=H_(t.d,e,A,n)}function XO(t,e){Nm(),this.o=t,this.n=G(t,0)==0?new aD:new zr(t),this.r=new Hd(t,e)}function nF(t,e){var A,n;t.b&&(z1(t),n=(t.U&4)!=0,A=new jm(t._,t.V,e,n),ZI(A,new pw(t)))}function PF(t){var e;t.a=!1,e=new a2(tB(t)),yN(e,0,0,t.b.o,t.b.e),P$(t.b,new a2(tB(t)))}function ZO(t,e,A){var n,P;for(t.J&=~e,P=new Wt(t.S);P.a<P.c.a.length;)n=t1(P),n.mc(A)}function WO(t,e,A){var n;if(t.i!=null)for(n=0;n<t.i.length;n++)t.i[n].a+=e,t.i[n].b+=A}function rF(t,e,A){var n,P;for(P=N(t.j,e),n=0;n<P.length;n++)if(A==P[n])return n;return-1}function _O(t,e,A){var n,P;for(P=N(t.k,e),n=0;n<P.length;n++)if(A==P[n])return n;return-1}function iF(t,e){var A;for(Vz(t),A=0;A<t.b.length;A++)if(e[t.b[A]])return!0;return!1}function $O(t,e){var A;for(A=0;A<t.j[e];A++)if(K(t,t.i[e][A])!=6)return!0;return!1}function Zu(t,e){var A;for(A=0;A<t.q;A++)w.Math.abs(t.w[A])==w.Math.abs(e)&&(t.w[A]=0)}function Wu(t,e,A,n){var P,r;this.a=on(t,e,A,n),P=A-t,r=n-e,this.b=w.Math.sqrt(P*P+r*r)}function _u(t,e){var A,n;return A=1-e,n=t.a[A],t.a[A]=n.a[e],n.a[e]=t,t.b=!0,n.b=!1,n}function aO(t,e,A){var n;return wG(t),t.b=!0,n=new Bw,n.a=e,_q(t.a,new Dg(n,A)),n.a}function _8(t,e){var A;return A=h(F,k,6,e,15,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function ai(t,e){var A;return A=h(F,k,6,e,15,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function tG(t,e){var A;return A=h(NA,a0,6,e,14,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function eG(t,e){var A;for(A=0;A<O(t.k,e);A++)if(!t.b[_(t.k,e,A)])return!0;return!1}function AG(t){var e=t.Fc(),A=e.pasteMolecule();return A?A.vc():null}function GL(t,e){var A=t.Jc(),n=A.getBounds(e);return new QA(n.x,n.y,n.width,n.height)}function JL(t,e){var A;return A=h(rt,ft,6,e,16,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function RP(t,e,A,n){var P,r;return r=t.length,P=w.Math.min(n,r)-A,P5(t,A,e,0,P,!0),e}function nG(t,e,A){return Mv(A,new Rd(t,e),new ww,B(d(Fl,1),Ye,95,0,[(iQ(),qU)]))}function fF(){fF=B1,new XD(34,(e9(),se)),new XD(7,se),new XD(16,se),new XD(0,Bl)}function jn(t){return Rs(t,26)*14901161193847656e-24+Rs(t,27)*11102230246251565e-32}function PG(t){return t>=21&&t<=30||t>=39&&t<=48||t==57||t>=72&&t<=80||t==89||t>=104&&t<=112}function DF(t){return vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*t)))}function zL(t){G3(this),qT(this),this.backingJsObject=t,Ub(this,t),this.f=t==null?Pr:$D(t)}function YL(t,e,A,n,P,r){this.f=e,this.d=A,this.a=n,this.b=P,this.c=r,this.e=vZ(t.k,e,A,n,P,r)}function uF(t,e,A){var n,P,r;for(n=0,P=0;P<A;P++)r=e[P],t[P]=r<<1|n,n=r>>>31;n!=0&&(t[A]=n)}function QF(t,e,A){var n,P,r;for(P=0,r=0;r<t.j[e];r++)n=t.i[e][r],n!=A&&t.j[n]>2&&++P;return P}function D1(t,e,A){var n;for(n=0;n<t.i[e].length;n++)if(t.i[e][n]==A)return t.k[e][n];return-1}function KL(t,e,A){var n;for(n=0;n<t.k.a.length;n++)if(Af(t,n,e)&&Af(t,n,A))return n;return-1}function tf(t,e){var A;for(A=0;A<O(t.j,e);A++)if(_0(t.j,_(t.j,e,A)))return!0;return!1}function XL(t,e){var A;return A=Us(t.V,z(t.V,0,e)),A!=-1&&qe(t.V,A)!=1&&qe(t.V,A)!=2&&(A=-1),A}function O9(t,e){var A;return A=h(F,k,6,2,15,1),t>e?(A[0]=t,A[1]=e):(A[0]=e,A[1]=t),A}function UF(t,e){var A,n,P;for(U1(e),A=!1,P=e.Tb();P.ad();)n=P.bd(),A=A|t.add(n);return A}function oF(t){var e,A;for(ut(t,31),A=0,e=0;e<t.f;e++)(t.u[e]&3)!=0&&(t.u[e]&4)==0&&++A;return A}function rG(t){var e,A;if(e=t.q,t.t)for(A=0;A<t.q;A++)t.e[A]&&--e;return t.i>0&&e>t.i&&(e=t.i),e}function LF(t){var e;if(t.b==-2){if(t.e==0)e=-1;else for(e=0;t.a[e]==0;e++);t.b=e}return t.b}function iG(t){var e={};return t!=null&&(e=t&&t.prototype,!e&&(e=cU[t])),Object.create(e)}function sF(t,e){var A;(!t.q||!e.q)&&(A=new CB(t.o),!t.q&&(t.q=Eh(A,t)),!e.q&&(e.q=Eh(A,e)))}function fG(t,e){var A,n;if(t.g)for(n=new Wt(t.g);n.a<n.c.a.length;)A=t1(n),A.Ib(e,t.p)}function DG(t,e,A){var n;return n=N(t.I,0),bQ(n,kt(t.V,e),jt(t.V,e))==bQ(n,kt(t.V,A),jt(t.V,A))}function yF(t,e,A){var n,P,r;n=vt(Z6*V8(t.V)),P=vt(kt(t.V,A)),r=vt(jt(t.V,A)),nL(e,P-n,r-n,2*n)}function lF(t,e,A,n){var P;P=t.a.length,A>P?A=P:Xt(e,A+1),t.a=UA(t.a,0,e)+(\"\"+n)+HD(t.a,A)}function uG(t,e,A,n){n&&e!=-1&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))),A.nc()}function th(t,e,A,n){C9.call(this,t),this.a=h(yt,wt,6,1,15,1),this.a[0]=A,this.b=e,this.c=n}function TF(t,e){C9.call(this,t),this.a=h(yt,wt,6,2,15,1),this.a[0]=e,this.a[1]=Ve,this.c=-1}function hF(t){this.f=t,this.e=new ST(this.f.c),this.a=this.e,this.b=ih(this),this.d=this.f.b}function QG(t){if(U1(t),t.length==0)throw At(new YP(\"Zero length BigInteger\"));_Z(this,t)}function cF(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=kP(E1(t.f))),t.c).e}function pn(t){var e;return e=t.h,e==0?t.l+t.m*fP:e==aA?t.l+t.m*fP-DP:t}function UG(t){var e,A;for(A=!0,e=0;e<t.i.f;e++)if(t.o[e]!=0&&!t.e[e]){A=!1;break}return A}function eh(t,e){var A,n;for(A=0,n=0;n<t.j[e];n++)tA(t,t.i[e][n])&&!Bu(t,t.k[e][n])&&++A;return A}function $u(t,e){var A,n;for(n=0,A=0;A<t.r;A++)(t.D[0][A]==e||t.D[1][A]==e)&&(n+=dt(t,A));return n}function oG(t){var e;for(e=0;e<t.g;e++)if(t.H[e]==8)return Ff(new cr(t),null,!1);return!1}function LG(t){var e;for(e=0;e<t.o.q;e++)if((t.a==null?NaN:t.a[e])>2.72)return!1;return!0}function wF(t,e){var A,n;for(A=0,n=t.size();A<n;++A)if(K8(e,t.getAtIndex(A)))return A;return-1}function gF(t){var e,A,n;for(n=0,A=t.Tb();A.ad();)e=A.bd(),n=n+(e!=null?a8(e):0),n=n|0;return n}function Ah(t,e){var A,n;for(n=t.o.Ec(),n.removeAllItems(),A=0;A<16;A++)Gt(t.o,\"\"+(e+A));return 16}function un(t,e){var A;A=t.a.length,e<A?t.a=UA(t.a,0,e):e>A&&(t.a+=q8(h(l9,a0,6,e-A,15,1)))}function sG(t,e){var A;this.c=t,A=new f1,bh(t,A,e,t.b,null,!1,null,!1),this.a=new TT(A,0)}function yG(t,e,A){var n,P;return e==null?null:Ls(t,KA((P=e,c0(),P)),A==null?null:KA((n=A,n)),0)}function dF(t,e,A,n){var P;P=w.Math.min(x9(t.d,e,0),x9(t.d,A,0)),t8(t.d,P,n),Z8(t.d,e),Z8(t.d,A)}function BF(t,e){return w.Math.sqrt((t.a-e.a)*(t.a-e.a)+(t.b-e.b)*(t.b-e.b)+(t.c-e.c)*(t.c-e.c))}function nh(t,e){return w.Math.sqrt((e.a-t.a)*(e.a-t.a)+(e.b-t.b)*(e.b-t.b)+(e.c-t.c)*(e.c-t.c))}function lG(t,e){return t.C[e]==1&&t.A[e]==0&&t.s[e]==0&&(t.u[e]&g8)==0&&(t.t==null||t.t[e]==null)}function Ph(t,e){return!!(a1(t.b,e)==1&&K(t.b,e)<10||vn(t.b,e)||EP(t.b,e,!0))}function TG(t,e,A){var n;for(n=0;n<t.j.g.length;n++)if(t.e[e][n]&&t.e[A][n])return!0;return!1}function hG(t,e){var A;for(A=0;A<t.b;A++)if(t.e[A][e]&&t.c[A]==-3)return A<t.a?1:A<t.b?2:0;return-1}function vF(t,e){return e>=t.f?0:e<t.f&&i0(t.p,e)&&t.C[e]==6&&t.s[e]!=0?1:t.o[e]}function E1(t){return M2<t&&t<DP?t<0?w.Math.ceil(t):w.Math.floor(t):pn(EX(t))}function cG(t){return t==null?!1:t.$implements__java_lang_Cloneable||Array.isArray(t)}function wG(t){if(t.b)throw At(new ro(\"Stream already terminated, can't be modified or used\"))}function au(t,e){t.w!=e&&(t.w==19||e==19?(t.w=e,t.eb=w.Math.max(t.eb,1),n1(t.k)):t.w=e)}function FF(t){return ut(t,15),!t.d&&(t.f<2||!Ds(t.J[0],t.J[1]))&&(t.d=new BA(t)),t.d?me(t.d):null}function gG(t){return ut(t,15),!t.d&&(t.f<2||!Ds(t.J[0],t.J[1]))&&(t.d=new BA(t)),t.d?B7(t.d):null}function mF(t,e){var A,n;for(n=e.Tb();n.ad();)if(A=n.bd(),sT(t,A.ed()))return!0;return!1}function dG(t){var e,A,n;for(n=1,A=t.Tb();A.ad();)e=A.bd(),n=31*n+(e!=null?a8(e):0),n=n|0;return n}function BG(t,e){var A,n,P;for(P=(ut(t,7),t.p),n=0,A=0;A<P.j.a.length;A++)rF(P,A,e)>=0&&++n;return n}function pe(t){var e,A,n,P;return P=t,n=0,P<0&&(P+=DP,n=aA),A=vt(P/fP),e=vt(P-A*fP),S0(e,A,n)}function vG(t,e){var A,n,P;return A=t.l+e.l,n=t.m+e.m+(A>>22),P=t.h+e.h+(n>>22),S0(A&x0,n&x0,P&aA)}function kF(t,e){var A,n,P;return A=t.l-e.l,n=t.m-e.m+(A>>22),P=t.h-e.h+(n>>22),S0(A&x0,n&x0,P&aA)}function rh(t){var e,A;return e=vt(t.i[1].a-t.i[0].a),A=vt(t.i[1].b-t.i[0].b),w.Math.sqrt(e*e+A*A)}function FG(t){var e;return t<128?(e=(qd(),nc)[t],!e&&(e=nc[t]=new zl(t)),e):new zl(t)}function t0(t){var e;return Zt(t,27)?t:(e=t&&t.__java$exception,e||(e=new qB(t),void 0),e)}function ih(t){return t.a.ad()?!0:t.a!=t.e?!1:(t.a=new OT(t.f.a),t.a.ad())}function bF(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(VP(e,nm(t)))return!0;return!1}function RF(t){return t.n==null&&(t.n=bn(t.e,t.e.length),t.n.sort(Fe(u0.prototype.gd,u0,[]))),t.n}function mG(t){return t.includes(\"ATOMS=(\")?R2:t.includes(\"BONDS=(\")?\"BONDS\":null}function fh(t){var e;return G(t,0)<0&&(t=Jn(t)),e=zt(DA(t,32)),64-(e!=0?$9(e):$9(zt(t))+32)}function kG(t){var e,A;for(A=0,e=0;e<t.a.q;e++)(K(t.a,e)==7||K(t.a,e)==8)&&wd(t.a,e)>0&&++A;return A}function jF(t){var e,A;for(A=h(F,k,6,xP.length+2,15,1),ut(t,7),e=0;e<t.f;e++)++A[Ma(t,e)];return A}function pF(t,e){var A;return A=t.a.get(e),A===void 0?++t.d:(t.a.delete(e),--t.c,++t.b.b),A}function bG(t){var e;return e=t.a[t.b],e==null?null:(t.a[t.b]=null,t.b=t.b+1&t.a.length-1,e)}function CF(t,e){var A;return e>0?(t[e]+t[e-1])/2:(A=Q1+(t[0]+t[t.length-1])/2,A>Q1?A-F0:A)}function RG(t,e){var A;for(A=0;A<t.j.g;A++)t.e[A]&&ps(e,A)&&(Pf(t,z(t.j,0,A)),Pf(t,z(t.j,1,A)))}function MF(t){var e,A;for(A=new Wt(t.U);A.a<A.c.a.length;)e=t1(A),W1(t,e.a),OI(t,e.b,e.c);W1(t,t.Q)}function ZL(t,e,A,n,P,r,i,f,D,Q){var U=t.Jc(),L=e.pc();return U.drawImage(L,A,n,P,r,i,f,D,Q)}function sA(t,e,A,n,P){x1(),rT(t,\"src\"),rT(A,\"dest\"),qG(t,e,A,n,P),P5(t,e,A,n,P,!0)}function B(t,e,A,n,P){return P.sd=t,P.td=e,P.ud=PD,P.__elementTypeId$=A,P.__elementTypeCategory$=n,P}function HF(t,e,A,n){return Xa(n,t,e),A!=null&&(A[0]=n.f[0],A[1]=n.b[0],A[2]=n.b[1],A[3]=n.f[1]),n.d}function jG(t,e){var A,n;return A=js(t,e),A==-1?-1:(n=t.b.a.length,mt(t.b,e),t8(t.a,A,k1(n)),n)}function pG(t){var e,A,n;for(n=w.Math.max(t.d.length,t.c.length),A=1,e=n-t.a+1;e<=n;e++)A*=e;return A}function Wr(t){var e,A,n;return e=~t.l+1&x0,A=~t.m+(e==0?1:0)&x0,n=~t.h+(e==0&&A==0?1:0)&aA,S0(e,A,n)}function CG(t){var e;if(t<0)return o1;if(t==0)return 0;for(e=cn;(e&t)==0;e>>=1);return e}function MG(t,e){var A;for(A=0;A<t.b;A++)if(t.e[A][e]&&t.c[A]==-3)return A<t.a?A:A<t.b?A-t.a:-1;return-1}function tQ(t,e){var A;for(A=0;A<t.j[e];A++)if(t.n[e][A]==2&&K(t,t.i[e][A])>6)return!0;return!1}function jP(t,e){var A,n;return A=e.toArray(),n=A.length,n==0?!1:(md(t.a,t.a.length,A),!0)}function VF(t,e,A,n){var P,r;for(r=0;r<O(t.f,A);r++)if(P=_(t.f,A,r),P!=n&&P<e)return!1;return!0}function Dh(t,e,A){var n,P,r,i;for(P=e,r=0,i=P.length;r<i;++r)n=P[r],t.f[n&1073741823]=(n&cn)!=0^A?2:1}function HG(t,e,A,n){mt(t.$,new QA(e-t.V,A-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new bu(e,A,UQ(t,n)?-3:t.p[n]))}function Ce(t,e,A){t.a==t.b.length&&(t.b=qD(t.b,2*t.a),t.c=qD(t.c,2*t.a)),t.b[t.a]=e,t.c[t.a]=A,++t.a}function eQ(t,e){t.D[0]=_8(t.D[0],e),t.D[1]=_8(t.D[1],e),t.H=_8(t.H,e),t.F=_8(t.F,e),t.G=_8(t.G,e),t.N=e}function WL(t){var e,A,n;e=~t.l+1&x0,A=~t.m+(e==0?1:0)&x0,n=~t.h+(e==0&&A==0?1:0)&aA,t.l=e,t.m=A,t.h=n}function EF(t){var e,A;return A=$9(t.h),A==32?(e=$9(t.m),e==32?$9(t.l)+32:e+20-10):A-12}function ze(t,e,A){var n,P;return n=new RL(e,A),P=new XU,t.b=tR(t,t.b,n,P),P.b||++t.c,t.b.b=!1,P.d}function SF(t,e,A,n){var P;return L2(t,e,A,n),Qd(t.R)?null:(P=t.R,I3(t.R,t.L),t.R=new Au,P)}function VG(t,e){var A;if(t.c!=null){for(A=0;A<t.c.length;A++)if(e==t.c[A]&&t.d[A])return!0}return!1}function EG(t,e){var A,n;for(A=h(E2,b2,29,e,0,1),n=0;n<t.length;n++)t[n]&&(A[n]=new vu(t[n]));return A}function SG(t,e,A){var n,P,r;for(ut(e,1),P=N(t.a,A),n=0;n<t.d.d.a.length;n++)r=kr(t.d,n),sZ(r,e,P);Pi(e)}function qG(t,e,A,n,P){var r,i;if(i=t.length,r=A.length,e<0||n<0||P<0||e+P>i||n+P>r)throw At(new A3)}function IG(t){JF();var e;e=Ky,(e.startsWith(Xy)||e.startsWith(Zy)||e.startsWith(Wy))&&AY(t,nE)}function qF(t,e,A){var n;for(n=0;n<t.j[e];n++)if(K(t,t.i[e][n])!=6&&t.i[e][n]!=A)return!0;return!1}function xG(t,e,A,n,P){var r;return r=u5(t,e),A&&WL(r),P&&(t=jz(t,e),n?In=Wr(t):In=S0(t.l,t.m,t.h)),r}function NG(t,e){return SA(e,t.c)!=0?1:(t.j=FZ(e),t.j==null?rJ(e)?3:4:t.j.length==0?3:2)}function OG(t,e){return r9(t)==-1||r9(e)==-1||((r9(t)|r9(e))&1)!=0?3:r9(t)==r9(e)?1:2}function uh(t){var e,A;return A=(t[1]+t[0])/2,e=w.Math.abs(t[1]-t[0]),e>Q1?A:A<0?A+Q1:A-Q1}function IF(t,e,A){var n;return t.B.d.a.length!=0&&(n=kr(t.B,0),n.a<e)?(aU(t.B,0),n.b):t.od(A)}function GG(t,e){var A,n;for(A=t.a.length-1;e!=t.b;)n=e-1&A,t.a[e]=t.a[n],e=n;t.a[t.b]=null,t.b=t.b+1&A}function JG(t,e){var A,n;for(A=t.a.length-1,t.c=t.c-1&A;e!=t.c;)n=e+1&A,t.a[e]=t.a[n],e=n;t.a[t.c]=null}function Qh(t){var e,A;for(e=0,A=0;A<t.length;A++)e=(e<<5)-e+(Xt(A,t.length),t.charCodeAt(A))|0;return e}function AQ(t,e){var A,n;for(U1(e),n=e.Tb();n.ad();)if(A=n.bd(),!t.contains(A))return!1;return!0}function zG(t,e){return t.a>e.a?1:t.a<e.a?-1:t.b>e.b?1:t.b<e.b?-1:0}function YG(t,e){return t.c<e.c?-1:t.c>e.c?1:t.d<e.d?-1:t.d>e.d?1:0}function ZD(t,e,A,n){var P;return(t.G&1)!=0?!1:(P=N(t.$,n),e>P.c&&e<P.c+P.b&&A>P.d&&A<P.d+P.a)}function G9(t,e){var A,n,P;for(P=t.b;P;){if(A=t.a.Rb(e,P.c),A==0)return P;n=A<0?0:1,P=P.a[n]}return null}function xF(t,e){Bp();var A,n;for(n=e-t,A=0;A<rl[t].length;A++)if(rl[t][A].b==n)return rl[t][A].a;return NaN}function KG(t){Ms();var e,A;for(ut(t,1),A=0,e=0;e<t.q;e++)t.C[e]==1?++A:A+=t.e[e]-t.j[e]+xt(t,e);return A}function NF(t,e,A,n){var P,r,i;for(P=h(q,I,6,n,15,1),i=DJ(t.a,P),r=0;r<i;r++)e[A+r]=P[r]&w1;return i}function OF(t,e){var A,n,P,r;for(n=e,P=0,r=n.length;P<r;++P)if(A=n[P],sT(t,A.dd()))return A;return null}function XG(t,e,A){var n,P;for(P=0;P<t.g[e].length;P++)n=t.g[e][P],t.k[n]==2&&(t.k[n]=1,t.j[n]=A<<24>>24)}function nQ(t){var e,A;for(A=!1,e=0;e<t.q;e++)(t.u[e]&512)!=0&&(t.C[e]=-1,A=!0);return A&&Pi(t)!=null}function ef(t,e){var A;return A=bT(e,\"([/\\\\\\\\\\\\.\\\\*\\\\+\\\\?\\\\|\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}$^])\",\"\\\\\\\\$1\"),bT(t,A,\"\")}function GF(t,e){var A;return A=hA(0,e,0,t.a.length,!0,t),j0(t.a[A][3])*w.Math.pow(j0(t.a[A][1]),.25)}function PQ(t,e){var A;e*2+1>=t.b.a.length||(PQ(t,2*e+1),A=2*e+2,A<t.b.a.length&&PQ(t,A),ub(t,e))}function ZG(t){return A1(typeof t,bf)?!0:t!=null&&t.$implements__java_lang_CharSequence}function i8(){i8=B1,ml=B(d(it,1),Dt,2,6,[\"distance\",\"plane\",\"line\",\"torsion\",\"stereo\",\"binap\"])}function J9(){J9=B1,wi=B(d(it,1),Dt,2,6,[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\"])}function _r(){_r=B1,xA=B(d(Ee,1),PA,6,15,[.29899999499320984,.5870000123977661,.11400000005960464])}function JF(){JF=B1,Z4=B(d(F,1),k,6,15,[5258420,0]),nE=B(d(F,1),k,6,15,[11837695,14737632])}function WG(t){return t>=3&&t<=4||t>=11&&t<=13||t>=19&&t<=31||t>=37&&t<=51||t>=55&&t<=84||t>=87&&t<=112}function _L(t){return H8(t)?it:Vi(t)?ntt:Tu(t)?Att:PT(t)||AT(t)?t.sd:t.sd||Array.isArray(t)&&d(CV,1)||CV}function _G(t,e){var A;if(O(t.L,e)!=2)return!1;for(A=0;A<2;A++)if(pA(t.L,e,A)!=2)return!1;return!0}function $G(t,e){var A;for(A=0;A<O(t.R,e);A++)if(t.o[Ot(t.R,e,A)]==3&&pA(t.R,e,A)==1)return!0;return!1}function yA(t,e,A){var n,P,r,i;for(P=N(t.j,e),r=0,i=P.length;r<i;++r)if(n=P[r],A==n)return!0;return!1}function Af(t,e,A){var n,P,r,i;for(P=N(t.k,e),r=0,i=P.length;r<i;++r)if(n=P[r],A==n)return!0;return!1}function aG(t,e){var A,n,P;for(P=0,n=new Wt(e);n.a<n.c.a.length;)A=t1(n),P+=$F(t,A.c,A.b)?t.b:0;return P}function tJ(t,e){kf();var A,n,P;for(P=0,A=0,n=0;n<t.length;n++)P+=$r(t[n]&e[n]),A+=$r(t[n]|e[n]);return P/A}function zF(t,e,A){var n;if(t.i!=null)for(n=0;n<t.i.length;n++)t.i[n].a=t.o[n]+e-t.k,t.i[n].b=t.p[n]+A-t.n}function YF(t,e){var A;for(A=0;A<t.f.length;A++)if(gt(t.f[A],e.f[A]))return Hi(t.f[A],e.f[A])?-1:1;return 0}function KF(t,e){var A,n;for(n=h(F,k,6,e.length+1,15,1),A=0;A<e.length;A++)n[A]=e[A];return n[e.length]=t,n}function eJ(t,e,A){var n,P;for(++t.b,n=new cD(t),n.p=A,P=t.g.length-1;P>=0;P--)EI(t,n,t.g[P],P,e[P]);return n}function rQ(t,e,A){var n;for(n=A-1;n>=0&&t[n]==e[n];n--);return n<0?0:Hi(V(t[n],h1),V(e[n],h1))?-1:1}function AJ(t,e){var A;for(A=0;A<e.length;A++){if(e[A]<t.g[A].a.length-1)return++e[A],!0;e[A]=0}return!1}function WD(t,e){var A;for(A=0;A<e.k.length;A++)bD(t.k[A],e.k[A]);e.j==null?t.j=null:t.j=fL(e.j,e.j.length)}function XF(t,e,A){var n;z1(t),n=e==-1?new bm(t._,t,t.F,t.B,t.D,t.C,t.A):new qk(t._,t,t.V,e),_I(n,new Ld(t,e,A))}function nJ(t){var e,A;if(A=e$(t),r0(t.A,t.a))for(e=0;e<t.A.q;e++)r0(t.A,e)&&lp(t,e,A);else lp(t,t.a,A);Bj(t.A)}function ZF(t){var e;for(this.o=t,this.k=h(E2,b2,29,t.q,0,1),e=0;e<t.q;e++)this.k[e]=new vu(t.J[e]);this.n=NaN}function $L(t,e,A,n,P){C9.call(this,t),this.a=h(yt,wt,6,2,15,1),this.a[0]=A,this.a[1]=n,this.b=e,this.c=P}function WF(t,e){this.n=t,this.k=e,this.j=(e&16)==0,this.d=-1,this.e=0,this.o=0,this.a=-1,this.g=-1,this.c=0}function Uh(){this.i=ett++,this.n=null,this.j=null,this.g=null,this.d=null,this.b=null,this.k=null,this.a=null}function _F(t){t.J=1,t.R=new Au,t.$=new f1,t.U=new f1,t.s=h(rt,ft,6,t.L.q,16,1),t.w=new c9,t.Q=0,t.C=-1,Mb(t)}function iQ(){iQ=B1,qE=new To(\"CONCURRENT\",0),qU=new To(\"IDENTITY_FINISH\",1),sc=new To(\"UNORDERED\",2)}function PJ(t){var e;return t!=null&&(e=t.__java$exception,e)?e:Ad(t,TypeError)?new w7(t):new zL(t)}function rJ(t){var e;if(t.length<3){for(e=1;e<(Y1(),X0).length;e++)if(X0[e].startsWith(t))return!0}return!1}function iJ(t,e){var A;for(A=0;A<O(t.i,e);A++)if(pA(t.i,e,A)==2&&K(t.i,_(t.i,e,A))==8)return!0;return!1}function $F(t,e,A){var n;for(n=0;n<e.length;n++)if(gt(V(t.f[n],e[n]),V(A[n],e[n])))return!1;return!0}function fJ(t){var e,A,n,P,r;for(r=1,A=t,n=0,P=A.length;n<P;++n)e=A[n],r=31*r+(e!=null?a8(e):0),r=r|0;return r}function fQ(t){var e,A,n;for(n=t.a.a.length,e=new Array(n),A=0;A<n;A++)e[A]=BI(N(t.a,A).a,N(t.a,A).b);return e}function DJ(t,e){var A;return t.a==t.b?-1:(A=w.Math.min(e.length,t.b-t.a),Jx(e,t.c,t.a,A),t.a+=A,A)}function aF(t,e){var A;return t===e?!0:Zt(e,160)?(A=e,t.Mc()==A.Mc()&&t.Nc()==A.Nc()):t===e}function aL(t,e){return(t.u[e]&g8)!=0?!0:t.C[e]<=1?!1:bb(t,e)||t.C[e]==13||t.C[e]>=171}function tm(t,e){return!(t.C[e]!=6||t.s[e]!=0||xt(t,e)+t.j[e]!=4)}function ts(t,e){var A,n,P;for(U1(e),A=!1,n=t.Tb();n.ad();)P=n.bd(),e.contains(P)&&(n.cd(),A=!0);return A}function uJ(t,e){var A,n,P;for(n=!1,A=1;A<4;A++)for(P=0;P<A;P++)t[P]>t[A]&&(n=!n),e[P]>e[A]&&(n=!n);return n}function QJ(t){var e,A,n;for(n=t.a.length,e=new Array(n),A=0;A<n;A++)e[A]=tI((ve(A,t.a.length),t.a[A]));return e}function es(t,e){var A;for(!e&&(e=Xn(t.o)),e.T&=-249,A=0;A<e.q;A++)bD(e.J[A],t.k[A]);return t.p!=null&&$2(e,t.p),e}function em(t){var e;for(t.q=h(rt,ft,6,t.L.q,16,1),e=0;e<t.L.r;e++)t.q[z(t.L,0,e)]=!0,t.q[z(t.L,1,e)]=!0}function UJ(t,e){var A,n,P;for(n=0,A=0;A<t.V.q;A++)r0(t.V,A)&&++n;P=n!=0&&n!=t.V.q,(t.U&1)!=0?j$(t,e,P):$z(t,e,P)}function oJ(t,e){var A,n;for(A=jF(t),n=0;n<xP.length;n++)A[n]!=0&&ZP(e,\"\"+A[n]+\" * \"+xP[n]+\"   AtomType: \"+zV[n],2)}function Am(t,e){var A,n,P;for(U1(e),A=!1,n=t.Tb();n.ad();)P=n.bd(),e.contains(P)||(n.cd(),A=!0);return A}function nm(t){var e;return kD(t.a!=t.b),e=t.d.a[t.a],_g(t.b==t.d.c&&e!=null),t.c=t.a,t.a=t.a+1&t.d.a.length-1,e}function Pm(t){var e;if(t.c!=0)return t.c;for(e=0;e<t.a.length;e++)t.c=t.c*33+(t.a[e]&-1);return t.c=t.c*t.e,t.c}function z9(t,e){var A;return A=le(t.b,e),A||(A=new Tj(t.k,t.q,t.s,e,t.n),ze(t.b,bn(e,e.length),A),A)}function G(t,e){var A;return U0(t)&&U0(e)&&(A=t-e,!isNaN(A))?A:jh(U0(t)?pe(t):t,U0(e)?pe(e):e)}function rm(t,e,A){if(t>e)throw At(new C8(YQ+t+Fp+e));if(t<0||e>A)throw At(new m7(YQ+t+o6+e+mp+A))}function oh(t,e,A){if(A){if(t.s[e]>8)return!1;++t.s[e]}else{if(t.s[e]<-8)return!1;--t.s[e]}return t.T=0,!0}function im(t,e,A){var n,P;return DL(e,t.a.length),n=A.toArray(),P=n.length,P==0?!1:(md(t.a,e,n),!0)}function LJ(t,e){var A,n;for(n=h(o9,or,26,t.length,0,1),A=0;A<t.length;A++)n[A]=t[A].a;return new _P(new Bh(n,e))}function Lh(){dp();var t,e,A,n;if(!Yf&&!Yf)for(Yf=new pi,e=JV,A=0,n=e.length;A<n;++A)t=oQ(e[A]),X8(Yf,t)}function sJ(t,e){var A,n,P,r;if(e.length==0)return null;for(n=e,P=0,r=n.length;P<r;++P)A=n[P],t.C[A]=-1;return Pi(t)}function yJ(t,e,A,n,P){e==0||n==0||(e==1?P[n]=Qs(P,A,n,t[0]):n==1?P[e]=Qs(P,t,e,A[0]):YK(t,A,P,e,n))}function DQ(t,e,A,n,P,r,i){return er(t,e,A,n,P,r==null?t.D[0][A]:r[t.D[0][A]],r==null?t.D[1][A]:r[t.D[1][A]],i)}function lJ(t,e,A,n,P,r,i,f){var D;for(D=A;r<i;)D>=n||e<A&&f.Rb(t[e],t[D])<=0?P[r++]=t[e++]:P[r++]=t[D++]}function As(t,e,A,n,P){A<n?(this.a=t,this.b=e,this.c=A,this.d=n):(this.a=e,this.b=t,this.c=n,this.d=A),this.e=P}function fm(t,e,A,n){this.c=h(NA,a0,6,n.c,14,1),this.b=h(NA,a0,6,n.c,14,1),az(n,t,e,this.c,this.b),this.a=A}function Dm(t,e,A,n){this.a=(n8(e),RP(t,h(F,k,6,e,15,1),0,e)),this.b=(n8(n),RP(A,h(F,k,6,n,15,1),0,n))}function sh(t,e,A){t.v==null&&(t.v=h(F,D0,7,t.M,0,2)),A.sort(Fe(u0.prototype.gd,u0,[])),t.v[e]=A,t.T=0,t.K=!0}function TJ(t,e,A){var n,P;for(n=R1(it,[nA,Dt],[13,2],6,[t.f,e],2),ut(t,7),P=0;P<t.f;P++)n[P]=zR(t,P,e,A);return n}function hJ(t,e,A){var n,P,r;return r=1.02*XB(t.f[1],e)+XB(t.f[0],e),n=A/r,P=w.Math.pow(n,-6),n>=1?0:2*(P*P-P)}function cJ(t,e,A){var n,P;if(t.I){for(P=new Wt(t.I);P.a<P.c.a.length;)if(n=t1(P),n.Hb(e,A))return n}return null}function pP(t,e){var A,n;for(n=new Wt(t);n.a<n.c.a.length;)if(A=t1(n),uz(A,e))return!1;return t.a.push(e),!0}function wJ(t){var e,A;for(e=new TD,A=0;A<t.b.length;A++)Si(e,(Y1(),X0)[t.c[A]]),t.b[A]>1&&zq(e,t.b[A]);return e.a}function k1(t){var e,A;return t>-129&&t<128?(Sd(),e=t+128,A=Pc[e],!A&&(A=Pc[e]=new Yl(t)),A):new Yl(t)}function Qn(t){var e;return e=Le(t),e>Hp?1/0:e<-34028234663852886e22?-1/0:e}function uQ(t,e){return t.e[e]-e0(t,e)+xt(t,e)<=0?!1:tA(t,e)?!0:t.o[e]==0}function um(t,e,A){var n;for(n=0;n<t.j[e];n++)if(t.n[e][n]==2&&K(t,t.i[e][n])>6&&t.i[e][n]!=A)return!0;return!1}function gJ(t,e,A,n){var P,r,i;for(P=e+1;P<A;++P)for(r=P;r>e&&n.Rb(t[r-1],t[r])>0;--r)i=t[r],t[r]=t[r-1],t[r-1]=i}function yh(t,e){var A;t.c=e,t.a=wh(e),t.a<54&&(t.f=(A=e.d>1?S9(e.a[0],e.a[1]):S9(e.a[0],0),Jr(e.e>0?A:p0(A))))}function nf(t,e){this.e=e,this.a=fh(t),this.a<54?this.f=Jr(t):this.c=(ke(),G(t,0)>=0?we(t):FP(we(p0(t))))}function Qm(t,e){return R9(),H8(t)?Kr(t,e):Vi(t)?$8((U1(t),t),(U1(e),e)):Tu(t)?xI((U1(t),t),(U1(e),e)):t.Sb(e)}function $8(t,e){return t<e?-1:t>e?1:t==e?t==0?$8(1/t,1/e):0:isNaN(t)?isNaN(e)?0:1:-1}function dJ(t,e){t.V!=e&&(z1(t),t.V=e,t.U=0,t.I=null,t.eb=w.Math.max(t.eb,4),n1(t.k),N1(t,new q1(t,1,!1)))}function lh(t,e){t.e=e.e,t.c=e.c,t.b=e.b,t.a=e.a==null?null:qD(e.a,e.a.length),t.d=e.d==null?null:qD(e.d,e.d.length)}function QQ(t,e,A){var n,P;return n=N(t.g,t.q[e]),n.g==A?!1:(P=N(t.g,t.q[A]),P.g==e?!0:VG(P,e))}function BJ(t,e){return t.a!=e.a?t.a<e.a?-1:1:t.b!=e.b?t.b<e.b?-1:1:t.c!=e.c?t.c<e.c?-1:1:0}function Th(t,e){var A;return J1(t)===J1(e)?!0:Zt(e,23)?(A=e,t.e==A.e&&t.d==A.d&&IN(t,A.a)):!1}function Um(t){var e,A;for(e=0,Hg(t.e),A=0;A<t.e.length;A++)(A==0||os(t.e[A],t.e[A-1])!=0)&&++e,t.f[t.e[A].a]=e;return e}function vJ(t){var e,A;if(t.$!=null)for(e=0;e<t.R.f;e++)bd(t.R,e,t.$[e]);if(t.i!=null)for(A=0;A<t.R.g;A++)td(t.R,A,t.i[A])}function FJ(t){var e,A,n,P;for(t.a=15,P=(A=new fD(t.c).a.$c().Tb(),new DD(A));P.a.ad();)n=(e=P.a.bd(),e.ed()),Ba(n)}function mJ(t){var e,A,n,P;for(e=(t.g==null&&(t.g=(P=hY(t),QY(P))),t.g),A=0,n=e.length;A<n;++A);}function om(t){var e,A,n,P;return t.e==0?t:(e=t.d,A=e+1,n=h(F,k,6,A,15,1),uF(n,t.a,e),P=new Ue(t.e,A,n),Rn(P),P)}function hh(t,e){var A,n,P,r;return A=t.D[0][e],n=t.D[1][e],P=t.J[n].a-t.J[A].a,r=t.J[n].b-t.J[A].b,w.Math.sqrt(P*P+r*r)}function Lm(t,e,A,n,P,r){var i;this.a=A,this.b=n,this.c=P,this.d=r,i=za(t.o,e,A,n,P,r),this.e=i.a,this.f=i.b,this.g=i.c}function sm(t,e,A){var n;return n=t.a.get(e),t.a.set(e,A===void 0?null:A),n===void 0?(++t.c,++t.b.b):++t.d,n}function $r(t){return t-=t>>1&1431655765,t=(t>>2&858993459)+(t&858993459),t=(t>>4)+t&252645135,t+=t>>8,t+=t>>16,t&63}function ym(t){if(t<o1)throw At(new p8(\"Overflow\"));if(t>It)throw At(new p8(\"Underflow\"));return vt(t)}function lm(t,e,A){if(t<0||e>A)throw At(new gr(YQ+t+o6+e+\", size: \"+A));if(t>e)throw At(new C8(YQ+t+Fp+e))}function O1(t,e){var A;return U0(t)&&U0(e)&&(A=t+e,M2<A&&A<DP)?A:pn(vG(U0(t)?pe(t):t,U0(e)?pe(e):e))}function Un(t,e){var A;return U0(t)&&U0(e)&&(A=t*e,M2<A&&A<DP)?A:pn(V_(U0(t)?pe(t):t,U0(e)?pe(e):e))}function l0(t,e){var A;return U0(t)&&U0(e)&&(A=t-e,M2<A&&A<DP)?A:pn(kF(U0(t)?pe(t):t,U0(e)?pe(e):e))}function kJ(t,e,A,n){return(t.U&6)!=0&&A[1]!=n[1]?A[1]==0?-1:1:$8(e[A[0]].a+e[A[0]].b,e[n[0]].a+e[n[0]].b)}function Tm(t,e,A){var n,P;for(n=e;t.j[A]==2&&t.o[A]==2&&A!=n;)P=A,A=t.i[A][0]==e?t.i[A][1]:t.i[A][0],e=P;return A==n?-1:A}function bJ(t,e,A){var n,P;for(P=!1,n=0;n<e.e.length;n++)if(!_x(Yi(e.e,n))){P=!0;break}P||Z8(t.I,e),n1(t.k),rB(A.a)}function Pf(t,e){var A,n;for(t.d[e]&&(t.d[e]=!1,--t.b),n=0;n<O(t.j,e);n++)A=Ot(t.j,e,n),t.e[A]&&(t.e[A]=!1,--t.c)}function UQ(t,e){var A;if(Mt(t.L,e)==0)return!1;for(A=0;A<Mt(t.L,e);A++)if(!vr(t.L,Ot(t.L,e,A)))return!1;return!0}function rf(t,e){var A,n;for(n=h(F,k,6,t==null?1:t.length+1,15,1),A=0;A<n.length-1;A++)n[A]=t[A];return n[n.length-1]=e,n}function RJ(t,e){var A,n,P,r;for(P=0,r=0;P<t.length&&r<e.length;){if(A=t[P],n=e[r],A==n)return!0;A<n?++P:++r}return!1}function _D(t){var e,A;return t.includes(\"/csd/\")?null:(e=(A=IE[t],typeof A===fy?A:null),!e&&gN(t),new Og(e))}function hm(t){var e,A;return t.A.d.a.length==0?null:(e=Zt(t,117)?yQ(t.c,t.A.d.a.length):0,A=kr(t.A,e),aU(t.A,e),A)}function jJ(t,e){var A;if(t.i==null)return!1;for(A=0;A<t.i.length;A++)if(!e.Hb(t.i[A].a,t.i[A].b))return!1;return!0}function $D(t){var e;return Array.isArray(t)&&t.ud===PD?Uu(_L(t))+\"@\"+(e=a8(t)>>>0,e.toString(16)):t.toString()}function pJ(t,e){return t.h==l8&&t.m==0&&t.l==0?(e&&(In=S0(0,0,0)),cg((Xr(),ec))):(e&&(In=S0(t.l,t.m,t.h)),S0(0,0,0))}function cm(){this.b=AP(\"/resources/forcefield/mmff94/pbci.csv\"),this.a=AP(\"/resources/forcefield/mmff94/bci.csv\")}function wm(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.d=zD(t.b,e.a[n]),this.g=zv(t.a,e,A,n,P),this.e=eY(t.a,e,A,n,P)}function gm(t,e,A,n,P){var r,i,f;for(wf(t,e,t.k[A],n,P),f=t.o,i=0;i<f.e[e];i++)r=f.i[e][i],f.e[r]==1&&wf(t,r,t.k[A],n,P)}function dm(t,e,A,n,P){var r,i;return r=D8(t,e,A,n)+D8(t,e,n,P),i=r,U2(e,A,n,P,3)?i+=r>0?4:3:U2(e,A,n,P,4)&&(i+=r>0?6:4),i}function CJ(t,e,A,n,P){var r;return r=e.a[n],!(zD(t.b,r)||A==P||D1(e,A,n)==-1||D1(e,n,P)==-1)}function ns(t,e,A){var n;for(n=0;n<t.f;n++)if(t.C[n]==A&&t.s[n]==0&&t.j[n]==0&&(t.s[n]=-1,t.T=0,--e,e==0))return 0;return e}function MJ(t){var e;for(e=0;e<t.o.q;e++)if((t.a==null?NaN:t.a[e])>1e3||(t.a==null?NaN:t.a[e])>2e3)return!0;return!1}function HJ(t,e){var A,n,P;for(A=0,Hg(t.b),n=0;n<e.length;n++)(n==0||os(t.b[n],t.b[n-1])!=0)&&++A,P=t.b[n].a,e[P]=A;return A}function KA(t){var e,A,n,P;for(P=t.length,e=h(q,I,6,0,15,1),n=0;n<P;)A=Lk(t,n,t.length),n+=A>=Q0?2:1,N_(e,A);return e}function VJ(t){var e,A,n;for(w$(t),n=h(o9,nA,74,rG(t),0,2),e=0,A=0;A<t.q&&e<t.i;A++)(!t.t||!t.e[A])&&(n[e++]=t.n[A]);return n}function Bm(t){var e,A;ut(t.V,15),e=h(F,k,6,t.V.q,15,1),A=n9(t.V,e,!1,!0),A=K_(t,e,A),JW(t,e,A),t.M=e,t.L=Aj(t.V,e,A)}function EJ(t){var e;if(vN(t,t.a))for(e=0;e<t.u.r;e++)r0(t.u,z(t.u,0,e))&&r0(t.u,z(t.u,1,e))&&fj(t,e);else fj(t,t.a);_b(t.u)}function vm(t,e){var A;return A=e?NJ(t):dh(t),A&&t.r?(x1(),\"\"+null.vd(),!0):!1}function Fm(){if(!Ql)try{hi=new LR,Ql=!0}catch(t){if(t=t0(t),Zt(t,19))x1();else throw At(t)}}function mm(){mm=B1,GV=B(d(it,1),Dt,2,6,[\"Idorsia No\",\"Actelion No\",\"ID\",\"IDNUMBER\",\"COMPOUND_ID\",\"NAME\",\"COMPND\"])}function km(){km=B1,AE=B(d(it,1),Dt,2,6,[\"none\",\"pressed\",\"released\",\"clicked\",\"entered\",\"exited\",\"moved\",\"dragged\"])}function aD(){Sh();var t,e,A;A=TPt+++Date.now(),t=vt(w.Math.floor(A*vV))&oi,e=vt(A-t*h4),this.a=t^1502,this.b=e^el}function K0(t,e,A){A>=0&&A<=190&&(A==151||A==152?(t.C[e]=1,t.A[e]=A-149):(t.C[e]=A,t.A[e]=0),t.u[e]&=-2013265921,t.T=0)}function bm(t,e,A,n,P,r,i){gh(),this.c=ED(t,oV,this),this.d=e,this.a=-1,this.k=A,this.g=n,this.j=P,this.i=r,this.n=i,$j(this)}function ch(t,e,A,n,P,r,i,f,D,Q){km(),so.call(this,t,Q),this.b=e,this.c=A,this.g=n,this.i=P,this.f=r,this.d=i,this.a=f,this.e=D}function Rm(t,e,A){this.b=new Zb(this,t.a),this.c=e,this.e=A,this.d=new e3,t3(this.d,this.b),cB(this,this.b.o,this.b.e),PF(this)}function jm(t,e,A,n){X5(),this.v=ED(t,(e.u[A]&512)!=0?\"Atom Query Features (Multiple)\":\"Atom Query Features\",this),Wa(this,e,A,n)}function an(t){return t<3?0:t<11?1:t<19?2:t<37?3:t<55?4:0}function wh(t){var e,A,n;return t.e==0?0:(e=t.d<<5,A=t.a[t.d-1],t.e<0&&(n=LF(t),n==t.d-1&&(--A,A=A|0)),e-=$9(A),e)}function SJ(t){var e,A,n;for(A=!1,n=!1,e=0;e<t.q;e++)t.A[e]!=0&&(t.A[e]=0,A=!0,t.C[e]==1&&(n=!0));return n&&(t.T=0),A}function pm(t,e){var A,n;return n=t.d.a.length,A=X8(t,e),t.d.a.length!=n?(mt(t.b,e),t.a=null,n):(t.a==null&&sz(t),t.a[A])}function qJ(t,e){var A,n;for(n=0;n<t.b.length;n++)if(A=w.Math.abs(t.b[n]-e.b[n]),A>Cy&&A<t.a[n]-Cy)return!1;return!0}function Cm(t,e){var A,n;for(n=0;n<t.$.a.length;n++)t.v=dQ(t.v,N(t.$,n));eZ(t,e),A=.1*e,t.v.c-=A,t.v.d-=A,t.v.b+=2*A,t.v.a+=2*A}function IJ(t,e,A){var n,P,r;for(P=0,r=0;r<t.a.length;r++)if(n=(1-A)*t.a[r]+A/t.a.length,P+=n,e<=P)return r;return t.a.length-1}function Mm(t,e,A){var n,P;for(P=t.Tb();P.ad();)if(n=P.bd(),J1(e)===J1(n)||e!=null&&VP(e,n))return A&&P.cd(),!0;return!1}function xJ(t,e,A){var n,P;for(n=V(A,h1),P=0;G(n,0)!=0&&P<e;P++)n=O1(n,V(t[P],h1)),t[P]=zt(n),n=q0(n,32);return zt(n)}function Hm(t,e){var A,n;for(n=0,Wi(t,0,t.length,null),A=0;A<t.length;A++)(A==0||os(t[A],t[A-1])!=0)&&++n,e[t[A].a]=n;return n}function Vm(t,e,A,n){var P,r;for(ut(t,1),P=0;P<n;P++)for(r=0;r<t.e[e[P]];r++)if(t.i[e[P]][r]==e[P+1]){A[P]=t.k[e[P]][r];break}}function on(t,e,A,n){var P,r,i;return r=A-t,i=n-e,i!=0?(P=w.Math.atan(r/i),i<0&&(r<0?P-=Q1:P+=Q1)):P=r>0?bA:eU,P}function tP(t,e,A){var n,P,r,i;for(r=e+A,pt(e,r,t.length),i=\"\",P=e;P<r;)n=w.Math.min(P+nP,r),i+=Gx(t.slice(P,n)),P=n;return i}function NJ(t){var e,A,n;for(A=new P8,e=0;e<t.L.length;e++)n=qb(t.L[e]),n&&(e<t.Y?(mt(A.g,n),A.d=-1):(mt(A.f,n),A.d=-1));return A}function Em(t){var e,A;for(A=0,e=0;e<t.length;e++)A<(Xt(e,t.length),t.charCodeAt(e))&&(A=(Xt(e,t.length),t.charCodeAt(e)));return A}function Sm(t){var e,A,n;for(n=new V0,A=new Wt(t);A.a<A.c.a.length;)e=t1(A),J(J(n,B6+e.Lb()+'\"'+e.Kb()+v6),$A);return n.a}function nt(t,e){var A,n;for(A=e,n=0;e!=0;)t.d==0&&(t.f=(t.c[++t.e]&63)<<11,t.d=6),n|=(Q0&t.f)>>16-A+e,t.f<<=1,--e,--t.d;return n}function Cn(t,e){var A,n;return A=((t.u[e]&g8)>>>27)-1,A==-1&&(A=(n=t.C[e]<Lr.length?Lr[t.C[e]]:null,n==null?6:n[n.length-1])),A}function t2(t,e){var A;if(t.f==null)e.a+=\" atoms:<null>\";else for(J(e,\" atoms:\"+t.f[0]),A=1;A<t.f.length;A++)J(e,\",\"+t.f[A])}function qm(t,e,A){var n,P;for(t.U=e,n=0;n<t.R.f;n++)t.f[n]=A[n],t.db[n]=0,t.ib[n]=!1;for(P=0;P<t.R.g;P++)t.o[P]=0,t.q[P]=!1}function OJ(t){var e,A,n;return t<SU.length?SU[t]:(A=t>>5,e=t&31,n=h(F,k,6,A+1,15,1),n[A]=1<<e,new Ue(1,A+1,n))}function Im(t,e){var A,n,P,r;return A=e>>5,e&=31,P=t.d+A+(e==0?0:1),n=h(F,k,6,P,15,1),qh(n,t.a,A,e),r=new Ue(t.e,P,n),Rn(r),r}function Ps(t,e){for(var A=0;!e[A]||e[A]==\"\";)A++;for(var n=e[A++];A<e.length;A++)!e[A]||e[A]==\"\"||(n+=t+e[A]);return n}function we(t){ke();var e,A;return A=zt(t),e=zt(DA(t,32)),e!=0?new IB(A,e):A>10||A<0?new mA(1,A):FE[A]}function Y9(t,e){var A;return U0(t)&&U0(e)&&(A=t%e,M2<A&&A<DP)?A:pn((G5(U0(t)?pe(t):t,U0(e)?pe(e):e,!0),In))}function gh(){gh=B1,ZV=B(d(it,1),Dt,2,6,[\"None\",\"One electron (duplet)\",\"Two electrons (triplet)\",\"Two electrons (singulet)\"])}function xm(t,e,A,n,P,r,i,f,D,Q){this.i=t,this.a=e,this.f=A,this.o=n,this.c=P,this.k=r,this.j=i,this.p=f,this.d=D,this.n=Q,Z_(this)}function GJ(t){var e=/^#?0\\.(0+)$/.exec(t);if(!e)throw new Error(\"unimplemented DecimalFormat with pattern \"+t);return e[1].length}function Nm(){var t;!gn&&(gn=new Bg),(gn.b&1)!=0&&gn.a!=15&&x1(),t=1&~gn.b,t!=0&&(Qa(gn,t),t==1&&FJ(gn))}function JJ(t){_A();var e,A,n;return n=new Nw,A=(n.j=null,f6(n,new nn(new b9(t)))?n.j:null),e=n.f==null?Qu(n.j):n.f,CI(new CA(A),e)}function Om(t,e,A){var n;for(n=0;n<t.r;n++)if((t.D[0][n]==e&&t.D[1][n]==A||t.D[0][n]==A&&t.D[1][n]==e)&&t.H[n]!=512)return n;return-1}function Gm(t,e){var A,n;for(n=0;n<t.g[e].length;n++)if(A=t.g[e][n],t.f[A]&&(t.o[A]==1||t.o[A]==2)&&t.k[A]==0)return!0;return!1}function ff(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=uu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function zJ(t,e,A){var n,P,r;for(r=0,n=h(F,k,6,O(t.c,e)-1,15,1),P=0;P<O(t.c,e);P++)_(t.c,e,P)!=A&&(n[r++]=_(t.c,e,P));return n}function Jm(t,e,A){var n,P,r;for(r=0,n=h(F,k,6,O(t.b,e)-1,15,1),P=0;P<O(t.b,e);P++)_(t.b,e,P)!=A&&(n[r++]=_(t.b,e,P));return n}function dh(t){var e,A;if((t.U&4)==0||t.L==null)return null;for(A=new P8,e=0;e<t.L.length;e++)e<t.Y?q7(A,t.L[e]):S7(A,t.L[e]);return A}function oQ(t){var e,A;return G(t,-129)>0&&G(t,128)<0?(Ed(),e=zt(t)+128,A=rc[e],!A&&(A=rc[e]=new Kl(t)),A):new Kl(t)}function zm(t,e,A){for(t.j==null&&(t.j=h(Yt,at,6,t.o.r,15,1),Vq(t.j));A<0;)A=A+360<<16>>16;for(;A>=360;)A=A-360<<16>>16;t.j[e]=A}function kA(t,e,A,n){Y1();var P,r,i;return r=A-t,i=n-e,i!=0?(P=w.Math.atan(r/i),i<0&&(r<0?P-=Q1:P+=Q1)):P=r>0?bA:eU,P}function YJ(t){var e;try{return VY((new Lh,t.a))}catch(A){if(A=t0(A),Zt(A,19))return e=A,Z9(e,(x1(),gi),\"\"),-999;throw At(A)}}function Bh(t,e){P8.call(this),t!=null&&(jP(this.g,new xD(new Po(t),0,e)),jP(this.f,new xD(new Po(t),e,t.length))),this.c=cQ(this)}function rs(t,e){return t.e>e.e?1:t.e<e.e?-1:t.d>e.d?t.e:t.d<e.d?-e.e:t.e*rQ(t.a,e.a,t.d)}function KJ(t){return t>=48&&t<48+w.Math.min(10,10)?t-48:t>=97&&t<97?t-97+10:t>=65&&t<65?t-65+10:-1}function XJ(t,e){var A,n;for(A=e;A<t.length;A++){if(n=(Xt(A,t.length),t.charCodeAt(A)),n==32||n==9)return-1;if(n==61)return A}return-1}function ZJ(t,e){var A,n,P,r;return n=t.a.length-1,A=e-t.b&n,r=t.c-e&n,P=t.c-t.b&n,_g(A<P),A>=r?(JG(t,e),-1):(GG(t,e),1)}function Ym(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=uu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function vh(t,e){var A;if(e==null||e.length==0)return null;for(A=2;A<e.length-2;A++)if(e[A]==32)return Ls(t,e,e,A+1);return Ls(t,e,null,0)}function WJ(t){var e;return e=typeof t,A1(e,w2)||A1(e,nr)||A1(e,bf)?!0:t!=null&&t.$implements__java_lang_Comparable}function K9(t,e){return U1(t),e==null?!1:A1(t,e)?!0:t.length==e.length&&A1(t.toLowerCase(),e.toLowerCase())}function _J(){var t,e;if(q2==null)for(e=new GA(!1),q2=h(o9,or,26,sr.length,0,1),t=0;t<sr.length;t++)q2[t]=_i(e,sr[t]),ut(q2[t],1)}function Km(){Km=B1,qV=B(d(F,2),D0,7,0,[B(d(F,1),k,6,15,[0,0,1]),B(d(F,1),k,6,15,[0,2,3]),B(d(F,1),k,6,15,[1,3,3])])}function X9(){X9=B1,J4=new wD(\"ONE_ONE\",0),Y4=new wD(\"ONE_TWO\",1),z4=new wD(\"ONE_THREE\",2),Ti=new wD(\"ONE_FOUR\",3),x2=new wD(\"ONE_X\",4)}function Xm(t,e,A){this.s=ED(t,r0(e,e.D[0][A])&&r0(e,e.D[1][A])?\"Bond Query Features (Multiple)\":\"Bond Query Features\",this),ba(this,e,A)}function $J(t,e){e=e||{};var A=(typeof e.maxSphereSize===TU?5:e.maxSphereSize)|0,n=(typeof e.type===TU?0:e.type)|0;return SK(t,A,n)}function aJ(t,e){t.a=e;var A=t.Ic(),n=t;function P(){n.Hc()}function r(){n.Gc()}var i={fireOk:P,fireCancel:r};A.setEventConsumer(i)}function Me(t){$5();var e;if(!isNaN(t)&&!isFinite(t)||isNaN(t))throw At(new YP(\"Infinite or NaN\"));ga(this,(e=t,e.toPrecision(20)))}function tz(t){var e;return ET(t.Vb(),(e=lB(new Uw,Mv(new Qw,new uw,new cw,B(d(Fl,1),Ye,95,0,[(iQ(),qU)]))),LT(e,new ow)))}function Zm(t){ke(),t.length==0?(this.e=0,this.d=1,this.a=B(d(F,1),k,6,15,[0])):(this.e=1,this.d=t.length,this.a=t,Rn(this))}function LQ(t){this.j=t&-4,this.q=t&3,this.o=(t&32)!=0,this.e=(t&64)!=0,this.i=(t&8)!=0,this.d=2,(t&4)!=0&&(this.d|=1),this.i&&(this.d&=-3)}function Df(t,e){var A,n;for(A=0,n=0;n<t.j[e];n++)t.n[e][n]==2&&(K(t,t.i[e][n])==7||K(t,t.i[e][n])==8||K(t,t.i[e][n])==16)&&++A;return A}function Wm(t,e,A){var n,P,r,i,f;for(P=0,i=0,f=0;f<t.g[e].length;f++)n=t.g[e][f],t.k[n]==A&&(r=1<<t.j[n],(i&r)==0&&(i|=r,++P));return P}function is(t,e){var A,n,P,r,i;for(i=0,n=1,r=new Wt(t.a);r.a<r.c.a.length;)P=t1(r),A=P.cc(e,null,\"\"+n,!1),A!=0&&(i+=A,++n);return i}function ez(t,e,A,n){var P,r;if(t.d.length>t.c.length)for(P=0;P<t.a;P++)A[n+P]=t.c[P];else for(r=N(t.b,e),P=0;P<t.a;P++)A[n+P]=t.c[r[P]]}function Az(t,e,A,n){var P,r;if(t.d.length<=t.c.length)for(P=0;P<t.a;P++)A[n+P]=t.d[P];else for(r=N(t.b,e),P=0;P<t.a;P++)A[n+P]=t.d[r[P]]}function _m(t,e,A){var n,P,r,i;for(i=i=h(rt,ft,6,t.q,16,1),r=vX(t,e,A,i),P=h(F,k,6,r,15,1),r=0,n=0;n<t.q;n++)i[n]&&(P[r++]=n);return P}function nz(){var t;return CU!=0&&(t=Date.now(),t-hE>2e3&&(hE=t,MU=w.setTimeout(Yq,10))),CU++==0?(kO((Q3(),a4)),!0):!1}function ar(t){switch(Y1(),t){case 7:case 8:case 9:case 15:case 16:case 17:case 33:case 34:case 35:case 52:case 53:return!0}return!1}function Pz(t,e){var A,n,P;if(n=r9(t),P=r9(e),n==-1||P==-1||(n+P&1)==0)return 3;switch(A=0,n+P){case 3:case 7:A=2;break;case 5:A=1}return A}function rz(t,e){var A,n,P;if(n=r9(t),P=r9(e),n==-1||P==-1||(n+P&1)==0)return 3;switch(A=0,n+P){case 3:case 7:A=1;break;case 5:A=2}return A}function iz(t,e,A){A!=null&&A.length==0&&(A=null),A==null?t.t!=null&&(t.t[e]=null):(t.t==null&&(t.t=h(q,w8,10,t.M,0,2)),t.t[e]=A)}function $m(t,e,A,n){var P;P=new fs(t,e),TL(P,A,dt(e,A)==1?2:3),TL(P,n,dt(e,n)==2?1:2),t.g[A]=!0,t.g[n]=!0,zi(t.e,P)&&uL(t.d,P)}function fz(){var t,e;if(hl==null&&hl==null){for(t=h(ytt,A0,199,RU.length,0,1),e=0;e<RU.length;e++)t[e]=new Up(RU[e][0],RU[e][1]);hl=t}}function Dz(t,e){var A,n,P;_A(),e=e||{};var r=!e.noCoordinates,i=!e.noStereo;return A=new i3,n=new Y3,kd(A,n.a,KA((P=t,JD(),P)),r,i),n}function CP(t){var e;if(t<wi.length)return wi[t];for(e=new V0;t>=wi.length;)J(e,wi[wi.length-1]),t-=wi.length-1;return J(e,wi[t]),e.a}function uz(t,e){var A,n,P;if(e.e.length!=t.e.length)return!1;for(n=RF(t),P=RF(e),A=0;A<n.length;A++)if(n[A]!=P[A])return!1;return!0}function am(t,e){var A,n,P;for(P=0,n=0;n<t.length;n++){for(A=t[n];e[P]<A;)if(++P,P==e.length)return!1;if(e[P]>A)return!1}return!0}function Qz(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Jn(e.c[A]),t.c[A]),0)||gt(V(e.b[A],t.c[A]),t.b[A]))&&(n=!1);return n}function Uz(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Jn(t.c[A]),e.c[A]),0)||gt(V(t.b[A],e.c[A]),e.b[A]))&&(n=!1);return n}function oz(t,e){kf();var A,n,P,r;for(r=0,n=0,P=0,A=0;A<t.length;A++)r+=$r(t[A]&e[A]),n+=$r(t[A]),P+=$r(e[A]);return r/w.Math.sqrt(n*P)}function tk(t,e){var A,n,P,r;for(n=0,P=0,r=0,A=0;A<t.V.q;A++)(!e||r0(t.V,A))&&(P+=kt(t.V,A),r+=jt(t.V,A),++n);return n>1?new ig(P/n,r/n):null}function fs(t,e){var A;for(this.b=t,this.a=h(F,k,6,(t.i.g+15)/16|0,15,1),A=0;A<t.i.g;A++)this.a[A>>4]|=w.Math.min(3,dt(e,A))<<2*(A&15)}function MP(t,e,A){this.j=t,this.i=A,this.e=h(F,k,6,e,15,1),this.k=h(F,k,6,e,15,1),this.a=h(yt,wt,6,e,15,1),this.b=h(yt,wt,6,e,15,1)}function Lz(t){var e,A,n,P,r;for(A=qX(new BP(238,238,238)),n=oi&A.a,P=0;P<xo(t);P++)for(r=0;r<Oo(t);r++)e=Kd(t,P,r),Jo(t,P,r,(qn&e)+n)}function sz(t){var e,A,n,P;for(t.a=h(F,k,6,t.d.a.length,15,1),e=0,P=new Wt(t.b);P.a<P.c.a.length;)n=t1(P),t.a[A=a9(t,n),A<0?-1:A]=e++}function yz(t,e){var A,n,P;for(t.c=e,P=new Wt(t.g);P.a<P.c.a.length;)A=t1(P),je(A,e);for(n=new Wt(t.f);n.a<n.c.a.length;)A=t1(n),je(A,e)}function ek(t,e,A,n){var P;for(P=0;P<A.length;P++)A[P]||(A[P]=!0,n[e]=P,e+1==n.length?mt(t.b,bn(n,n.length)):ek(t,e+1,A,n),A[P]=!1)}function lz(t,e,A,n){var P,r,i;for(r=0,i=0;i<t.i[e].length;i++)if(P=(1-n)*t.e[e][i]+n/t.i[e].length,r+=P,A<=r)return i;return t.i[e].length-1}function Fh(t,e){var A,n,P,r;return A=e/2|0,P=t<0,t=w.Math.abs(t),r=e/32|0,n=w.Math.min(A-1,zt(E1(w.Math.round(t*A/(t+r))))),P?A+n:n}function Ak(t,e,A){var n;return n=e==0?F0+t[0]-t[t.length-1]:t[e]-t[e-1],A>d6&&A<AA?n-=2*w.Math.cos(A+m2):n-=.5*w.Math.cos(A+m2),n}function Ds(t,e){var A;return e==null||!Zt(e,29)?!1:(A=e,w.Math.abs(A.a-t.a)+w.Math.abs(A.b-t.b)+w.Math.abs(A.c-t.c)<1e-6)}function nk(){nk=B1,BU=B(d(rt,1),ft,6,16,[!1,!1,!1,!1,!1,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!0,!0])}function Tz(t,e){return H8(t)?!!jV[e]:t.td?!!t.td[e]:Vi(t)?!!RV[e]:Tu(t)?!!bV[e]:!1}function sQ(t,e){switch(e){case 0:return HY(t,!1);case 1:return hz(t);case 2:return JY(t);case 3:return Hz(t);case 4:return LY(t)}return null}function Pk(t){var e;e=t.R.c*(t.r!=0?t.r:V8(t.L)),t.Y=e*rtt,t.T=e*Ptt,t.S=e*.38,t.W=e*.47,t.X=vt(e*t.J*itt+.5),t.V=e*.12,t.Z=e*.4,t.A=e*.5+.5}function hz(t){try{return t=Xn(t),ds(t),me(new BA(t))}catch(e){if(e=t0(e),Zt(e,27))return x1(),null;throw At(e)}}function cz(t,e){var A,n;for(n=0;n<t.b.i.g;n++)t.b.g[n]&&(A=3&t.a[n>>4]>>2*(n&15),w0(e,n,A==1?1:A==2?t.b.g[n]&&!WP(t.b.i,n)?386:2:A==3?4:16))}function wz(t,e,A){var n,P;for(n=new BA(es(A,null)),me(n),Iu(n,n.jb),t.d=h(F,k,6,e.g.length,15,1),P=0;P<t.d.length;P++)t.d[P]=ed(A,e.g[P].a)}function a8(t){return H8(t)?Qh(t):Vi(t)?vt((U1(t),t)):Tu(t)?(U1(t),t?1231:1237):PT(t)?t.ob():AT(t)?vD(t):t&&t.hashCode?t.hashCode():vD(t)}function gz(t){var e,A;for(e=0;e<t.R.f;e++)(!t.M[e]||t.db[e]==3)&&(t.bb[e]=0);for(A=0;A<t.R.g;A++)(l1(t.R,A)!=1||t.o[A]==0||t.o[A]==3)&&(t.n[A]=0)}function dz(t,e){var A,n;if((t.u[e]&hn)!=0){for(n=(ut(t,7),t.p),A=0;A<n.j.a.length;A++)if(N(n.k,A).length==6&&yA(n,A,e))return!0}return!1}function e2(t,e){var A,n;if(t.C[e]==7&&t.e[e]+xt(t,e)>=3){for(A=0;A<t.e[e];A++)if(n=t.i[e][A],t.C[n]==8&&t.e[n]+xt(t,n)==1)return!0}return!1}function yQ(t,e){var A,n;if(Wg(e>0),(e&-e)==e)return vt(e*Rs(t,31)*4656612873077393e-25);do A=Rs(t,31),n=A%e;while(A-n+(e-1)<0);return vt(n)}function us(t){var e,A;cu(this);try{if(t)for(A=new Wt(t);A.a<A.c.a.length;)e=t1(A),mt(this,e.Gb())}catch(n){if(n=t0(n),!Zt(n,19))throw At(n)}}function XA(t,e,A){A>=-1&&A<=14&&(t.u[e]&=-2013265921,t.u[e]|=1+A<<27,t.C[e]==6&&(A==-1||A==0||A==2||A==4)&&(t.u[e]&=-49,A==2&&(t.u[e]|=16)))}function rk(t,e,A,n){var P,r,i,f;for(r=-1,i=-1,f=0;f<Mt(t.e,e);f++)if(P=_(t.e,e,f),P==A||P==n)if(i==-1)i=f;else{r=f;break}return t.a[e][r][i]}function ik(t,e){var A,n,P,r,i;for(A=-1,n=-1,r=0;r<O(t.k,e);r++)P=_(t.k,e,r),i=(pA(t.k,e,r)<<24)+t.a[P],!t.b[P]&&(A==-1||n<i)&&(A=r,n=i);return A}function Bz(t,e){var A,n,P,r;for(n=1,r=0;r<t.v.length;r++)n*=s3(t.v[r],e.d[r]);for(A=z9(t.i,e.d),P=0;P<t.w.length;P++)n*=k3(A,P,e.i[P]);return n}function fk(t,e){var A,n,P,r;for(r=t.size(),e.length<r&&(e=uu(new Array(r),e)),P=e,n=t.Tb(),A=0;A<r;++A)P[A]=n.bd();return e.length>r&&(e[r]=null),e}function Dk(t,e){return w.Math.acos((t.a*e.a+t.b*e.b+t.c*e.c)/(w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)*w.Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c)))}function Qs(t,e,A,n){P9();var P,r;for(P=0,r=0;r<A;r++)P=O1(Un(V(e[r],h1),V(n,h1)),V(zt(P),h1)),t[r]=zt(P),P=DA(P,32);return zt(P)}function eP(t,e){var A;for(A=0;A<t.w;A++)e-=16;for(e<0&&x1();e>15;)Jt(t,1,1),Jt(t,15,4),e-=16,++t.w;Jt(t,1,1),Jt(t,e,4)}function mh(){Km(),this.c=new zA(24,29),this.i=h(F,k,6,24,15,1),this.b=h(F,k,6,2,15,1),this.e=h(F,k,6,2,15,1),this.f=h(F,k,6,2,15,1)}function vz(t,e,A){return HI(t>=0&&t<=1114111),t>=Q0?(e[A++]=55296+(t-Q0>>10&1023)&w1,e[A]=56320+(t-Q0&1023)&w1,2):(e[A]=t&w1,1)}function Fz(t){var e;if(t.q==1)return!0;for(e=1;e<t.q;e++)if(t.J[e].a!=t.J[0].a||t.J[e].b!=t.J[0].b||t.J[e].c!=t.J[0].c)return!0;return!1}function mz(t,e,A){var n,P;for(P=0;P<O(t.j,e);P++)if(n=_(t.j,e,P),K(t.j,n)==8&&O(t.j,n)==1)return A&&p1(t.j,n)==0&&E0(t.j,n,-1),!0;return!1}function uk(t,e){var A,n;for(n=0;n<t.b.length;n++)if(A=w.Math.abs(t.b[n]-e.b[n]),A>Cy&&A<t.a[n]-Cy)return A<t.a[n]/2^t.b[n]<e.b[n]?1:-1;return 0}function kh(t,e,A,n){var P,r;for(r=0;r<t.g[e].length;r++)P=t.g[e][r],t.f[P]&&(t.o[P]==1||t.o[P]==2)&&t.k[P]==0&&(t.k[P]=n<<24>>24,t.j[P]=A<<24>>24)}function kz(t){var e;return ET(t.Vb(),(e=lB(new Tw,wO(new yw,new lw,new gw,new dw,B(d(Fl,1),Ye,95,0,[(iQ(),sc),qU]))),LT(e,new hw)))}function Us(t,e){var A;if(t.j[e]==3&&e<t.f&&i0(t.p,e)&&(t.p&&e<t.f?iA(t.p,e):0)>=5){for(A=0;A<t.j[e];A++)if(fi(t,t.k[e][A]))return t.k[e][A]}return-1}function bz(t){var e,A,n;for(A=!1,e=1;e<t.e.a.length;e++)for(n=0;n<e;n++)N(t.e,n).a>N(t.e,e).a&&(A=!A),N(t.e,n).b>N(t.e,e).b&&(A=!A);return A}function Rz(t){var e,A;for(e=0;e<t.f.q;e++)!t.b[e]&&Mt(t.f,e)==0&&(A=new MP(t.f,1,!1),t.b[e]=!0,A.e[0]=e,A.a[0]=0,A.b[0]=0,A.k[0]=0,pP(t.d,A))}function jz(t,e){var A,n,P;return e<=22?(A=t.l&(1<<e)-1,n=P=0):e<=44?(A=t.l,n=t.m&(1<<e-22)-1,P=0):(A=t.l,n=t.m,P=t.h&(1<<e-44)-1),S0(A,n,P)}function bh(t,e,A,n,P,r,i,f){var D,Q;n&&(D=n.a[0],D&&bh(t,e,A,D,P,r,i,f),Nz(t,A,n.c,P,r,i,f)&&e.add(n),Q=n.a[1],Q&&bh(t,e,A,Q,P,r,i,f))}function os(t,e){var A;for(A=0;A<t.c;A++)if(gt(t.d[A],e.d[A]))return Hi(t.d[A],e.d[A])?-1:1;return P0(t.d[t.c],e.d[t.c])?0:Hi(t.d[t.c],e.d[t.c])?-1:1}function Qk(t,e,A){var n,P,r;for(r=e.length,n=new MP(t.f,r,!1),n.a[0]=0,n.b[0]=0,P=0;P<r;P++)n.k[P]=128-r,n.e[P]=e[P];r<8?TQ(n):xa(t,n,e,A),pP(t.d,n)}function Uk(t,e){var A=new Array(e),n;switch(t){case 14:case 15:n=0;break;case 16:n=!1;break;default:return A}for(var P=0;P<e;++P)A[P]=n;return A}function ok(t){var e;return e=new nD,t.a<=t.b?(e.c=t.a,e.b=t.b-t.a):(e.c=t.b,e.b=t.a-t.b),t.c<=t.d?(e.d=t.c,e.a=t.d-t.c):(e.d=t.d,e.a=t.c-t.d),e}function Jt(t,e,A){for(;A!=0;)t.t==0&&((!t.r||t.v!=63)&&(t.v+=64),Oe(t.u,t.v&w1),t.t=6,t.v=0),t.v<<=1,t.v=zt(Y(t.v,V(e,1))),e=q0(e,1),--A,--t.t}function pz(t,e,A,n,P,r,i,f,D,Q){var U;return U=Rh(T5(t,e,A,n,P,r,i,f,D)),!Q&&U==-1&&(U=Rh(T5(t,e,A,n,P,r,i,7,7)),U==-1&&(U=Rh(T5(t,e,A,n,P,3,3,7,7)))),U}function Rh(t){var e,A,n,P;for(M4||i_(),P=C0,n=I1,A=0;A<13;A++){if(e=P>=dU.length||t<dU[P]?-1:t==dU[P]?0:1,e==0)return P;P=e<0?P-n:P+n,n=n/2|0}return-1}function Cz(t,e){_A();var A;return typeof e===TU&&(e=!0),typeof e===w2?A=new CA(_i(new GA(e),t)):typeof e===bf&&(A=new CA(yG(new GA(!1),t,e))),A}function Lk(t,e,A){var n,P;return n=Yi(t,e++),n>=55296&&n<=56319&&e<A&&pI(P=(Xt(e,t.length),t.charCodeAt(e)))?Q0+((n&1023)<<10)+(P&1023):n}function Mz(t){var e;return t==null?!1:(e=typeof t,A1(e,w2)||A1(e,nr)||A1(e,bf)||t.$implements__java_io_Serializable||Array.isArray(t))}function Hz(t){var e;try{return e=XR(new r5(t)),me(new EA(e,8))}catch(A){if(A=t0(A),Zt(A,27))return x1(),null;throw At(A)}}function lQ(t,e){var A,n,P;return A=t.a,n=t.b,P=t.c,t.a=A*e[0][0]+n*e[1][0]+P*e[2][0],t.b=A*e[0][1]+n*e[1][1]+P*e[2][1],t.c=A*e[0][2]+n*e[1][2]+P*e[2][2],t}function Ls(t,e,A,n){var P,r,i,f,D;return e==null?null:($o(t,e,0),P=nt(t,4),f=nt(t,4),P>8&&(P=f),r=nt(t,P),i=nt(t,f),D=new zA(r,i),gp(t,D,e,A,n),D)}function sk(t,e,A){var n,P,r;if(t.i!=null)for(n=0;n<t.i.length;n++)r=t.p[n]*e,P=t.o[n]-A,t.i[n].a=t.k+r*w.Math.sin(P),t.i[n].b=t.n+r*w.Math.cos(P)}function Vz(t){var e,A,n,P,r,i;for(A=0,P=t.a,r=0,i=P.length;r<i;++r)n=P[r],n&&++A;for(t.b=h(F,k,6,A,15,1),A=0,e=0;e<t.a.length;e++)t.a[e]&&(t.b[A++]=e)}function m0(t,e){t.b!=e&&e>=0&&e<34&&(e!=t.b||e==20||e==33)&&(e!=19||(t.a.U&4)!=0)&&(e!=21||(t.a.U&8)!=0)&&!(e==0||e==17||e==1)&&(t.b=e,au(t.a,e),MD(t.n))}function Ez(t,e){switch(e){default:case 0:return sQ(t.a,0);case 1:return sQ(t.a,1);case 2:return sQ(t.a,2);case 3:return sQ(t.a,3);case 4:return sQ(t.a,4)}}function Sz(t){switch(typeof t){case bf:return Qh(t);case nr:return vt((U1(t),t));case w2:return U1(t),t?1231:1237;default:return t==null?0:vD(t)}}function qz(t){var e,A,n;t.b==t.c&&(n=t.a.length,A=CG(w.Math.max(8,n))<<1,t.b!=0?(e=qI(t.a,A),tF(t,e,n),t.a=e,t.b=0):mi(t.a,A),t.c=n)}function HP(t,e,A,n,P){var r,i,f;P&&(r=t.vb(n),i=r/2+(t.wb()/8|0),f=t.wb()/2|0,(n==\"+\"||n==\"-\")&&(f=f*2/3),mt(t.$,new QA(e-i,A-f,2*i,2*f))),t.K||t.tb(n,e,A)}function yk(){op();var t,e,A,n,P,r,i;for(cu(this),r=new vo,A=xV,n=0,P=A.length;n<P;++n)e=A[n],t=_i(new Z2,e),DK(r,t),i=new og(t),i.a=V8(i.b),this.a.push(i)}function Iz(t){var e,A;for(A=!1,e=0;e<t.V.f;e++)C1(t.V,e)!=0&&Bn(t.V,e)&&(A||(z1(t),A=!0),Ze(t.V,e,C1(t.V,e),!1));A&&kL(t,w.Math.max(t.eb,1))}function xz(t,e){var A,n,P;return P=t.h-e.h,P<0||(A=t.l-e.l,n=t.m-e.m+(A>>22),P+=n>>22,P<0)?!1:(t.l=A&x0,t.m=n&x0,t.h=P&aA,!0)}function Nz(t,e,A,n,P,r,i){var f,D;return!(e.ld()&&(D=t.a.Rb(A,n),D<0||!P&&D==0)||e.md()&&(f=t.a.Rb(A,r),f>0||!i&&f==0))}function A2(t,e,A,n){var P;return P=h(yt,wt,6,3,15,1),P[0]=t.k[n].a-t.k[A].a,P[1]=t.k[n].b-t.k[A].b,P[2]=t.k[n].c-t.k[A].c,P[0]*e[0]+P[1]*e[1]+P[2]*e[2]>0}function Oz(t,e){var A;for(A=0;A<t.j.f;A++)t.d[A]&&gQ(t.j,A)==0&&(!e||K(t.j,A)==5&&p1(t.j,A)<0||K(t.j,A)==6||K(t.j,A)==14||tA(t.j,A)&&p1(t.j,A)>0)&&Pf(t,A)}function ti(t){var e;return e=w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),e==0?(x1(),t.a=1,t.b=0,t.c=0,t):(t.a/=e,t.b/=e,t.c/=e,t)}function ei(t){return Y1(),!(t==1||t==6||ar(t)||t==2||t==10||t==18||t==36||t==54||t==86||t>103)}function lk(t){var e,A,n,P,r,i;for(i=AP(t),r=i.length,e=i[0].length,P=R1(F,[D0,k],[7,6],15,[r,e],2),A=0;A<r;A++)for(n=0;n<e;n++)P[A][n]=i[A][n].a;return P}function Tk(t){var e;return e=0,t==2?e=1:t>=3&&t<=10?e=2:t>=11&&t<=18?e=3:t>=19&&t<=36?e=4:t>=37&&t<=54&&(e=5),(t>=21&&t<=30||t>=39&&t<=48)&&(e*=10),e}function Gz(t,e){e.j==1?(t.a!=-1&&(K0(t.e,t.a,t.k),jr(t.e,t.a,t.g),XA(t.e,t.a,t.j),Ne(t.e,t.a,t.i),u8(t.e,t.a,t.n)),Rr(t.c)):e.j==0&&(R$(t),Rr(t.c))}function ss(t){var e,A;return isNaN(t)?{l:0,m:0,h:524160}:(e=(A=new ArrayBuffer(8),new Float64Array(A)[0]=t,new Uint32Array(A)),S9(e[0]|0,e[1]|0))}function hk(t){var e,A;if(t.K){for(e=0;e<t.q;e++)if(gt(V(t.B[e],Pe),0)){for(t=new Yr(t),A=e;A<t.q;A++)gt(V(t.B[A],Pe),0)&&(t.C[A]=-1);Pi(t)}}return t}function ck(t,e,A,n,P,r){this.f=t,P!=0&&P!=1?this.c=!0:(this.a=e,this.b=A,this.d=r,this.e=new f1,n!=-1&&Ku(this,n,A-1),n!=-1&&P==1&&Ku(this,iU,A+1))}function f8(t,e){z1(t),Jh(t.V,t.hb,t.kb,e,0,-1,0,null)&&(t.t!=-1&&(t.t=-1,N1(t,new q1(t,4,!0))),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)))}function Jz(t){var e,A,n,P,r,i;for(r=-1,i=Ve,e=0;e<t.V.q;e++)n=t.hb-kt(t.V,e),P=t.kb-jt(t.V,e),A=w.Math.sqrt(n*n+P*P),A<24&&i>A&&(i=A,r=t.M[e]);return r}function zz(t,e){var A,n,P;for(n=0;n<t.j[e];n++)if(t.n[e][n]!=1){for(A=t.i[e][n],P=0;P<t.j[A];P++)if(t.n[A][P]==1&&Df(t,t.i[A][P])!=0)return!0}return!1}function uf(t,e){var A,n;for(e.v=null,e.t=null,e.K=t.K,e.q=0,A=0;A<t.q;A++)En(t,e,A,0,0);for(e.r=0,n=0;n<t.r;n++)er(t,e,n,0,0,t.D[0][n],t.D[1][n],!1);t.Yb(e)}function Yz(t,e){var A,n;for(A=h(F,D0,7,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=h(F,k,6,t[n].length,15,1),sA(t[n],0,A[n],0,t[n].length));return A}function Kz(t,e){var A,n;for(A=h(q,w8,10,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=h(q,I,6,t[n].length,15,1),sA(t[n],0,A[n],0,t[n].length));return A}function wk(t,e,A){var n,P,r,i,f;if(r=G1(t,e),n=WA(t,e,r,A),i=((t.u[e]&g8)>>>27)-1,i==-1){for(f=Yu(t.C[e]),P=0;P<f.length-1&&r>f[P]+n;)++P;i=f[P]}return i+n-r}function Xz(t,e){var A;if(t.b.length!=e.b.length)return t.b.length<e.b.length?-1:1;for(A=0;A<t.b.length;A++)if(t.b[A]!=e.b[A])return t.b[A]<e.b[A]?-1:1;return 0}function Zz(t,e){var A,n,P;t.j||e.startsWith(\"COUNTS\")&&(A=lA(e,ne(e,7)),n=c1(UA(e,7,ne(e,7)),o1,It),P=c1(UA(e,A,ne(e,A)),o1,It),t.j=new zA(n,P))}function Wz(t,e){var A,n,P,r,i,f;for(i=new Nn,f=t.c.length==2?t.c:t.b,n=f,P=0,r=n.length;P<r;++P)A=n[P],Hr(i,e.k[A]);return cd(i,.5),ti(mx(i,J0(e,t.f[4]))),i}function _z(t,e){var A,n;if(n=!1,t.f.t==null)for(t.f.t=h(F,k,6,e.length,15,1),A=t.f.t.length;--A>=0;)t.f.t[e[A]]=A;return n=Yj(t,e,0,n),n=Yj(t,e,1,n),n}function $z(t,e,A){var n;if(t.eb==6){if(A)for(n=0;n<t.V.q;n++)zn(t.V,n,!r0(t.V,n));Ar(new Y8(A?4:0),t.V),A&&nT(t.V)}j5(t.G,e,new QA(0,0,VD(t.k),Vr(t.k)),Q0|t.T)}function gk(t,e){var A,n,P;if(vT(e),A=e/31|0,n=t.a.length,A>=n)return-1;for(P=(t.a[A]|0)&It<<e%31;P==0;){if(++A>=n)return-1;P=t.a[A]|0}return A*31+OL(P)}function jh(t,e){var A,n,P,r,i,f,D,Q;return D=t.h>>19,Q=e.h>>19,D!=Q?Q-D:(P=t.h,f=e.h,P!=f?P-f:(n=t.m,i=e.m,n!=i?n-i:(A=t.l,r=e.l,A-r)))}function Qf(t,e,A,n){var P;if(e==0){A<0?n.a=t.T:n.a=-t.T,n.b=0;return}P=w.Math.atan(A/e),e<0&&(P+=Q1),n.a=-(t.T*w.Math.sin(P)),n.b=t.T*w.Math.cos(P)}function az(t,e,A,n,P){var r,i,f,D;for(i=A,f=0,D=i.length;f<D;++f)r=i[f],P[t.d[r]]=O1(P[t.d[r]],e[r]<<t.b[r]),n[t.d[r]]=O1(n[t.d[r]],M1(yc[t.a[r]],t.b[r]))}function tY(t){var e=t.backingJsObject;if(e&&e.stack){var A=e.stack,n=e+$A;return A.substring(0,n.length)==n&&(A=A.substring(n.length)),A.split($A)}return[]}function TQ(t){var e,A;for(e=Q1-Q1*(t.e.length-2)/t.e.length,A=1;A<t.e.length;A++)t.a[A]=t.a[A-1]+w.Math.sin(e*(A-1)),t.b[A]=t.b[A-1]+w.Math.cos(e*(A-1))}function eY(t,e,A,n,P){var r;return r=Sb(t,e,A,n,P),r<0?jj(t,e,A,n,P,Gb(t,e,A,n,P)):w.Math.abs(j0(t.b[r][4]))<.001?jj(t,e,A,n,P,j0(t.b[r][5])):j0(t.b[r][4])}function AY(t,e){var A,n,P,r,i;for(r=0;r<xo(t);r++)for(i=0;i<Oo(t);i++)for(A=Kd(t,r,i),P=A&oi,n=0;n<Z4.length;n++)if(P==Z4[n]){Jo(t,r,i,(qn&A)+e[n]);break}}function nY(t,e,A){var n,P;if(t.k=e,t.n=A,t.i!=null)for(P=t.i.length,t.o=h(yt,wt,6,P,15,1),t.p=h(yt,wt,6,P,15,1),n=0;n<P;n++)t.o[n]=t.i[n].a,t.p[n]=t.i[n].b}function ys(t,e){var A,n,P;if(a1(t.R,e)<2)return!1;if(O(t.R,e)==2)return!0;for(A=0,P=0;P<O(t.R,e);P++)n=Ot(t.R,e,P),_e(t.R,n)&&(A+=dt(t.R,n)-1);return A>1}function t9(){t9=B1,yl=new Mi(\"CREATE\",0),sl=new Mi(\"CHANGE_DIF\",1),Ll=new Mi(\"CHANGE_ABS\",2),ll=new Mi(\"REMOVE\",3),bU=new Mi(\"NO_CHANGE\",4),Tl=new Mi(\"UNKNOWN\",5)}function dk(t,e){var A,n,P;return A=e.dd(),P=e.ed(),n=t.get(A),!(!(J1(P)===J1(n)||P!=null&&VP(P,n))||n==null&&!t.containsKey(A))}function PY(t,e,A){var n,P,r,i,f,D,Q;if(t.e!=null)for(r=t.e,f=0,Q=r.length;f<Q;++f)n=r[f],ag(n,e,A);if(t.b!=null)for(P=t.b,i=0,D=P.length;i<D;++i)n=P[i],ag(n,e,A)}function Bk(t,e,A){var n,P,r,i,f;for(r=!0,f=N(t.g,e).a,i=ik(t,f);i!=-1;)n=_(t.k,f,i),P=Ot(t.k,f,i),i=ik(t,n),Iv(t,new pT(n,P,f,A&&r,A&&i==-1),++e),f=n,r=!1}function vk(t,e){var A,n;if(e!=null)for(ut(t.j,1),A=0;A<t.j.f;A++)e[A]!=0&&(n=Fu(t.j,A,G1(t.j,A)),e[A]==15?n>=0&&XA(t.j,A,0):e[A]!=lT(t.j,A)&&XA(t.j,A,e[A]-n))}function ph(t){var e,A,n;if(A=new f1,e=t.e.indexOf(k0(10)),e==-1)mt(A,t.e);else{for(n=0;e!=-1;)mt(A,UA(t.e,n,e)),n=e+1,e=zI(t.e,10,n);mt(A,HD(t.e,n))}return A}function VP(t,e){return H8(t)?A1(t,e):Vi(t)||Tu(t)?(U1(t),J1(t)===J1(e)):PT(t)?t.mb(e):AT(t)?lg(t,e):t&&t.equals?t.equals(e):J1(t)===J1(e)}function rY(t,e,A){var n,P;return n=h(F,k,6,4,15,1),n[0]=e.b,n[1]=e.a,n[2]=A.a,n[3]=A.b,P=qQ(t.R,n),w.Math.abs(P)<.3||w.Math.abs(P)>kp?3:P<0?2:1}function iY(t,e,A){var n,P;return n=h(F,k,6,4,15,1),n[0]=e.b,n[1]=e.a,n[2]=A.a,n[3]=A.b,P=qQ(t.R,n),w.Math.abs(P)<.3||w.Math.abs(P)>kp?3:P<0?1:2}function lA(t,e){var A;if(e==-1)return-1;for(A=e+1;A<t.length;A++)if(Xt(A,t.length),t.charCodeAt(A)!=32&&(Xt(A,t.length),t.charCodeAt(A)!=9))return A;return-1}function fY(t){var e,A;for(t.b=null,e=0;e<t.g.g;e++)Bu(t.g,e)&&(!t.b&&(t.b=new f1),A=new KU,A.a=z(t.g,0,e),A.b=z(t.g,1,e),A.d=x3(t.g,e),A.c=gT(t.g,e),mt(t.b,A))}function hQ(t){var e,A,n;for(Bm(t),Aa(new u7,dh(t)),n=h(F,k,6,t.L.length,15,1),e=0;e<t.V.q;e++)A=t.M[e],Ze(t.V,e,C1(t.L[A],n[A]),C1(t.V,e)==0||Bn(t.V,e)),++n[A]}function DY(t,r){var A=wE;A||(A=Z.createElement(\"canvas\"),wE=A);var n=\"\"+t.b+\"px \"+t.a,P=A.getContext(\"2d\");P.font=n;var r=P.measureText(r);return r.width}function Fk(t,e){var A,n,P,r,i;for(r=Vb(t,t.D[0][e])||Vb(t,t.D[1][e])?5:3,n=0;n<2;n++)A=t.D[n][e],P=dt(t,e)+(i=Cn(t,A),i+WA(t,A,i,t.C[A]))-G1(t,A),r>P&&(r=P);return r}function uY(t,e,A){var n,P,r,i,f;if(n=Ot(t.k,e,A),i=_(t.k,e,A),t.e[n]!=0){for(f=8*t.q[e]+1,P=N(t.g,t.q[e]).c,r=0;r<P.length&&i!=P[r];r++)++f;return f}return 8*t.q[i]}function QY(t){var e,A,n,P;for(e=\"o3\",A=\"YA\",P=w.Math.min(t.length,5),n=P-1;n>=0;n--)if(A1(t[n].d,e)||A1(t[n].d,A)){t.length>=n+1&&t.splice(0,n+1);break}return t}function UY(t){var e,A,n,P;for(P=0,n=null,A=new Wt(t);A.a<A.c.a.length;)e=t1(A),P<e.b[0].e.length*e.b[1].e.length&&(P=e.b[0].e.length*e.b[1].e.length,n=e);return n}function cQ(t){var e,A,n;for(n=new Wt(t.g);n.a<n.c.a.length;)if(e=t1(n),e.K)return!0;for(A=new Wt(t.f);A.a<A.c.a.length;)if(e=t1(A),e.K)return!0;return!1}function Mn(t,e){var A;return U0(t)&&U0(e)&&(A=t/e,M2<A&&A<DP)?A<0?w.Math.ceil(A):w.Math.floor(A):pn(G5(U0(t)?pe(t):t,U0(e)?pe(e):e,!1))}function oY(t,e){var A,n,P;for(t.g=h(F,k,6,t.k.q,15,1),A=Wb(t.k,t.g,e,!0),t.q=h(wPt,A0,177,A,0,1),P=!0,n=0;n<A;n++)P=P&!!(t.q[n]=Ga(t.r,t.k,t.g,n));return P}function LY(t){var e;try{return t=Xn(t),ds(t),e=XR(new r5(t)),me(new EA(e,8))}catch(A){if(A=t0(A),Zt(A,27))return x1(),null;throw At(A)}}function Uf(t,e,A){var n,P,r;if(P=G1(t,e),P-=WA(t,e,P,t.C[e]),A&&(P-=t.e[e]-t.j[e]),r=Yu(t.C[e]),P<=r[0])return-1;for(n=1;n<r.length;n++)if(r[n]>=P)return r[n];return P}function mk(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.j=zv(t.a,e,A,n,P),this.g=y2(t.d,e,A,n),this.i=y2(t.d,e,P,n),this.d=oR(t.n,e,A,n,P),this.e=oR(t.n,e,P,n,A)}function kk(t,e,A,n,P,r,i){var f,D,Q,U,L;if(U=P[r],Q=r==i-1,f=Q?n:0,L=Uk(f,U),n!=10&&B(d(t,i-r),e[r],A[r],f,L),!Q)for(++r,D=0;D<U;++D)L[D]=kk(t,e,A,n,P,r,i);return L}function wQ(t,e){var A,n;for(A=0;A<t.r;A++)for(n=0;n<2;n++)t.D[n][A]==e&&(t.H[A]=512);Zu(t,t.w[e]),t.C[e]=-1,t.v!=null&&(t.v[e]=null),t.t!=null&&(t.t[e]=null),mf(t),t.T=0}function sY(t,e){var A,n,P,r;for(A=t.e[e],r=h(F,k,6,A,15,1),P=0;P<A;P++)r[P]=(t.i[e][P]<<16)+P;for(r.sort(Fe(u0.prototype.gd,u0,[])),n=0;n<A;n++)r[n]&=w1;return r}function yY(t,e){var A,n,P;for(P=new V0,n=0;n<t.a.a.length;n++)P.a.length!=0&&(P.a+=\"+\"),A=new BA(N(t.a,n)),J(P,me(A)),e&&(P.a+=\" \",J(P,Iu(A,!0)));return P.a}function lY(t,e){if(t.b==-1)t.a=h(Ttt,A0,170,e,0,1),t.b=e,t.c=e-1;else do t.c=t.c==0?t.b-1:t.c-1;while(t.a[t.c]&&Mh(t.a[t.c]));return!t.a[t.c]&&(t.a[t.c]=new Jl),t.c}function Ch(t,e,A){var n,P,r;for(P=t.$c().Tb();P.ad();)if(n=P.bd(),r=n.dd(),J1(e)===J1(r)||e!=null&&VP(e,r))return A&&(n=new ho(n.dd(),n.ed()),P.cd()),n;return null}function Hn(t,e,A,n){vr(t.L,D1(t.L,A,n))?(W1(t,-3),t.qb(e),W1(t,t.Q)):t.p[A]!=t.p[n]?PK(t,e,A,n):t.p[A]!=0?(W1(t,t.p[A]),t.qb(e),W1(t,t.Q)):t.qb(e)}function gQ(t,e){var A,n,P,r,i;if(!t.K||t.v==null||t.v[e]==null)return wk(t,e,t.C[e]);for(i=0,n=t.v[e],P=0,r=n.length;P<r;++P)A=n[P],i=w.Math.max(i,wk(t,e,A));return i}function bk(){bk=B1,v8=vt(w.Math.round(vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*2))))),dn=(de==-1&&(de=globalThis.devicePixelRatio||1),de*21)}function dQ(t,e){var A,n,P,r;return P=w.Math.min(t.c,e.c),r=w.Math.min(t.d,e.d),n=w.Math.max(t.c+t.b,e.c+e.b)-P,A=w.Math.max(t.d+t.a,e.d+e.a)-r,new QA(P,r,n,A)}function TY(t,e,A,n){x7();var P=nl;bt=e,y1=A,ttt=n;function r(){for(var i=0;i<P.length;i++)P[i]()}if(t)try{KE(r)()}catch(i){t(e,i)}else KE(r)()}function Rk(t,e,A,n){var P,r,i;for(P=0;P<t.q;P++)(!n||(t.u[P]&512)!=0)&&(i=t.R[P]*e,r=t.Q[P]-A,t.J[P].a=t.U+i*w.Math.sin(r),t.J[P].b=t.V+i*w.Math.cos(r));n&&(t.T&=7)}function Mh(t){var e,A,n,P,r;if(!t.d)if(t.b==-1)t.d=!0;else{for(r=!1,A=t.a,n=0,P=A.length;n<P;++n)if(e=A[n],!e)r=!0;else if(!Mh(e))return!1;t.d=!r}return t.d}function hY(t){var e,A,n,P,r,i;if(P=tY(t),r=h(dE,h0,115,0,0,1),e=0,n=P.length,n==0)return r;for(i=Vj(P[0]),A1(i.d,y4)||(r[e++]=i),A=1;A<n;A++)r[e++]=Vj(P[A]);return r}function jk(t,e,A){for(var n,P;A<0;)A=A+360<<16>>16;for(;A>=360;)A=A-360<<16>>16;n=e.a,A!=(t.j==null?-1:t.j[n])&&(P=A-(t.j==null?-1:t.j[n]),kZ(t,e,Q1*P/180),zm(t,n,A))}function BQ(t){var e,A,n;if(!t.a)return null;for(t.e||xR(t,1),e=null,n=new Wt(t.a);n.a<n.c.a.length;)A=t1(n),!A.b&&(!e||e.e>A.e)&&(e=A);return e?e.b=!0:t.a=null,e}function pk(t){var e,A,n,P;for(n=-1,P=It,e=0;e<t.k.f;e++)t.b[e]||(A=t.a[e],Qe(t.k,e)&&(A+=cn),O(t.k,e)==0?A+=1056964608:A+=O(t.k,e)<<24,P>A&&(P=A,n=e));return n}function of(t,e,A){var n,P;if(e<t.f&&i0(t.p,e)){for(P=(ut(t,7),t.p),n=0;n<P.j.a.length;n++)if(!(N(P.k,n).length!=A||!yA(P,n,e))&&t.b[n]==0)return!0}return!1}function cY(t,e){var A,n;if(n=K1(e),A=!1,n==null||!n.startsWith(\"$RXN\"))throw At(new V1(\"'$RXN' tag not found\"));return A1(n,nM)?A=g$(t,e,!1):A=O$(t,e,!1),A}function Ck(t,e,A){if(t.f[e])return 0;if(t.a){if(Mt(t.j,e)!=3)return 0}else if(Mt(t.j,e)>3)return 0;return K(t.j,e)==6?(A&&E0(t.j,e,1),2):K(t.j,e)==5?4:0}function ZA(t,e,A){var n,P,r,i,f,D,Q,U;for(i=-1,P=wP(t,t.q,t.r,wn),f=Ve,D=P*P/12,n=0;n<t.q;n++)Q=t.J[n].a,U=t.J[n].b,r=(e-Q)*(e-Q)+(A-U)*(A-U),r<D&&r<f&&(f=r,i=n);return i}function Mk(t,e){var A,n,P,r,i,f;for(n=t,P=0,r=n.length;P<r;++P)if(A=n[P],e.j[A]!=0)return!1;for(i=p1(e,t[0]),f=1;f<t.length;f++)if(p1(e,t[f])!=i)return!1;return!0}function Hk(t,e,A){var n,P;return t.L.q==0?null:(t.v=UR(t),n=t.R.c*V8(t.L),P=new Ws(t.v,e,n,A),P.c==1&&P.a==0&&P.b==0?P=null:(Eu(P,t.R),Nu(P,t.v)),c5(t,e,n,A),P)}function wY(t){var e,A,n,P;for(ut(t,1),P=0,e=0;e<t.q;e++)n=t.A[e]!=0?t.A[e]:U9[t.C[e]],P+=n+xt(t,e)*U9[1],t.C[e]>=171&&t.C[e]<=190&&(A=t.e[e],A>2&&(P-=(A-2)*U9[1]));return P}function Vk(t,e,A){var n,P,r,i,f,D;for(P=0,r=0;r<t.j[e];r++)if(n=t.i[e][r],n!=A){for(i=0,f=0;f<t.j[n];f++)D=t.i[n][f],D!=e&&_e(t,t.k[n][f])&&t.j[D]>2&&++i;i==2&&++P}return P}function gY(t,e){var A,n,P,r,i,f,D,Q;for(D=-1,n=0,i=0;i<2;i++)for(A=t.D[i][e],f=0;f<t.e[A];f++)P=t.i[A][f],P!=t.D[1-i][e]&&(r=t.k[A][f],Q=CQ(t,r,P),n<Q&&(n=Q,D=r));return D}function dY(t,e){var A,n,P,r,i,f;for(A=new f1,n=0;n<e.q;n++)if(e.e[n]>1)for(P=0;P<e.e[n];P++)for(i=e.i[n][P],r=P+1;r<e.e[n];r++)f=e.i[n][r],mt(A,new wm(t,e,i,n,f));return A}function BY(t,e){var A,n,P,r;for(A=1;A<e.q;A++)for(n=0;n<A;n++)!t[A][n]&&(t[A][n]=new TF(O9(A,n),(r=e.C[A],(r<(c2(),IA).length?IA[r]:2)+(P=e.C[n],P<IA.length?IA[P]:2))))}function vY(t){var e,A,n,P,r;for(r=new Sg,A=t,n=0,P=A.length;n<P;++n)e=A[n],r.a?J(r.a,r.b):r.a=new Fn(r.d),hg(r.a,e);return r.a?r.e.length==0?r.a.a:r.a.a+(\"\"+r.e):r.c}function Hh(t,e){var A,n,P;return P=-1,n=-1,(t.G&128)!=0||(E8(t.L,e)&&(P=Ae(t.L,e),n=VA(t.L,e)),A=Us(t.L,e),A!=-1&&(P=cP(t.L,A),n=$i(t.L,A)),P!=-1&&P!=0&&(P|=n<<8)),P}function Vh(t,e,A,n,P,r,i,f){var D,Q;for(Q=1;Q<f;Q++){for(D=i[Q];D<i[Q+1];D++)A[D]=r[P[D]]+(A[n[D]]<<8);if(NR(t,e,A,n,P,i,Q),A[1]!=A[2])return!0;Q>1&&iR(A,n,i,Q)}return!1}function Ek(t,e,A){var n,P;if(A[0]=0,t[e]==43||t[e]==45){for(P=t[e],n=1,++A[0];t[e+A[0]]==P;)++n,++A[0];return n==1&&Zn(t[e+1]&w1)&&(n=t[e+1]-48,++A[0]),P==43?n:-n}return 0}function Z9(t,e,A){var n,P,r,i,f;for(mJ(t),P=(t.i==null&&(t.i=h(MV,h0,27,0,0,1)),t.i),r=0,i=P.length;r<i;++r)n=P[r],Z9(n,e,\"\t\"+A);f=t.e,f&&Z9(f,e,A)}function Eh(t,e){var A,n,P;for(P=h(Ee,PA,6,t.d.length,15,1),n=h(Ee,PA,6,t.d.length,15,1),A=0;A<t.d.length;A++)P[A]=PO(lL(e,t.a[A]),t.e[A]),n[A]=Dl[t.e[A]];return new O7(P,n)}function Sh(){Sh=B1;var t,e,A,n;for(Uc=h(yt,wt,6,25,15,1),oc=h(yt,wt,6,33,15,1),n=152587890625e-16,e=32;e>=0;e--)oc[e]=n,n*=.5;for(A=1,t=24;t>=0;t--)Uc[t]=A,A*=.5}function Sk(t,e){var A,n,P,r,i;for(P=-1,r=Ve,n=0;n<t.e.length;n++)i=Q1*t.e[n]/180,A=w.Math.abs(e-i),A>Q1&&(A=F0-A),A/=10+w.Math.sqrt(t.b[n]),r>A&&(r=A,P=n);return P}function FY(t,e,A){var n,P,r;if(n=A[e],n!=-1&&d0(t.a,n)!=0&&yK(t,e,n,A)){if(r=d0(t.b,e),P=d0(t.a,n),r==3){if(P==1||P==2)return 5}else if(P==3||qY(t,e,A)==(r==P))return 5}return 0}function mY(t){var e,A,n;return G(t,0)>=0?(A=Mn(t,Of),n=Y9(t,Of)):(e=DA(t,1),A=Mn(e,5e8),n=Y9(e,5e8),n=O1(M1(n,1),V(t,1))),Y(M1(n,32),V(A,h1))}function kY(t,e){P9();var A,n;for(n=(ke(),N2),A=t;e>1;e>>=1)(e&1)!=0&&(n=bP(n,A)),A.d==1?A=bP(A,A):A=new Zm(MR(A.a,A.d,h(F,k,6,A.d<<1,15,1)));return n=bP(n,A),n}function ls(t,e){var A,n;for(U1(e),n=t.b.a.length,mt(t.b,e);n>0;){if(A=n,n=(n-1)/2|0,t.a.Rb(N(t.b,n),e)<=0)return q9(t.b,A,e),!0;q9(t.b,A,N(t.b,n))}return q9(t.b,n,e),!0}function n2(t,e){var A,n,P,r;for(l1(t.j,e)==1&&(w0(t.j,e,2),t.k+=2),P=0;P<2;P++)for(A=z(t.j,P,e),t.d[A]=!1,r=0;r<O(t.j,A);r++)n=Ot(t.j,A,r),t.e[n]&&(t.e[n]=!1,--t.c)}function bY(t){var e,A,n,P,r;for(A=0;A<t.j.g;A++)if(dt(t.j,A)==2){for(P=0;P<2;P++)if(e=z(t.j,P,A),K(t.j,e)<=8){for(r=0;r<O(t.j,e);r++)if(n=Ot(t.j,e,r),t.e[n]){Pf(t,e);break}}}}function RY(t,e){var A,n,P,r,i,f;if(!(e.length<=0||e[0]<64))for($o(t,e,0),f=nt(t,4),P=nt(t,1)==1,r=nt(t,1)==1,A=0;A<t.g.f;A++)i=nt(t,f),n=P,P&&r&&(n=nt(t,1)==1),Ze(t.g,A,i,n)}function jY(t,e,A,n,P){var r,i;for(r=0,i=0;i<P;i++)r=O1(r,l0(V(e[i],h1),V(n[i],h1))),t[i]=zt(r),r=q0(r,32);for(;i<A;i++)r=O1(r,V(e[i],h1)),t[i]=zt(r),r=q0(r,32)}function pY(t,e,A,n,P){var r,i;if(r=O3(t.a,t.b,P),i=Wo(O3(e.a,e.b,P)),n.containsKey(r)){if(A)throw At(new ro(\"Duplicate key \"+r));n.put(r,null.vd(n.get(r)))}else n.put(r,i)}function CY(t){var e,A,n;for(e=0;e<t.R.f;e++)!Fr(t.R,e)&&t.db[e]==3&&Xo(t.R,e,!0);for(A=0;A<t.R.g;A++)t.o[A]==3&&(n=dt(t.R,A),n==1?Xo(t.R,z(t.R,0,A),!0):n==2&&w0(t.R,A,386))}function qh(t,e,A,n){var P,r,i;if(n==0)sA(e,0,t,A,t.length-A);else for(i=32-n,t[t.length-1]=0,r=t.length-1;r>A;r--)t[r]|=e[r-A-1]>>>i,t[r-1]=e[r-A-1]<<n;for(P=0;P<A;P++)t[P]=0}function g0(t,e){var A,n,P;if(e<0||e>999){J(t.a,\"  ?\");return}for(A=!1,n=0;n<3;n++)P=e/100|0,P==0?n==2||A?Oe(t.a,48):Oe(t.a,32):(Oe(t.a,48+P&w1),A=!0),e=10*(e%100)}function qk(t,e,A,n){gh(),this.c=ED(t,oV,this),this.d=e,this.e=A,this.a=n,this.k=K(this.e,n),this.g=ye(this.e,n),this.j=br(this.e,n),this.i=FA(this.e,n),this.n=_n(this.e,n),$j(this)}function Ih(t,e,A,n,P){var r,i,f,D;for(r=-1,i=-1,D=0;D<Mt(t.e,e);D++)if(f=Ot(t.e,e,D),f==A||f==n)if(r==-1)r=D;else{i=D;break}t.a[e][i][r]==0&&(t.a[e][i][r]=P,t.d[e]+=P,++t.c[e])}function MY(t,e){var A,n,P;return P=h(F,k,6,2,15,1),D1(t,e[1],e[2])!=-1?(P[0]=e[2],P[1]=e[1]):(A=h(F,k,6,16,15,1),n=l2(t,A,e[1],e[2],15,null,null),P[0]=A[1],P[1]=A[n-1]),P}function HY(t,e){try{return e?(t=Xn(t),VR(t,!0),wa(t),me(new BA(t))):me(new BA(t))}catch(A){if(A=t0(A),Zt(A,27))return x1(),null;throw At(A)}}function Ik(t,e,A){a5(),sB.call(this,t,e),this.j=1,this.k=10,this.n=400,this.f=400,this.i=!0,this.d=\"black\",this.b=new f1,this.a=new f1,this.c=new V0,this.e=new eT(12),this.g=A,++I2}function VY(t){var e,A,n,P,r;for(A=0,Qi(t),ut(t,7),e=0;e<t.f;e++)try{r=ny(t,e,6241),P=(n=a9(Yf,oQ(r)),n<0?-1:n),P!=-1&&(A+=K4[P])}catch(i){if(i=t0(i),!Zt(i,19))throw At(i)}return A}function k0(t){var e,A;return t>=Q0?(e=55296+(t-Q0>>10&1023)&w1,A=56320+(t-Q0&1023)&w1,String.fromCharCode(e)+(\"\"+String.fromCharCode(A))):String.fromCharCode(t&w1)}function P2(t,e){var A;return w.Math.abs(t)>w.Math.abs(e)?(A=e/t,A=w.Math.abs(t)*w.Math.sqrt(1+A*A)):e!=0?(A=t/e,A=w.Math.abs(e)*w.Math.sqrt(1+A*A)):A=0,A}function tA(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!ar(A))return!1}}return ar(t.C[e])}function EY(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!ei(A))return!1}}return ei(t.C[e])}function SY(){iy();var t,e,A,n,P,r,i,f,D;for(il=new lP,i=b4,f=0,D=i.length;f<D;++f)for(r=i[f],P=o8(r[0],\";\"),e=P,A=0,n=e.length;A<n;++A)t=e[A],ze(il,ef(t.toLowerCase(),\"-\"),r[1])}function xk(t){Bs();var e,A,n,P,r;for(ut(t,7),P=h(rt,ft,6,t.g,16,1),n=0,A=0;A<t.g;A++)W_(t,A)&&(P[A]=!0,++n);for(r=h(F,k,6,n,15,1),n=0,e=0;e<t.g;e++)P[e]&&(r[n++]=e);return r}function qY(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,a1(t.b,e)==0)for(f=1;f<O(t.b,e);f++)for(Q=0;Q<f;Q++)n=_(t.b,e,f),P=_(t.b,e,Q),r=A[n],i=A[P],r!=-1&&i!=-1&&r>i^n>P&&(D=!D);return D}function xh(t,e,A){var n,P;for(P=!1,n=0;n<t.V.f;n++)C1(t.V,n)!=0&&(A&&!Bn(t.V,n)||e&&Bn(t.V,n))&&(P||(z1(t),P=!0),Ze(t.V,n,0,!1));P&&(e||hQ(t),kL(t,w.Math.max(t.eb,1)))}function Nk(){Nk=B1,cl=B(d(F,1),k,6,15,[0,2,1,3]),_V=B(d(it,1),Dt,2,6,[\"plain\",\"italic\",\"bold\",\"italics & bold\"]),WV=B(d(it,1),Dt,2,6,[\"8\",\"9\",\"10\",\"12\",\"14\",\"18\",\"24\",\"32\"])}function Ts(t,e){var A,n;if(!e)return null;for(n=h(F,k,6,(sr.length+31)/32|0,15,1),e=hk(e),Dn(t.g,e),A=0;A<sr.length;A++)Ln(t.g,q2[A]),sn(t.g,1,4)>0&&(n[A/32|0]|=1<<31-A%32);return n}function Ok(t,e){var A,n,P,r;for(A=h(F,k,6,t.j[e]-EL(t,e),15,1),r=0,P=0;P<t.j[e];P++)n=t.i[e][P],gt(V(t.B[n],Pe),0)||(A[r++]=t.C[n]);return A.sort(Fe(u0.prototype.gd,u0,[])),A}function hs(t,e){var A;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=0;A<t.length;A++){if(e.length==A)return 1;if(t[A]!=e[A])return t[A]<e[A]?-1:1}return e.length>t.length?-1:0}function cs(t,e){var A;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=0;A<t.length;A++){if(e.length==A)return 1;if(t[A]!==e[A])return t[A]<e[A]?-1:1}return e.length>t.length?-1:0}function IY(t,e,A,n){var P,r;for(r=e,P=r.c==null||t.a.Rb(A.c,r.c)>0?1:0;r.a[P]!=A;)r=r.a[P],P=t.a.Rb(A.c,r.c)>0?1:0;r.a[P]=n,n.b=A.b,n.a[0]=A.a[0],n.a[1]=A.a[1],A.a[0]=null,A.a[1]=null}function xY(t){var e,A;try{return A=new vd(t),xb(A,4e3,LU),is(A,A.i)}catch(n){if(n=t0(n),Zt(n,185))return NaN;if(Zt(n,19))return e=n,Z9(e,(x1(),gi),\"\"),NaN;throw At(n)}}function Gk(t,e){var A,n,P,r,i;for(r=e.length,i=h(F,k,6,r,15,1),n=0;n<r;n++)for(A=n==r-1?e[0]:e[n+1],P=0;P<O(t.i,e[n]);P++)if(_(t.i,e[n],P)==A){i[n]=Ot(t.i,e[n],P);break}return i}function ws(t,e,A){var n,P;if((t.u[e]&hn)==0||(t.u[A]&hn)==0)return!1;for(P=(ut(t,7),t.p),n=0;n<P.j.a.length;n++)if(N(P.k,n).length==5&&yA(P,n,e)&&yA(P,n,A))return!0;return!1}function NY(t){var e,A;return t.f||(A=new tu,t.a&&(A.a=!0),t.f=KB(A,(e=t.g.a,e)),t.f&&(t.f.P==null||t.f.P.length==0)&&$2(t.f,t.e!=-1&&t.c!=null?t.c[t.e]:t.f?t.f.P:null)),t.f}function OY(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,a1(t.g,e)==0)for(f=1;f<O(t.g,e);f++)for(Q=0;Q<f;Q++)n=_(t.g,e,f),P=_(t.g,e,Q),r=C1(t.g,n),i=C1(t.g,P),A[r]>A[i]^n>P&&(D=!D);return D}function GY(t,e){var A;for(A=0;e<t.length&&(t[e]!=93||A!=0);)t[e]==91?++A:t[e]==93&&--A,++e;if(e==t.length)throw At(new V1(\"SmilesParser: No matching closing bracket found.\"));return e+1}function Jk(t,e,A){return t.L!=null&&t.L[e]!=null&&t.L[e][A]?null:t.I[e]==0&&t.B[A]==0?(O(t.u,A)!=0&&(t.H[t.G[e]]=!0),O(t.D,e)!=0&&(t.A[t.w[A]]=!0),new gD(e,A)):null}function zk(t){var e,A,n;for(n=new dL(\", \",\"[\",\"]\"),A=t.Tb();A.ad();)e=A.bd(),Tv(n,J1(e)===J1(t)?\"(this Collection)\":e==null?Pr:$D(e));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c}function r2(t){var e,A,n;if(fl==null){if(e=_D(\"/resources/csd/\"+t),e)return fl=\"csd/\",new nn(new Fi((n=e,c0(),n)));fl=\"cod/\"}return new nn(new Fi((A=_D(\"/resources/\"+fl+t),c0(),A)))}function JY(t){var e,A;try{for(t=Xn(t),ds(t),e=t.r,A=0;A<e;A++)t.H[A]=1,t.T=0;return me(new BA(t))}catch(n){if(n=t0(n),Zt(n,27))return x1(),null;throw At(n)}}function Yk(t,e){var A,n,P,r;for(n=0,P=t.length;n<P;n++){r=t[n];try{r[1]?r[0].vd()&&(e=cx(e,r)):r[0].vd()}catch(i){if(i=t0(i),Zt(i,27))A=i,qx(Zt(A,163)?A.Lc():A);else throw At(i)}}return e}function Kk(t){var e,A,n,P,r,i,f,D;for(f=h(F,k,6,t.f,15,1),D=(ut(t,7),t.p),r=0;r<w.Math.min(32,D.j.a.length);r++)for(i=N(D.j,r),A=i,n=0,P=A.length;n<P;++n)e=A[n],f[e]|=1<<r;return f}function Nh(t){var e,A,n,P;if(A=zt(DA(t,32)),A==0)return n=zt(t)>>>0,n.toString(16);e=h(l9,a0,6,17,15,1),P=17;do e[--P]=xx(zt(t)&15),t=DA(t,4);while(G(t,0)!=0);return tP(e,P,17-P)}function G1(t,e){var A,n,P,r,i,f;for(t.$b(1),i=!1,n=!1,f=0,P=0;P<t.e[e];P++)(!t.K||!Qe(t,t.i[e][P]))&&(r=t.n[e][P],f+=r,r>1&&(i=!0),A=t.k[e][P],t.H[A]==8&&(n=!0));return n&&!i&&++f,f}function vQ(t,e){var A,n,P,r;for(l1(t.k,e)==1&&w0(t.k,e,2),P=0;P<2;P++)for(A=z(t.k,P,e),z0(t.k,A)&&(zn(t.k,A,!1),--t.b),r=0;r<O(t.k,A);r++)n=Ot(t.k,A,r),t.g[n]&&(t.g[n]=!1,--t.c)}function Oh(t,e,A){var n,P,r,i,f;for(P=0,i=new Wt(A);i.a<i.c.a.length;)r=t1(i),r.length!=0&&(f=GL(e,r).b,P<f&&(P=f));return n=t.c*fU*(A.a.length-1)+t.c,new QA(t.i[0].a,t.i[0].b-t.c/2,P,n)}function Le(t){if(g4==null&&(g4=new RegExp(\"^\\\\s*[+-]?(NaN|Infinity|((\\\\d+\\\\.?\\\\d*)|(\\\\.\\\\d+))([eE][+-]?\\\\d+)?[dDfF]?)\\\\s*$\")),!g4.test(t))throw At(new YP(g2+t+'\"'));return parseFloat(t)}function Gh(t){var e,A;for(A=R1(F,[nA,D0],[28,7],0,[2,32],2),e=0;e<t.R.f;e++)t.M[e]&&(t.bb[e]==1?A[0][t.ab[e]]=rf(A[0][t.ab[e]],e):t.bb[e]==2&&(A[1][t.ab[e]]=rf(A[0][t.ab[e]],e)));return A}function gs(t){var e,A,n,P;for(P=new nn(new Fi((A=_D(t),c0(),A))),n=new nu;;)try{if(e=K1(P),e!=null)js(n,e);else break}catch(r){if(r=t0(r),Zt(r,75))break;throw At(r)}return n}function Xk(t,e){var A,n,P;return e&=63,e<22?(A=t.l<<e,n=t.m<<e|t.l>>22-e,P=t.h<<e|t.m>>22-e):e<44?(A=0,n=t.l<<e-22,P=t.m<<e-22|t.l>>44-e):(A=0,n=0,P=t.l<<e-44),S0(A&x0,n&x0,P&aA)}function Zk(t,e){var A,n,P,r,i;if(A1(t.a,\"Helvetica\")){for(r=0,n=0,P=e.length;n<P;n++)A=(Xt(n,e.length),e.charCodeAt(n)),r+=(A<128?i=gE[A]:i=wA,i*t.b/20);return r}else return DY(t,e)}function Wk(t,e,A){var n,P,r,i;return P=t.c[A][0]*Q1/180,r=t.c[A][1]*Q1/180,i=t.e[A]*Q1/180,e<i-Q1?e+=F0:e>i+Q1&&(e-=F0),n=(i-e)/(i-(e<i?P:r)),n<1?0:n<2?(n-=1,n*n):1}function zY(t,e){var A,n,P,r,i;if(t.e!=null)for(A=C5(t)/t.p.c,P=t.e,r=0,i=P.length;r<i;++r)n=P[r],pS(n,t.f),n.r=A/n.R.c,W5(n,e);if(t.b!=null)for(P=t.b,r=0,i=P.length;r<i;++r)n=P[r],W5(n,e)}function ne(t,e){var A,n,P,r;for(A=!1,P=!1,n=e;n<t.length;n++)if(r=(Xt(n,t.length),t.charCodeAt(n)),r==40?A=!0:r==41?A=!1:r==34&&(P=!P),!A&&!P&&(r==32||r==9))return n;return-1}function YY(t){oo();var e,A,n,P;for(h5(t,1),n=t.q,A=h(it,Dt,2,n,6,1),e=0;e<n;e++)P=Xn(t),u8(P,e,(Y1(),X0)[P.C[e]]+\"*\"),P.C[e]==1?K0(P,e,H4):jr(P,e,P.A[e]+5),eO(P),A[e]=me(new EA(P,8));return A}function ds(t){var e,A;for(ut(t,15),t.L=!1,e=0;e<t.q;e++)t.u[e]&=By,(t.u[e]&3)!=0?t.u[e]|=nU:t.u[e]&=dy;for(A=0;A<t.r;A++)(t.F[A]&3)!=0&&dt(t,A)==2?t.H[A]=386:t.H[A]&=-385;t.T&=-249}function FQ(t,e,A,n,P){var r;n|=o1,r=AF(A),n!=-1&&(ae(e,n),RT(e,r[0],r[1],dn,dn)),A==20?ZL(e,t.c,0,t.d*84,84,84,r[0],r[1],dn,dn):ZL(e,P?t.g:t.i,(r[0]-v8)*t.j,(r[1]-v8)*t.j,84,84,r[0],r[1],dn,dn)}function i2(t,e){var A,n,P,r;for(P=!1,n=0;n<t.R.g;n++)JQ(t,n,1)&&(t.q[n]=t.L,e&&YZ(t,n),P=!0);for(r=!1,A=0;A<t.R.f;A++)ey(t,A,1)&&(t.ib[A]=t.L,e&&R_(t,A),r=!0);return r&&(t.L=!t.L),P||r}function W9(t,e){return t.q>=t.M&&kQ(t,t.M*2),t.C[t.q]=0,K0(t,t.q,e),t.s[t.q]=0,t.u[t.q]=0,t.B[t.q]=0,t.w[t.q]=0,Bo(t.J[t.q],0,0,0),t.v!=null&&(t.v[t.q]=null),t.t!=null&&(t.t[t.q]=null),t.T=0,t.q++}function KY(t){var e,A,n,P,r;for(r=new Lo(t.g,t.f),P=h(F,k,6,t.g.q,15,1),A=0;A<t.g.q;A++)P[A]=C1(t.g,A);for(n=h(F,k,6,t.f.q,15,1),e=0;e<t.f.q;e++)n[e]=C1(t.f,e);return-Ks(r,ah(r,P,n))*.25}function Ai(t){var e,A,n,P;for(P=new nn(new Fi((n=_D(t),c0(),n))),e=new f1;;)try{if(A=K1(P),A!=null)e.a.push(A);else break}catch(r){if(r=t0(r),Zt(r,75))break;throw At(r)}return e}function XY(t,e){var A,n,P;for(A=h(F,k,6,t.e.length,15,1),P=0;P<t.e.length;P++)n=M1(yc[t.a[P]],t.b[P]),gt(V(e.c[t.d[P]],n),0)?A[P]=zt(q0(V(e.b[t.d[P]],n),t.b[P])):A[P]=-1;return A}function ZY(t,e){i8();var A,n,P,r;for(n=h(rt,ft,6,e.q,16,1),A=0;A<e.f;A++)if(!n[A]&&e.o[A]==2&&e.C[A]<=8){for(P=NZ(A,e),r=0;r<P.length;r++)n[P[r]]=!0;P[0]!=P[P.length-1]&&mt(t,new C7(P))}}function Jh(t,e,A,n,P,r,i,f){var D,Q;return D=ZA(t,e,A),D==-1?(t.q>=t.M&&kQ(t,t.M*2),D=W9(t,n),Bo(t.J[D],e,A,0),t.A[D]=P,XA(t,D,r),Ne(t,D,i),u8(t,D,f),!0):(Q=Bf(t,D,n,P,r,i),Q=Q|u8(t,D,f),Q)}function _k(t,e,A,n){var P,r,i,f;for(ut(e,1),r=0;r<A;r++)n[r]!=-1&&t.C[r]!=1&&t.e[r]!=Mt(e,n[r])&&(P=Uf(t,r,!1),P!=-1&&(f=Uf(e,n[r],!1),P!=f&&(i=br(e,n[r]),(i==-1||i<P)&&XA(e,n[r],P))))}function WY(t,e,A){var n,P,r;for(r=0;r<t.e.length;r++)P=w.Math.sqrt((t.a[r]-e)*(t.a[r]-e)+(t.b[r]-A)*(t.b[r]-A)),n=0-on(e,A,t.a[r],t.b[r]),t.a[r]=e+P*w.Math.sin(n),t.b[r]=A+P*w.Math.cos(n)}function _Y(t,e,A){var n,P,r,i,f;return r=(P=t/e,P>0?w.Math.floor(P):w.Math.ceil(P)),i=t%e,f=$8(t*e,0),i!=0&&(n=$8(w.Math.abs(i)*2,w.Math.abs(e)),r+=EQ(vt(r)&1,f*(5+n),A)),new a3(r)}function zh(t,e){var A,n,P;for(C9.call(this,t),A=0,P=0;P<t.length;P++)e.j[t[P]]!=1&&++A;if(A>2)for(this.a=h(F,k,6,A,15,1),A=0,n=0;n<t.length;n++)e.j[t[n]]!=1&&(this.a[A++]=t[n]);else this.a=t}function ni(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.g;f++)(ee(t.R,t.C[f])&n)!=0&&++D;if(D!=0)for(eP(t,e),Jt(t,D,A),i=0;i<t.R.g;i++)Q=ee(t.R,t.C[i])&n,Q!=0&&(Jt(t,i,A),P!=1&&Jt(t,Q>>r,P))}function Yh(t,e){var A,n,P;if(t.v==null||t.v[e]==null)return gt(V(t.B[e],1),0)?\"\":X0[t.C[e]];for(P=\"\",n=0;n<t.v[e].length;n++)n>0&&(P=(U1(P),P+(U1(\",\"),\",\"))),A=t.v[e][n],P=ju(P,X0[A]);return P}function Lf(t){var e,A,n,P;for(ut(t,7),n=0;n<t.g;n++)(t.H[n]==257||t.H[n]==129)&&(t.H[n]=1);for(e=0;e<t.f;e++)Ay(t,e);for(P=0;P<t.g;P++)Nj(t,P);for(A=0;A<t.g;A++)t.H[A]==2&&(t.F[A]&3)==3&&(t.H[A]=386)}function $Y(t,e,A){var n,P,r;if(e.c!=null)for(P=0;P<e.c.length;P++)for(r=0;r<O(t.k,e.a);r++)e.c[P]==_(t.k,e.a,r)&&(n=Ot(t.k,e.a,r),e.d[P]||Gj(t,n,e.a,A),t.e[n]>9&&(A.a+=\"%\"),g3(A,t.e[n]))}function aY(t,e){var A,n,P,r,i;if(t.i.K){if(gt(V(o0(t.i,e),1),0))return!1;if(A=MA(t.i,e),A!=null){for(P=A,r=0,i=P.length;r<i;++r)if(n=P[r],!ar(n))return!1;return!0}}return ar(K(t.i,e))}function $k(t,e,A,n,P){var r,i,f;for(r=!0,i=0;i<n;i++)r=r&A[i]==0;if(P==0)sA(A,n,t,0,e),i=e;else{for(f=32-P,r=r&A[i]<<f==0,i=0;i<e-1;i++)t[i]=A[i+n]>>>P|A[i+n+1]<<f;t[i]=A[i+n]>>>P,++i}return r}function tK(t){var e,A;(t.G&32)==0&&(A=vR(t.L),A!=null&&(t.w.a==0&&t.w.b==0&&(e=t.R.c*V8(t.L),t.v=UR(t),Cm(t,e),c5(t,null,e,0)),t.Cb(vt(t.A)),t.L.O!=1&&W1(t,448),t.tb(A,t.w.a,t.w.b+jf*t.A)))}function ak(t){var e,A,n;if(cu(this),!(t==null||t.length==0))for(e=0,A=t.indexOf(k0(10));A!=-1;)n=MX((pt(e,A,t.length),t.substr(e,A-e))),n&&this.a.push(n),e=A+1,A=t.indexOf(k0(10),e)}function eK(t,e,A){var n,P;switch(P=A&127,n=Fk(t,e),P){case 1:case 8:return n>=1;case 2:return n>=2;case 4:return n>=3;case 32:return n>=4;case 64:return n>=5;case 16:return!0;default:return!1}}function sf(t,e,A,n){var P,r,i;for(i=0;i<t.e.length;i++)r=w.Math.sqrt((t.a[i]-e)*(t.a[i]-e)+(t.b[i]-A)*(t.b[i]-A)),P=on(e,A,t.a[i],t.b[i])+n,t.a[i]=e+r*w.Math.sin(P),t.b[i]=A+r*w.Math.cos(P)}function Kh(t,e){var A,n,P;return n=e.g-v8,P=e.i-v8,n<0||n>=2*dn||P<0||P>=17*dn?-1:(A=17*vt(n/dn)+vt(P/dn),A>=0&&A<34&&(A!=t.b||A==20||A==33)&&(A!=19||(t.a.U&4)!=0)&&(A!=21||(t.a.U&8)!=0)?A:-1)}function AK(t){var e;t.c==null&&(e=J1(t.b)===J1($4)?null:t.b,t.d=e==null?Pr:Yv(e)?e==null?null:e.name:H8(e)?\"String\":Uu(_L(e)),t.a=t.a+\": \"+(Yv(e)?e==null?null:e.message:e+\"\"),t.c=\"(\"+t.d+\") \"+t.a)}function nK(t,e){var A,n,P,r;return e&=63,A=t.h&aA,e<22?(r=A>>>e,P=t.m>>e|A<<22-e,n=t.l>>e|t.m<<22-e):e<44?(r=0,P=A>>>e-22,n=t.m>>e-22|t.h<<44-e):(r=0,P=0,n=A>>>e-44),S0(n&x0,P&x0,r&aA)}function PK(t,e,A,n){var P,r;P=new L1,r=new L1,P.a=e.a,P.c=e.c,P.b=(e.a+e.b)/2,P.d=(e.c+e.d)/2,r.a=P.b,r.c=P.d,r.b=e.b,r.d=e.d,cA(t,P)&&(W1(t,t.p[A]),t.qb(P)),cA(t,r)&&(W1(t,t.p[n]),t.qb(r)),W1(t,t.Q)}function tb(t,e,A){var n,P;return n=ZA(t,e,A),n!=-1?((t.u[n]&512)!=0?nQ(t):wQ(t,n),t.T=0,!0):(P=df(t,e,A),P!=-1?((t.u[t.D[0][P]]&t.u[t.D[1][P]]&512)!=0?nQ(t):Zh(t,P),t.T=0,!0):!1)}function eb(t,e,A){var n,P,r;for(t.U=e,t.V=A,t.Q=h(yt,wt,6,t.q,15,1),t.R=h(yt,wt,6,t.q,15,1),n=0;n<t.q;n++)P=e-t.J[n].a,r=A-t.J[n].b,t.R[n]=w.Math.sqrt(P*P+r*r),t.Q[n]=kA(e,A,t.J[n].a,t.J[n].b)}function Ab(t,e){var A,n,P,r;for(r=h(F,k,6,t.j[e]-EL(t,e),15,1),P=0,n=0;n<t.j[e];n++)A=t.i[e][n],gt(V(t.B[A],Pe),0)||(r[P++]=w.Math.abs(t.w[A]));return r.sort(Fe(u0.prototype.gd,u0,[])),r}function nb(t,e){var A,n,P,r,i;if(A=-1,t.o[e]==1){for(r=0;r<t.j[e];r++)if(t.n[e][r]==2){if(n=t.i[e][r],t.j[n]==2&&t.o[n]==2){for(i=0;i<2;i++)if(P=t.i[n][i],P!=e&&t.o[P]==1){A=n;break}}break}}return A}function rK(t,e){var A,n,P,r,i;for(i=new f1,r=0;r<e.q;r++)e.e[r]==3&&(A=e.i[r][0],n=e.i[r][1],P=e.i[r][2],mt(i,new YL(t,e,r,A,n,P)),mt(i,new YL(t,e,r,A,P,n)),mt(i,new YL(t,e,r,n,P,A)));return i}function K1(t){var e,A,n;if(A=bL(t),A==-1)return null;for(n=new V0,e=!1;!e;)if(A==10?e=!0:A==13&&(e=!0,A=bL(t),A!=10&&(t.a=A)),!e){if(A==-1)break;Oe(n,A&w1),A=bL(t)}return n.a}function iK(t,e,A){var n,P,r,i,f,D;if(D=N(t.b,e),t.d.length<=t.c.length)for(f=0;f<t.a;f++)A[t.d[f]]=t.c[D[f]];else{for(P=t.d,r=0,i=P.length;r<i;++r)n=P[r],A[n]=-1;for(f=0;f<t.a;f++)A[t.d[D[f]]]=t.c[f]}}function fK(t){return t.K++==64?!1:t.i?Mh(t.i.b)?!1:(co(t.I,0),co(t.B,0),U3(t.H),U3(t.A),rb(t),NS(t.i),t.q=gR(t),t.g=7,t.c=0,t.d=0,t.e=0,t.f=0,!0):(t.i=new Gg,!0)}function Pb(t,e,A){var n,P,r,i;if(i=dT(e),P=(n=t.a.get(i),n??h(uP,A0,1,0,5,1)),P.length==0)t.a.set(i,P);else if(r=OF(e,P),r)return r.fd(A);return P[P.length]=new ho(e,A),++t.c,++t.b.b,null}function M(t,e,A){var n=cU,P=n[t],r=P instanceof Array?P[0]:null;P&&!r?o=P:(o=iG(e),o.td=A,!e&&(o.ud=PD),n[t]=o);for(var i=3;i<arguments.length;++i)arguments[i].prototype=o;r&&(o.sd=r)}function Xh(t,e){var A,n;if((t.G&4224)!=0||(n=Hh(t,e),n==-1&&(A=nb(t.L,e),A!=-1&&(e=A,n=Hh(t,e))),n==-1))return t.p[e];switch(n&255){case 1:return 384;case 2:return 64;default:return 448}}function Zh(t,e){var A,n,P;for(n=0;n<2;n++){for(A=0,P=0;P<t.r;P++)P!=e&&(t.D[0][P]==t.D[n][e]||t.D[1][P]==t.D[n][e])&&++A;A==0&&(Zu(t,t.w[t.D[n][e]]),t.C[t.D[n][e]]=-1)}t.H[e]=512,mf(t),t.T=0}function DK(t,e){var A,n;if(!e)return null;for(n=h(NA,a0,6,(sr.length+63)/64|0,14,1),e=hk(e),Dn(t.g,e),A=0;A<sr.length;A++)Ln(t.g,q2[A]),sn(t.g,1,4)>0&&(n[A/64|0]=Y(n[A/64|0],M1(1,63-A%64)));return n}function uK(t,e,A,n){var P,r,i,f;for(f=h(F,k,6,t.o[e].f,15,1),V9(f,f.length,-1),r=dr(t.c,e),P=0;P<r.f;P++)A[P]!=-1&&(f[A[P]]=w.Math.abs(r.w[P]));for(i=0;i<f.length;i++)f[i]==-1&&(f[i]=n++);return f}function rb(t){var e,A,n,P,r,i,f,D,Q;for(Q=t.F.g,t.J=bn(Q,Q.length),e=t.v.g,t.C=bn(e,e.length),P=t.J,i=0,D=P.length;i<D;++i)A=P[i],t.o<A&&(t.o=A);for(n=t.C,r=0,f=n.length;r<f;++r)A=n[r],t.n<A&&(t.n=A)}function QK(t,e){var A,n,P,r,i,f,D,Q,U;if(t==null)return e;for(U=h(F,k,6,t.length+e.length,15,1),Q=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],U[Q++]=A;for(n=e,r=0,f=n.length;r<f;++r)A=n[r],U[Q++]=A;return U}function UK(t,e){switch(e){case 0:sb(t);return;case 1:z1(t),t.eb=w.Math.max(t.eb,6),n1(t.k),N1(t,new q1(t,1,!0));return;case 17:Dv(t),t.eb=w.Math.max(t.eb,2),n1(t.k),N1(t,new q1(t,1,!0));return}}function ib(t,e,A){var n,P,r,i,f,D,Q,U;for(Q=-1,P=0,f=0;f<2;f++)for(n=t.i[e][f],D=0;D<t.e[n];D++)r=t.i[n][D],r!=e&&(i=t.k[n][D],U=CQ(t,i,r),P<U&&(!A||!(t.H[i]==257||t.H[i]==129))&&(P=U,Q=i));return Q}function fb(t){var e,A,n,P;for(A=0,e=0,n=0;n<t.g.a.length+t.f.a.length;n++)P=n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length),P.r!=0&&(A+=P.r,e+=wP(P,P.q,P.r,(Y1(),wn))*P.r);return A==0?(Y1(),Y1(),wn):e/A}function oK(t,e,A,n){var P,r,i,f,D;for(i=h(rt,ft,6,t.length+1,16,1),D=h(F,k,6,n,15,1),f=0;f<n;f++)P=A==null?f:A[f],P!=-1&&(D[f]=t[P],i[D[f]]=!0);for(r=0;r<e.length;r++)i[e[r]]||(e[r]=0);return D}function LK(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(n=0,A*=A,f=0;f<e.q;f++){for(Q=e.J[f].a,L=e.J[f].b,i=!1,D=0;D<t.V.q;D++)if(U=kt(t.V,D),s=jt(t.V,D),P=U-Q,r=s-L,P*P+r*r<A){i=!0;break}i&&++n}return n==e.q}function mQ(){mQ=B1,new BP(255,255,255),new BP(128,128,128),new BP(0,0,0),new BP(0,255,0),new BP(255,255,0),new BP(255,200,0),new BP(255,0,0),new BP(0,255,255),new BP(0,0,255),new BP(255,0,255)}function sK(t,e,A){var n;return tb(t.V,e,A)?(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)),!0):(n=cJ(t,e,A),n?(Z8(t.I,n),t.v=null,t.eb=w.Math.max(t.eb,1),n1(t.k),!0):!1)}function yK(t,e,A,n){var P,r,i,f;if(O(t.b,e)!=O(t.a,A))return!1;for(r=0;r<O(t.b,e);r++){for(f=_(t.b,e,r),P=!1,i=0;i<O(t.a,A);i++)if(n[f]==_(t.a,A,i)){P=!0;break}if(!P)return!1}return!0}function Db(t,e){var A,n,P,r,i,f,D,Q,U;for(U=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],e[A]==0&&++U;if(U==0)return null;for(Q=h(F,k,6,U,15,1),U=0,n=t,r=0,f=n.length;r<f;++r)A=n[r],e[A]==0&&(Q[U++]=A);return Q}function lK(t,e){var A,n,P,r;for(t.j=new JA,n=0;n<e.g.a.length;n++)r=N(e.g,n),ut(r,1),l5(t.j,r,r.f,r.g,!r.K);for(t.d=new JA,A=0;A<e.f.a.length;A++)P=N(e.f,A),ut(P,1),l5(t.d,P,P.f,P.g,!P.K);Qi(t.j),Qi(t.d)}function TK(t,e){var A,n;return _j(t,e,!1)?t.s!=null?(t.B=new fT(t,t.o),$g(t.B,400),t.b=new Ji(new AD),Cj(t)):(n=new NQ(e),$U(n,t.v),A=yX(n,t.o),_s(t,A),A.p=\"SO#1\",A):null}function ub(t,e){var A,n,P,r,i,f;for(A=t.b.a.length,P=N(t.b,e);e*2+1<A&&(n=(r=2*e+1,i=r+1,f=r,i<A&&t.a.Rb(N(t.b,i),N(t.b,r))<0&&(f=i),f),!(t.a.Rb(P,N(t.b,n))<0));)q9(t.b,e,N(t.b,n)),e=n;q9(t.b,e,P)}function v1(t){var e,A,n;for(A=t.length,n=0;n<A&&(Xt(n,t.length),t.charCodeAt(n)<=32);)++n;for(e=A;e>n&&(Xt(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return n>0||e<A?(pt(n,e,t.length),t.substr(n,e-n)):t}function Wh(){Wh=B1,YV=B(d(it,1),Dt,2,6,[\"mutagenic\",\"tumorigenic\",\"irritant\",\"reproductive effective\"]),kU=B(d(it,1),Dt,2,6,[\"Mutagenicity\",\"Tumorigenicity\",\"Irritating effects\",\"Reproductive effects\"])}function Qb(t,e,A,n,P){var r,i,f,D,Q;for(r=A[n],Q=!1,f=0;f<e.f;f++)if(f!=n&&A[f]==r){Q=!0;break}if(!Q)return P;for(i=0;i<e.f;i++)(i==n||A[i]>r)&&++A[i];++P;do D=P,d_(t,e,A),P=HJ(t,A);while(D!=P);return P}function _h(t,e,A,n,P,r){var i,f,D,Q;if(i=n-A,i<7){gJ(e,A,n,r);return}if(D=A+P,f=n+P,Q=D+(f-D>>1),_h(e,t,D,Q,-P,r),_h(e,t,Q,f,-P,r),r.Rb(t[Q-1],t[Q])<=0){for(;A<n;)e[A++]=t[D++];return}lJ(t,D,Q,f,e,A,n,r)}function Ub(t,e){if(e instanceof Object)try{e.__java$exception=t;var A=t;Object.defineProperties(e,{cause:{get:function(){var n=A.hc();return n&&n.fc()}},suppressed:{get:function(){return A.gc()}}})}catch{}}function ob(t,e){var A,n,P;return n=t.a*t.a+t.b*t.b+t.c*t.c,P=e.a*e.a+e.b*e.b+e.c*e.c,n==0||P==0||(A=(t.a*e.a+t.b*e.b+t.c*e.c)/w.Math.sqrt(n*P),A>=1)?0:A<=-1?Q1:w.Math.acos(A)}function $h(t,e){var A,n,P,r;if(r=t.c.a.length,r==0)return-1;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=Kr(e,N(t.c,P)),A==0)return P;if(n==0)break;A<0?P-=n:P+=n}return-1}function ah(t,e,A){var n,P,r,i;for(r=h(F,k,6,t.b.f+1,15,1),V9(r,r.length,-1),P=0;P<A.length;P++)A[P]!=0&&(r[A[P]]=P);for(i=h(F,k,6,t.b.f,15,1),V9(i,i.length,-1),n=0;n<e.length;n++)i[n]=r[e[n]];return i}function Lb(t){var e,A;return t.d>0||(e=1,A=1,t.a<54?(t.a>=1&&(A=t.f),e+=w.Math.log10(w.Math.abs(A))):(e+=(t.a-1)*hU,x5((!t.c&&(t.c=kP(E1(t.f))),t.c),ii(e)).e!=0&&++e),t.d=vt(e)),t.d}function hK(t){var e;for(e=0;e<t.q;e++)switch(t.C[e]){case 1:case 5:case 6:case 7:case 8:case 9:case 14:case 15:case 16:case 17:case 33:case 34:case 35:case 52:case 53:continue;default:return!1}return!0}function cK(t){kf();var e,A,n,P,r,i;if(t==null)return null;for(e=h(q,I,6,t.length*8,15,1),n=0;n<t.length;n++)for(i=t[n],P=7;P>=0;P--)A=i&15,A>9&&(A+=7),e[n*8+P]=48+A<<24>>24,i>>=4;return rn((r=e,c0(),r))}function L0(t,e,A,n,P){var r,i,f,D,Q,U;for(r=Mt(t.e,e),D=O(t.e,e),Q=1;Q<r;Q++)for(i=Q<D?t.f[Ot(t.e,e,Q)]:0,U=0;U<Q;U++)t.a[e][Q][U]==0&&(f=U<D?t.f[Ot(t.e,e,U)]:0,(i==A&&f==n||i==n&&f==A)&&(t.a[e][Q][U]=P))}function wK(t){var e;for(e=0;0<=(e=t.indexOf(\"\\\\\",e));)Xt(e+1,t.length),t.charCodeAt(e+1)==36?t=(pt(0,e,t.length),t.substr(0,e)+\"$\"+HD(t,++e)):t=(pt(0,e,t.length),t.substr(0,e)+(\"\"+HD(t,++e)));return t}function gK(t,e,A,n){var P,r,i,f,D;for(D=new f1,r=0;r<e.q;r++)for(i=r+1;i<e.q;i++)P=new Oi(r,i),f=qr(A.a,P)!=null?qr(A.a,P):(X9(),x2),(f==(X9(),Ti)||f==x2)&&kn(new wT(e,r,i))<n&&mt(D,new Dj(t,e,r,i));return D}function t5(t,e,A){var n;n=t.D[0][e],t.D[0][e]=t.D[0][A],t.D[0][A]=n,n=t.D[1][e],t.D[1][e]=t.D[1][A],t.D[1][A]=n,n=t.H[e],t.H[e]=t.H[A],t.H[A]=n,n=t.F[e],t.F[e]=t.F[A],t.F[A]=n,n=t.G[e],t.G[e]=t.G[A],t.G[A]=n,t.T=0}function dK(t,e){var A,n,P;if(e.j==0){try{A=c1((P=t.b.Ec(),P.getSelectedItem()),o1,It)}catch(r){if(r=t0(r),Zt(r,40)){CD(t.c,\"Illegal text size.\");return}else throw At(r)}n=cl[B0(t.a)],kg(t.e,Gi(t.d),A,n)}Rr(t.c)}function BK(t){var e,A,n,P;for(t.Ab(2*t.S),P=new L1,n=0;n<t.L.r;n++)e=z(t.L,0,n),A=z(t.L,1,n),V3(t.L,n)&&(P.a=Z1(t.R,kt(t.L,e)),P.c=X1(t.R,jt(t.L,e)),P.b=Z1(t.R,kt(t.L,A)),P.d=X1(t.R,jt(t.L,A)),W1(t,-2),t.qb(P))}function Bs(){Bs=B1,Dl=B(d(yt,1),wt,6,15,[F0,Q1,p2,AA]),SV=B(d(F,2),D0,7,0,[B(d(F,1),k,6,15,[0,0,0,2]),B(d(F,1),k,6,15,[0,0,1,2]),B(d(F,1),k,6,15,[0,1,1,3]),B(d(F,1),k,6,15,[2,2,3,2])])}function vK(t){var e,A,n,P;for(n=-.5299999713897705,Qi(t),ut(t,7),e=0;e<t.f;e++){P=-1;try{P=ny(t,e,2144)}catch(r){if(r=t0(r),!Zt(r,19))throw At(r)}for(A=0;A<Kf.length;A++)if(P0(Ul[A],P)){n+=Kf[A];break}}return n}function sb(t){var e;t.I&&(t.I.a.length=0,t.eb=w.Math.max(t.eb,1),n1(t.k)),z1(t),e=t.V.K,ki(t.V),je(t.V,e),t.cb.q!=0?(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))):(t.eb=w.Math.max(t.eb,1),n1(t.k))}function yb(t,e){var A,n,P,r,i,f;for(r=h(F,k,6,t.q,15,1),n=0;n<t.q;n++)r[n]=n;P=t.q;do--P;while(P>=0&&e[P]);for(A=0;A<P;A++)if(e[r[A]]){f=r[A],r[A]=r[P],r[P]=f,i=e[A],e[A]=e[P],e[P]=i;do--P;while(e[P])}return r}function FK(t){kf();var e,A,n,P;if(t.length==0||(t.length&7)!=0)return null;for(n=h(F,k,6,t.length/8|0,15,1),A=0;A<t.length;A++)P=A/8|0,e=(Xt(A,t.length),t.charCodeAt(A)-48),e>16&&(e-=7),n[P]<<=4,n[P]+=e;return n}function _9(t,e,A){var n,P,r;if(t.length!=e.length)return-1;for(r=0,n=A.lc(),P=0;P<t.length-1;P++)if(r=hA(t[P],e[P],r,n+1,!0,A),n=hA(t[P],e[P],r,n+1,!1,A),r==-1||n==-1)return-1;return hA(t[P],e[P],r,n+1,!0,A)}function mK(t,e,A){var n,P,r,i,f,D,Q;P=vt(Z6*V8(t.V)),r=vt(kt(t.V,z(t.V,0,A))),f=vt(jt(t.V,z(t.V,0,A))),i=vt(kt(t.V,z(t.V,1,A))),D=vt(jt(t.V,z(t.V,1,A))),n=(Q=e.Jc(),Q.getLineWidth()),Ko(e,P),xr(e,r,f,i,D),Ko(e,n)}function lb(t){switch(t){case 6:return 1;case 53:return 2;case 33:return 3;case 34:return 4;case 35:return 5;case 15:return 6;case 16:return 7;case 17:return 8;case 7:return 9;case 8:return 10;case 9:return 11}return 0}function kK(t){var e;for(t.e=new D3,t.d=new Ng,XI(t,new fs(t,t.i)),e=Xn(t.i);!v7(t.d);)if(cz(bG(t.d),e),p$(t,e),t.e.a.c>=ott){x1(),\"\"+me(new BA(t.i));break}}function vs(t){var e,A;return t>-0x800000000000&&t<0x800000000000?t==0?0:(e=t<0,e&&(t=-t),A=vt(w.Math.floor(w.Math.log(t)/.6931471805599453)),(!e||t!=w.Math.pow(2,A))&&++A,A):fh(E1(t))}function bK(t,e){var A,n,P,r,i,f;if(t.s[e]==0)return!1;for(f=!0,A=t.s[e],r=t.j[e],i=0,n=0;n<r;n++)P=t.i[e][n],i+=t.s[P];return w.Math.abs(A)<=w.Math.abs(i)&&w.Math.sign(A)!=w.Math.sign(i)&&(f=!1),f}function RK(t,e){var A,n,P,r,i,f;for(ut(t,1),i=0;i<2;i++)if(A=t.D[i][e],t.C[A]==7){for(n=t.D[1-i][e],f=0;f<t.j[n];f++)if(P=t.i[n][f],r=t.k[n][f],(t.C[P]==7||t.C[P]==8||t.C[P]==16)&&dt(t,r)>=2)return!0}return!1}function jK(t){var e;if(t.f!=null){for(e=0;e<t.f.length;e++)if((t.c[e]&~t.f[e])!=0)return!1}else return!1;return!t.d&&(t.d=vh(new GA(!1),t.e)),!t.a&&(t.a=vh(new GA(!1),t.b)),Dn(t.g,t.d),Ln(t.g,t.a),Ag(t.g)}function Tb(t){var e;e=YA(t.d),vP(t.k,!e),vP(t.c,!e),vP(t.n,!e),vP(t.i,!e),vP(t.j,!e),vP(t.b,!e),vP(t.g,!e),vP(t.f,!e&&dt(t.u,t.a)==2&&qe(t.u,t.a)!=0&&qe(t.u,t.a)!=3),vP(t.q,!e),vP(t.r,!e&&B0(t.q)!=1),vP(t.p,e),vP(t.o,e)}function e9(){e9=B1,ME=new j9(\"UP\",0),RE=new j9(\"DOWN\",1),bE=new j9(\"CEILING\",2),jE=new j9(\"FLOOR\",3),Bl=new j9(\"HALF_UP\",4),pE=new j9(\"HALF_DOWN\",5),se=new j9(\"HALF_EVEN\",6),CE=new j9(\"UNNECESSARY\",7)}function e5(t,e,A){var n,P,r;for(n=!1,r=0;r<t.j[e];r++)if(!_e(t,t.k[e][r])&&t.n[e][r]==1&&(P=t.i[e][r],!(P<t.f&&i0(t.p,P))&&(t.C[P]==6&&Df(t,P)==1||t.C[P]==16&&Df(t,P)==2))){if(n||!A)return!0;n=!0}return!1}function pK(t,e){var A,n,P,r,i;for(A=h(yt,wt,6,t.w.length+t.v.length,15,1),n=z9(t.i,e.d).c,r=new Wt(n);r.a<r.c.a.length;)if(P=t1(r),($F(e,P.c,P.b)?e.b:0)!=0)for(i=0;i<A.length;i++)FN(t.D,P,i)&&(A[i]+=P.a);return A}function TA(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.f;f++)gt(V(o0(t.R,t.B[f]),n),0)&&++D;if(D!=0)for(eP(t,e),Jt(t,D,A),i=0;i<t.R.f;i++)Q=V(o0(t.R,t.B[i]),n),G(Q,0)!=0&&(Jt(t,i,A),P!=1&&Jt(t,q0(Q,r),P))}function CK(t,e){var A,n,P,r,i,f,D;for(i=Mt(t.R,e),f=h(F,k,6,i,15,1),P=0;P<i;P++)f[P]=_(t.R,e,P);for(n=i;n>1;n--){for(A=!1,r=1;r<n;r++)A6(t,e,f[r-1],f[r])&&(A=!0,D=f[r-1],f[r-1]=f[r],f[r]=D);if(!A)break}return f}function MK(t){var e,A,n,P,r,i,f;for(i=h(q,Ny,58,8,0,3),f=0;f<=7;f++)for(i[f]=h(q,w8,10,t[f].c,0,2),n=0,r=(A=new N8(new x8(new w9(t[f]).a).b),new g9(A));p9(r.a.a);)P=(e=Br(r.a),e.dd()),i[f][n++]=P;return i}function kQ(t,e){var A,n;for(t.C=_8(t.C,e),t.s=_8(t.s,e),t.w=_8(t.w,e),n=t.J.length,t.J=EG(t.J,e),A=n;A<e;A++)t.J[A]=new Nn;t.A=_8(t.A,e),t.u=_8(t.u,e),t.B=tG(t.B,e),t.v!=null&&(t.v=Yz(t.v,e)),t.t!=null&&(t.t=Kz(t.t,e)),t.M=e}function hb(t,e,A){var n,P,r,i;if(t.k=e,t.n=A,t.i!=null)for(i=t.i.length,t.o=h(yt,wt,6,i,15,1),t.p=h(yt,wt,6,i,15,1),r=0;r<i;r++)n=e-t.i[r].a,P=A-t.i[r].b,t.p[r]=w.Math.sqrt(n*n+P*P),t.o[r]=kA(e,A,t.i[r].a,t.i[r].b)}function HK(t,e){var A,n,P,r,i,f,D;for(n=h(rt,ft,6,O(t.e,e),16,1),D=0,P=0;P<O(t.e,e);P++){for(f=0,i=-1,r=0;r<O(t.e,e);r++)n[r]||(A=Ot(t.e,e,r),f<t.f[A]&&(f=t.f[A],i=r));if(f==0)return D;D<<=8,D+=f,n[i]=!0}return D}function Vn(t){return w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)>0?new gP(t.a/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),t.b/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),t.c/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)):new gP(0,0,0)}function Fs(t){var e;if(t.p=new Au,t.k!=null)for(t.e=h(eE,A0,104,t.k.length,0,1),e=0;e<t.k.length;e++)t.e[e]=new du(t.k[e]);if(t.a!=null)for(t.b=h(eE,A0,104,t.a.length,0,1),e=0;e<t.a.length;e++)t.b[e]=new du(t.a[e]);t.d=24}function VK(t,e,A){var n,P;if(P=N(t.b,e),t.d.length<=t.c.length){for(n=0;n<t.a;n++)if(A[t.d[n]]!=null&&A[t.d[n]][t.c[P[n]]])return!0}else for(n=0;n<t.a;n++)if(A[t.d[P[n]]]!=null&&A[t.d[P[n]]][t.c[n]])return!0;return!1}function EK(t,e){n6();var A,n,P,r;if(Zf[e]!=null){for(n=0;n<Zf[e].length;n++)for(r=Zf[e][n],P=15;P>=0;P--)(r&3)==0&&Jo(t,P,n,-1),r>>=2;for(A=0;A<Zf[e].length;A++)for(r=Zf[e][A],P=15;P>=0;P--)(r&3)==1&&Jo(t,P,A,qn),r>>=2}}function $9(t){var e,A,n;return t<0?0:t==0?32:(n=-(t>>16),e=n>>16&16,A=16-e,t=t>>e,n=t-256,e=n>>16&8,A+=e,t<<=e,n=t-C0,e=n>>16&4,A+=e,t<<=e,n=t-Sn,e=n>>16&2,A+=e,t<<=e,n=t>>14,e=n&~(n>>1),A+2-e)}function s0(t,e){var A=w;if(t===\"\")return A;var n=t.split(\".\");if(!(n[0]in A)&&A.execScript&&A.execScript(\"var \"+n[0]),e){var P=e.prototype.sd;P.e=e}for(var r;n.length&&(r=n.shift());)A=A[r]=A[r]||!n.length&&e||{};return A}function A5(t,e,A,n,P,r,i){var f,D;return f=_(t.g,t.s[e],n),f<t.D.length&&(!t.D[f]||t.f[f]==i)&&f!=t.u[e]&&(D=Ot(t.g,t.s[e],n),!r[D]&&!Bu(t.g,D)&&(t.s[++A]=f,t.u[A]=t.s[e],t.v[A]=D,r[D]=!0,P[f]?t.t[A]=!0:P[f]=!0)),A}function f2(t,e){var A,n,P,r,i;for(i=0,A=0,n=0;n<e;n++)i+=t[n].b*w.Math.sin(t[n].a),A+=t[n].b*w.Math.cos(t[n].a);return A==0?r=i>0?bA:eU:(r=w.Math.atan(i/A),A<0&&(r+=Q1)),P=w.Math.sqrt(i*i+A*A)/e,new KP(r,P)}function ms(t){var e,A,n;if(t.d!=-1)return t.d;for(t.d=0,A=0;A<t.g.a.length+t.f.a.length;A++)for(n=A<t.g.a.length?N(t.g,A):N(t.f,A-t.g.a.length),e=0;e<n.q;e++)t.d<w.Math.abs(n.w[e])&&(t.d=w.Math.abs(n.w[e]));return t.d}function n5(t,e){_r();var A;return A=h(Ee,PA,6,4,15,1),A[0]=s4*((t&iP)>>16),A[1]=s4*((t&PP)>>8),A[2]=s4*(t&255),GZ(A,e),t&qn|vt(w.Math.round(A[0]*255))<<16|vt(w.Math.round(A[1]*255))<<8|vt(w.Math.round(A[2]*255))}function P5(t,e,A,n,P,r){var i,f,D,Q,U;if(P!=0)for(J1(t)===J1(A)&&(t=t.slice(e,e+P),e=0),D=A,f=e,Q=e+P;f<Q;)i=w.Math.min(f+nP,Q),P=i-f,U=t.slice(f,i),U.splice(0,0,n,r?P:0),Array.prototype.splice.apply(D,U),f=i,n+=P}function SK(t,e,A){var n,P,r,i,f;for(f=_i(new GA(!0),t),P=-1,r=0;r<f.q;r++)if(n=f.t==null||f.t[r]==null?null:rn((i=f.t[r],c0(),i)),n!=null&&n.endsWith(\"*\")){P=r;break}return P>=0?zR(f,P,e,A):h(it,Dt,2,0,6,1)}function D2(t,e){var A;if(e<0)throw At(new p8(\"Negative exponent\"));if(e==0)return N2;if(e==1||Th(t,N2)||Th(t,y9))return t;if(!RQ(t,0)){for(A=1;!RQ(t,A);)++A;return bP(OJ(A*e),D2(IT(t,A),e))}return kY(t,e)}function cb(t,e,A,n,P){var r,i,f,D,Q;for(Q=-1,i=0;i<O(t.j,A);i++)if(_(t.j,A,i)==e){Q=i;break}for(f=-1,r=0;r<O(t.d,P);r++)if(_(t.d,P,r)==n){f=r;break}for(D=0;D<8;D++)if(cs(t.k[A][Q][D],t.e[P][f][D])!=0)return D<<8;return I1}function wb(t,e,A,n){var P;for(P=0;P<t.r;P++)if(t.D[0][P]==e&&t.D[1][P]==A||t.D[0][P]==A&&t.D[1][P]==e)return Q8(t,P,n),t.T=0,P;return t.r>=t.N&&eQ(t,t.N*2),t.D[0][t.r]=e,t.D[1][t.r]=A,t.H[t.r]=n,t.F[t.r]=0,t.G[t.r]=0,t.T=0,t.r++}function gb(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(s=e.length,P=e,r=0,i=P.length;r<i;++r)n=P[r],L=t.a[n]&w1,(L==0||L>s)&&(t.a[n]&=qP,t.a[n]|=s);for(D=A,Q=0,U=D.length;Q<U;++Q)f=D[Q],L=t.c[f]&w1,(L==0||L>s)&&(t.c[f]&=qP,t.c[f]|=s)}function ks(t,e){this.a=new Rv(this),this.e=new cm,this.b=new SB,this.c=new EB,this.d=new lv(this),this.f=new _B,this.i=new VB,this.g=new HB,this.j=new jv,this.k=new vg(this,t),this.n=new yv(this),this.o=new Fg(this,e),this.p=new fv}function bQ(t,e,A){var n,P,r,i,f,D;return n=t.i[1].a-t.i[0].a,P=t.i[1].b-t.i[0].b,i=(t.i[0].a+t.i[1].a)/2,f=(t.i[0].b+t.i[1].b)/2,n==0?P<0^A>f:P==0?n<0^e>i:(r=-n/P,D=(t.i[0].a+r*r*e-r*A+r*t.i[0].b)/(1+r*r),n<0^D>i)}function qK(t,e,A){var n,P,r,i,f;for(f=h(oPt,h0,159,A,0,1),i=h(F,k,6,A,15,1),r=0;r<A;r++)f[r]=new Pw;for(n=0;n<t.V.q;n++)f[e[n]].a+=kt(t.V,n),f[e[n]].b+=jt(t.V,n),++i[e[n]];for(P=0;P<A;P++)f[P].a/=i[P],f[P].b/=i[P];return f}function Pi(t){var e,A,n;for(n=!1,e=0;e<t.q;e++)t.C[e]==-1&&(n=!0,Zu(t,t.w[e]));for(A=0;A<t.r;A++)t.H[A]==512?n=!0:(t.C[t.D[0][A]]==-1||t.C[t.D[1][A]]==-1)&&(t.H[A]=512,n=!0);return n?(t.T=0,mf(t)):null}function IK(t,e,A){var n,P,r,i,f,D;for(f=h(rt,ft,6,t.f,16,1),A[0]=e,D=1,f[e]=!0,r=0;r<D;r++)for(i=0;i<t.j[A[r]];i++)P=t.k[A[r]][i],((t.F[P]&64)!=0||dt(t,P)==2||fi(t,P))&&(n=t.i[A[r]][i],f[n]||(A[D++]=n,f[n]=!0));return D}function xK(t){var e,A,n,P;for(P=!1,A=0;A<t.V.q;A++)if(r0(t.V,A)){P=!0;break}if(n=tk(t,P),n){for(z1(t),e=0;e<t.V.q;e++)(!P||r0(t.V,e))&&(Be(t.V,e,2*n.a-kt(t.V,e)),Ie(t.V,e,2*n.b-jt(t.V,e)));t.eb=w.Math.max(t.eb,1),n1(t.k)}}function db(t,e,A){var n;QT();var P;this.a=new KR(new JA,t,A,this),KS(this.a,new Vw(this)),this.c=e,this.f=A,this.e=new e3,t3(this.e,this.a),this.d=new aw,t3(this.d,this.a),P=(n=this.zc(),n.getClipboardHandler()),xS(this.a,new Iw(P))}function Bb(t){fp.call(this,t),this.d=h(F,k,6,this.w.length,15,1),this.c=h(F,k,6,this.v.length,15,1),this.a=h(GE,k2,165,1,0,1),this.a[0]=OD(this,h(F,k,6,this.w.length,15,1),h(F,k,6,this.v.length,15,1)),this.b=-1}function r5(t){var e,A;for(this.i=Xn(t),yW(this),ut(this.i,7),this.g=h(rt,ft,6,this.i.g,16,1),this.f=h(rt,ft,6,this.i.f,16,1),e=0;e<this.i.f;e++)A=Yu(K(this.i,e))[0],this.f[e]=e0(this.i,e)<A;kK(this),BW(this),QZ(this),VX(this)}function NK(t){t=t||{};var e=0;return t.matchAtomCharge===!0&&(e|=1),t.matchAtomMass===!0&&(e|=2),t.matchDBondToDelocalized===!0&&(e|=4),(t.matchAromDBondToDelocalized===!0||t.matchAromDBondToDelocalized===void 0)&&(e|=8),e}function vb(t,e){var A,n,P,r,i,f,D;for(D=On(t.R),A=0;A<D.j.a.length;A++)if(D.e[A]&&yA(D,A,e)){for(P=N(D.j,A),r=0,i=P.length;r<i;++r)if(n=P[r],n!=e){for(f=0;f<O(t.R,n);f++)if(fi(t.R,Ot(t.R,n,f)))return!0}return!1}return!1}function yf(t,e,A){var n,P,r;if(n=K(t.j,e),n>=5&&n<=8||n==15||n==16||n==33||n==34||n==52){if(r=gQ(t.j,e),r!=0)return!0;if(P=p1(t.j,e),n==5&&P>=0)return A&&E0(t.j,e,P-1),!0;if(n!=5&&P<=0)return A&&E0(t.j,e,P+1),!0}return!1}function OK(t,e,A){var n,P,r,i,f;for(f=!1,i=1,e[A]=i,n=!0;n;){for(n=!1,P=0;P<t.b;P++)if(e[P]==i)for(r=0;r<t.b;r++)e[r]==0&&TG(t,P,r)&&(t.c[r]==-2?(e[r]=i+1,n=!0):t.c[r]!=t.c[A]&&(e[r]=i+1,f=!0));++i}return f}function GK(t,e){var A;for(this.o=e,this.k=h(E2,b2,29,t.k.length,0,1),A=0;A<this.k.length;A++)this.k[A]=new vu(t.k[A]);t.j!=null&&(this.j=fL(t.j,t.j.length)),this.p=t.p==null||t.p.endsWith(\" (copy)\")?t.p:ju(t.p,\" (copy)\"),this.n=NaN}function Fb(t,e){var A,n,P,r,i;for(r=h(HE,h0,44,8,0,1),i=0;i<=7;i++)for(r[i]=new Ji(new Il),A=0;A<t.f;A++)P=e[A][i],P!=null&&(n=le(r[i],P),n=n==null?h(F,k,6,1,15,1):bn(n,n.length+1),n[n.length-1]=A,ze(r[i],P,n));return r}function JK(t,e){var A,n,P;if(t.t!=-1&&(ae(e,(P=ID(e),P!=0?P:Yy)),yF(t,e,t.t),t.w==19&&(n=C1(t.V,t.t),n!=0)))for(A=0;A<t.V.f;A++)A!=t.t&&C1(t.V,A)==n&&yF(t,e,A);t.u!=-1&&(ae(e,(P=ID(e),P!=0?P:Yy)),mK(t,e,t.u)),t.v&&t.v.Mb(e)}function i5(t,e){var A,n,P,r,i;for(r=dT(e),n=(A=t.a.get(r),A??h(uP,A0,1,0,5,1)),i=0;i<n.length;i++)if(P=n[i],sT(e,P.dd()))return n.length==1?(n.length=0,t.a.delete(r)):n.splice(i,1),--t.c,++t.b.b,P.ed();return null}function zK(t,e){var A,n,P,r,i;if(t.C[e]!=8||t.j[e]!=1)return!1;if(A=t.i[e][0],t.C[A]==15){for(i=t.j[A],n=0;n<i;n++)if(P=t.i[A][n],P!=e&&t.C[P]==8&&(r=D1(t,A,P),t.H[r]==2))return!0}return!1}function f5(t,e){var A,n;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=w.Math.min(t.length,e.length),n=0;n<A;n++)if((t[n]&qP)!=(e[n]&qP))return(t[n]&qP)<(e[n]&qP)?-1:1;return t.length==e.length?0:t.length<e.length?-1:1}function YK(t,e,A,n,P){var r,i,f,D;if(J1(t)===J1(e)&&n==P){MR(t,n,A);return}for(f=0;f<n;f++){for(i=0,r=t[f],D=0;D<P;D++)i=O1(O1(Un(V(r,h1),V(e[D],h1)),V(A[f+D],h1)),V(zt(i),h1)),A[f+D]=zt(i),i=DA(i,32);A[f+P]=zt(i)}}function KK(t){var e,A,n,P,r;for(A=0;A<t.R.f;A++)$e(t.e[A],A),_1(t.e[A],t.c+1,Un(2,t.f[A]));for(r=h(F,k,6,t.U+1,15,1),n=0;n<t.R.f;n++)++r[t.f[n]];for(P=1;r[P]==1;)++P;for(e=0;e<t.R.f;e++)if(t.f[e]==P){ue(t.e[e],1);break}t.U=Wn(t)}function D5(t,e){var A,n,P;if(t.a==null){for(t.a=h(yt,wt,6,t.o.q,15,1),t.d=h(yt,wt,6,(i8(),ml).length,15,1),P=new Wt(e);P.a<P.c.a.length;)n=t1(P),n.g&&(t.d[n.rd()]+=n.pd(t,t.a));for(t.e=0,A=0;A<t.o.q;A++)t.e+=t.a[A];t.c=-1}}function XK(t,e){e=e||{};var A=e.smartsMode||\"smiles\",n=e.skipCoordinateTemplates||!1,P=e.makeHydrogenExplicit||!1,r=e.noCactvs||!1,i=e.singleDotSeparator||!1,f=e.createSmartsWarnings||!1;t.xc(A,n,P,r,i,f)}function RQ(t,e){var A,n,P;if(e==0)return(t.a[0]&1)!=0;if(e<0)throw At(new p8(\"Negative bit address\"));if(P=e>>5,P>=t.d)return t.e<0;if(A=t.a[P],e=1<<(e&31),t.e<0){if(n=LF(t),P<n)return!1;n==P?A=-A:A=~A}return(A&e)!=0}function mb(t,e,A,n,P,r,i){var f,D,Q;f=A==-1?(i[e].a-i[t.B[0]].a)/8:i[e].a-i[A].a,D=A==-1?(i[e].b-i[t.B[0]].b)/8:i[e].b-i[A].b,Jt(t,vt((n+f)/P),r),Jt(t,vt((n+D)/P),r),t.jb&&(Q=A==-1?(i[e].c-i[t.B[0]].c)/8:i[e].c-i[A].c,Jt(t,vt((n+Q)/P),r))}function kb(t,e){var A,n,P,r;if(t.d!=e.d)return t.d>e.d?1:-1;for(P=t.a.length,r=e.a.length,A=w.Math.min(P,r),n=0;n<A;n++)if(--P,--r,t.a[P]!=e.a[r])return t.a[P]>e.a[r]?1:-1;return P!=r?P>r?1:-1:t.b!=e.b?t.b>e.b?1:-1:0}function bb(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A==1||A>=5&&A<=9||A>=14&&A<=17||A>=32&&A<=35||A>=52&&A<=53))return!1}}return yO(t.C[e])}function ZK(t){var e,A,n,P,r,i;if(!Ql)return aH;for(r=0,n=0,i=new jD(1),A=new JA,P=0;P<hi.a.a.length;P++)u2(new GA(!1),A,F3(hi,P)),Dn(i,t),Ln(i,A),sn(i,1,i.c)>0&&(r+=eg(hi,P),++n);return e=n==0?-1:r/w.Math.sqrt(n),e+\"\t\"+n+\"\t\"+t.f}function Rb(t,e){var A,n,P,r;for(r=0,n=new fB;r<e;){try{P=K1(t.i)}catch(i){if(i=t0(i),Zt(i,75))break;throw At(i)}if(P==null)break;P.startsWith(PU)&&++r,P.startsWith(\">\")&&(A=aR(P),A!=null&&jG(n,A))}t.d=ff(n.b,h(it,Dt,2,0,6,1))}function u5(t,e){var A,n,P,r,i;return e&=63,A=t.h,n=(A&l8)!=0,n&&(A|=-1048576),e<22?(i=A>>e,r=t.m>>e|A<<22-e,P=t.l>>e|t.m<<22-e):e<44?(i=n?aA:0,r=A>>e-22,P=t.m>>e-22|A<<44-e):(i=n?aA:0,r=n?x0:0,P=A>>e-44),S0(P&x0,r&x0,i&aA)}function lf(t,e,A,n,P,r){for(var i,f,D;t.q+n>t.M;)kQ(t,t.M*2);for(;t.r+n>t.N;)eQ(t,t.N*2);return i=ZA(t,e,A),i!=-1?mR(t,i,n,P,r):(f=df(t,e,A),f!=-1?GQ(t,f,n,P,r):(i=W0(t,e,A,0),D=Q1*(n-2)/n,J5(t,i,n,i,P,0,Q1-D,r),t.T=0,!0))}function jb(t){var e,A,n,P,r,i,f,D,Q,U;for(D=0,n=t,r=0,f=n.length;r<f;++r)e=n[r],e==-1&&++D;if(D!=0)for(U=t,t=h(F,k,6,U.length-D,15,1),Q=0,A=U,P=0,i=A.length;P<i;++P)e=A[P],e!=-1&&(t[Q++]=e);return t.sort(Fe(u0.prototype.gd,u0,[])),t}function WK(t){var e,A,n,P;if(A=new P8,t.g.a.length!=0){for(P=new Yr(N(t.g,0)),e=1;e<t.g.a.length;e++)RD(P,N(t.g,e));mt(A.g,P),A.d=-1}if(t.f.a.length!=0){for(n=new Yr(N(t.f,0)),e=1;e<t.f.a.length;e++)RD(n,N(t.f,e));mt(A.f,n),A.d=-1}return A}function _K(t,e){var A,n,P,r,i;for(t.i=h(F,k,6,t.g.f,15,1),n=0;n<t.f.f;n++)C1(t.f,n)!=0&&(t.i[e[C1(t.f,n)]]=R0(t.f,n));if(i=h(F,k,6,t.g.q,15,1),r=n9(t.g,i,!1,!1),r>1)for(P=h(F,k,6,r,15,1),A=0;A<t.g.f;A++)t.i[A]|=P[i[A]]++<<5}function $K(t,e){return!e&&(e={mode:3}),e=Object.assign({},e),\"ensureCoordinates\"in e?(e.ensureCoordinates=!!e.ensureCoordinates,YN(t,e.ensureCoordinates)):(typeof e.mode!==nr&&(e.mode=3),e.mode=Math.trunc(e.mode),bN(t,e.mode))}function Tf(t,e,A,n){var P;if(A==null){t.v!=null&&(t.v[e]=null);return}if(A.length==1&&!n){P=A[0],t.C[e]!=P&&Bf(t,e,P,0,-1,0),t.v!=null&&(t.v[e]=null);return}t.v==null&&(t.v=h(F,D0,7,t.M,0,2)),t.v[e]=A,n&&(t.B[e]=Y(t.B[e],1)),t.T=0,t.K=!0}function aK(t,e){var A,n,P,r,i,f,D;for(A=h(yt,wt,6,Mt(t.L,e),15,1),P=0;P<Mt(t.L,e);P++)A[P]=Y0(t.L,e,_(t.L,e,P));for(A.sort(Fe(vi.prototype.gd,vi,[])),r=CF(A,0),i=Ak(A,0,r),n=1;n<A.length;n++)f=CF(A,n),D=Ak(A,n,f),i<D&&(i=D,r=f);return r}function tX(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(s=new uo(new AD),Q=e,U=0,L=Q.length;U<L;++U)for(D=Q[U],P=A,r=0,i=P.length;r<i;++r)n=P[r],f=h(F,k,6,2,15,1),f[0]=t.J[D],f[1]=t.C[n],ze(s.a,f,(R9(),wU))==null;return fk(s,h(F,D0,7,0,0,2))}function a9(t,e){var A,n,P,r;if(r=t.d.a.length,r==0)return-1;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=zd(t,e,N(t.d,P)),A==0)return P;if(n==0)break;A<0?P-=n:P+=n}return P<r&&zd(t,e,N(t.d,P))>0&&++P,-(P+1)}function eX(t,e,A,n){var P,r,i,f,D,Q;if(P=t.e[e],f=h(F,k,6,P,15,1),Q=R5(t,e,A,n,f),Q==3)return!1;for(i=(t.u[e]&3)==Q?257:129,D=0;D<P;D++)(f[D]&1)==1&&(r=t.k[e][A[D]],t.H[r]=i,t.D[0][r]!=e&&(t.D[1][r]=t.D[0][r],t.D[0][r]=e));return!0}function AX(t){var e,A,n,P;for(n=new Wt(t.g);n.a<n.c.a.length;)if(e=t1(n),e.q!=0)return!1;for(P=new Wt(t.f);P.a<P.c.a.length;)if(e=t1(P),e.q!=0)return!1;for(A=new Wt(t.a);A.a<A.c.a.length;)if(e=t1(A),e.q!=0)return!1;return!0}function nX(t,e){var A,n,P;if(t.f=e,N7(t.e,t.c,t.f),sn(t.e,4,8)==0)return t.a=null,0;for(t.a=t.e.F,A=t.a.a.length-1;A>=0;A--)for(P=N(t.a,A),n=0;n<P.length;n++)if(P[n]!=-1&&t.b[n]>0&&t.b[n]>Zi(t.f,P[n])){LA(t.a,A);break}return t.a.a.length}function pb(t,e,A){var n,P,r,i,f;for(this.a=h(F,k,6,t.f,15,1),this.a[0]=e,A[e]=!0,r=0,i=0;r<=i;){for(P=O(t,this.a[r]),f=0;f<P;f++)n=_(t,this.a[r],f),w.Math.abs(t.w[n])==0&&P0(V(t.B[n],Pe),0)&&!A[n]&&(this.a[++i]=n,A[n]=!0);++r}}function PX(t,e,A,n,P){var r,i,f,D,Q,U,L,s;return r=an(e.C[A]),i=an(e.C[P]),f=r>i?4:3,D=(Q=an(e.C[A]),U=an(e.C[n]),L=an(e.C[P]),Q>L&&(Q=(s=k1(L),k1(L=Q),s).a),_9(B(d(F,1),k,6,15,[1,0,2]),B(d(F,1),k,6,15,[U,Q,L]),t)),D>=0?j0(t.a[D][f]):0}function Cb(t,e,A){var n,P,r;if(t.o[e]==2||(t.o[e]==1||EP(t,e,!0))&&t.j[e]!=3||t.o[e]==0&&t.j[e]!=4)return 1;for(r=-2,P=0;P<t.j[e];P++)if(n=t.i[e][P],n!=A){if(r==-2)r=Ho(t.d,n);else if(r!=Ho(t.d,n))return 1}return t.j[e]-1}function rX(t,e){var A,n,P,r,i;if(t.i.K){if(gt(V(o0(t.i,e),1),0))return!0;if(i=MA(t.i,e),i!=null){for(n=i,P=0,r=n.length;P<r;++P)if(A=n[P],A==5||A==6||A==7||A==8||A==15||A==16||A==33||A==34)return!0;return!1}}return sv(K(t.i,e))}function iX(t,e,A){var n,P,r,i,f,D,Q,U,L;for(L=h(NA,a0,6,1+t.d[t.d.length-1],14,1),n=0,i=e,D=0,U=i.length;D<U;++D)P=i[D],L[t.d[n]]=O1(L[t.d[n]],P<<t.b[n]),++n;for(r=A,f=0,Q=r.length;f<Q;++f)P=r[f],L[t.d[n]]=O1(L[t.d[n]],P<<t.b[n]),++n;return L}function Q5(t,e){var A,n,P;this.a=t.D[0][e],this.b=t.D[1][e],n=C1(t,this.a),P=C1(t,this.b),n<P?(this.d=n,this.e=P):(this.d=P,this.e=n),this.c=t.G[e]&31,A=t.H[e]&127,A==16?this.c|=16:A==2?this.c|=2:A==4?this.c|=4:this.c|=1,this.i=(t9(),Tl)}function bs(t,e){var A,n,P;if(A=z(t.V,0,e),d0(t.V,A)!=0)return Ei(t.V,A)||d0(t.V,A)!=1&&d0(t.V,A)!=2?-1:A;if(a1(t.V,A)==1){for(P=0;P<O(t.V,A);P++)if(pA(t.V,A,P)==2&&(n=_(t.V,A,P),a1(t.V,n)==2&&(d0(t.V,n)==1||d0(t.V,n)==2)))return n}return-1}function fX(t){if(t.Vc()){var e=t.c;e.Wc()?t.n=\"[\"+e.k:e.Vc()?t.n=\"[\"+e.Tc():t.n=\"[L\"+e.Tc()+\";\",t.b=e.Sc()+\"[]\",t.j=e.Uc()+\"[]\";return}var A=t.g,n=t.d;n=n.split(\"/\"),t.n=Ps(\".\",[A,Ps(\"$\",n)]),t.b=Ps(\".\",[A,Ps(\".\",n)]),t.j=n[n.length-1]}function Mb(t){var e,A,n,P;e=t.M!=0?t.M:t.D!=0?t.D:-1,t.t=(_r(),A=(e&iP)>>16,n=(e&PP)>>8,P=e&255,(A+vt(w.Math.round(jf*(92-A)))<<16)+(n+vt(w.Math.round(jf*(160-n)))<<8)+P+vt(w.Math.round(jf*(255-P)))),t.u=Gs(yy,e),t.H=-24321,t.I=-6291392}function jQ(t){var e,A,n,P,r,i,f;do for(f=!1,A=0;A<t.j.g;A++)if(t.e[A]){for(r=!1,P=0;P<2;P++){for(n=z(t.j,P,A),e=!1,i=0;i<O(t.j,n);i++)if(A!=Ot(t.j,n,i)&&t.e[Ot(t.j,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,n2(t,A))}while(f)}function U5(t){var e,A,n,P,r,i,f;do for(f=!1,A=0;A<t.k.g;A++)if(t.g[A]){for(r=!1,P=0;P<2;P++){for(e=!1,n=z(t.k,P,A),i=0;i<O(t.k,n);i++)if(A!=Ot(t.k,n,i)&&t.g[Ot(t.k,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,vQ(t,A))}while(f)}function Hb(t){var e,A,n,P,r,i;for(t.e=h(yt,wt,6,t.d,15,1),A=new Wt(t.a);A.a<A.c.a.length;)e=t1(A),e.dc(t.i,t.e);for(i=-1e8,n=.1,r=0;r<t.d;r++)t.e[r]*=n,t.e[r]>i&&(i=t.e[r]);if(i>10){for(;i*n>10;)n*=.5;for(P=0;P<t.d;P++)t.e[P]*=n}return n}function DX(t){t=t||{};var e=t.countMode||wV;switch(e){case wV:return 4;case\"existence\":return 1;case\"firstMatch\":return 2;case\"separated\":return 3;case\"rigorous\":return 5;case\"unique\":return 6;default:throw new Error(\"invalid count mode: \"+e)}}function Rs(t,e){var A,n,P,r,i,f;return r=t.a*el+t.b*1502,f=t.b*el+11,A=w.Math.floor(f*vV),r+=A,f-=A*h4,r%=h4,t.a=r,t.b=f,e<=24?w.Math.floor(t.a*Uc[e]):(P=t.a*(1<<e-24),i=w.Math.floor(t.b*oc[e]),n=P+i,n>=lU&&(n-=L8),n)}function Vb(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A>=21&&A<=30||A>=39&&A<=48||A==57||A>=72&&A<=80||A==89||A>=104&&A<=112))return!1}}return PG(t.C[e])}function uX(t,e,A,n,P,r){var i,f,D,Q,U,L,s;for(I8(t.k[A],n,P,r),s=t.o,L=h(rt,ft,6,s.q,16,1),D=h(F,k,6,s.q,15,1),D[0]=A,L[e]=!0,L[A]=!0,f=0,Q=0;f<=Q;){for(U=0;U<s.e[D[f]];U++)i=s.i[D[f]][U],L[i]||(L[i]=!0,D[++Q]=i,I8(t.k[i],n,P,r));++f}}function O0(t,e,A,n){var P;if(e==A)return-1;for(P=0;P<t.r;P++)if(t.D[0][P]==e&&t.D[1][P]==A||t.D[0][P]==A&&t.D[1][P]==e)return t.H[P]<n&&(t.H[P]=n),P;return t.r>=t.N&&eQ(t,t.N*2),t.D[0][t.r]=e,t.D[1][t.r]=A,t.H[t.r]=n,t.F[t.r]=0,t.G[t.r]=0,t.T=0,t.r++}function o5(t,e,A){var n,P,r,i,f,D;if(e==A)return 0;for(ut(t,1),i=h(F,k,6,t.q,15,1),r=h(F,k,6,t.q,15,1),r[0]=e,i[e]=1,P=0,f=0;P<=f;){for(D=0;D<t.e[r[P]];D++){if(n=t.i[r[P]][D],n==A)return i[r[P]];i[n]==0&&(r[++f]=n,i[n]=i[r[P]]+1)}++P}return-1}function pQ(t,e){var A,n;if(ut(t,1),t.j[e]==2&&t.n[e][0]==2&&t.n[e][1]==2){for(A=0;A<2;A++)for(n=0;n<t.e[t.i[e][A]];n++)if(Gr(t,t.k[t.i[e][A]][n],t.i[e][A]))return t.k[t.i[e][A]][n]}else for(A=0;A<t.e[e];A++)if(Gr(t,t.k[e][A],e))return t.k[e][A];return-1}function L5(t,e,A){var n,P,r,i,f,D;for(ut(t,1),r=h(F,k,6,t.f,15,1),D=h(rt,ft,6,t.f,16,1),r[0]=e,r[1]=A,D[e]=!0,D[A]=!0,P=1,i=1;P<=i;){for(f=0;f<t.j[r[P]];f++){if(n=t.i[r[P]][f],n==e&&P!=1)return-1;D[n]||(D[n]=!0,r[++i]=n)}++P}return i}function ri(t,e){var A;return e==null?null:(A=le(t.c,e),A||((e.endsWith(\"<\")||e.endsWith(\"-\"))&&(A=le(t.c,e.endsWith(\"<\")?UA(e,0,e.length-1)+\">\":e.endsWith(\"-\")?UA(e,0,e.length-1)+\"+\":e),A)?(A=new Lj(A),ze(t.c,e,A),A):null))}function QX(t,e,A,n,P,r){var i,f,D,Q,U;for(f=new f1,i=NW(t,e),D=0;D<e.q;D++)for(Q=0;Q<D+1;Q++)U=iN(A,new Oi(D,Q)),(U==(X9(),Ti)||U==x2)&&w.Math.abs(i[D])>yU&&w.Math.abs(i[Q])>yU&&kn(new wT(e,D,Q))<n&&mt(f,new Zv(e,D,Q,U,i[D],i[Q],P,r));return f}function UX(t,e,A,n,P){var r,i,f,D,Q;for(Q=-1,i=0;i<O(t.j,A);i++)if(_(t.j,A,i)==e){Q=i;break}for(f=-1,r=0;r<O(t.d,P);r++)if(_(t.d,P,r)==n){f=r;break}for(D=2;D<8;D++)if(t.p[A][Q][D]==null||cs(t.p[A][Q][D],t.i[P][f][D])!=0)return D-2<<8;return 1536}function oX(t,e,A,n){var P,r,i,f,D,Q,U;for(U=n.a.length,0<U?n.a=UA(n.a,0,0):0>U&&(n.a+=q8(h(l9,a0,6,-U,15,1))),D=vn(t.k,e)&&(t.j&4)==0,r=A,i=0,f=r.length;i<f;++i)P=r[i],n.a.length!=0&&(n.a+=\",\"),Q=(Y1(),X0)[P],J(n,D?Q.toLowerCase():Q);return n.a}function LX(t){var e,A;for(A=new TD,e=0;e<t.length;e++)switch(Xt(e,t.length),t.charCodeAt(e)){case 38:A.a+=\"&&\";break;case 9:A.a+=\"&09\";break;case 10:A.a+=\"&0A\";break;case 32:A.a+=\"&20\";break;default:nB(A,(Xt(e,t.length),t.charCodeAt(e)))}return A.a}function sX(t,e,A,n,P){var r,i,f,D;if(t.j.length==0||t.n.a.length==0)return null;for(D=h(rt,h0,12,e,0,2),f=h(rt,ft,6,n,16,1),i=0;i<P.length;i++)P[i]!=-1&&C1(t.f,i)==0&&(f[P[i]]=!0);for(r=0;r<A.length;r++)A[r]!=-1&&C1(t.g,r)==0&&(D[A[r]]=f);return D}function s5(t,e,A,n,P,r){var i,f,D,Q,U;for(I8(t.k[e],n,P,r),U=t.o,D=0;D<U.e[e];D++){if(i=U.i[e][D],f=!1,A!=null){for(Q=0;Q<A.length;Q++)if(i==A[Q]){f=!0;break}}f||(U.e[i]==1?I8(t.k[i],n,P,r):fA(U,U.k[e][D])?I8(t.k[i],n/3,P/3,r/3):uX(t,e,i,n,P,r))}}function u2(t,e,A){var n,P,r,i;if(A==null||A.length==0){KT(t,e,null,null);return}n=A.indexOf(k0(32)),n>0&&n<A.length-1?KT(t,e,KA((r=(pt(0,n,A.length),A.substr(0,n)),c0(),r)),KA((i=(Xt(n+1,A.length+1),A.substr(n+1)),i))):KT(t,e,KA((P=A,c0(),P)),null)}function yX(t,e){var A,n,P,r;for(t.f=G(e,0)==0?new aD:new zr(e),n=new mu(t.d),A=null,P=0;P<12&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)));P++){if(sR(t,n)||G(e,0)!=0)return n;A?A.e>n.e&&(r=A,A=n,n=r):(A=n,n=new mu(t.d))}return A}function Q2(t,e){var A,n,P,r,i,f;if(!t.b)return!1;for(P=!1,r=t.b.a.length-1;r>=0;r--)if(n=!1,i=N(t.b,r),i.a==2?n=CW(t,i.b,i.c,i.d,e):i.a==1&&(n=gW(t,i.b,e)),n){for(Z8(t.b,i),f=0;f<t.g[i.b].length;f++)A=t.g[i.b][f],t.n[A]=!1;P=!0}return P}function CQ(t,e,A){return dt(t,e)!=1?0:16-t.e[A]+16*w.Math.max(0,w.Math.min(9,t.p&&e<t.g?yP(t.p,e):0)-2)+((t.H[e]&384)==0||t.D[0][e]!=A?s8:0)+((t.u[A]&3)==0?C0:0)+(t.C[A]==1?I1:0)+(t.e[A]==1?re:0)+((t.F[e]&64)!=0?0:512)+(t.C[A]!=6?256:0)}function Eb(t,e,A,n){var P,r,i,f,D,Q,U;for(P=h(F,k,6,O(t.i,A),15,1),f=0,i=0;i<O(t.i,A);i++)P[f]=_(t.i,A,i),!n[P[f]]&&Xs(t,e,P[f])&&++f;if(f==0)return-1;if(f==1)return P[0];for(D=-1,Q=It,r=0;r<f;r++)U=AR(t.i,e,P[r],It,n),U<Q&&(Q=U,D=P[r]);return D}function lX(t,e){var A,n,P;e.j==1?Rr(t.s):e.j==0?(EJ(t),t.v=!0,Rr(t.s)):J1(e.k)===J1(t.d)||J1(e.k)===J1(t.q)?Tb(t):J1(e.k)===J1(t.p)&&(P=B0(t.p),t.t!=P&&(n=t.t+B0(t.o),A=Ah(t,P),n<P?_t(t.o,0):n<P+A?_t(t.o,n-P):_t(t.o,A-1),t.t=P))}function TX(t,e){var A,n,P,r;return A=br(t.R,e),n=Uf(t.R,e,!1),P=Uf(t.R,e,!0),r=-1,n!=P?A!=-1&&A>n?r=A<<24>>24:r=n<<24>>24:A!=-1?(A>P||A<P&&A>=G1(t.R,e))&&(r=A<<24>>24):!aL(t.R,e)&&R3(t.R,e)!=0&&(r=G1(t.R,e),r-=Fu(t.R,e,r)),qO(t,e,r),r}function hX(t){var e,A,n;for(e=0,A=0,n=0;n<t.g.a.length+t.f.a.length;n++)e+=V8(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length))*(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r,A+=(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r;return A!=0?A/e:1}function cX(t){var e,A,n;for(e=0,A=0,n=0;n<t.g.a.length+t.f.a.length;n++)e+=V8(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length))*(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r,A+=(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r;return A!=0?A/e:1}function _0(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A>=3&&A<=4||A>=11&&A<=13||A>=19&&A<=31||A>=37&&A<=51||A>=55&&A<=84||A>=87&&A<=112))return!1}}return WG(t.C[e])}function js(t,e){var A,n,P,r;if(r=t.c.a.length,r==0)return t8(t.c,0,e),0;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=Kr(e,N(t.c,P)),A==0)return-1;if(n==0)break;A<0?P-=n:P+=n}return P<r&&Kr(e,N(t.c,P))>0&&++P,t8(t.c,P,e),P}function wX(t){var e,A,n,P,r,i,f,D,Q;if(Q=1,n=wP(t,t.q,t.r,(Y1(),wn)),n!=0)(n<1||n>3)&&(Q=1.5/n);else{for(D=Hp,e=1;e<t.q;e++)for(A=0;A<e;A++)r=t.J[A].a-t.J[e].a,i=t.J[A].b-t.J[e].b,f=t.J[A].c-t.J[e].c,P=r*r+i*i+f*f,D>P&&(D=P);Q=3/w.Math.max(.75,D)}return Q}function gX(t){var e,A,n,P;for(A=0;A<t.R.f;A++)$e(t.e[A],A),_1(t.e[A],2*t.c+4,M1(t.f[A],t.c+4));for(P=!1,e=0;e<t.R.f;e++)P=P|ey(t,e,3);for(n=0;n<t.R.g;n++)P=P|JQ(t,n,3);if(!P)return!1;for(;t.U<t.R.f&&(P=a_(t),!!P);)s2(t),t.P&&Q2(t.P,t.f);return!0}function Sb(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y;for(r=e.a[A],f=e.a[n],D=e.a[P],U=dm(t.a,e,A,n,P),s=-1,L=0;L<5&&s<0;L++)i=t.a.g.a[r-1][L],Q=t.a.g.a[D-1][L],i>Q&&(i=(y=k1(Q),k1(Q=i),y).a),s=_9(B(d(F,1),k,6,15,[2,1,3,0]),B(d(F,1),k,6,15,[f,i,Q,U]),t);return s}function dX(t,e,A,n,P){var r,i,f;for(r=0,i=0,f=0;f<n;f++)r=(P9(),O1(Un(V(A[f],h1),V(P,h1)),V(zt(r),h1))),i=O1(l0(V(t[e+f],h1),V(r,h1)),i),t[e+f]=zt(i),i=q0(i,32),r=DA(r,32);return i=O1(l0(V(t[e+n],h1),r),i),t[e+n]=zt(i),zt(q0(i,32))}function BX(t,e,A,n){var P,r,i,f,D,Q;for(i=h(F,k,6,t.f.q,15,1),f=h(F,k,6,t.f.q,15,1),i[0]=A,i[1]=e,f[A]=1,f[e]=2,r=1,D=1;r<=D;){for(Q=0;Q<O(t.f,i[r]);Q++){if(P=_(t.f,i[r],Q),P==n)return 1+f[i[r]];f[P]==0&&qi(t.f,P)&&(i[++D]=P,f[P]=f[i[r]]+1)}++r}return 0}function vX(t,e,A,n){var P,r,i,f,D,Q,U;for(ut(t,1),n==null&&(n=h(rt,ft,6,t.q,16,1)),D=h(F,k,6,t.q,15,1),D[0]=e,n[e]=!0,i=0,Q=0,f=1;i<=Q;){for(r=A?t.i[D[i]].length:t.e[D[i]],U=0;U<r;U++)P=t.i[D[i]][U],P<n.length&&!n[P]&&(D[++Q]=P,n[P]=!0,++f);++i}return f}function ps(t,e){var A,n,P,r,i,f;for(i=0;i<2;i++)if(A=z(t.i,i,e),K(t.i,A)==7&&O(t.i,A)==2&&(n=z(t.i,1-i,e),K(t.i,n)==6)){for(f=0;f<O(t.i,n);f++)if(P=_(t.i,n,f),r=Ot(t.i,n,f),(K(t.i,P)==8||K(t.i,P)==16)&&dt(t.i,r)==2&&O(t.i,P)==1)return!0}return!1}function FX(t){var e,A,n;return A=t.l,(A&A-1)!=0||(n=t.m,(n&n-1)!=0)||(e=t.h,(e&e-1)!=0)||e==0&&n==0&&A==0?-1:e==0&&n==0&&A!=0?OL(A):e==0&&n!=0&&A==0?OL(n)+22:e!=0&&n==0&&A==0?OL(e)+44:-1}function MQ(t,e,A,n,P){t[e[0]][e[1]]?t[e[0]][e[1]].a.length==2||t[e[0]][e[1]].c<P?t[e[0]][e[1]]=new th(e,A,n,P):t[e[0]][e[1]].c==P&&(t[e[0]][e[1]].a[0]=(t[e[0]][e[1]].a[0]+n)/2,t[e[0]][e[1]].b=QK(t[e[0]][e[1]].b,A)):t[e[0]][e[1]]=new th(e,A,n,P)}function mX(t,e,A){var n,P,r,i,f,D,Q;if(Mt(t.d,A)==1&&(r=_(t.d,A,0),go(t.d,r))){for(n=e.k[A],P=e.k[r],D=new xe(P.a-n.a,P.b-n.b,P.c-n.c),i=0;i<O(t.d,r);i++)if(f=_(t.d,r,i),qi(t.d,f)&&(Q=z8(P,e.k[f]),ob(D,Q)>bA))return!1;return Hr(Hr(n,D),D),!0}return!1}function kX(t){var e,A,n,P,r,i;for(e=0;e<t.k.g;e++)if(t.g[e]){for(r=!0,P=0;P<2&&r;P++)for(A=z(t.k,P,e),i=0;i<O(t.k,A)&&r;i++)e!=Ot(t.k,A,i)&&t.g[Ot(t.k,A,i)]&&(r=!1);if(r)for(w0(t.k,e,8),--t.c,n=0;n<2;n++)A=z(t.k,n,e),z0(t.k,A)&&(zn(t.k,A,!1),--t.b)}}function bX(t,e){e.j==0?(nJ(t),t.B=!0,Rr(t.v)):e.j==1?Rr(t.v):J1(e.k)===J1(t.b)?e.a==1?(O8(t.D,\"\"),Go(t.w,n4)):(O8(t.D,Ci(t.A,t.a)),Go(t.w,UV)):J1(e.k)===J1(t.c)?(uA(t.f,!1),_t(t.n,0),_t(t.j,0)):J1(e.k)===J1(t.f)&&uA(t.c,!1)}function RX(t,e,A,n,P){var r,i,f,D,Q,U;for(r=1/(1+w.Math.exp(t-5)),U=1-1/(1+w.Math.exp(e+5)),Q=1/(1+w.Math.exp(.012*A-6)),i=1-1/(1+w.Math.exp(n)),f=(.5+r/2)*(.5+U/2)*(.5+Q/2)*(.5+i/2),D=0;P!=null&&D<P.length;D++)P[D]==2?f*=.8:P[D]==3&&(f*=.6);return f}function qb(t){var e,A,n,P,r,i,f;for(n=0,A=0;A<t.q;A++)(t.u[A]&512)!=0&&++n;if(n==0)return null;for(r=0,P=0;P<t.r;P++)(t.u[t.D[0][P]]&t.u[t.D[1][P]]&512)!=0&&++r;for(f=h(rt,ft,6,t.q,16,1),e=0;e<t.q;e++)f[e]=(t.u[e]&512)!=0;return i=new zA(n,r),ui(t,i,f,!1,null),i}function jX(t,e){var A,n,P,r,i,f,D,Q;for(i=0,n=e,P=0,r=n.length;P<r;++P)A=n[P],A==-1&&++i;for(Q=h(F,k,6,e.length-i,15,1),D=0,f=0;f<e.length;f++)e[f]!=-1&&(Q[D]=R0(t.g,f)<<16|R0(t.H,e[f]),t.i!=null&&(Q[D]|=t.i[f]<<24),++D);return Q.sort(Fe(u0.prototype.gd,u0,[])),Q}function Cs(t,e){var A,n;A=-1,n=0,(t.G[e]&16)!=0&&(A=16,++n),(t.G[e]&64)!=0&&(A=64,++n),(t.G[e]&32)!=0&&(A=32,++n),(t.G[e]&4)!=0&&(A=4,++n),(t.G[e]&2)!=0&&(A=2,++n),(t.G[e]&8)!=0&&(A=8,++n),(t.G[e]&1)!=0&&(A=1,++n),A!=-1&&A!=(t.H[e]&127)&&(t.H[e]=A),n<2&&(t.G[e]&=-128)}function pX(t,e){var A,n;t.c==e.c?t.i=(t9(),bU):$r(e.c)==1?(t.g=e.c==1?1:e.c==2?386:e.c==4?4:e.c==16?16:8,t.i=(t9(),Ll)):(A=(t.c&16)!=0?0:(t.c&1)!=0?1:(t.c&2)!=0?2:3,n=(e.c&16)!=0?0:(e.c&1)!=0?1:(e.c&2)!=0?2:3,n==A?t.i=(t9(),bU):(t.f=n-A,t.i=(t9(),sl)))}function CX(t,e,A,n,P,r){var i,f,D,Q,U,L;return Q=D1(e,n,P),i=D8(t,e,A,n),f=D8(t,e,n,P),D=D8(t,e,P,r),L=f,f==0&&dt(e,Q)==1&&(i==1||D==1)&&(L=2),U=IZ(e,A,n,P,r),U==4&&D1(e,A,P)==-1&&D1(e,n,r)==-1?40+L:U==5&&(e.a[A]==1||e.a[n]==1||e.a[P]==1||e.a[r]==1)?50+L:L}function MX(t){var e,A,n;return!t.startsWith(B6)||!t.endsWith(v6)||(A=t.indexOf(k0(34),21),A==-1)?null:(n=(pt(21,A,t.length),t.substr(21,A-21)),e=UA(t,21+n.length+1,t.length-17),A1(n,\"arrow\")?new lj(e):A1(n,\"text\")?new BR(e):null)}function HX(t){var e,A,n,P,r,i,f,D;for(ut(t,1),f=h(Ee,PA,6,t.f,15,1),n=h(F,k,6,t.f,15,1),D=0;D<t.f;D++){for(n[0]=D,P=h(F,k,6,t.f,15,1),P[D]=1,A=0,r=0;A<=r;){for(i=0;i<t.j[n[A]];i++)e=t.i[n[A]][i],P[e]==0&&(P[e]=P[n[A]]+1,n[++r]=e,f[D]+=P[e]-1);++A}f[D]/=r}return f}function VX(t){var e,A,n;for(t.n=h(F,k,6,t.j,15,1),t.k=h(F,k,6,t.j,15,1),t.o=h(F,k,6,t.j,15,1),e=0;e<t.i.f;e++)t.b[e]!=0&&(n=t.b[e]-1,t.a!=null&&(t.k[n]+=t.a[e]),t.c!=null&&(t.o[n]+=t.c[e]));for(A=0;A<t.i.g;A++)t.g[A]&&dt(t.i,A)==2&&(t.n[t.b[z(t.i,0,A)]-1]+=2)}function Ms(){Ms=B1,V4=w.Math.cos(m2),I4=w.Math.sin(m2),S4=w.Math.cos(e4),N4=w.Math.sin(e4),vU=w.Math.cos(AA),FU=w.Math.sin(AA),E4=w.Math.cos(oU),x4=w.Math.sin(oU),q4=w.Math.cos(R6),O4=w.Math.sin(R6),w.Math.cos(xC),w.Math.sin(xC)}function EX(t){var e,A,n,P,r;return isNaN(t)?(Xr(),Ac):t<-9223372036854776e3?(Xr(),cE):t>=9223372036854776e3?(Xr(),tc):(P=!1,t<0&&(P=!0,t=-t),n=0,t>=DP&&(n=vt(t/DP),t-=n*DP),A=0,t>=fP&&(A=vt(t/fP),t-=A*fP),e=vt(t),r=S0(e,A,n),P&&WL(r),r)}function y5(t,e){_r();var A,n,P,r,i;return A=t&qn,i=(t&iP)>>16,P=(t&PP)>>8,n=t&255,r=vt(1/(1-e)),i==0&&P==0&&n==0?A|r<<16|r<<8|r:(i>0&&i<r&&(i=r),P>0&&P<r&&(P=r),n>0&&n<r&&(n=r),A|w.Math.min(vt(i/e),255)<<16|w.Math.min(vt(P/e),255)<<8|w.Math.min(vt(n/e),255))}function SX(t,e){var A,n,P,r,i,f,D,Q,U;for(D=On(t.e),Q=N(D.k,e).length,f=N(D.k,e),U=!1,P=0;P<Q;P++)if(t.f[f[P]]==0){U=!0;break}if(U){for(A=(180*Q-360)/Q*.01745329238474369,i=N(D.j,e),r=0;r<Q;r++)Ih(t,i[r],f[r==0?Q-1:r-1],f[r],A);if(Q<=4)for(n=0;n<Q;n++)t.f[f[n]]+=Q}}function HQ(t,e,A,n){this.b=h(G4,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=h(yt,wt,6,2,15,1),this.d=h(yt,wt,6,2,15,1),this.c[0]=ru(this.b[0],A),this.d[0]=iu(this.b[0],A),this.c[1]=ru(this.b[1],n),this.d[1]=iu(this.b[1],n),this.a=h(F,k,6,2,15,1),this.a[0]=1,this.a[1]=1}function qX(t){_r();var e,A,n,P;return P=t.a>>16&255,n=t.a>>8&255,A=t.a&255,e=t.a>>24&255,P==0&&n==0&&A==0?new jL(5,5,5,e):(P>0&&P<5&&(P=5),n>0&&n<5&&(n=5),A>0&&A<5&&(A=5),new jL(w.Math.min(vt(P/xf),255),w.Math.min(vt(n/xf),255),w.Math.min(vt(A/xf),255),e))}function Hs(t,e){P9();var A,n,P,r,i,f,D,Q,U;return e.d>t.d&&(f=t,t=e,e=f),e.d<63?tZ(t,e):(i=(t.d&-2)<<4,Q=IT(t,i),U=IT(e,i),n=xs(t,I9(Q,i)),P=xs(e,I9(U,i)),D=Hs(Q,U),A=Hs(n,P),r=Hs(xs(Q,n),xs(P,U)),r=T2(T2(r,D),A),r=I9(r,i),D=I9(D,i<<1),T2(T2(D,r),A))}function D8(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y;for(P=e.a[A],r=e.a[n],U=D1(e,A,n),L=!0,y=(ut(e,7),e.p),s=0;s<y.j.a.length&&L;s++)for(f=N(y.k,s),D=0,Q=f.length;D<Q;++D)if(i=f[D],i==U&&e.b[s]==0){L=!1;break}return dt(e,U)==1&&L&&(rL(t.b,P)&&rL(t.b,r)||vB(t.b,P)&&vB(t.b,r))?1:0}function tr(t,e){J9();var A,n,P,r;if(isNaN(t))return\"NaN\";if(!isNaN(t)&&!isFinite(t))return\"Infinity\";if(t==0)return\"0\";for(P=1,n=1;n<e;n++)P*=10;for(r=P*10,A=0;w.Math.abs(t)+.5<P;)t*=10,--A;for(;w.Math.abs(t)+.5>=r;)t/=10,++A;return La(E1(t+(t<0?-.5:.5)),A,e,!0)}function IX(t){var e,A,n,P,r,i;for(n=0,r=0;r<t.e.length;r++)for(e=t.e[r],A=Mt(t.j,e),i=0;i<A;i++)_(t.j,e,i)>e&&++n;for(t.f=h(F,k,6,n,15,1),t.g=h(F,k,6,t.j.q,15,1),n=0,P=0;P<t.e.length;P++)for(e=t.e[P],A=Mt(t.j,e),t.g[e]=P,i=0;i<A;i++)_(t.j,e,i)>e&&(t.f[n++]=Ot(t.j,e,i))}function xX(t){for(var e,A,n,P,r,i;;){for(r=h(rt,ft,6,t.U+1,16,1),n=-1,A=0;A<t.R.f;A++)gQ(t.R,A)!=0&&(r[t.f[A]]&&n<t.f[A]&&(n=t.f[A]),r[t.f[A]]=!0);if(n==-1)break;for(P=0,e=0;e<t.R.f;e++)i=0,t.f[e]==n&&(i=++P),$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],8,i);t.U=Wn(t)}}function Ib(t,e){var A,n,P,r,i;if(t.q==0)return null;for(n=t.J[0].a,r=t.J[0].b,P=t.J[0].a,i=t.J[0].b,A=1;A<t.q;A++)n>t.J[A].a?n=t.J[A].a:P<t.J[A].a&&(P=t.J[A].a),r>t.J[A].b?r=t.J[A].b:i<t.J[A].b&&(i=t.J[A].b);return e?(e.c=n,e.d=r,e.b=P-n,e.a=i-r):e=new QA(n,r,P-n,i-r),e}function xb(t,e,A){var n,P,r,i;for(i=1,P=0;P<t.g.q;P++)t.i[3*P]=kt(t.g,P),t.i[3*P+1]=jt(t.g,P),t.i[3*P+2]=vA(t.g,P);if(i=da(t,e,A),i==0)for(n=0;n<t.g.q;n++)Be(t.g,n,t.i[3*n]),Ie(t.g,n,t.i[3*n+1]),hP(t.g,n,t.i[3*n+2]);for(r=new Wt(t.c);r.a<r.c.a.length;)t1(r),null.vd();return i}function NX(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(r=!1,P=0;P<2;P++)if(A=z(t.g,P,e),U=t.G[A],O(t.H,U)>2){for(s=z(t.g,1-P,e),D=It,f=0;f<O(t.g,A);f++)n=_(t.g,A,f),n!=s&&D>n&&(D=n);for(y=t.G[s],Q=It,i=0;i<O(t.H,U);i++)L=_(t.H,U,i),L!=y&&Q>L&&(Q=L);t.G[D]!=Q&&(r=!r)}return r}function OX(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(Q=new Wt(e);Q.a<Q.c.a.length;)if(D=t1(Q),D.rd()==1){for(f=D.f,L=t,s=0,y=L.length;s<y;++s){if(U=L[s],U==-1)return!1;for(A=!1,P=f,r=0,i=P.length;r<i;++r)if(n=P[r],U==n){A=!0;break}if(!A)return!1}return!0}return!1}function GX(t,e,A,n,P){var r,i,f,D,Q,U,L;if(A)return aW(e,n[1],n[2]);for(Q=R1(rt,[h0,ft],[12,6],16,[2,e.q],2),i=h(F,k,6,2,15,1),f=0;f<2;f++)i[f]=SQ(e,n[1+f],P[f],Q[f],null,null);for(L=i[0]<i[1]?0:1,U=h(F,k,6,i[L],15,1),D=0,r=0;r<e.q;r++)Q[L][r]&&(U[D++]=r);return t.a=L==1,U}function Nb(t,e){var A,n,P,r,i,f;for(P=0;P<t.b;P++)if(t.e[P][e]&&t.c[P]!=-3){for(n=0;n<=t.j.g.length;n++)if(n!=e&&t.e[P][n])for(t.e[P][e]=!1,f=P<t.a?P:P<t.b?P-t.a:-1,i=ix(t,P<t.a?1:P<t.b?2:0),r=0;r<t.j.g[e].length;r++)A=t.j.g[e][r],DT(t.j,A)&&t.j.j[A]==f&&(t.j.j[A]=i<<24>>24)}}function hf(t){var e,A,n,P,r;for(r=new V0,P=t.length,n=0;n<P;n++)switch(e=Lk(t,n,t.length),A=e&w1,e){case 38:r.a+=\"&amp;\";break;case 60:r.a+=\"&lt;\";break;case 62:r.a+=\"&gt;\";break;case 34:r.a+=\"&quot;\";break;case 39:r.a+=\"&apos;\";break;default:r.a+=String.fromCharCode(A)}return r.a}function JX(t){var e,A,n,P;for(e=0;e<t.k.f;e++)if(K(t.k,e)==7&&p1(t.k,e)==0&&G1(t.k,e)>3&&a1(t.k,e)>0){for(P=0;P<O(t.k,e);P++)if(A=_(t.k,e,P),n=Ot(t.k,e,P),dt(t.k,n)>1&&tA(t.k,A)){l1(t.k,n)==4?w0(t.k,n,2):w0(t.k,n,1),E0(t.k,e,p1(t.k,e)+1),E0(t.k,A,p1(t.k,A)-1),XA(t.k,e,-1);break}}}function zX(t,e){var A,n,P,r,i,f;for(r=t.indexOf(e+\"=(\")+e.length+2,i=t.indexOf(k0(41),r),P=ne(t,r),A=c1((pt(r,P,t.length),t.substr(r,P-r)),o1,It),f=h(F,k,6,A,15,1),n=0;n<A;n++)r=lA(t,P),P=ne(t,r),(P==-1||P>i)&&(P=i),f[n]=c1((pt(r,P,t.length),t.substr(r,P-r)),o1,It);return f}function Ob(t,e){var A;if(A=0,e<t.g&&(S8(t.p,e)||t.H[e]==8)||t.H[e]==8)A|=8;else switch(dt(t,e)){case 0:A|=16;break;case 1:A|=1;break;case 2:A|=2;break;case 3:A|=4;break;case 4:A|=32;break;case 5:A|=64}return(t.F[e]&64)!=0?A|=256:t.K||(A|=128),e<t.g&&Re(t.p,e)?A|=qA:t.K||(A|=fP),A}function Gb(t,e,A,n,P){var r;if(U2(e,A,n,P,3))return 60;if(U2(e,A,n,P,4))return 90;switch(r=e.a[n],mn(t.a.b,r)){case 2:if(e.C[n]==8)return 105;if(zD(t.a.b,r))return 180;break;case 3:if(e8(t.a.b,r)==3&&HA(t.a.b,r)==0)return e.C[n]==7?107:92;break;case 4:return 109.45}return 120}function YX(t,e,A){var n,P,r,i,f,D,Q,U;for(n=!1,D=0;D<e.j.a.length;D++)if(N(e.k,D).length==6){for(f=!0,Q=N(e.j,D),U=N(e.k,D),r=0;r<6;r++)if(!yf(t,Q[r],!1)||!t.e[U[r]]){f=!1;break}if(f){if(A)for(i=0;i<6;i++)yf(t,Q[i],!0);for(P=0;P<6;P+=2)n2(t,U[P]);n=!0;break}}return n}function _1(t,e,A){t.b==0&&(++t.c,t.b=63),t.b==63?(t.d[t.c]=Y(t.d[t.c],A),t.b-=e):t.b>=e?(t.d[t.c]=M1(t.d[t.c],e),t.d[t.c]=Y(t.d[t.c],A),t.b-=e):(t.d[t.c]=M1(t.d[t.c],t.b),t.d[t.c]=Y(t.d[t.c],q0(A,e-t.b)),e-=t.b,++t.c,t.b=63-e,t.d[t.c]=Y(t.d[t.c],V(A,(1<<e)-1)))}function Jb(t,e,A,n){var P,r,i,f;if(n==1&&!Ph(t,e)){if(O(t.b,e)==3)return-1;if(O(t.b,e)==3)return P=Jm(t,e,A),R0(t.b,P[0])==R0(t.b,P[1])?P[2]:R0(t.b,P[0])==R0(t.b,P[2])?P[1]:P[0]}for(i=-1,f=-1,r=0;r<O(t.b,e);r++)P=_(t.b,e,r),P!=A&&i<R0(t.b,P)&&(i=R0(t.b,P),f=P);return f}function zb(t){var e,A,n,P,r,i,f,D;for(t.c=0,A=new f1,P=1;P<t.e.length;P++)for(r=0;r<P;r++)f=w.Math.abs(t.a[P]-t.a[r]),D=w.Math.abs(t.b[P]-t.b[r]),n=w.Math.sqrt(f*f+D*D),n<.8&&(e=h(F,k,6,2,15,1),e[0]=t.e[P],e[1]=t.e[r],A.a.push(e)),i=1-w.Math.min(n,1),t.c+=i*i;return A}function KX(t){var e;return e=new uD,mt(e.a,new We(\"The polar surface area prediction is based on an atom-type based\",2)),mt(e.a,new We(\"increment system, published by P. Ertl, B. Rohde, P. Selzer\",2)),mt(e.a,new We(\"in J. Med. Chem. 2000, 43, 3714-3717\",2)),mt(e.a,new We(A4,2)),oJ(t,e),e}function XX(t){var e,A,n,P,r,i,f;for(f=t.T&248,ut(t,1),i=h(F,k,6,t.f,15,1),A=0;A<t.f;A++)i[A]=xt(t,A);for(n=0;n<i.length;n++)if(i[n]!=0)for(r=0;r<i[n];r++)O0(t,n,W9(t,1),1);for(ut(t,1),P=.8*wP(t,t.q,t.r,(Y1(),wn)),e=0;e<i.length;e++)i[e]!=0&&t$(t,e,i[e],P);(f&8)!=0&&(t.T|=248&(8|f))}function Yb(t){var e,A,n,P;for(P=!1,A=0;A<t.q;A++)gt(V(t.B[A],Pe),0)&&(t.C[A]=-1,P=!0);for(P&&Pi(t),t.v!=null&&(t.v=null,P=!0),e=0;e<t.q;e++)gt(t.B[e],0)&&(t.B[e]=0,P=!0);for(n=0;n<t.r;n++)t.G[n]!=0&&(t.G[n]=0,P=!0),t.H[n]==8&&(t.H[n]=1,P=!0);return P&&(t.T=0),P}function ZX(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(i=h(F,k,6,P,15,1),r=0;r<t.f.q;r++){for(D=0;D<Mt(t.f,r);D++){for(s=A[_(t.f,r,D)],Q=0;Q<D&&!(s<i[Q]);Q++);for(U=D;U>Q;U--)i[U]=i[U-1];i[Q]=s}for(L=Mt(t.f,r),$e(e[r],r),_1(e[r],n,A[r]),_1(e[r],(P-L)*(n+1),0),f=0;f<L;f++)_1(e[r],n+1,i[f])}}function Kb(t,e){var A,n;for(this.b=h(G4,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=h(yt,wt,6,2,15,1),this.d=h(yt,wt,6,2,15,1),this.a=h(F,k,6,2,15,1),A=0;A<2;A++){for(n=0;n<this.b[A].e.length;n++)this.c[A]+=ru(this.b[A],n),this.d[A]+=iu(this.b[A],n);this.a[A]=this.b[A].e.length}}function WX(t,e){var A,n,P,r;this.a=new y3((n=ky,n)),ut(t,15),r=(x1(),$A),this.b=e,P=t.P!=null?t.P:\"\",J(this.b,P+r),J(this.b,\"Actelion Java MolfileCreator 2.0\"+r+r),J(this.b,\"  0  0  0  0  0  0              0 V3000\"+r),this.c=1,A=Fz(t),A&&(this.c=wX(t)),cp(this,t,A),J(this.b,D9+r)}function _X(t,e){var A,n,P;if(A=z(t.R,0,e),A>=t.R.f)return!1;if(t.db[A]==1||t.db[A]==2)return!0;if(t.db[A]==3)return!1;if(n=Us(t.R,A),n!=-1)return t.o[n]==1||t.o[n]==2;for(P=0;P<O(t.R,A);P++)if(pA(t.R,A,P)==2&&(t.db[_(t.R,A,P)]==1||t.db[_(t.R,A,P)]==2))return!0;return!1}function l5(t,e,A,n,P){var r,i,f,D,Q;for(t.K=t.K|e.K,i=h(F,k,6,e.q,15,1),D=$0(t,1),Q=$0(t,2),r=0;r<A;r++)(P||P0(V(e.B[r],Pe),0))&&(i[r]=En(e,t,r,D,Q));for(f=0;f<n;f++)(P||!Qe(e,e.D[0][f])&&!Qe(e,e.D[1][f]))&&er(e,t,f,D,Q,i[e.D[0][f]],i[e.D[1][f]],!1);return t.L=t.L&&e.L,t.I=0,t.T=0,i}function $X(t,e,A){var n,P;if(e<3||(n=e-1,(t[n]==43||t[n]==45)&&--n,!Zn(t[n]&w1))||(--n,t[n]!=68&&t[n]!=82&&t[n]!=88&&t[n]!=122))return!1;for(A[0]=0;n>0&&dB(t[n-1]);)--n,++A[0];for(P=e+1;dB(t[n]);){if(t.length<=P||t[n]!==t[P])return!1;++n,++P}return!0}function aX(t,e){var A,n,P,r,i,f,D,Q,U;return Q=t.e,Q==0?(ke(),y9):(n=t.d,A=t.a,n==1?(P=Un(V(A[0],h1),V(e,h1)),D=zt(P),i=zt(DA(P,32)),i==0?new mA(Q,D):new Ue(Q,2,B(d(F,1),k,6,15,[D,i]))):(f=n+1,r=h(F,k,6,f,15,1),r[n]=Qs(r,A,n,e),U=new Ue(Q,f,r),Rn(U),U))}function tZ(t,e){var A,n,P,r,i,f,D,Q,U,L,s;return n=t.d,r=e.d,f=n+r,D=t.e!=e.e?-1:1,f==2?(U=Un(V(t.a[0],h1),V(e.a[0],h1)),s=zt(U),L=zt(DA(U,32)),L==0?new mA(D,s):new Ue(D,2,B(d(F,1),k,6,15,[s,L]))):(A=t.a,P=e.a,i=h(F,k,6,f,15,1),yJ(A,n,P,r,i),Q=new Ue(D,f,i),Rn(Q),Q)}function Xb(t,e){var A,n,P,r,i;if(n=e>>5,e&=31,n>=t.d)return t.e<0?(ke(),uc):(ke(),y9);if(r=t.d-n,P=h(F,k,6,r+1,15,1),$k(P,r,t.a,n,e),t.e<0){for(A=0;A<n&&t.a[A]==0;A++);if(A<n||e>0&&t.a[A]<<32-e!=0){for(A=0;A<r&&P[A]==-1;A++)P[A]=0;A==r&&++r,++P[A]}}return i=new Ue(t.e,r,P),Rn(i),i}function eZ(t,e){var A,n,P,r,i,f,D;for(P=h(rt,ft,6,t.L.q,16,1),n=0;n<t.L.r;n++)V3(t.L,n)&&(P[z(t.L,0,n)]=!0,P[z(t.L,1,n)]=!0);for(i=new nD,A=0;A<t.L.q;A++)r=Qe(t.L,A)?e*.47:P[A]?e*.38:0,r!=0&&(f=Z1(t.R,kt(t.L,A)),D=X1(t.R,jt(t.L,A)),i.c=f-r,i.d=D-r,i.b=r*2,i.a=r*2,t.v=dQ(t.v,i))}function AZ(t){var e,A,n,P;for(P=new V0,A=0;A<t.g.a.length;A++)A!=0&&(P.a+=\".\"),J(P,Ru(new hD(N(t.g,A),2)));for(P.a+=\">\",n=0;n<t.a.a.length;n++)n!=0&&(P.a+=\".\"),J(P,Ru(new j7(N(t.a,n))));for(P.a+=\">\",e=0;e<t.f.a.length;e++)e!=0&&(P.a+=\".\"),J(P,Ru(new hD(N(t.f,e),2)));return P.a}function Zb(t,e){bk(),this.n=t,this.a=e,this.i=U6(this.a._,D4),IG(this.i),this.g=U6(this.a._,D4),Lz(this.g),this.o=2*v8+DF(xo(this.i)/4|0),this.e=2*v8+DF(Oo(this.i)/4|0),this.c=U6(this.a._,TV),this.j=(de==-1&&(de=globalThis.devicePixelRatio||1),4/de),this.b=5,this.k=-1,this.f=-1,this.a.db=this}function nZ(t,e,A,n,P){if(!_j(t,e,P))return!1;if(t.s==null)t.t=new NQ(e),$U(t.t,t.v),d5(t.t,t.o,-1);else{switch(t.b=new Ji(new AD),A){case 2:t.B=new VL(t,!1,t.o);break;case 3:t.B=new VL(t,!0,t.o);break;case 4:t.B=new fT(t,t.o);break;case 1:t.B=new Bb(t)}$g(t.B,n)}return!0}function U2(t,e,A,n,P){var r,i,f,D,Q,U,L,s;if(s=(ut(t,7),t.p),Q=new QD,aP(Q,k1(e)),aP(Q,k1(A)),aP(Q,k1(n)),D1(t,e,A)>=0&&D1(t,A,n)>=0){for(U=0;U<s.j.a.length;U++)if(N(s.k,U).length==P){for(L=new QD,i=N(s.j,U),f=0,D=i.length;f<D;++f)r=i[f],aP(L,k1(r));if(AQ(L,Q))return!0}}return!1}function Wb(t,e,A,n){var P,r,i,f,D,Q,U,L,s;for(ut(t,1),r=0;r<t.q;r++)e[r]=-1;for(Q=0,P=0;P<t.q;P++)if(e[P]==-1){for(e[P]=Q,U=h(F,k,6,t.q,15,1),U[0]=P,D=0,L=0;D<=L;){for(f=n?t.i[U[D]].length:t.e[U[D]],s=0;s<f;s++)i=t.i[U[D]][s],e[i]==-1&&!A[t.k[U[D]][s]]&&(U[++L]=i,e[i]=Q);++D}++Q}return Q}function _b(t){var e,A,n;if(t.K)for(ut(t,7),e=0;e<t.g;e++)n=$r(t.G[e]&127),(e<t.g&&(S8(t.p,e)||t.H[e]==8))&(t.G[e]&8)!=0&&(t.G[e]&=-9,--n),n!=0&&(A=t.H[e]&127,A==1?t.G[e]|=1:A==2?t.G[e]|=2:A==4?t.G[e]|=4:A==32?t.G[e]|=32:A==64?t.G[e]|=64:A==16?t.G[e]|=16:A==8&&(t.G[e]|=8))}function T5(t,e,A,n,P,r,i,f,D){var Q,U,L,s,y;return s=n<BU.length&&BU[n]?w.Math.min(3,r):0,y=P<BU.length&&BU[P]?w.Math.min(3,i):0,f=w.Math.min(7,f),D=w.Math.min(7,D),Q=f+(s<<3)+(w.Math.min(127,n)<<5),U=D+(y<<3)+(w.Math.min(127,P)<<5),L=A?8:e?8+t:t,(L<<24)+(Q<U?(Q<<12)+U:(U<<12)+Q)}function $b(t,e){var A,n,P,r,i,f;if(dt(t,e)!=1)return!1;for(r=0;r<2;r++){for(A=t.D[r][e],f=t.D[1-r][e];t.o[A]==2&&t.j[A]==2&&t.C[A]<10;)for(i=0;i<2;i++)if(n=t.i[A][i],n!=f){if(t.j[n]==1||(P=t.k[A][i],dt(t,P)==1&&P<e))return!0;f=A,A=n;break}if(t.j[A]==1)return!0}return!1}function ab(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y;for(y=h(rt,ft,6,n.length,16,1),f=t,Q=0,L=f.length;Q<L;++Q)if(r=f[Q],e[r]==0){if(n[A[r]]||y[A[r]])return!1;y[A[r]]=!0}for(s=-1,i=t,D=0,U=i.length;D<U;++D)if(r=i[D],e[r]==0){if(s==-1)s=P[r];else if(P[r]!=s)return!1}return!0}function tR(t,e,A,n){var P,r;if(e){if(P=t.a.Rb(A.c,e.c),P==0)return n.d=hd(e,A.d),n.b=!0,e;r=P<0?0:1,e.a[r]=tR(t,e.a[r],A,n),zP(e.a[r])&&(zP(e.a[1-r])?(e.b=!0,e.a[0].b=!1,e.a[1].b=!1):zP(e.a[r].a[r])?e=_u(e,1-r):zP(e.a[r].a[1-r])&&(e=zB(e,1-r)))}else return A;return e}function eR(t,e,A,n,P){var r,i,f;return r=A==-1?w.Math.abs(P[e].a-P[t.B[0]].a)/8:w.Math.abs(P[e].a-P[A].a),n<r&&(n=r),i=A==-1?w.Math.abs(P[e].b-P[t.B[0]].b)/8:w.Math.abs(P[e].b-P[A].b),n<i&&(n=i),t.jb&&(f=A==-1?w.Math.abs(P[e].c-P[t.B[0]].c)/8:w.Math.abs(P[e].c-P[A].c),n<f&&(n=f)),n}function AR(t,e,A,n,P){var r,i,f,D,Q,U;if(e==A)return 0;for(t.$b(1),D=h(F,k,6,t.q,15,1),f=h(F,k,6,t.q,15,1),f[0]=e,D[e]=1,i=0,Q=0;i<=Q&&D[f[i]]<=n;){for(U=0;U<t.e[f[i]];U++){if(r=t.i[f[i]][U],r==A)return D[f[i]];D[r]==0&&(P==null||P.length<=r||!P[r])&&(f[++Q]=r,D[r]=D[f[i]]+1)}++i}return-1}function PZ(t,e,A){var n,P,r,i,f;return r=XJ(e,A),r==-1?-1:(P=(n=ne(e,r+1),n==-1?e.length:n),i=(pt(A,r,e.length),e.substr(A,r-A)),f=(pt(r+1,P,e.length),e.substr(r+1,P-(r+1))),(f.startsWith(\"(\")&&f.endsWith(\")\")||f.startsWith('\"')&&f.endsWith('\"'))&&(f=UA(f,1,f.length-1)),ze(t,i,f),lA(e,P))}function eA(t,e){var A;return U1(e),A=2-t.e,A==0?t:A>0?A<di.length&&t.a+dl[vt(A)]<54?new a3(t.f*di[vt(A)]):new pD(GN((!t.c&&(t.c=kP(E1(t.f))),t.c),vt(A)),2):t.a<54&&-A<di.length?_Y(t.f,di[vt(-A)],e):f$((!t.c&&(t.c=kP(E1(t.f))),t.c),ii(-A),e)}function h5(t,e){oo();var A,n,P,r,i;for(P=0;P<t.q;P++)for(i=Xn(t),K0(i,P,H4),ut(i,15),n=0;n<i.f;n++)(i.u[n]&Tn)!=0&&pQ(i,n)==-1&&(r=(ut(i,7),i.o[n]==2&&i.j[n]==2?ib(i,n,!1):Ns(i,n,!1)),r!=-1&&(t.H[r]=257,t.T=0,t.D[1][r]==n&&(A=t.D[0][r],t.D[0][r]=n,t.T=0,t.D[1][r]=A,t.T=0),He(t,n,e,0)))}function rZ(t,e,A,n,P,r){i8();var i,f,D,Q,U,L,s,y,l,T,c;for(s=t.o,i=h(rt,ft,6,s.q,16,1),Q=h(F,k,6,s.q,15,1),Q[0]=e,i[e]=!0,l=A,T=0,c=l.length;T<c;++T)y=l[T],i[y]=!0;for(wf(t,e,n,P,r),D=0,U=0;D<=U;){for(L=0;L<s.e[Q[D]];L++)f=s.i[Q[D]][L],i[f]||(i[f]=!0,Q[++U]=f,wf(t,f,n,P,r));++D}}function iZ(t){var e,A,n,P;if(t.g.K)for(e=0;e<t.g.r;e++)n=ee(t.g,e),(n&127)!=0&&(A=-1,P=0,(n&16)!=0&&(A=16,++P),(n&64)!=0&&(A=64,++P),(n&32)!=0&&(A=32,++P),(n&4)!=0&&(A=4,++P),(n&2)!=0&&(A=2,++P),(n&8)!=0&&(A=8,++P),(n&1)!=0&&(A=1,++P),A!=-1&&(w0(t.g,e,A),P==1&&Ge(t.g,e,127,!1)))}function nR(t,e,A,n,P){var r,i,f,D,Q,U;if(ut(t,7),!((t.u[e]&hn)==0||A&&!(e<t.f&&i0(t.p,e))))for(D=h(F,k,6,t.f,15,1),D[0]=e,n[e]=!0,f=0,Q=0;f<=Q;){for(U=0;U<t.j[D[f]];U++)i=t.k[D[f]][U],!P[i]&&(t.F[i]&64)!=0&&(!A||i<t.g&&Re(t.p,i))&&(P[i]=!0,r=t.i[D[f]][U],n[r]||(n[r]=!0,D[++Q]=r));++f}}function cf(t,e,A,n,P,r){var i,f,D,Q,U,L;for(t.a[A]=e<<16>>16,t.c[A]=t.c[A]+t.c[n]<<16>>16,t.d[A][0]=P<<16>>16,t.d[A][1]=r<<16>>16,L=t.a.length-1,D=h(Yt,at,6,L,15,1),Q=h(Yt,at,6,L,15,1),U=h(Yt,te,16,L,0,2),f=0,i=0;i<t.a.length;i++)i!=n&&(D[f]=t.a[i],Q[f]=t.c[i],U[f]=t.d[i],++f);t.a=D,t.c=Q,t.d=U}function A9(t){var e;switch(e=-1,t.w){case 18:e=9;break;case 2:t.t!=-1&&r0(t.V,t.t)||t.u!=-1&&mP(t.V,t.u)?e=t.W?4:t.Z?3:2:t.t!=-1||t.u!=-1?e=11:t.v?e=t.W?4:t.Z&&!Zt(t.v,62)?3:2:e=t.Z?t.d?8:6:t.d?7:5;break;case 4:e=1;break;case 22:e=0;break;case 21:e=12;break;default:e=11}t.s!=e&&(t.s=e,Yd(t._,e))}function wf(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y;L=n.a,s=n.b,y=n.c,r=w.Math.cos(P),Q=w.Math.sin(P),U=1-r,i=t.k[e].a-A.a,f=t.k[e].b-A.b,D=t.k[e].c-A.c,eo(t,e,A.a+(U*L*L+r)*i+(U*L*s+Q*y)*f+(U*L*y-Q*s)*D),Ao(t,e,A.b+(U*L*s-Q*y)*i+(U*s*s+r)*f+(U*s*y+Q*L)*D),no(t,e,A.c+(U*L*y+Q*s)*i+(U*y*s-Q*L)*f+(U*y*y+r)*D)}function fZ(t,e){var A,n,P,r,i,f,D,Q;for(Q=new f1,A=0;A<e.q;A++)if(n=e.a[A],!(e.e[A]<=1&&zD(t.b,n)))for(r=0;r<e.e[A];r++)for(f=e.i[A][r],i=0;i<e.e[A];i++)D=e.i[A][i],!(f>D)&&CJ(t,e,f,A,D)&&(P=new mk(t,e,f,A,D),(w.Math.abs(P.d)>LU||w.Math.abs(P.e)>LU)&&Q.a.push(P));return Q}function DZ(t,e,A,n,P){var r,i,f,D,Q,U,L;switch(r=e.a[A],i=e.a[P],Q=D8(t,e,A,n),L=D8(t,e,n,P),D=r<=i?Q:L,U=r<i?L:Q,f=dm(t,e,A,n,P),f){case 1:return D>0||D==U?1:2;case 2:return 3;case 3:return 5;case 4:return 4;case 5:return D>0||D==U?6:7;case 6:return 8;case 7:return D>0||D==U?9:10;case 8:return 11}return 0}function uZ(t,e){var A,n,P;if(t.c)return 3;for(P=new Wt(t.e);P.a<P.c.a.length;)n=t1(P),n.a!=iU&&n.a!=It&&(n.a=e[n.a]);switch(A=!1,t.e.a.length){case 2:if(N(t.e,0).a>=iU||N(t.e,1).a>=iU)return 3;A=_z(t,e);break;case 3:mt(t.e,new Z3(t,It,t.b));case 4:A=bz(t);break;default:return 3}return t.d^A?1:2}function PR(t,e,A){var n,P;if(dt(t,e)!=1)return!1;if((t.u[A]&3)!=0)return!0;for(P=0;P<t.r;P++)if(P!=e&&t.H[P]==2&&(t.D[0][P]==A&&(t.u[t.D[1][P]]&3)!=0||t.D[1][P]==A&&(t.u[t.D[0][P]]&3)!=0))return!0;for(n=0;n<t.r;n++)if(n!=e&&t.H[n]==1&&(t.D[0][n]==A||t.D[1][n]==A)&&(t.F[n]&3)!=0)return!0;return!1}function QZ(t){var e,A,n,P;for(n=0;n<t.i.r;n++)for(P=0;P<2;P++)e=z(t.i,P,n),A=z(t.i,1-P,n),K(t.i,e)==1&&ye(t.i,e)>1&&K(t.i,A)>1&&t.b[A]!=0&&(ye(t.i,e)==2?(t.a==null&&(t.a=h(F,k,6,t.i.q,15,1)),++t.a[A]):(t.c==null&&(t.c=h(F,k,6,t.i.q,15,1)),++t.c[A]),Zw(t.i,e));(t.a!=null||t.c!=null)&&Pi(t.i)}function UZ(t){var e,A,n,P,r,i,f,D,Q;if(t.b){for(e=h(F,k,6,t.F.a.length,15,1),n=0;n<e.length;n++)for(e[n]=n,r=N(t.a,n),i=0,f=r.length;i<f;++i)P=r[i],P&&(e[n]+=Q0);for(e.sort(Fe(u0.prototype.gd,u0,[])),Q=new f1,D=new f1,A=0;A<e.length;A++)mt(Q,N(t.F,e[A]&w1)),mt(D,N(t.a,e[A]&w1));t.F=Q,t.a=D}}function oZ(t){return t.t!=-1?(wQ(t.V,t.t),t.t=-1,t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)),!0):t.u!=-1?(Zh(t.V,t.u),t.u=-1,t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)),!0):t.v&&!t.v.j?(Z8(t.I,t.v),t.v=null,t.eb=w.Math.max(t.eb,1),n1(t.k),!0):!1}function LZ(t,e){var A,n,P,r;for(P=2+2*w.Math.sqrt(t.d.q),n=0;n<t.d.q;n++)Mt(t.d,n)!=1&&(eo(e,n,P*jn(t.f)-P/2),Ao(e,n,P*jn(t.f)-P/2),no(e,n,P*jn(t.f)-P/2));for(A=0;A<t.d.q;A++)Mt(t.d,A)==1&&(r=_(t.d,A,0),eo(e,A,e.k[r].a+4*jn(t.f)-2),Ao(e,A,e.k[r].b+4*jn(t.f)-2),no(e,A,e.k[r].c+4*jn(t.f)-2));po(e)}function sZ(t,e,A){var n,P,r,i;if(n=A[t.a],P=A[t.b],t.i==(t9(),yl))return O0(e,n,P,t.g),!0;if(r=D1(e,n,P),t.i==Ll)return w0(e,r,t.g),!0;if(t.i==sl){if(i=dt(e,r)+t.f,i>=0&&i<=3)return w0(e,r,(Y1(),i==0?16:i==1?1:i==2?386:i==3?4:i==4?32:64)),!0}else if(t.i==ll)return e.H[r]=512,!0;return!1}function c5(t,e,A,n){var P;switch(P=A/2,n&m1){case m1:if(e){t.w.a=e.c+e.b/2,t.w.b=e.d+e.a-P;break}case 0:t.w.a=t.v.c+t.v.b/2,t.w.b=t.v.d+t.v.a+P,e&&t.w.b>e.d+e.a-P&&(t.w.b=e.d+e.a-P);break;case l8:if(e){t.w.a=e.c+e.b/2,t.w.b=e.d+P;break}case T8:t.w.a=t.v.c+t.v.b/2,t.w.b=t.v.d-P,e&&t.w.b<e.d+P&&(t.w.b=e.d+P)}}function rR(t,e){var A,n;for(this.k=h(o9,or,26,t.g.a.length+t.f.a.length,0,1),n=0;n<t.g.a.length+t.f.a.length;n++)this.k[n]=n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length);for(this.n=t.g.a.length,this.a=h(o9,or,26,t.a.a.length,0,1),A=0;A<t.a.a.length;A++)this.a[A]=N(t.a,A);this.o=!1,this.c=1,this.g=e,Fs(this)}function yZ(t,e){var A,n,P,r,i,f,D,Q;for(Q=On(t.H),f=0;f<Q.j.a.length;f++)if(Af(Q,f,e)){for(D=h(F,k,6,2,15,1),P=0;P<2;P++)for(D[P]=It,n=z(t.H,P,e),r=0;r<O(t.H,n);r++)A=_(t.H,n,r),A!=z(t.H,1-P,e)&&D[P]>A&&(D[P]=A);return i=0,yA(Q,f,D[0])&&++i,yA(Q,f,D[1])&&++i,i==2?2:i==1?1:2}return 0}function iR(t,e,A,n){var P,r,i,f,D,Q,U,L,s;for(L=A[n],i=A[n+1]-L,s=h(Dtt,A0,175,i,0,1),D=0;D<i;D++)s[D]=new H0,s[D].c=t[D+L],s[D].b=e[D+L],s[D].a=D+L;for(P=new N0,U=n;U>1;U--){for(Q=0;Q<i;Q++)s[Q].c+=t[s[Q].b]<<16,s[Q].b=e[s[Q].b];for(Wi(s,0,s.length,P),r=1,f=0;f<i;f++)t[s[f].a]=r,f!=i-1&&oB(s[f],s[f+1])!=0&&++r}}function lZ(t){var e,A,n,P,r,i;if(t.R.f==0){t.N=\"\";return}for(r=0,n=!1,P=!1,A=0;A<t.R.f;A++)r<C1(t.R,A)&&(r=C1(t.R,A)),Bn(t.R,A)?n=!0:P=!0;if(r==0){t.N=\"\";return}for(i=J8(r),_3(t,!0),Jt(t,i,4),Jt(t,n?1:0,1),Jt(t,P?1:0,1),e=0;e<t.R.f;e++)Jt(t,C1(t.R,t.B[e]),i),n&&P&&Jt(t,Bn(t.R,t.B[e])?1:0,1);t.N=ML(t)}function w5(t,e,A,n){var P,r,i;for(P=0;P<2;P++)if(r=t.i[A[1]][P],r!=A[0])return r==e||(i=t.k[A[1]][P],A[0]=A[1],A[1]=r,t.j[r]==1)?!1:(n!=null&&(t.u[A[0]]&I0)==0&&(t.u[A[1]]&I0)==0&&(n[0]=w.Math.max(n[0],i)),t.j[r]==2&&t.o[r]==2&&t.C[r]<=7?w5(t,e,A,n):!0);return!1}function TZ(t){var e;for(t.S=h(rt,ft,6,t.R.f,16,1),e=0;e<t.R.f;e++)if(K(t.R,e)==7){if(O(t.R,e)==4){t.S[e]=!0;continue}if(O(t.R,e)==3){if(M9(t.R,e)==3){t.S[e]=!0;continue}if(p1(t.R,e)==1){t.S[e]=!0;continue}if(EP(t.R,e,!0))continue;if((t.Q&32)!=0){t.S[e]=!0;continue}if(Ss(t.R,e)){t.S[e]=!0;continue}}}}function Vs(t){var e,A,n,P,r,i;for(P8.call(this),i=t&&t.g?t.g.a.length:0,r=t&&t.f?t.f.a.length:0,e=t&&t.a?t.a.a.length:0,n=0;n<i;n++)mt(this.g,new Yr(N(t.g,n)));for(P=0;P<r;P++)mt(this.f,new Yr(N(t.f,P)));for(A=0;A<e;A++)mt(this.a,new Yr(N(t.a,A)));this.b=new us(t.b),t.e!=null&&(this.e=t.e),this.c=t.c||cQ(t)}function hZ(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(s=0,L=-1,i=0;i<t.j.f;i++){U=N(e.g,s),ut(U,1);do++L==U.f&&(L=0,U=dr(e,++s));while(U.K&&gt(V(U.B[L],Pe),0));Ze(U,L,A[i],A[i]<=P)}for(Q=0,D=-1,r=0;r<t.d.f;r++){f=N(e.f,Q),ut(f,1);do++D==f.f&&(D=0,f=w3(e,++Q));while(f.K&&gt(V(f.B[D],Pe),0));Ze(f,D,n[r],n[r]<=P)}}function fR(t){var e,A,n,P,r;if(t.l==0&&t.m==0&&t.h==0)return\"0\";if(t.h==l8&&t.m==0&&t.l==0)return\"-9223372036854775808\";if(t.h>>19!=0)return\"-\"+fR(Wr(t));for(A=t,n=\"\";!(A.l==0&&A.m==0&&A.h==0);){if(P=cL(Of),A=G5(A,P,!0),e=\"\"+E7(In),!(A.l==0&&A.m==0&&A.h==0))for(r=9-e.length;r>0;r--)e=\"0\"+e;n=e+n}return n}function cZ(t,e){var A,n,P,r;if(!ol)return 0;if(Xf[e].bc(me(new BA(t)))!=-1)return 3;for(r=new jD(1),A=new JA,P=0;P<L9[e].a.length;P++)if(u2(new GA(!1),A,N(L9[e],P)),Dn(r,t),Ln(r,A),sn(r,1,r.c)>0)return 3;for(n=0;n<s9[e].a.length;n++)if(u2(new GA(!1),A,N(s9[e],n)),Dn(r,t),Ln(r,A),sn(r,1,r.c)>0)return 2;return 1}function o2(t,e){var A,n,P,r;return r=w.Math.sin(e),A=w.Math.cos(e),n=1-A,P=R1(yt,[h0,wt],[15,6],15,[3,3],2),P[0][0]=t.a*t.a*n+A,P[1][1]=t.b*t.b*n+A,P[2][2]=t.c*t.c*n+A,P[0][1]=t.a*t.b*n-t.c*r,P[1][2]=t.b*t.c*n-t.a*r,P[2][0]=t.c*t.a*n-t.b*r,P[0][2]=t.a*t.c*n+t.b*r,P[1][0]=t.b*t.a*n+t.c*r,P[2][1]=t.c*t.b*n+t.a*r,P}function DR(t,e,A){var n;if(O(t.b,e)==2)return 1;if(n=Jm(t,e,A),O(t.b,e)==3)return R0(t.b,n[0])==R0(t.b,n[1])?Ph(t,e)?2:1:Ph(t,e)?1:0;if(O(t.b,e)==4){if(R0(t.b,n[0])==R0(t.b,n[1])&&R0(t.b,n[0])==R0(t.b,n[2]))return 3;if(R0(t.b,n[0])==R0(t.b,n[1])||R0(t.b,n[0])==R0(t.b,n[2])||R0(t.b,n[1])==R0(t.b,n[2]))return 1}return 0}function wZ(t,e){var A,n,P,r,i;return n=V(e,h1),G(t,0)>=0?(r=Mn(t,n),i=Y9(t,n)):(A=DA(t,1),P=e>>>1,r=Mn(A,P),i=Y9(A,P),i=O1(M1(i,1),V(t,1)),(e&1)!=0&&(G(r,i)<=0?i=l0(i,r):Ug(l0(r,i),n)?(i=O1(i,l0(n,r)),r=l0(r,1)):(i=O1(i,l0(M1(n,1),r)),r=l0(r,2)))),Y(M1(i,32),V(r,h1))}function uR(t,e){var A,n,P;for(A=R1(yt,[h0,wt],[15,6],15,[2,3],2),n=0;n<2;n++)A[n][0]=v9(e,t.f[n])-v9(e,t.f[4]),A[n][1]=F9(e,t.f[n])-F9(e,t.f[4]),A[n][2]=m9(e,t.f[n])-m9(e,t.f[4]);return P=h(yt,wt,6,3,15,1),P[0]=A[0][1]*A[1][2]-A[0][2]*A[1][1],P[1]=A[0][2]*A[1][0]-A[0][0]*A[1][2],P[2]=A[0][0]*A[1][1]-A[0][1]*A[1][0],P}function gZ(t){var e,A,n,P;for(t.L=!0,t.$=h(q,I,6,t.R.f,15,1),t.i=h(q,I,6,t.R.g,15,1),P=i2(t,!0);t.U<t.R.f&&P;){for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],t.c+4,Y(M1(t.f[e],4),t.db[e]<<2));for(A=0;A<t.R.g;A++)ue(t.e[z(t.R,0,A)],t.o[A]),ue(t.e[z(t.R,1,A)],t.o[A]);if(n=Wn(t),t.U==n)break;t.U=n,P=i2(t,!0)}}function g5(t,e){var A,n,P,r,i,f;for(ut(t,e?15:1),t.q=t.f,t.r=t.g,f=h(rt,ft,6,t.f,16,1),P=0;P<t.f;P++)t.e[P]!=t.j[P]&&(A=Uf(t,P,!1),f[P]=t.e[P]==t.j[P]+1&&Cr(t,t.k[P][t.j[P]]),t.e[P]=t.j[P],A!=-1&&(i=Uf(t,P,!0),A!=i&&(r=((t.u[P]&g8)>>>27)-1,(r==-1||r<A)&&XA(t,P,A))));if(e)for(n=0;n<t.f;n++)f[n]&&Ay(t,n);t.T=0}function dZ(t,e){var A,n;return!sv(K(t.k,e))||K(t.k,e)==6&&(!z0(t.k,e)||p1(t.k,e)>0)||(A=_n(t.k,e)==null||X3(t.k,e)[0]==9?0:X3(t.k,e)[0],n=Zi(t.k,e)-A,n<1)?!1:K(t.k,e)==16||K(t.k,e)==34||K(t.k,e)==52?O(t.k,e)==2&&p1(t.k,e)<=0?!1:n!=2:!0}function dt(t,e){if(t.K&&(t.G[e]&127)!=0){if((t.G[e]&9)!=0)return 1;if((t.G[e]&2)!=0)return 2;if((t.G[e]&4)!=0)return 3;if((t.G[e]&32)!=0)return 4;if((t.G[e]&64)!=0)return 5;if((t.G[e]&16)!=0)return 0}switch(t.H[e]&127){case 1:case 8:return 1;case 2:return 2;case 4:return 3;case 32:return 4;case 64:return 5;default:return 0}}function n9(t,e,A,n){var P,r,i,f,D,Q,U,L,s;for(ut(t,1),r=0;r<t.q;r++)e[r]=-1;for(Q=0,P=0;P<t.q;P++)if(e[P]==-1&&(!A||(t.u[P]&I0)!=0)){for(e[P]=Q,U=h(F,k,6,t.q,15,1),U[0]=P,D=0,L=0;D<=L;){for(f=n?t.i[U[D]].length:t.e[U[D]],s=0;s<f;s++)i=t.i[U[D]][s],e[i]==-1&&(!A||(t.u[i]&I0)!=0)&&(U[++L]=i,e[i]=Q);++D}++Q}return Q}function QR(t,e,A){var n,P,r;return r=w.Math.sqrt((t.i[0].a-e)*(t.i[0].a-e)+(t.i[0].b-A)*(t.i[0].b-A)),r<8?1:(P=w.Math.sqrt((t.i[1].a-e)*(t.i[1].a-e)+(t.i[1].b-A)*(t.i[1].b-A)),P<8?2:(n=w.Math.sqrt((t.i[1].a-t.i[0].a)*(t.i[1].a-t.i[0].a)+(t.i[1].b-t.i[0].b)*(t.i[1].b-t.i[0].b)),r+P<n+5?3:0))}function d5(t,e,A){var n,P,r;for(t.f=G(e,0)==0?new aD:new zr(e),t.a=new f1,new f1,t.c=h(yt,wt,6,2,15,1),t.c[0]=Ve,t.c[1]=Ve,t.e=!1,P=0,r=0,n=0;n<t.d.g;n++)!_e(t.d,n)&&dt(t.d,n)==1&&Mt(t.d,z(t.d,0,n))>1&&Mt(t.d,z(t.d,1,n))>1&&(fA(t.d,n)?pr(t.d,n)>4&&++r:++P);t.b=A==-1?1<<1+P+(r/2|0):A,xR(t,w.Math.min(8,t.b))}function UR(t){var e,A,n,P,r;for(P=Z1(t.R,kt(t.L,0)),A=Z1(t.R,kt(t.L,0)),r=X1(t.R,jt(t.L,0)),n=X1(t.R,jt(t.L,0)),e=0;e<t.L.q;e++)P>Z1(t.R,kt(t.L,e))&&(P=Z1(t.R,kt(t.L,e))),A<Z1(t.R,kt(t.L,e))&&(A=Z1(t.R,kt(t.L,e))),r>X1(t.R,jt(t.L,e))&&(r=X1(t.R,jt(t.L,e))),n<X1(t.R,jt(t.L,e))&&(n=X1(t.R,jt(t.L,e)));return new QA(P,r,A-P,n-r)}function oR(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;return r=e.a[A],i=e.a[P],D=D8(t.a,e,A,n),Q=D8(t.a,e,n,P),U=(L=e.a[A],s=e.a[n],y=e.a[P],l=DZ(t.a,e,A,n,P),L>y&&(L=(T=k1(y),k1(y=L),T).a),_9(B(d(F,1),k,6,15,[2,1,3,0]),B(d(F,1),k,6,15,[s,L,y,l]),t)),f=r>i||r==i&&D<Q?1:0,U>=0?j0(t.b[U][4+f]):PX(t.a.i,e,A,n,P)}function LR(){var t,e,A,n,P,r;for(r=new nn(new Fi((A=_D(\"/resources/druglikenessNoIndex.txt\"),c0(),A))),this.a=new f1;P=K1(r),P!=null;){if(n=P.indexOf(k0(9)),n==-1)throw At(new V1(\"line without TAB\"));t=(pt(0,n,P.length),P.substr(0,n)),e=LD(Le((Xt(n+1,P.length+1),P.substr(n+1)))),mt(this.a,new Y7(t,e))}}function sR(t,e){var A,n,P,r,i;if(t.d.q<2)return!0;for(i=new Wt(t.j);i.a<i.c.a.length;)r=t1(i),r.g=!0;for(P=0;P<t.k.length;P++)t.k[P]=!1;for(LZ(t,e),A=new rd(e),zs(t,e,A,0),n=0;MJ(e)&&n<3&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)))&&E_(t,e)!=0;n++)zs(t,e,A,2);return zs(t,e,A,3),zs(t,e,A,4),LG(e)}function BZ(t,e,A,n){var P,r,i,f,D,Q;return r=n==e.length-1?0:n+1,f=n==0?e.length-1:n-1,i=r==e.length-1?0:r+1,dt(t.f,A[n])==2&&(P=qe(t.f,A[n]),P==1||P==2)?(VF(t,e[f],e[n],e[r])^VF(t,e[i],e[r],e[n])&&(P=P==1?2:1),P):WP(t.f,A[n])?(D=KL(On(t.f),A[f],A[n]),Q=KL(On(t.f),A[r],A[n]),D!=-1||Q!=-1?D==Q?2:1:2):0}function vZ(t,e,A,n,P,r){var i,f,D,Q,U,L;for(i=e.a[A],U=B(d(F,1),k,6,15,[e.a[n],e.a[P],e.a[r]]),f=0;f<4;f++){for(L=h(F,k,6,3,15,1),Q=0;Q<3;Q++)L[Q]=t.a.g.a[U[Q]-1][f+1];if(L.sort(Fe(u0.prototype.gd,u0,[])),D=_9(B(d(F,1),k,6,15,[1,0,2,3]),B(d(F,1),k,6,15,[i,L[0],L[1],L[2]]),t),D>=0)return j0(t.b[D][4])}return 0}function FZ(t){iy();var e,A,n,P,r,i,f,D,Q,U;if(t==null||t.length==0)return null;for(i=null,t=ef(t.toLowerCase(),\"-\"),D=b4,Q=0,U=D.length;Q<U;++Q)for(f=D[Q],r=o8(f[0],\";\"),A=r,n=0,P=A.length;n<P;++n){if(e=A[n],A1(ef(e.toLowerCase(),\"-\"),t))return e;if(ef(e.toLowerCase(),\"-\").startsWith(t))if(i==null)i=e;else return\"\"}return i}function B5(t,e){var A,n,P,r,i,f,D,Q;if(i=!1,a1(t.g,e)==0)for(r=1;r<O(t.g,e);r++)for(f=0;f<r;f++)n=_(t.g,e,r),P=_(t.g,e,f),t.G[n]>t.G[P]^n>P&&(i=!i);else for(r=0;r<O(t.g,e);r++){for(A=_(t.g,e,r),Q=0,D=h(F,k,6,3,15,1),f=0;f<O(t.g,A);f++)D[Q]=_(t.g,A,f),D[Q]!=e&&++Q;Q==2&&t.G[D[0]]>t.G[D[1]]^D[0]>D[1]&&(i=!i)}return i}function mZ(t){var e,A,n,P,r;for(r=w.Math.max(t.D.f,t.u.f),t.a=J8(r),t.s=2,A=0;A<t.D.f;A++)t.s=w.Math.max(t.s,O(t.D,A)+xi(t.D,A));for(n=0;n<t.u.f;n++)t.s=w.Math.max(t.s,O(t.u,n)+xi(t.u,n));for(P=w.Math.max(2,(62+t.a+t.s*(t.a+5))/63|0),t.b=h(B4,k2,100,r,0,1),e=0;e<r;e++)t.b[e]=new bo(P);t.F=new EA(t.D,1),t.v=new EA(t.u,1)}function v5(t,e){var A,n,P,r,i;for(i=!1,n=0;n<t.V.q;n++)if(r0(t.V,n)){i=!0;break}if(r=tk(t,i),r){for(z1(t),A=0;A<t.V.q;A++)(!i||r0(t.V,A))&&(e?Be(t.V,A,2*r.a-kt(t.V,A)):Ie(t.V,A,2*r.b-jt(t.V,A)));for(P=0;P<t.V.r;P++)(!i||mP(t.V,P))&&(l1(t.V,P)==257?w0(t.V,P,129):l1(t.V,P)==129&&w0(t.V,P,257));t.eb=w.Math.max(t.eb,1),n1(t.k)}}function yR(t){var e,A,n,P,r;for(n=Kj(t);n;){for(r=!1,A=0;A<O(t.D,n.b);A++)t.I[_(t.D,n.b,A)]==0&&(r=!0);for(P=!1,e=0;e<O(t.u,n.a);e++)t.B[_(t.u,n.a,e)]==0&&(P=!0);if(r&&P)break;t.I[n.b]=Oy,t.B[n.a]=Oy,n=Kj(t)}if(!n){for(A=0;A<t.I.length;A++)t.I[A]==Oy&&(t.I[A]=0);for(e=0;e<t.B.length;e++)t.B[e]==Oy&&(t.B[e]=0)}return n}function kZ(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(U=e.p,D=e.n,Q=J0(t,U[2]),L=ti(z8(Q,J0(t,U[1]))),f=o2(L,D==U[1]?A:-A),P=e.o,r=0,i=P.length;r<i;++r)n=P[r],n!=D&&(s=t.k[n].a-Q.a,y=t.k[n].b-Q.b,l=t.k[n].c-Q.c,eo(t,n,s*f[0][0]+y*f[0][1]+l*f[0][2]+Q.a),Ao(t,n,s*f[1][0]+y*f[1][1]+l*f[1][2]+Q.b),no(t,n,s*f[2][0]+y*f[2][1]+l*f[2][2]+Q.c))}function u8(t,e,A){var n,P,r;if(A!=null&&(A.length==0?A=null:(n=SA(A,321),(n!=0&&n==t.C[e]||A1(A,\"?\"))&&(K0(t,e,n),A=null))),A==null){if(t.t!=null&&t.t[e]!=null)return t.t[e]=null,!0}else if(t.t==null&&(t.t=h(q,w8,10,t.M,0,2)),t.t[e]==null||!A1(rn((r=t.t[e],c0(),r)),A))return t.t[e]=KA((P=A,c0(),P)),!0;return!1}function bZ(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(ut(e,1),l=t.k,T=0,c=l.length;T<c;++T)y=l[T],Q=A[y.a],U=A[y.b],L=D1(e,Q,U),L==-1?O0(e,Q,U,y.e):y.e==-1?e.H[L]=512:y.e!=-2&&w0(e,L,y.e);if(f=Pi(e),t.a.length!=0)for(ut(e,7),P=t.a,r=0,i=P.length;r<i;++r)n=P[r],D=f==null?A[n]:f[A[n]],s=e.u[D]&3,ce(e,D,s==1?2:1,!1),Ay(e,D);return f}function RZ(t,e,A){var n,P,r,i,f;if(t.V.K){if(Qe(t.V,e)||Qe(t.V,A)||(n=MA(t.V,e),P=MA(t.V,A),n==null^P==null))return!1;if(n!=null){if(n.length!=P.length)return!1;for(r=0;r<n.length;r++)if(n[r]!=P[r])return!1}if(i=gt(V(o0(t.V,e),1),0),f=gt(V(o0(t.V,A),1),0),i!=f)return!1}return K(t.V,e)==K(t.V,A)}function lR(){lR=B1,OE=B(d(Yt,1),at,6,15,[0,60,120,180,240,300]),xE=B(d(Yt,1),at,6,15,[17,17,17,17,17,17]),NE=B(d(Yt,2),te,16,0,[B(d(Yt,1),at,6,15,[-20,20]),B(d(Yt,1),at,6,15,[40,80]),B(d(Yt,1),at,6,15,[100,140]),B(d(Yt,1),at,6,15,[160,200]),B(d(Yt,1),at,6,15,[220,260]),B(d(Yt,1),at,6,15,[280,320])])}function F5(t,e){var A,n,P,r;return A=t.D[0][e],n=t.D[1][e],P=tA(t,A),r=tA(t,n),!P&&!r?e<t.g&&Re(t.p,e)?mC:J6+dt(t,e)/10:P&&r||P&&_0(t,n)||r&&_0(t,A)?UU:P&&um(t,n,A)||r&&um(t,A,n)?py:P&&qF(t,n,A)||r&&qF(t,A,n)?$6:P&&n<t.f&&i0(t.p,n)||r&&A<t.f&&i0(t.p,A)?1.9500000476837158:J6}function jZ(t){var e,A;for(t=V(t,rr),A=0;A<(X5(),ci).length;A++)if(P0(t,ci[A]))return XV[A];return e=new Fn(\"R\"),gt(V(t,L8),0)&&(e.a+=\"0\"),gt(V(t,ir),0)&&(e.a+=\"3\"),gt(V(t,fr),0)&&(e.a+=\"4\"),gt(V(t,Dr),0)&&(e.a+=\"5\"),gt(V(t,ur),0)&&(e.a+=\"6\"),gt(V(t,Qr),0)&&(e.a+=\"7\"),gt(V(t,pf),0)&&(e.a+=\"8\"),e.a}function pZ(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(L=vj(t.D),f=vj(t.u),i=h(HE,h0,44,8,0,1),y=Fb(t.D,L),Q=Fb(t.u,f),U=0;U<=7;U++)for(i[U]=new Ji(new Il),r=(n=new N8(new x8(new w9(y[U]).a).b),new g9(n));p9(r.a.a);)P=(A=Br(r.a),A.dd()),s=le(y[U],P),D=le(Q[U],P),D!=null&&(e=h(F,D0,7,2,0,2),e[0]=s,e[1]=D,ze(i[U],P,e));return i}function CZ(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(A=e.a,s=e.i,i=1;i<A.length;i++)if(A[i]!=null){for(f=0;f<i;f++)if(A[i][f]!=0){for(U=t.f[i][f],L=new fm(s,U,A[i][f],t.D),D=!1,Q=null,n=z9(t.i,e.d).c,r=new Wt(n);r.a<r.c.a.length;){if(P=t1(r),Qz(P,L)){D=!0;break}Uz(P,L)&&(!Q&&(Q=new f1),Q.a.push(P))}D||(Q&&ts(n,Q),n.a.push(L))}}}function m5(t,e){var A,n,P,r;if(t.o[e]==2&&t.j[e]==2&&t.n[e][0]==2){for(P=0;P<2;P++)if(A=Tm(t,e,t.i[e][P]),A!=-1)for(r=0;r<t.j[A];r++)n=t.k[A][r],(t.H[n]==257||t.H[n]==129)&&t.D[0][n]==A&&(t.H[t.k[A][r]]=1);return}if(t.o[e]==0||t.C[e]>=15)for(P=0;P<t.e[e];P++)n=t.k[e][P],(t.H[n]==257||t.H[n]==129)&&t.D[0][n]==e&&t.D[0][n]==e&&(t.H[n]=1)}function TR(t,e,A){var n,P,r,i,f;if(t.b){for(t.C=h(rt,ft,6,e.length,16,1),P=new Wt(t.b);P.a<P.c.a.length;)if(n=t1(P),t.f==null||A==-1&&t.f[n.a]==-1&&t.f[n.b]==-1||A!=-1&&(t.f[n.a]==A||t.f[n.b]==A)){if(f=h(F,k,6,n.c+2,15,1),r=l2(t.H,f,t.G[n.a],t.G[n.b],n.c+1,e,null)-1,r<n.d||r>n.c)return!1;for(i=1;i<=r;i++)t.C[f[i]]=!0}}return!0}function MZ(t){var e,A,n,P,r,i;if(t.L.K){for(i=t.W,W1(t,-7),e=0;e<t.L.f;e++)Qe(t.L,e)&&t.ub(Z1(t.R,kt(t.L,e))-i,X1(t.R,jt(t.L,e))-i,2*i);for(t.Ab(2*t.W),r=new L1,P=0;P<t.L.r;P++)A=z(t.L,0,P),n=z(t.L,1,P),gt(V(V(o0(t.L,A),o0(t.L,n)),Pe),0)&&(r.a=Z1(t.R,kt(t.L,A)),r.c=X1(t.R,jt(t.L,A)),r.b=Z1(t.R,kt(t.L,n)),r.d=X1(t.R,jt(t.L,n)),t.qb(r))}}function HZ(t,e){var A,n,P,r,i,f,D,Q,U;for(U=new f1,A=0;A<e.q;A++)for(i=0;i<e.e[A];i++)for(n=e.i[A][i],f=0;f<e.e[n];f++)if(P=e.i[n][f],A!=P)for(D=0;D<e.e[P];D++)r=e.i[P][D],!(n==r||A==r)&&r>A&&(Q=new Lm(t,e,A,n,P,r),(w.Math.abs(Q.e)>.001||w.Math.abs(Q.f)>.001||w.Math.abs(Q.g)>.001)&&U.a.push(Q));return U}function hR(t){var e,A,n,P,r,i,f,D,Q;for(Q=0,ut(t,7),n=0;n<t.g;n++)if(dt(t,n)==1&&(t.F[n]&64)==0){for(f=!0,i=0;i<2;i++){if(e=t.D[i][n],t.j[e]==1){f=!1;break}if(t.C[e]==7&&!(e<t.f&&i0(t.p,e))){for(A=t.D[1-i][n],D=0;D<t.j[A];D++)if(P=t.i[A][D],r=t.k[A][D],r!=n&&dt(t,r)>1&&!(P<t.f&&i0(t.p,P))&&tA(t,P)){f=!1;break}}}f&&!$b(t,n)&&++Q}return Q}function hA(t,e,A,n,P,r){var i,f,D,Q;if(A=w.Math.max(0,A),n=w.Math.min(r.lc(),n),i=(n-A)/2|0,D=A,f=n,r.kc(D,t)>e||r.kc(f-1,t)<e)return-1;for(;n>=A;){if(i=A+((n-A)/2|0),Q=r.kc(i,t),Q==e)if(P&&i>D&&r.kc(i-1,t)==e)n=i;else if(!P&&i<f-1&&r.kc(i+1,t)==e)A=i;else return i;else Q>e?n=i:Q<e&&(A=i);if(n-A==1&&r.kc(A,t)<e&&r.kc(n,t)>e)break}return-1}function cR(t,e,A){var n,P,r,i;if(O(t.c,e)==2)return 1;if(n=zJ(t,e,A),O(t.c,e)==3)return R0(t.c,n[0])==R0(t.c,n[1])?a1(t.c,e)==1&&K(t.c,e)<10||vn(t.c,e)||EP(t.c,e,!0)?2:1:a1(t.c,e)==1&&K(t.c,e)<10||vn(t.c,e)||EP(t.c,e,!0)?1:0;if(O(t.c,e)==4){for(P=0;P<n.length;P++)for(i=R0(t.c,n[P]),r=P+1;r<n.length;r++)if(i==R0(t.c,n[r]))return 1}return 0}function k5(t,e,A,n){var P,r,i,f,D;for(r=new MP(t.f,e.e.length+A.e.length-n,e.i|A.i),P=0,f=0;f<e.e.length;f++)r.e[P]=e.e[f],r.k[P]=e.k[f],r.a[P]=e.a[f],r.b[P++]=e.b[f];for(i=0;i<A.e.length;i++)D=r8(e,A.e[i]),D==-1?(r.e[P]=A.e[i],r.k[P]=A.k[i],r.a[P]=A.a[i],r.b[P++]=A.b[i]):r.k[D]<A.k[i]&&(r.k[D]=A.k[i],r.a[D]=A.a[i],r.b[D]=A.b[i]);return r}function b5(t,e,A,n){var P,r,i,f;if(f=new L1,!(e.a==e.b&&e.c==e.d)){for(f.a=e.a,f.c=e.c,f.b=e.b,f.d=e.d,i=ok(f),P=0;P<t.$.a.length;P++)if(r=N(t.$,P),!(r.c>i.c+i.b||r.d>i.d+i.a||i.c>r.c+r.b||i.d>r.d+r.a)){if(ZD(t,f.a,f.c,P)){if(ZD(t,f.b,f.d,P))return;qs(t,f,0,P),b5(t,f,A,n);return}if(ZD(t,f.b,f.d,P)){qs(t,f,1,P),b5(t,f,A,n);return}}sW(t,f,A,n)}}function VZ(t){var e,A,n,P,r,i,f,D,Q;for(D=h(F,k,6,t.j.q,15,1),n=0;n<t.j.r;n++)if(l1(t.j,n)==8)for(i=0;i<2;i++)D[z(t.j,i,n)]=1;for(P=0;P<t.j.r;P++)for(Q=dt(t.j,P),r=0;r<2;r++)D[z(t.j,r,P)]+=Q;for(A=0;A<t.j.r;A++)if(dt(t.j,A)==1){for(r=0;r<2;r++)if(f=z(t.j,1-r,A),_0(t.j,f)&&(e=z(t.j,r,A),tA(t.j,e)&&D[e]>lT(t.j,e))){w0(t.j,A,16);continue}}}function ut(t,e){var A,n,P,r;if(qj(t,e),(e&~t.T)!=0){for((t.T&15)!=0&&t.q>1&&Ds(t.J[0],t.J[1])&&Ar(new Y8(0),t),t.c&&(e|=128),A=0;A<t.q;A++)t.u[A]&=-67223560;for(n=0;n<t.g;n++)t.F[n]&=-64;P=0,r=0,(e&32)!=0?(P=32,r=1):(e&64)!=0&&(P=64,r=3),(e&128)!=0&&(P|=128,r|=32),t.d=new EA(t,r),Z5(t.d),eN(t.d),vJ(t.d),D_(t)&&(t.d=new EA(t,r)),t.T|=24|P}}function EZ(t,e,A){var n,P,r,i,f,D,Q;for(U3(t.q),t.p[0]=e,t.q[e]=!0,r=0,i=0;r<=i;){for(f=0;f<t.j[t.p[r]].length;f++){if(P=t.j[t.p[r]][f],P==A){for(n=1,D=r;D!=0;)++n,D=t.r[D];for(Q=h(F,k,6,n,15,1),Q[0]=t.k[t.p[r]][f],n=1;r!=0;)Q[n++]=t.o[r],r=t.r[r];return Q}t.q[P]||(t.q[P]=!0,++i,t.p[i]=P,t.o[i]=t.k[t.p[r]][f],t.r[i]=r)}++r}return null}function SZ(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;for(L=e.b-e.a,l=e.d-e.c,D=w.Math.sqrt(L*L+l*l),Q=2*zt(E1(w.Math.round(D/(4*t.Y)))),s=L/(Q-1),T=l/(Q-1),vr(t.L,D1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n]),U=e.a-t.Y/2,y=e.c-t.Y/2,W1(t,P),f=0;f<(Q/2|0);f++)t.ub(U,y,t.Y),U+=s,y+=T;for(W1(t,r),i=0;i<(Q/2|0);i++)t.ub(U,y,t.Y),U+=s,y+=T;W1(t,t.Q)}function qZ(t){for((t.Q&1)!=0&&(t.Q&2)==0&&(t.g=bn(t.f,t.R.f)),(t.Q&I1)==0&&(t.W=h(rt,ft,6,t.R.f,16,1),t.V=h(rt,ft,6,t.R.g,16,1),t.U<t.R.f&&(gX(t),(t.Q&I1)==0&&(s2(t),t.P&&Q2(t.P,t.f)))),t.g==null&&(t.Q&1)!=0&&(t.Q&2)!=0&&(t.g=bn(t.f,t.R.f));t.U<t.R.f;)KK(t),(t.Q&I1)==0&&(s2(t),t.P&&Q2(t.P,t.f));(t.Q&I1)==0&&(s2(t),Ra(t),$_(t))}function IZ(t,e,A,n,P){var r,i,f,D,Q,U,L,s;if(D1(t,e,A)==-1||D1(t,A,n)==-1||D1(t,n,P)==-1)return 0;if(D1(t,P,e)>=0)return 4;for(L=(ut(t,7),t.p),s=new QD,aP(s,k1(e)),aP(s,k1(A)),aP(s,k1(n)),aP(s,k1(P)),Q=0;Q<L.j.a.length;Q++)if(N(L.k,Q).length==5){for(U=new QD,i=N(L.j,Q),f=0,D=i.length;f<D;++f)r=i[f],aP(U,k1(r));if(AQ(U,s))return 5}return 0}function xZ(t,e,A){var n,P,r,i,f,D,Q,U,L;for(U=h(rt,ft,6,A.q,16,1),U[t[0]]=!0,i=0,f=0;i<=f&&A.o[t[i]]<2;){for(Q=0;Q<A.j[t[i]];Q++)n=A.i[t[i]][Q],P=A.k[t[i]][Q],e[P]&&(U[n]||(t[++f]=n,U[n]=!0),e[P]=!1);++i}for(D=f;D>=0;D--)if(A.C[t[D]]<=8)for(L=0;L<A.e[t[D]];L++)r=A.i[t[D]][L],!U[r]&&A.n[t[D]][L]!=0&&(t[++f]=r,U[r]=!0);return f+1}function NZ(t,e){var A,n,P,r,i,f,D,Q;for(r=t,n=e.i[r][0];e.e[r]!=1&&e.o[r]==2&&(Q=n,n=r,r=e.i[r][0]==Q?e.i[r][1]:e.i[r][0],r!=t););for(D=r,i=n,P=2;e.e[i]!=1&&e.o[i]==2&&(Q=D,D=i,i=e.i[i][0]==Q?e.i[i][1]:e.i[i][0],++P,i!=r););for(A=h(F,k,6,P,15,1),A[0]=r,A[1]=n,f=2;f<P;f++)A[f]=e.i[A[f-1]][0]==A[f-2]?e.i[A[f-1]][1]:e.i[A[f-1]][0];return A}function OZ(t){var e,A;if(t.indexOf(\"[\")>=0){if(e=t.indexOf(\" NOT[\"),A=t.indexOf(\"]\",e),e>=0&&A>0)return-(A+1);if(e=t.indexOf(\" [\"),A=t.indexOf(\"]\",e),e>=0&&A>0)return A+1;if(e=t.indexOf(\" 'NOT[\"),A=t.indexOf(\"]'\",e),e>=0&&A>0)return-(A+2);if(e=t.indexOf(\" '[\"),A=t.indexOf(\"]'\",e),e>=0&&A>0)return A+2;x1()}return 0}function GZ(t,e){var A,n,P,r,i,f,D,Q;if(i=xA[0]*t[0]+xA[1]*t[1]+xA[2]*t[2],i==0){t[0]=0,t[1]=0,t[2]=0;return}for(A=e/i,Q=0,D=0,P=0;P<3;P++)t[P]*=A,t[P]<1?D+=xA[P]:(Q+=(t[P]-1)*xA[P],t[P]=1);if(Q!=0){for(f=0,r=0;r<3;r++)t[r]<1&&(t[r]+=Q/D,t[r]>1&&(f+=(t[r]-1)*xA[r],t[r]=1));if(f!=0)for(n=0;n<3;n++)t[n]<1&&(t[n]+=f/xA[n],t[n]>1&&(t[n]=1))}}function Es(t,e,A,n){var P,r,i,f,D,Q,U,L;for(P=0;P<t.f;P++)if(t.C[P]==A&&t.s[P]==0&&xt(t,P)>0)for(f=!1,Q=0;Q<t.j[P];Q++){if(t.n[P][Q]==1&&(r=t.i[P][Q],t.C[r]==n)){for(L=!1,D=!1,U=0;U<t.j[r];U++){if(i=t.i[r][U],t.s[i]<0){D=!0;break}i!=P&&t.C[i]==8&&t.n[r][U]==2&&(L=!0)}if(!D&&L){if(t.s[P]=-1,t.T=0,--e,e==0)return 0;f=!0}}if(f)break}return e}function JZ(t,e,A,n,P){var r,i,f,D;if((e.u[A]&3)!=0&&(e.u[A]&4)==0&&P0(V(e.B[A],c8),0)&&(f=w.Math.abs(e.w[A]),f!=0)){for(i=0;i<t.c.g.a.length;i++)for(r=dr(t.c,i),D=0;D<r.f;D++)if(w.Math.abs(r.w[D])==f)return!!(e.j[A]==n.j[P]||gt(V(r.B[D],ge),0)||(r.u[D]&m1)>>18!=(e.u[A]&m1)>>18)}return!1}function VQ(t,e,A,n){var P,r,i,f,D;f=(e.b-e.a)/10,D=(e.d-e.c)/10,P=new L1,vr(t.L,D1(t.L,A,n))?(r=-3,i=-3):(r=t.p[A],i=t.p[n]),W1(t,r),P.a=e.a,P.c=e.c,P.b=e.a+f*2,P.d=e.c+D*2,t.qb(P),P.a=e.a+f*4,P.c=e.c+D*4,P.b=e.a+f*5,P.d=e.c+D*5,t.qb(P),W1(t,i),P.a=e.a+f*5,P.c=e.c+D*5,P.b=e.a+f*6,P.d=e.c+D*6,t.qb(P),P.a=e.a+f*8,P.c=e.c+D*8,P.b=e.b,P.d=e.d,t.qb(P),W1(t,t.Q)}function R5(t,e,A,n,P){var r,i,f,D,Q,U,L,s;if((t.p&&e<t.f?iA(t.p,e):0)>24||(r=t.e[e],P==null&&(P=h(F,k,6,r,15,1)),!UW(t,e,A,n,P)))return 3;for(D=-1,Q=0;Q<r;Q++)if((P[Q]&1)==1){if(i=t.H[t.k[e][A[Q]]],D!=-1&&D!=i)return 3;D=i}return U=w.Math.abs(P[0]-P[1])==2?1:0,f=P[U]-P[U+1],s=w.Math.abs(f)==3^P[U]<P[U+1],L=r==3||(P[3]&1)==1,s^L^D==129?1:2}function L2(t,e,A,n){var P,r,i,f;if(t.L.q==0)return null;for(i=t.Db(A,n),ut(t.L,(t.G&256)!=0?63:(t.G&512)!=0?95:31),em(t),t.U.a.length=0,t.$.a.length=0,t.B=e,Pk(t),t.Cb(t.X),t.K=!0,r=0;r<t.L.q;r++)zQ(t,r,null);return t.K=!1,P=t.R.c*V8(t.L),Cm(t,P),c5(t,A,P,n),!A||nN(A,t.v)?i:(f=new Ws(t.v,A,P,n),Eu(f,t.R),Nu(f,t.v),pd(f,t.w),i?(Eu(f,i),i):f)}function zZ(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y;for(P=h(F,k,6,n,15,1),r=0,i=0;i<e.e.length;i++)for(f=0;f<A.e.length;f++)e.e[i]==A.e[f]&&(P[r++]=e.e[i]);D=n==1?(Q=r8(e,P[0]),U=r8(A,P[0]),tv(A,e.a[Q]-A.a[U],e.b[Q]-A.b[U]),L=dj(t,e,P[0]),s=dj(t,A,P[0]),y=0,IL(t,e,P[0])==1&&IL(t,A,P[0])==1&&(y=AA),sf(A,A.a[U],A.b[U],L-s+y+Q1),k5(t,e,A,1)):ca(t,e,A,P,n),dF(t,e,A,D)}function YZ(t,e){var A,n,P,r,i,f;if((t.o[e]==1||t.o[e]==2)&&!WP(t.R,e)){i=!1;try{for(r=0;r<2;r++)if(A=z(t.R,r,e),O(t.R,A)==3){for(n=h(F,k,6,2,15,1),P=0,f=0;f<O(t.R,A);f++)Ot(t.R,A,f)!=e&&(n[P++]=_(t.R,A,f));t.f[n[0]]>t.f[n[1]]^A6(t,A,n[0],n[1])&&(i=!i)}}catch(D){if(D=t0(D),Zt(D,19)){t.i[e]=3;return}else throw At(D)}t.o[e]==1^i?t.i[e]=1:t.i[e]=2}}function KZ(t){var e,A,n;for(this.c=new f1,n=0,e=0;e<t.f;e++)n+=xt(t,e);if(n>0)throw At(new C8(\"molecule needs explicit hydrogen atoms for force field calculations\"));for(this.g=t,this.d=3*t.q,this.e=h(yt,wt,6,this.d,15,1),this.i=h(yt,wt,6,this.d,15,1),this.f=!1,this.j=20,A=0;A<t.q;A++)this.i[3*A]=t.J[A].a,this.i[3*A+1]=t.J[A].b,this.i[3*A+2]=t.J[A].c}function wR(t){var e,A,n,P,r,i,f,D,Q,U;for(this.a=new LP,e=0;e<t.q;e++)for(Sr(this.a,new Oi(e,e),(X9(),J4)),A=0;A<t.e[e];A++)for(D=t.i[e][A],f=new Oi(e,D),Sr(this.a,f,Y4),n=0;n<t.e[D];n++)for(Q=t.i[D][n],i=new Oi(e,Q),(!Mu(this.a,i)||J1(qr(this.a,i))===J1(Ti))&&Sr(this.a,i,z4),P=0;P<t.e[Q];P++)U=t.i[Q][P],r=new Oi(e,U),Mu(this.a,r)||Sr(this.a,r,Ti)}function XZ(t){A1(t,U4)&&!PE?(ji(),K3(U4,new ks(\"/resources/forcefield/mmff94/outofplane.csv\",\"/resources/forcefield/mmff94/torsion.csv\")),PE=!0):A1(t,o4)&&!rE?(ji(),K3(o4,new ks(hV,\"/resources/forcefield/mmff94/94s/torsion.csv\")),rE=!0):A1(t,Sy)&&!iE&&(ji(),K3(Sy,new ks(hV,\"/resources/forcefield/mmff94/94s/torsionPlus.csv\")),iE=!0)}function ZZ(t,e){return!e&&(e={keepAbsoluteCoordinates:!1,mode:3}),e=Object.assign({},e),e.keepAbsoluteCoordinates=!!e.keepAbsoluteCoordinates,\"sortByIDCode\"in e?(e.sortByIDCode=!!e.sortByIDCode,MI(t,e.keepAbsoluteCoordinates,e.sortByIDCode)):(typeof e.mode!==nr&&(e.mode=3),e.mode=Math.trunc(e.mode),DI(t,e.keepAbsoluteCoordinates,e.mode))}function gf(t,e,A,n){var P,r,i,f;for(this.e=t,this.g=A,this.a=n,i=-1,f=0;f<Mt(this.e,this.a);f++){if(P=_(this.e,this.a,f),r=Ot(this.e,this.a,f),P==this.g){l1(this.e,r)==386&&(this.j=-1);continue}Gr(this.e,r,this.a)&&(this.i&&(t.u[n]|=Q0),this.i=!0),i==e[P]?(this.d=P,this.f=!0,this.c=fA(this.e,r)):i<e[P]?(i=e[P],this.d=this.b,this.b=P):this.d=P}}function gR(t){var e,A,n,P,r,i,f,D;for(t.t=new f1,n=1,r=0,A=0;A<t.u.f;A++)C1(t.u,A)!=0&&!Bn(t.u,A)&&(r=w.Math.max(r,C1(t.u,A)));if(r!=0){for(P=h(F,k,6,r+1,15,1),e=0;e<t.u.f;e++)C1(t.u,e)!=0&&!Bn(t.u,e)&&(P[C1(t.u,e)]=e+1);for(f=0;f<t.D.f;f++)D=C1(t.D,f),D!=0&&D<=r&&!Bn(t.D,f)&&P[D]!=0&&(i=P[D]-1,t.I[f]=n,t.B[i]=n++,mt(t.t,new gD(f,i)))}return t.t.a.length}function ke(){ke=B1;var t;for(N2=new mA(1,1),EU=new mA(1,10),new mA(1,2),y9=new mA(0,0),uc=new mA(-1,1),FE=B(d(Bi,1),Ye,23,0,[y9,N2,new mA(1,2),new mA(1,3),new mA(1,4),new mA(1,5),new mA(1,6),new mA(1,7),new mA(1,8),new mA(1,9),EU]),SU=h(Bi,Ye,23,32,0,1),t=0;t<SU.length;t++)SU[t]=hu(M1(1,t),0)?we(M1(1,t)):FP(we(p0(M1(1,t))))}function dR(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(r=e.e,r==0)throw At(new p8(gV));return P=e.d,n=e.a,P==1?pW(t,n[0],r):(y=t.a,l=t.d,A=l!=P?l>P?1:-1:rQ(y,n,l),A<0?B(d(Bi,1),Ye,23,0,[y9,t]):(T=t.e,f=l-P+1,U=P,D=T==r?1:-1,i=h(F,k,6,f,15,1),Q=Sj(i,f,y,l,n,P),L=new Ue(D,f,i),s=new Ue(T,U,Q),Rn(L),Rn(s),B(d(Bi,1),Ye,23,0,[L,s])))}function j5(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(Uj(t,e,A,n),Qd(t.p))return null;if(t.k!=null)for(s=t.k,y=0,l=s.length;y<l;++y)L=s[y],I3(t.p,L);if(t.g)for(c=new Wt(t.g);c.a<c.c.a.length;)T=t1(c),wI(t.p,T);if(t.e!=null)for(i=t.e,D=0,U=i.length;D<U;++D)P=i[D],fo(P.R);if(t.b!=null)for(r=t.b,f=0,Q=r.length;f<Q;++f)P=r[f],fo(P.R);return g=t.p,t.p=new Au,g}function Q8(t,e,A){var n,P,r,i,f;return r=!1,i=t.H[e],A==511?r=F_(t,e):EO(t,e,A)&&(A==257||A==129?(n=PR(t,e,t.D[0][e]),P=PR(t,e,t.D[1][e]),A==i?(n==P||P)&&(f=t.D[0][e],t.D[0][e]=t.D[1][e],t.D[1][e]=f,r=!0):(!n&&P&&(f=t.D[0][e],t.D[0][e]=t.D[1][e],t.D[1][e]=f),t.H[e]=A,r=!0)):(t.H[e]=A,r=!0)),r&&(t.T=(i&127)==(A&127)?t.T&7:0,t.G[e]=0),r}function WZ(t){var e,A,n,P,r,i,f,D;if(f=null,A=t.indexOf(\"[\"),n=t.indexOf(\"]\",A),A>=0&&n>0){for(e=h(F,k,6,16,15,1),D=(pt(A+1,n,t.length),t.substr(A+1,n-(A+1))),P=0,i=!0;i&&P<16;)A=D.indexOf(\",\"),r=null,A==-1?(r=D,i=!1):(r=(pt(0,A,D.length),D.substr(0,A)),D=(Xt(A+1,D.length+1),D.substr(A+1))),e[P++]=SA(r,1);f=h(F,k,6,P,15,1),sA(e,0,f,0,P)}return f}function BR(t){var e,A,n,P;for(Uo.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)n=(pt(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(Xt(A+1,t.length+1),t.substr(A+1)):(pt(A+1,e,t.length),t.substr(A+1,e-(A+1))),A1(n,\"text\")?this.e=RW(P):A1(n,\"x\")?RO(this,P):A1(n,\"y\")?jO(this,P):A1(n,\"size\")?nO(this,P):A1(n,\"style\")&&pO(this,P)}function _Z(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(y=e.length,D=y,Xt(0,e.length),e.charCodeAt(0)==45?(L=-1,s=1,--y):(L=1,s=0),r=(Is(),kE)[10],P=y/r|0,c=y%r,c!=0&&++P,f=h(F,k,6,P,15,1),A=mE[8],i=0,l=s+(c==0?r:c),T=s;T<D;T=l,l=T+r)n=c1((pt(T,l,e.length),e.substr(T,l-T)),o1,It),Q=(P9(),Qs(f,f,i,A)),Q+=xJ(f,i,n),f[i++]=Q;U=i,t.e=L,t.d=U,t.a=f,Rn(t)}function vR(t){var e;switch(ut(t,31),e=t.I&w1,t.I&qP){case Q0:return null;case I0:return e==1?\"meso\":\"\"+e+\" meso diastereomers\";case 0:return\"unknown chirality\";case ly:return\"both enantiomers\";case T8:return\"this enantiomer\";case 327680:return\"this or other enantiomer\";case yi:return\"two epimers\";default:return e==1?\"one stereo isomer\":\"\"+e+\" stereo isomers\"}}function FR(t){var e;for(t.T=0,t.C=h(F,k,6,t.M,15,1),t.s=h(F,k,6,t.M,15,1),t.w=h(F,k,6,t.M,15,1),t.J=h(E2,b2,29,t.M,0,1),e=0;e<t.M;e++)t.J[e]=new Nn;t.A=h(F,k,6,t.M,15,1),t.u=h(F,k,6,t.M,15,1),t.B=h(NA,a0,6,t.M,14,1),t.v=null,t.t=null,t.D=R1(F,[D0,k],[7,6],15,[2,t.N],2),t.H=h(F,k,6,t.N,15,1),t.F=h(F,k,6,t.N,15,1),t.G=h(F,k,6,t.N,15,1)}function $Z(t,e,A,n,P,r,i){var f,D,Q,U,L;if(O(t.j,A)==3&&(d0(t.j,A)==1||d0(t.j,A)==2)&&O(t.d,r)==3&&(d0(t.d,r)==1||d0(t.d,r)==2)){for(L=e>n,Q=-1,D=0;D<O(t.j,A);D++)if(Q=_(t.j,A,D),Q!=e&&Q!=n){(Q>n&&Q<e||Q<n&&Q>e)&&(L=!L);break}for(U=P>i,f=0;f<O(t.d,r);f++)if(Q=_(t.d,r,f),Q!=P&&Q!=i){(Q>i&&Q<P||Q<i&&Q>P)&&(U=!U);break}return L==U==(d0(t.j,A)==d0(t.d,r))}return!0}function p5(t,e){var A,n,P,r,i,f;for(i=(t.U&4)!=0,f=!1,P=!1,r=!1,A=null,n=0;n<t.V.q;n++)if(r0(t.V,n))if(f){if(r!=bQ(A,kt(t.V,n),jt(t.V,n))){P=!0;break}}else{if(f=!0,!i)break;A=N(t.I,0),r=bQ(A,kt(t.V,n),jt(t.V,n))}return e?i?P?(vm(t,!0),!0):f?(xv(t,!0),!1):(vm(t,!1),!0):(xv(t,f),!1):i&&(P||!f)}function aZ(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c;for(f=0,s=0;s<A.c.length;s++)for(P=A.e[A.c[s]],c=GD(K(t.k,P)),y=0;y<n.c.length;y++)r=n.e[n.c[y]],l=c+GD(K(t.k,r)),Q=w.Math.abs(e.k[P].a-e.k[r].a),Q<l&&(U=w.Math.abs(e.k[P].b-e.k[r].b),U<l&&(L=w.Math.abs(e.k[P].c-e.k[r].c),L<l&&(D=w.Math.sqrt(Q*Q+U*U+L*L),D<l&&(T=(l-D)/l,i=T*T,f+=i))));return 20*f}function tW(t){var e,A,n,P,r;for(t.a=t.d.f,t.b=h(rt,ft,6,t.k.f,16,1),t.c=h(rt,ft,6,t.k.g,16,1),t.g=new f1,e=pk(t);e!=-1;){if(A=t.g.a.length,Iv(t,new pT(e,-1,-1,!1,!1),A),O(t.k,e)!=0)for(Bk(t,A,!1);A<t.g.a.length-1;){for(;eG(t,N(t.g,A).a);)Bk(t,A,!0);++A}e=pk(t)}for(t.q=h(F,k,6,t.k.f,15,1),n=0,r=new Wt(t.g);r.a<r.c.a.length;)P=t1(r),t.q[P.a]=n++}function mR(t,e,A,n,P){var r,i,f,D,Q,U;if(n&&G1(t,e)>1||!n&&G1(t,e)>2)return!1;for(i=0,r=h(yt,wt,6,4,15,1),D=0;D<t.r;D++){for(Q=0;Q<2;Q++)if(t.D[Q][D]==e){if(i==2){i=3;break}r[i++]=Y0(t,e,t.D[1-Q][D])}if(i==3)break}return i==3?!1:(U=i==1?r[0]+Q1:w.Math.abs(r[0]-r[1])>Q1?(r[0]+r[1])/2:(r[0]+r[1])/2+Q1,f=Q1*(A-2)/A,J5(t,e,A,e,n,U-f/2,Q1-f,P),t.T=0,!0)}function C5(t){var e,A,n,P,r;if(P=new R7(new K2),r=new W7,t.k!=null)for(n=0;n<t.k.length;n++)for(e=0;e<t.k[n].r;e++)ls(P,t.e[n].R.c*hh(t.k[n],e)),ls(r,XT(P)),P.b.a.length<r.b.a.length&&ls(P,XT(r));return A=P.b.a.length+r.b.a.length,A==0?rW(t):t.p.c*(A%2==0?(LD(P.b.a.length==0?null:N(P.b,0))+LD(r.b.a.length==0?null:N(r.b,0)))/2:LD(P.b.a.length==0?null:N(P.b,0)))}function kR(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;for(L=!1,s=0,Q=0;Q<A;Q++)t.H[Q]!=16&&(t.G[Q]&y8)==0&&++s;if(s==0){for(U=0;U<A;U++)(t.G[U]&y8)==0&&++s;L=!0}if(s==0){if(e<2)return n;for(l=Ve,r=1;r<e;r++)for(i=0;i<r;i++)y=nh(P[r],P[i]),y>0&&y<l&&(l=y);return l!=Ve?.6*l:n}for(f=0,D=0;D<A;D++)(L||t.H[D]!=16)&&(t.G[D]&y8)==0&&(f+=nh(P[t.D[1][D]],P[t.D[0][D]]));return f/s}function bR(t,e){var A,n,P,r,i,f,D,Q;for(t.p=new Qo(t,e),n=h(F,k,6,t.f,15,1),P=0;P<t.g;P++)yP(t.p,P)!=0&&(t.F[P]|=64,++n[t.D[0][P]],++n[t.D[1][P]]);for(A=0;A<t.f;A++)n[A]==2?t.u[A]|=re:n[A]==3?t.u[A]|=I1:n[A]>3&&(t.u[A]|=hn);for(Q=0;Q<t.p.j.a.length;Q++)for(i=h3(t.p,Q),D=V7(t.p,Q),f=i.length,r=0;r<f;r++)t.u[i[r]]|=8,t.F[D[r]]|=128,t.H[D[r]]==386&&(t.H[D[r]]=2)}function RR(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(U=-1,L=-1,s=-1,r=h(rt,ft,6,O(t.c,e),16,1),D=0;D<O(t.c,e);D++)if(!r[D]&&(P=_(t.c,e,D),P!=A&&(i=R0(t.c,P),L<i))){for(f=!1,Q=D+1;Q<O(t.c,e);Q++)if(n=_(t.c,e,Q),n!=A&&R0(t.c,n)==i){if(r[Q]=!0,f)return P;f=!0}f?s=P:(L=i,U=P)}return U==-1&&(a1(t.c,e)==1&&K(t.c,e)<10||vn(t.c,e)||EP(t.c,e,!0))?s:U}function eW(t){var e,A,n,P,r,i,f,D,Q,U,L;for(n=J8(t.f.f),D=2,A=0;A<t.f.f;A++)D=w.Math.max(D,Mt(t.f,A));for(r=(62+2*n+D*(n+1))/63|0,P=h(B4,k2,100,t.f.q,0,1),e=0;e<t.f.q;e++)P[e]=new bo(r),$e(P[e],e);for(L=h(F,k,6,t.f.q,15,1),i=0;i<t.f.g;i++)f=qe(t.f,i),(f==1||f==2)&&(ue(P[z(t.f,0,i)],f),ue(P[z(t.f,1,i)],f));Q=Hm(P,L);do U=Q,ZX(t,P,L,n,D),Q=Hm(P,L);while(U!=Q);return L}function jR(t,e,A,n){mQ();var P,r,i,f,D,Q;if(i=0,Q=0,P=0,n==null&&(n=h(Ee,PA,6,3,15,1)),D=w.Math.min(t,w.Math.min(e,A)),f=w.Math.max(t,w.Math.max(e,A)),P=f,r=f-D,r==0)return P=D,i=0,n[0]=i,n[1]=Q,n[2]=P,n;if(f!=0)Q=r/f;else return Q=0,i=0,n[0]=i,n[1]=Q,n[2]=P,n;return t==f?i=(e-A)/r:e==f?i=2+(A-t)/r:i=4+(t-e)/r,i*=60,i<0&&(i+=360),n[0]=i/360,n[1]=Q,n[2]=P,n}function AW(t,e,A,n,P,r){var i,f,D,Q,U,L,s;for(Q=EF(e)-EF(t),i=Xk(e,Q),D=S0(0,0,0);Q>=0&&(f=xz(t,i),!(f&&(Q<22?D.l|=1<<Q:Q<44?D.m|=1<<Q-22:D.h|=1<<Q-44,t.l==0&&t.m==0&&t.h==0)));)U=i.m,L=i.h,s=i.l,i.h=L>>>1,i.m=U>>>1|(L&1)<<21,i.l=s>>>1|(U&1)<<21,--Q;return A&&WL(D),r&&(n?(In=Wr(t),P&&(In=kF(In,(Xr(),ec)))):In=S0(t.l,t.m,t.h)),D}function c1(t,e,A){var n,P,r,i,f;if(t==null)throw At(new YP(Pr));for(r=t.length,i=r>0&&(Xt(0,t.length),t.charCodeAt(0)==45||(Xt(0,t.length),t.charCodeAt(0)==43))?1:0,n=i;n<r;n++)if(KJ((Xt(n,t.length),t.charCodeAt(n)))==-1)throw At(new YP(g2+t+'\"'));if(f=parseInt(t,10),P=f<e,isNaN(f))throw At(new YP(g2+t+'\"'));if(P||f>A)throw At(new YP(g2+t+'\"'));return f}function nW(t,e){var A,n,P,r;if(e>0&&(e=ns(t,e,9)),e>0&&(e=ns(t,e,17)),e>0&&(e=ns(t,e,35)),e>0&&(e=ns(t,e,53)),e>0){for(A=0;A<t.f;A++)if(t.s[A]>0){for(P=!1,r=0;r<t.j[A];r++)if(n=t.i[A][r],t.s[n]==0&&tA(t,n)&&xt(t,n)>0){if(t.s[n]=-1,t.T=0,--e,e==0)return 0;P=!0;break}if(P)continue}}return e>0&&(e=Es(t,e,8,16)),e>0&&(e=Es(t,e,8,15)),e>0&&(e=Es(t,e,8,6)),e>0&&(e=Es(t,e,7,16)),e}function pR(t,e){var A,n,P,r,i,f,D,Q;for(P=0;P<t.g.g;P++)if((ee(t.g,P)&h8)!=0){if(r=qe(t.g,P),r==0)continue;if(A=z(t.g,0,P),n=z(t.g,1,P),t.f==null||e==-1&&t.f[A]==-1&&t.f[n]==-1||e!=-1&&(t.f[A]==e||t.f[n]==e)){if(i=t.G[A],f=t.G[n],D=D1(t.H,i,f),Q=qe(t.H,D),Q==0&&(WP(t.H,D)&&(Q=yZ(t,D)),Q==0)||r==3||Q==3)continue;if(NX(t,P)==(r==Q))return!1}}return!0}function PW(t,e,A){var n,P,r,i,f,D;f=E1(di[A]),i=l0(E1(t.e),A),D=E1(t.f),r=Mn(D,f),P=Y9(D,f),G(P,0)!=0&&(n=Hi(M1(G(P,0)<0?p0(P):P,1),f)?-1:S1(M1(G(P,0)<0?p0(P):P,1),f)?1:0,r=O1(r,EQ(zt(r)&1,(G(P,0)==0?0:G(P,0)<0?-1:1)*(5+n),e.b)),w.Math.log10(Jr(G(r,0)<0?p0(r):r))>=e.a&&(r=Mn(r,10),i=l0(i,1))),t.e=ym(Jr(i)),t.d=e.a,t.f=Jr(r),t.a=fh(r),t.c=null}function CR(t,e,A,n){var P,r,i,f,D,Q,U;for(Q=0,r=V(n,h1),f=A-1;f>=0;f--)U=Y(M1(Q,32),V(e[f],h1)),G(U,0)>=0?(D=Mn(U,r),Q=Y9(U,r)):(P=DA(U,1),i=n>>>1,D=Mn(P,i),Q=Y9(P,i),Q=O1(M1(Q,1),V(U,1)),(n&1)!=0&&(G(D,Q)<=0?Q=l0(Q,D):Ug(l0(D,Q),r)?(Q=O1(Q,l0(r,D)),D=l0(D,1)):(Q=O1(Q,l0(M1(r,1),D)),D=l0(D,2)))),t[f]=zt(V(D,h1));return zt(Q)}function rW(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(L=Ve,s=k6,l=Ve,T=k6,P=0,t.k!=null)for(f=0;f<t.k.length;f++)for(A=0;A<t.k[f].q;A++)U=Z1(t.e[f].R,Q7(t.k[f],A).a),y=X1(t.e[f].R,Q7(t.k[f],A).b),L=w.Math.min(L,U),s=w.Math.max(s,U),l=w.Math.min(l,y),T=w.Math.max(T,y),++P;return P<=1?t.d:(r=s-L,i=T-l,D=(r+i)/2,Q=3*P,e=r*i,n=D/(1-Q),w.Math.sqrt(n*n-e/(1-Q))-n)}function iW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;for(Q=t.i.M,U=0,r=0;r<A;r++)Q>e[r]&&(Q=e[r],U=r);for(T=h(F,k,6,A,15,1),D=U>0?U-1:A-1,L=U<A-1?U+1:0,i=e[D]<e[L],P=0;P<A;P++)T[P]=e[U],i?--U<0&&(U=A-1):++U==A&&(U=0);for(l=new Wt(t.j);l.a<l.c.a.length;)if(y=t1(l),y.length==A){for(n=!0,f=0;f<A;f++)if(y[f]!=T[f]){n=!1;break}if(n)return}mt(t.j,T),s=Gk(t,T),mt(t.k,s),gb(t,T,s)}function fW(t,e,A,n,P,r,i){return!(K(t.j,A)==8&&a1(t.j,A)==0&&tQ(t.j,e)&&tQ(t.d,n)&&r!=I1||K(t.j,A)==8&&O(t.j,A)==2&&tQ(t.j,VO(t.j,e,A))&&r<768||K(t.j,e)==8&&(tQ(t.j,A)||tQ(t.d,P))&&r<512||!i&&(K(t.j,A)!=6||!$O(t.j,e))||K(t.j,A)==8&&K(t.j,e)!=6&&r!=I1||K(t.j,e)==5&&K(t.j,A)==6&&r<768)}function M5(t,e,A){var n,P;return P=rp(t,e,(A&16)==0),P==null?null:(n=new Fn(P[0]),A!=0&&(n.a+=\"#\",(A&1)!=0&&P.length>1&&P[1]!=null&&(n.a+=\"\"+P[1])),A&=-2,A!=0&&(n.a+=\"#\",(A&2)!=0&&P.length>2&&P[2]!=null&&(n.a+=\"\"+P[2])),A&=-3,A!=0&&(n.a+=\"#\",(A&4)!=0&&P.length>3&&P[3]!=null&&(n.a+=\"\"+P[3])),A&=-5,A!=0&&(n.a+=\"#\",(A&8)!=0&&P.length>4&&P[4]!=null&&(n.a+=\"\"+P[4])),n.a)}function P9(){P9=B1;var t,e;for(yr=h(Bi,Ye,23,32,0,1),Wf=h(Bi,Ye,23,32,0,1),Qc=B(d(F,1),k,6,15,[1,10,100,1e3,nP,jy,1e6,1e7,1e8,Of]),t=1,e=0;e<=18;e++)yr[e]=(ke(),G(t,0)>=0?we(t):FP(we(p0(t)))),Wf[e]=hu(M1(t,e),0)?we(M1(t,e)):FP(we(p0(M1(t,e)))),t=Un(t,5);for(;e<Wf.length;e++)yr[e]=bP(yr[e-1],yr[1]),Wf[e]=bP(Wf[e-1],(ke(),EU))}function MR(t,e,A){var n,P,r,i,f;for(r=0;r<e;r++){for(n=0,f=r+1;f<e;f++)n=O1(O1(Un(V(t[r],h1),V(t[f],h1)),V(A[r+f],h1)),V(zt(n),h1)),A[r+f]=zt(n),n=DA(n,32);A[r+e]=zt(n)}for(uF(A,A,e<<1),n=0,P=0,i=0;P<e;++P,i++)n=O1(O1(Un(V(t[P],h1),V(t[P],h1)),V(A[i],h1)),V(zt(n),h1)),A[i]=zt(n),n=DA(n,32),++i,n=O1(n,V(A[i],h1)),A[i]=zt(n),n=DA(n,32);return A}function HR(t){var e,A,n,P,r,i,f,D,Q,U;i=N5(t),D=t.q;do--D;while(D>=0&&i[D]);for(e=0;e<D;e++)if(i[e]){S5(t,e,D),U=i[e],i[e]=i[D],i[D]=U;do--D;while(i[D])}if(t.f=D+1,t.q==t.f){t.g=t.r;return}for(f=h(rt,ft,6,t.r,16,1),r=0;r<t.r;r++)A=t.D[0][r],n=t.D[1][r],(i[A]||i[n])&&(f[r]=!0);Q=t.r;do--Q;while(Q>=0&&f[Q]);for(P=0;P<Q;P++)if(f[P]){t5(t,P,Q),f[P]=!1;do--Q;while(f[Q])}t.g=Q+1}function DW(t,e,A){var n,P,r,i,f,D,Q;for(D=h(F,k,6,t.g,15,1),i=h(F,k,6,t.g,15,1),Q=h(rt,ft,6,t.i.f,16,1),n=z(t.i,0,e),P=z(t.i,1,e),D[0]=n,D[1]=P,i[1]=-1,Q[P]=!0,f=1;f>=1;){if(++i[f],i[f]==O(t.i,D[f])){Q[D[f]]=!1,--f;continue}if(r=_(t.i,D[f],i[f]),!(Q[r]||A[r])){if(r==n&&f>1){if(iW(t,D,f+1),t.j.a.length>=re)return;continue}f+1<t.g&&(++f,D[f]=r,Q[r]=!0,i[f]=-1)}}}function uW(t,e){var A,n,P,r,i,f,D,Q,U,L;if(U=ud(t.f)!=1?1:Cb(e,t.p[1],t.k[0]),L=ud(t.g)!=1?1:Cb(e,t.p[2],t.k[1]),!(U==1&&L==1)){for(i=360/w.Math.max(U,L)|0,A=0,n=0,r=0;r<t.d.length&&t.d[r]<i;r++)n+=t.c[r],++A;if(A!=0){for(Q=h(Yt,at,6,A,15,1),f=h(Yt,at,6,A,15,1),D=h(Yt,te,16,A,0,2),P=0;P<A;P++)Q[P]=t.d[P],f[P]=(t.c[P]*100/n|0)<<16>>16,D[P]=t.e[P];t.d=Q,t.c=f,t.e=D}}}function VR(t,e){var A,n,P,r,i,f,D,Q,U,L;if(f=h(F,k,6,t.q,15,1),i=n9(t,f,!1,e),i<=1)return null;for(D=h(F,k,6,i,15,1),n=0;n<t.f;n++)++D[f[n]];for(U=0,L=D[0],Q=1;Q<i;Q++)L<D[Q]&&(L=D[Q],U=Q);for(A=0;A<t.q;A++)f[A]!=U&&(t.C[A]=-1);for(r=0;r<t.r;r++)(!e&&t.H[r]==16||f[t.D[0][r]]!=U)&&(t.H[r]=512);P=mf(t),t.T=0;try{Pp(t,!0,!0)}catch(s){if(s=t0(s),!Zt(s,19))throw At(s)}return P}function QW(t){for(var e,A,n,P,r,i,f;;){for(r=null,e=0;e<t.f.q;e++){for(f=0,P=0;P<Mt(t.f,e);P++)t.c[Ot(t.f,e,P)]||++f;f==1&&(i=SW(t,e),(!r||i.a.length>r.a.length)&&(r=i))}if(!r)break;for(A=new MP(t.f,r.a.length,!1),n=0;n<r.a.length;n++)t.b[r.a[n]]=!0,n<r.a.length-1&&(t.c[r.b[n]]=!0),A.e[n]=r.a[n],A.a[n]=w.Math.cos(m2)*n,A.b[n]=(n&1)==1?0:.5,A.k[n]=128+r.a.length;pP(t.d,A)}}function UW(t,e,A,n,P){var r,i,f,D;if(i=t.e[e],t.o[e]!=0||e<t.f&&i0(t.p,e)||t.j[e]<3||i>4)return!1;for(D=h(rt,ft,6,4,16,1),f=0;f<i;f++){if(r=3.9269908169872414-n[f],w.Math.abs(R6-r%bA)>.0872664675116539||(P[f]=3&vt(r/bA),D[P[f]]))return!1;if(D[P[f]]=!0,(P[f]&1)==0){if(t.H[t.k[e][A[f]]]!=1)return!1}else if(!Gr(t,t.k[e][A[f]],e))return!1}return D[0]&&D[2]}function oW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y;for(s=h(F,k,6,t.f,15,1),y=IK(t,e,s),i=!1,r=!1,L=new f1,P=0;P<y;P++)(t.u[s[P]]&4)!=0&&(Q=H5(t,s[P],n),(Q==1||Q==2)&&(f=A.u[n[s[P]]]&3,(f==1||f==2)&&(Q==f?i=!0:r=!0)),D=h(F,k,6,2,15,1),D[0]=s[P],D[1]=Q,L.a.push(D));if(!i||!r)for(U=new Wt(L);U.a<U.c.a.length;)Q=t1(U),D=Q[1],(D==1||D==2)&&r&&(D=D==1?2:1),ce(A,n[Q[0]],D,!0)}function EQ(t,e,A){var n;switch(n=0,A.b){case 7:if(e!=0)throw At(new p8(\"Rounding necessary\"));break;case 0:n=e==0?0:e<0?-1:1;break;case 2:n=w.Math.max(e==0?0:e<0?-1:1,0);break;case 3:n=w.Math.min(e==0?0:e<0?-1:1,0);break;case 4:w.Math.abs(e)>=5&&(n=e==0?0:e<0?-1:1);break;case 5:w.Math.abs(e)>5&&(n=e==0?0:e<0?-1:1);break;case 6:w.Math.abs(e)+t>5&&(n=e==0?0:e<0?-1:1)}return n}function LW(t,e){var A,n;if(A=nh(J0(e,t.f[1]),J0(e,t.f[0])),t.a.length==2){if(A<1.02*t.a[0])return hJ(t,e.o,A);if(A>t.a[1])return F7((A-t.a[1])/A)}else if(n=t.c==10?vq(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)):t.c==5?Eq(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)):F7(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)),w.Math.abs(n)>.009999999776482582)return n;return 0}function Ss(t,e){var A,n,P,r,i;if(e<t.f&&i0(t.p,e)||t.o[e]!=0||gt(V(t.B[e],Ur),0)||(n=t.u[e]&hn,(n==0?0:n==re?2:n==I1?3:4)<3)||(i=t.p&&e<t.f?iA(t.p,e):0,i>7))return!1;for(r=0;r<t.p.j.a.length&&!(N3(t.p,r)==i&&yA(t.p,r,e));)++r;if(r>=re&&r==t.p.j.a.length)return!1;for(P=0;P<t.j[e];P++)if(A=t.k[e][P],!Af(t.p,r,A)&&Y$(t,e,r,t.i[e][P],A))return!0;return!1}function sW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;D=(e.c-e.d)/9,y=(e.b-e.a)/9,Q=e.b+D,l=e.d+y,U=e.b-D,T=e.d-y,L=(e.a+Q)/2,c=(e.c+l)/2,s=(e.a+U)/2,g=(e.c+T)/2,i=new YD(3),f=new YD(4),Ce(i,e.a,e.c),Ce(i,L,c),Ce(i,s,g),Ce(f,s,g),Ce(f,L,c),Ce(f,Q,l),Ce(f,U,T),vr(t.L,D1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n],t.L.O!=1&&(r=Xh(t,A),P==ou(t.L,A)&&(P=r))),W1(t,P),t.sb(i),W1(t,r),t.sb(f),W1(t,t.Q)}function yW(t){var e,A,n,P,r,i,f,D;ut(t.i,1),f=t.i.f;do--f;while(f>=0&&K(t.i,f)==1);for(e=0;e<f;e++)if(K(t.i,e)==1){S5(t.i,e,f);do--f;while(K(t.i,f)==1)}if(f!=t.i.f-1){for(i=h(rt,ft,6,t.i.g,16,1),r=0;r<t.i.g;r++)A=z(t.i,0,r),n=z(t.i,1,r),(K(t.i,A)==1||K(t.i,n)==1)&&(i[r]=!0);D=t.i.g;do--D;while(D>=0&&i[D]);for(P=0;P<D;P++)if(i[P]){t5(t.i,P,D),i[P]=!1;do--D;while(i[D])}}}function lW(t,e,A){var n,P,r,i,f,D;for(f=new V0,n=XY(t,e),f.a+=\" rb:\",D=f.a.length,r=0;r<n.length;r++)n[r]!=-1&&(f.a.length!=D&&(f.a+=\",\"),f.a+=r);for(f.a+=\" ti:\",D=f.a.length,i=0;i<n.length;i++)n[i]!=-1&&(f.a.length!=D&&(f.a+=\",\"),f.a+=n[i]);for(f.a+=\" (\",D=f.a.length,P=0;P<n.length;P++)n[P]!=-1&&(f.a.length!=D&&(f.a+=\",\"),g3(f,A.i[P][n[P]]));return J(f,(J9(),\") \"+tr(e.a,3))),f.a}function qs(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l;A==0?(L=e.a,y=e.c,s=e.b,l=e.d):(L=e.b,y=e.d,s=e.a,l=e.c),U=N(t.$,n),D=s>L?U.c+U.b:U.c,Q=l>y?U.d+U.a:U.d,P=s-L,r=l-y,w.Math.abs(P)>w.Math.abs(r)?y==l?(i=D,f=y):(i=L+P*(Q-y)/r,s>L==D>i?f=Q:(i=D,f=y+r*(D-L)/P)):L==s?(i=L,f=Q):(f=y+r*(D-L)/P,l>y==Q>f?i=D:(i=L+P*(Q-y)/r,f=Q)),A==0?(e.a=i,e.c=f):(e.b=i,e.d=f)}function H5(t,e,A){var n,P,r,i,f,D,Q,U,L;if(L=t.u[e]&3,L==1||L==2){if(f=!1,t.o[e]==2&&t.j[e]==2&&t.n[e][0]==2&&t.n[e][1]==2&&t.C[e]<=7)for(i=0;i<t.j[e];i++){for(n=t.i[e][i],U=0,Q=h(F,k,6,3,15,1),D=0;D<t.j[n];D++)Q[U]=t.i[n][D],Q[U]!=e&&++U;U==2&&Q[0]<Q[1]^A[Q[0]]<A[Q[1]]&&(f=!f)}else for(i=1;i<t.j[e];i++)for(D=0;D<i;D++)P=t.i[e][i],r=t.i[e][D],P<r^A[P]<A[r]&&(f=!f);f&&(L=L==1?2:1)}return L}function TW(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(t.u=h(rt,h0,12,t.k.q,0,2),A=1;A<t.k.q;A++)t.u[A]=h(rt,ft,6,A,16,1);for(U=t.q,L=0,s=U.length;L<s;++L)for(Q=U[L],i=1;i<Q.d.length;i++)for(D=0;D<i;D++)LB(t,Q.e[Q.d[i]],Q.e[Q.d[D]]);for(e=0;e<t.k.f;e++)for(r=1;r<Mt(t.k,e);r++)for(f=0;f<r;f++)LB(t,_(t.k,e,r),_(t.k,e,f));if(t.e!=null)for(n=1;n<t.k.q;n++)for(P=0;P<n;P++)t.e[n]!=t.e[P]&&(t.u[n][P]=!0)}function hW(t){var e,A,n,P,r,i,f,D;if(!t.k||t.k.q==0)return\"\";for(ut(t.k,15),t.d=new EA(t.k,129),P=t.d.T,t.o=h(rt,ft,6,P+1,16,1),t.n=h(rt,ft,6,P+1,16,1),t.i=R1(F,[D0,k],[7,6],15,[2,32],2),e=0;e<t.k.f;e++)D=Ae(t.k,e)-1,D!=-1&&++t.i[D][VA(t.k,e)];for(tW(t),D$(t),ma(t),n=new V0,A=new V0,r=!0,f=new Wt(t.g);f.a<f.c.a.length;)i=t1(f),i.g==-1&&(r?r=!1:n.a+=\".\"),oa(t,i,n,A);return n.a}function ER(t,e){var A,n,P,r;for(ki(t.V),t.L=h(o9,or,26,e.g.a.length+e.f.a.length,0,1),t.Y=e.g.a.length,P=0;P<e.g.a.length+e.f.a.length;P++)t.L[P]=P<e.g.a.length?N(e.g,P):N(e.f,P-e.g.a.length),RD(t.V,t.L[P]);for(je(t.V,e.c||cQ(e)),z1(t),t.M=h(F,k,6,t.V.q,15,1),A=0,n=0;n<t.L.length;n++)for(r=0;r<t.L[n].q;r++)t.M[A++]=n;t.I=new to,t.U=5,t.eb=w.Math.max(t.eb,5),n1(t.k),N1(t,new q1(t,1,!1))}function cW(t){var e,A,n,P,r,i;if(t.L.K){for(W1(t,320),e=0;e<t.L.f;e++)P=o0(t.L,e),G(P,0)!=0&&((t.G&8)!=0||gt(V(P,{l:ge,m:896,h:1048448}),0))&&t.ub(Z1(t.R,kt(t.L,e))-t.Z/2,X1(t.R,jt(t.L,e))-t.Z/2,t.Z);for(r=0;r<t.L.g;r++)i=ee(t.L,r),i!=0&&((t.G&8)!=0||(i&-8388481)!=0)&&(A=z(t.L,0,r),n=z(t.L,1,r),t.ub((Z1(t.R,kt(t.L,A))+Z1(t.R,kt(t.L,n))-t.Z)/2,(X1(t.R,jt(t.L,A))+X1(t.R,jt(t.L,n))-t.Z)/2,t.Z))}}function SR(t){t.r&&(p5(t,!1),null.vd(),null.vd(),(t.U&4)!=0&&(null.vd(),null.vd()),(t.U&4)!=0&&null.vd()),(t.U&4)!=0&&t.w==19&&(null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd()),t.w==18&&(null.vd(),null.vd(),null.vd()),t.g&&t.t!=-1&&(ou(t.V,t.t),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd()),null.vd()}function SQ(t,e,A,n,P,r){var i,f,D,Q,U;for(ut(t,1),P&&(SL(P),P.d=null,P.K=!1),D=h(F,k,6,t.q,15,1),n==null?n=h(rt,ft,6,t.q,16,1):Hu(n,n.length),D[0]=e,D[1]=A,n[e]=!0,n[A]=!0,f=1,Q=1;f<=Q;){for(U=0;U<t.e[D[f]];U++){if(i=t.i[D[f]][U],i==e&&f!=1)return-1;n[i]||(n[i]=!0,D[++Q]=i)}++f}return P&&(r==null&&(r=h(F,k,6,n.length,15,1)),ui(t,P,n,!1,r),Bf(P,r[e],0,0,-1,0)),n[e]=!1,Q}function wW(t){var e,A,n,P,r,i,f,D;for(A=0;A<t.j.g;A++)if(t.e[A])for(P=0;P<2;P++){for(f=z(t.j,P,A),e=!1,i=0;i<O(t.j,f);i++)if(A!=Ot(t.j,f,i)&&t.e[Ot(t.j,f,i)]){e=!0;break}if(!e){for(D=A,n=z(t.j,1-P,A);D!=-1;)for(t.d[f]=!1,t.e[D]=!1,--t.c,w0(t.j,D,8),D=-1,f=n,r=0;r<O(t.j,f);r++)if(t.e[Ot(t.j,f,r)])if(D==-1)D=Ot(t.j,f,r),n=_(t.j,f,r);else{f=-1,D=-1;break}f!=-1&&(t.d[n]=!1);break}}}function gW(t,e,A){var n,P,r,i,f,D,Q,U;for(r=t.g[e],P=1,D=0;D<r.length;D++)if(n=r[D],t.f[n]&&t.k[n]==2){P=2;break}for(i=h(F,D0,7,32,0,2),Q=0;Q<r.length;Q++)n=r[Q],t.f[n]&&t.k[n]==P&&(i[t.j[n]]=rf(i[t.j[n]],(A[n]<<16)+n));for(U=0;U<32;U++)i[U]!=null&&i[U].sort(Fe(u0.prototype.gd,u0,[]));if(wu(i,new GP),f5(i[0],i[1])==0)return!1;for(f=0;f<i[0].length;f++)n=i[0][f]&w1,t.k[n]=0,t.j[n]=-1;return!0}function dW(t){var e,A,n,P,r,i,f,D,Q,U,L;for(n=h(F,k,6,t.O,15,1),e=0;e<t.R.f;e++){for(U=O(t.R,e)+xi(t.R,e),Q=0,r=0;r<De(t.R,e);r++)if(r<O(t.R,e)||r>=Mt(t.R,e)){for(L=2*t.f[_(t.R,e,r)],A=Ot(t.R,e,r),dt(t.R,A)==2&&(_e(t.R,A)||++L),f=0;f<Q&&!(L<n[f]);f++);for(D=Q;D>f;D--)n[D]=n[D-1];n[f]=L,++Q}for($e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),i=U;i<t.O;i++)_1(t.e[e],t.c+1,0);for(P=0;P<U;P++)_1(t.e[e],t.c+1,n[P])}}function qR(t,e){var A,n,P,r,i,f;return P=cF(t),f=cF(e),P==f?t.e==e.e&&t.a<54&&e.a<54?t.f<e.f?-1:t.f>e.f?1:0:(n=t.e-e.e,A=(t.d>0?t.d:w.Math.floor((t.a-1)*hU)+1)-(e.d>0?e.d:w.Math.floor((e.a-1)*hU)+1),A>n+1?P:A<n-1?-P:(r=(!t.c&&(t.c=kP(E1(t.f))),t.c),i=(!e.c&&(e.c=kP(E1(e.f))),e.c),n<0?r=bP(r,ii(-n)):n>0&&(i=bP(i,ii(n))),rs(r,i))):P<f?-1:1}function BW(t){var e,A,n,P,r,i,f,D,Q,U,L;for(t.b=h(F,k,6,t.i.f,15,1),f=h(F,k,6,t.i.f,15,1),n=h(rt,ft,6,t.i.g,16,1),L=0,A=0;A<t.i.g;A++)if(!n[A]&&t.g[A])for(++L,t.b[z(t.i,0,A)]=L,t.b[z(t.i,1,A)]=L,n[A]=!0,Q=0;Q<2;Q++)for(e=z(t.i,Q,A),t.b[e]=L,i=0,D=0,f[0]=e;i<=D;){for(U=0;U<O(t.i,f[i]);U++)r=Ot(t.i,f[i],U),!n[r]&&t.g[r]&&(n[r]=!0,P=_(t.i,f[i],U),t.b[P]==0&&(t.b[P]=L,f[++D]=P));++i}t.j=L}function vW(t,e,A,n,P){var r,i;if(r=O1(V(e[0],h1),V(n[0],h1)),t[0]=zt(r),r=q0(r,32),A>=P){for(i=1;i<P;i++)r=O1(r,O1(V(e[i],h1),V(n[i],h1))),t[i]=zt(r),r=q0(r,32);for(;i<A;i++)r=O1(r,V(e[i],h1)),t[i]=zt(r),r=q0(r,32)}else{for(i=1;i<A;i++)r=O1(r,O1(V(e[i],h1),V(n[i],h1))),t[i]=zt(r),r=q0(r,32);for(;i<P;i++)r=O1(r,V(n[i],h1)),t[i]=zt(r),r=q0(r,32)}G(r,0)!=0&&(t[i]=zt(r))}function V5(t,e,A,n,P){i8();var r,i,f,D,Q,U,L,s,y,l,T;for(D=0;D<e.length;D++)Hr(A,t.k[e[D]]);for(cd(A,1/e.length),Q=0;Q<e.length;Q++)P[Q][0]=t.k[e[Q]].a-A.a,P[Q][1]=t.k[e[Q]].b-A.b,P[Q][2]=t.k[e[Q]].c-A.c;for(l=R1(yt,[h0,wt],[15,6],15,[3,3],2),U=0;U<e.length;U++)for(L=0;L<3;L++)for(s=0;s<3;s++)l[L][s]+=P[U][L]*P[U][s];for(T=new ry(l),r=T.e,y=0,f=1;f<3;f++)r[f]<r[y]&&(y=f);i=T.a,n.a=i[0][y],n.b=i[1][y],n.c=i[2][y]}function FW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l;if(U=h(rt,ft,6,e.q,16,1),s=SQ(e,t.k[0],t.p[1],U,null,null),P=0,t.k[0]!=t.p[2]&&(P=o5(e,t.k[0],t.p[2])),Q=!1,s>n-P-s&&(s=n-P-s,Q=!0),Q&&P!=0){for(l=t.k[0],i=t.p[1];e.o[l]==2&&e.j[l]==2&&e.C[l]<10;)for(U[l]=!0,L=0;L<2;L++)if(f=e.i[l][L],f!=i){i=l,l=f;break}}for(y=0,D=A[t.p[1]],t.o=h(F,k,6,s,15,1),r=0;r<e.q;r++)A[r]==D&&U[r]^Q&&(t.o[y++]=r);t.n=t.p[Q?2:1]}function IR(t,e){sg();var A,n,P,r;n=new Vs(t);try{for(r=new f3,rA(r,\"$RXN\"+zf),Si(r.a,e??\"\"),rA(r,zf+(\"\"+zf)),rA(r,qy+M5(t,!0,27)),rA(r,zf),rA(r,\"  \"+n.g.a.length+\"  \"+n.f.a.length+zf),P=hX(n),A=0;A<n.g.a.length+n.f.a.length;A++)rA(r,\"$MOL\"+zf),sq(new i6(A<n.g.a.length?N(n.g,A):N(n.f,A-n.g.a.length),P,null),r);this.a=r.a}catch(i){if(i=t0(i),Zt(i,19))x1();else throw At(i)}}function mW(t){var e,A,n,P,r,i,f,D,Q,U;for(r=wP(t,t.q,t.r,wn),i=r*r/16,n=1;n<t.q;n++)for(P=0;P<n;P++)if(D=t.J[P].a-t.J[n].a,Q=t.J[P].b-t.J[n].b,U=t.J[P].c-t.J[n].c,D*D+Q*Q+U*U<i)throw At(new V1(\"The distance between two atoms is too close.\"));for(ut(t,1),e=0,A=0;A<t.f;A++){if(G1(t,A)>(f=Cn(t,A),f+WA(t,A,f,t.C[A])))throw At(new V1(\"atom valence exceeded\"));e+=t.s[A]}if(e!=0)throw At(new V1(\"unbalanced atom charge\"))}function qQ(t,e){var A,n,P,r,i,f,D,Q,U;return A=t.J[e[0]],n=t.J[e[1]],P=t.J[e[2]],r=t.J[e[3]],D=new xe(n.a-A.a,n.b-A.b,n.c-A.c),Q=new xe(P.a-n.a,P.b-n.b,P.c-n.c),U=new xe(r.a-P.a,r.b-P.b,r.c-P.c),i=new xe(D.b*Q.c-D.c*Q.b,-(D.a*Q.c-D.c*Q.a),D.a*Q.b-D.b*Q.a),f=new xe(Q.b*U.c-Q.c*U.b,-(Q.a*U.c-Q.c*U.a),Q.a*U.b-Q.b*U.a),-w.Math.atan2(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*(D.a*f.a+D.b*f.b+D.c*f.c),i.a*f.a+i.b*f.b+i.c*f.c)}function IQ(t,e){var A,n,P,r,i,f,D,Q,U;return A=J0(t,e[0]),n=J0(t,e[1]),P=J0(t,e[2]),r=J0(t,e[3]),D=new xe(n.a-A.a,n.b-A.b,n.c-A.c),Q=new xe(P.a-n.a,P.b-n.b,P.c-n.c),U=new xe(r.a-P.a,r.b-P.b,r.c-P.c),i=new xe(D.b*Q.c-D.c*Q.b,-(D.a*Q.c-D.c*Q.a),D.a*Q.b-D.b*Q.a),f=new xe(Q.b*U.c-Q.c*U.b,-(Q.a*U.c-Q.c*U.a),Q.a*U.b-Q.b*U.a),-w.Math.atan2(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*(D.a*f.a+D.b*f.b+D.c*f.c),i.a*f.a+i.b*f.b+i.c*f.c)}function xR(t,e){var A,n,P,r,i,f;for(P=null,r=t.a.a.length+e,f=e*12,n=new f1,i=0;i<f&&t.a.a.length<r&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)));i++)!P&&(P=new mu(t.d)),sR(t,P)?JR(t,P,t.a,0)&&(P=null):JR(t,P,n,1)&&(P=null);t.a.a.length==0&&n.a.length!=0&&(A=ff(n,h(YE,mV,96,0,0,1)),wu(A,new kw),jP(t.a,new xD(new Po(A),0,w.Math.min(e,A.length))),t.e=!0),(t.a.a.length<r||t.a.a.length==t.b)&&(t.e=!0)}function df(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(s=-1,l=wP(t,t.q,t.r,wn),y=Ve,n=0;n<t.r;n++)T=t.J[t.D[0][n]].a,g=t.J[t.D[0][n]].b,c=t.J[t.D[1][n]].a,m=t.J[t.D[1][n]].b,U=c-T,L=m-g,P=w.Math.sqrt(U*U+L*L),r=(T+c)/2,i=(g+m)/2,U=e-r,L=A-i,!(w.Math.sqrt(U*U+L*L)>P/2)&&(c==T?Q=w.Math.abs(T-e):(f=(m-g)/(T-c),D=-f*T-g,Q=w.Math.abs((f*e+A+D)/w.Math.sqrt(f*f+1))),Q<l&&Q<y&&(y=Q,s=n));return s}function kW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(P=z(t.i,0,e),r=z(t.i,1,e),D=h(F,k,6,t.i.f,15,1),Q=h(F,k,6,t.i.f,15,1),U=h(F,k,6,t.i.f,15,1),D[0]=P,D[1]=r,Q[P]=1,Q[r]=2,U[P]=-1,U[r]=P,f=1,L=1;f<=L;){for(s=0;s<O(t.i,D[f]);s++){if(i=_(t.i,D[f],s),f>1&&i==P){for(l=h(F,k,6,Q[D[f]],15,1),n=D[f],y=0;y<l.length;y++)l[y]=n,n=U[n];return l}Q[i]==0&&!A[i]&&(D[++L]=i,Q[i]=Q[D[f]]+1,U[i]=D[f])}++f}return null}function bW(t,e){var A,n,P,r,i,f,D,Q,U,L;for(U=It,D=-1,L=-1,Q=-1,n=0;n<t.j.i.f;n++)if(DT(t.j,n)&&t.j.k[n]!=0)for(f=0;f<e.length;f++)P=e[f]<t.a?e[f]:e[f]<t.b?e[f]-t.a:-1,r=e[f]<t.a?1:e[f]<t.b?2:0,t.j.k[n]==r&&t.j.j[n]==P&&U>t.j.a[n]+(r==1?Q0:0)&&(U=t.j.a[n]+(r==1?Q0:0),D=P,L=r,Q=e[f]);for(A=0;A<t.j.i.f;A++)DT(t.j,A)&&t.j.k[A]==L&&t.j.j[A]==D&&(t.j.k[A]=0,t.j.j[A]=-1);for(i=0;i<t.j.g.length;i++)t.e[Q][i]=!1}function RW(t){var e,A,n,P,r;if(A=t.indexOf(k0(38)),A==-1)return t;for(P=0,r=new TD;A!=-1;)Si(r,(pt(P,A,t.length),t.substr(P,A-P))),Xt(A+1,t.length),t.charCodeAt(A+1)==38?(r.a+=\"&\",P=A+2):(e=(Xt(A+1,t.length),t.charCodeAt(A+1)),e=e-(e<65?48:e<97?65:97),n=(Xt(A+2,t.length),t.charCodeAt(A+2)),n=n-(n<65?48:n<97?65:97),nB(r,16*e+n&w1),P=A+3),A=t.indexOf(k0(38),P);return Si(r,(Xt(P,t.length+1),t.substr(P))),r.a}function jW(t){var e,A,n,P,r,i;for(t.L=!0,r=i2(t,!1);t.U<t.R.f&&r;){for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),i=t.db[e]<<7,(t.db[e]==1||t.db[e]==2)&&t.bb[e]!=0&&(i|=t.bb[e]<<5,i|=t.ab[e]),_1(t.e[e],18,M1(i,9));for(A=0;A<t.R.g;A++)n=t.o[A]<<7,(t.o[A]==1||t.o[A]==2)&&l1(t.R,A)==1&&t.n[A]!=0&&(n|=t.n[A]<<5,n|=t.k[A]),ue(t.e[z(t.R,0,A)],n),ue(t.e[z(t.R,1,A)],n);if(P=Wn(t),t.U==P)break;t.U=P,r=i2(t,!1)}}function Bf(t,e,A,n,P,r){var i;return(A==1||A==151||A==152)&&G1(t,e)>1?!1:(i=t.K&&gt(V(t.B[e],-2),0),t.B[e]=V(t.B[e],-2),t.v!=null&&t.v[e]!=null&&(t.v[e]=null,i=!0),t.t!=null&&t.t[e]!=null&&(t.t[e]=null,i=!0),A==t.C[e]&&n==t.A[e]&&P==((t.u[e]&g8)>>>27)-1&&r==(t.u[e]&48)?i:((A==151||A==152)&&(n=A-149,A=1),t.u[e]&=960,t.C[e]=A,t.A[e]=n,t.s[e]=0,t.B[e]=0,XA(t,e,P),Ne(t,e,r),Zu(t,t.w[e]),t.T=0,!0))}function pW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;return y=t.a,l=t.d,T=t.e,l==1?(n=V(y[0],h1),P=V(e,h1),r=Mn(n,P),Q=Y9(n,P),T!=A&&(r=p0(r)),T<0&&(Q=p0(Q)),B(d(Bi,1),Ye,23,0,[(ke(),G(r,0)>=0?we(r):FP(we(p0(r)))),G(Q,0)>=0?we(Q):FP(we(p0(Q)))])):(f=l,D=T==A?1:-1,i=h(F,k,6,f,15,1),U=B(d(F,1),k,6,15,[CR(i,y,l,e)]),L=new Ue(D,f,i),s=new Ue(T,1,U),Rn(L),Rn(s),B(d(Bi,1),Ye,23,0,[L,s]))}function EA(t,e){this.R=t,this.Q=e,ut(this.R,7),this.c=J8(this.R.f),(this.Q&I1)==0&&TZ(this),this.jb=(e&64)!=0||GT(this.R),this.b=NO(this.R)==0,(this.Q&I1)==0&&(this.db=h(q,I,6,this.R.f,15,1),this.fb=h(rt,ft,6,this.R.f,16,1),this.ib=h(rt,ft,6,this.R.f,16,1),this.o=h(q,I,6,this.R.g,15,1),this.q=h(rt,ft,6,this.R.g,16,1),this.p=h(rt,ft,6,this.R.g,16,1)),this.d=!1,qa(this),(this.Q&I1)==0&&r$(this),qZ(this)}function CW(t,e,A,n,P){var r,i,f,D,Q,U;for(D=null,r=null,U=0;U<t.g[e].length;U++)i=t.g[e][U],t.f[i]&&(t.o[i]==1||t.o[i]==2)&&(t.k[i]==0?r=rf(r,(P[i]<<16)+i):t.k[i]==n&&t.j[i]==A&&(D=rf(D,(P[i]<<16)+i)));if(f=f5(D,r),f==0)return!1;if(f<0)for(Q=0;Q<t.g[e].length;Q++)i=t.g[e][Q],t.f[i]&&(t.o[i]==1||t.o[i]==2)&&(t.k[i]==0?(t.k[i]=n<<24>>24,t.j[i]=A<<24>>24):t.k[i]==n&&t.j[i]==A&&(t.k[i]=0,t.j[i]=-1));return!0}function MW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(f=h(F,k,6,t.f.q,15,1),D=h(F,k,6,t.f.q,15,1),Q=h(F,k,6,t.f.q,15,1),U=h(F,k,6,t.f.q,15,1),f[0]=A,Q[A]=1,U[0]=-1,i=0,L=0;i<=L;){for(s=0;s<Mt(t.f,f[i]);s++){if(P=_(t.f,f[i],s),l=Ot(t.f,f[i],s),P==e){for(r=Q[f[i]],n=h(F,k,6,r,15,1),n[0]=l,y=1;y<r;y++)n[y]=D[i],i=U[i];return n}Q[P]==0&&(f[++L]=P,D[L]=l,Q[P]=Q[f[i]]+1,U[L]=i)}if(i==L)return null;++i}return null}function HW(t,e,A){var n,P,r,i,f;return!fi(t.R,e)||(n=z(t.R,0,e),P=z(t.R,1,e),i=new gf(t.R,t.f,n,P),i.f&&A==1)||(f=new gf(t.R,t.f,P,n),f.f&&A==1)||i.f&&f.f?!1:(A==3&&(i.f&&(t.V[e]=vb(t,P)),f.f&&(t.V[e]=vb(t,n))),r=t.jb?iY(t,i,f):rz(i,f),A==1?t.o[e]=r:A==2&&(i.f&&(r==2?ue(t.e[i.b],t.f[P]):ue(t.e[i.d],t.f[P])),f.f&&(r==2?ue(t.e[f.b],t.f[n]):ue(t.e[f.d],t.f[n]))),!0)}function VW(t){t=t||{};var e=0;return t.createSymmetryRank&&(e|=1),t.considerStereoheterotopicity&&(e|=2),t.encodeAtomCustomLabels&&(e|=8),t.encodeAtomSelection&&(e|=16),t.assignParitiesToTetrahedralN&&(e|=32),t.coordsAre3d&&(e|=64),t.createPseudoStereoGroups&&(e|=128),t.distinguishRacemicOrGroups&&(e|=256),t.tieBreakFreeValenceAtoms&&(e|=512),t.encodeAtomCustomLabelsWithoutRanking&&(e|=re),t.neglectAnyStereoInformation&&(e|=I1),e}function NR(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g;for(L=i;L>1;L--){for(T=r[L]-r[L-1],g=h(ftt,A0,174,T,0,1),f=r[L],l=0;l<T;l++){for(c=r[L-1]+l,s=f;s<r[L+1]&&n[s]==c;)++s;for(g[l]=new n0,g[l].c=c,g[l].d=A[c],g[l].b=e[c]?0:Td(t.R,P[c]),g[l].a=h(F,k,6,s-f,15,1),U=f;U<s;U++)g[l].a[U-f]=A[U];g[l].a.sort(Fe(u0.prototype.gd,u0,[])),f=s}for(D=new u1,Wi(g,0,g.length,D),Q=1,y=0;y<T;y++)A[g[y].c]=Q,y!=T-1&&kb(g[y],g[y+1])!=0&&++Q}}function EW(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(r=0;r<t.f.r;r++)if(n=z(t.f,0,r),P=z(t.f,1,r),!(fA(t.f,r)||dt(t.f,r)!=1||Mt(t.f,n)==1||Mt(t.f,P)==1)&&!((t.e&4)!=0&&z0(t.f,n)&&z0(t.f,P))){for(L=!1,Q=0;Q<2;Q++)if(i=z(t.f,Q,r),Mt(t.f,i)>2){for(s=!0,D=-1,U=0;U<Mt(t.f,i);U++)f=_(t.f,i,U),f!=z(t.f,1-Q,r)&&(D==-1?D=A[f]:D!=A[f]&&(s=!1));if(s){L=!0;break}}L||((t.e&8)!=0&&z0(t.f,n)&&z0(t.f,P)?e[r]=1:e[r]=2)}}function s2(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(f=!1,D=0;D<t.hb.a.length;D++){for(i=N(t.hb,D),e=!0,y=-1,Q=!1,L=0;L<i.length;L++){if(A=i[L],t.db[A]==0){e=!1;break}if(t.db[A]!=3){for(U=!0,s=0;s<i.length;s++)if(s!=L&&t.f[A]==t.f[i[s]]){U=!1;break}U&&y<t.f[A]&&(y=t.f[A],Q=t.db[A]==1)}}if(e&&y!=-1){for(n=i,P=0,r=n.length;P<r;++P)A=n[P],(t.db[A]==1||t.db[A]==2)&&(t.eb[A]=Q),t.gb[A]=!1;Z8(t.hb,i),f=!0,--D}}return f}function OR(t,e,A,n){var P,r,i,f,D,Q,U,L,s;for(ut(e,1),n==null&&(n=h(F,k,6,e.q,15,1)),f=$0(t,1),D=$0(t,2),s=h(rt,ft,6,e.q,16,1),Q=h(F,k,6,e.q,15,1),Q[0]=A,s[A]=!0,n[A]=En(e,t,A,f,D),i=0,U=0;i<=U;){for(L=0;L<e.e[Q[i]];L++)r=e.i[Q[i]][L],s[r]||(Q[++U]=r,s[r]=!0,n[r]=En(e,t,r,f,D));++i}for(P=0;P<e.r;P++)s[e.D[0][P]]&&er(e,t,P,f,D,n==null?e.D[0][P]:n[e.D[0][P]],n==null?e.D[1][P]:n[e.D[1][P]],!1);$0(t,1),$0(t,2),t.T=0}function E5(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(ut(t,7),r=h(rt,ft,6,t.g,16,1),L=h(rt,ft,6,t.g,16,1),l=h(F,k,6,t.f,15,1),i=0,f=1;f<t.j[e];f++)if(n=t.k[e][f],(t.F[n]&64)!=0){for(Q=0;Q<f;Q++)if(P=t.k[e][Q],(t.F[P]&64)!=0&&(L[n]=!0,L[P]=!0,y=l2(t,l,t.i[e][f],t.i[e][Q],A-2,null,L),L[n]=!1,L[P]=!1,y!=-1)){for(D=!1,s=h(F,k,6,y,15,1),Vm(t,l,s,y),U=0;U<y;U++)r[s[U]]||(r[s[U]]=!0,D=!0);D&&++i}}return i}function GR(t,e,A,n,P,r){var i,f,D,Q;switch(Q=1,f=!1,P){case 1:Q=257;break;case 3:Q=386;break;case 4:Q=257,f=!0;break;case 6:Q=129;break;default:switch(n){case 1:Q=1;break;case 2:Q=2;break;case 3:Q=4;break;case 4:Q=8;break;case 9:Q=16}}if(i=O0(t.j,e,A,Q),D=0,f&&He(t.j,e,1,-1),n>4)switch(n){case 5:D|=3;break;case 6:D|=9;break;case 7:D|=10;break;case 8:Q!=16&&(D|=127)}return r==1&&(D|=256),r==2&&(D|=128),D!=0&&Ge(t.j,i,D,!0),i}function y2(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;return U=_d(t.a,e,D1(e,A,n)),i=e.a[A],Q=e.a[n],i>Q&&(i=(c=k1(Q),k1(Q=i),c).a),l=_9(B(d(F,1),k,6,15,[1,2,0]),B(d(F,1),k,6,15,[i,Q,U]),t),l>=0?j0(t.b[l][4]):(r=e.C[A],D=e.C[n],r>D&&(r=(T=k1(D),k1(D=r),T).a),P=Od(r,t.a.f),f=Od(D,t.a.f),g=Rg(t.a.f,P),m=Rg(t.a.f,f),s=bg(t.a.f,P),y=bg(t.a.f,f),L=r==1||D==1?.05:.085,g+m-L*w.Math.pow(w.Math.abs(s-y),1.4))}function xt(t,e){var A,n,P,r,i,f,D;if(t.K&&P0(V(t.B[e],I1),0)||!aL(t,e))return 0;if(t.C[e]==0||A1(\"*\",t.t==null||t.t[e]==null?null:rn((r=t.t[e],c0(),r))))return t.e[e]==0?1:0;for(ut(t,1),f=0,P=0;P<t.e[e];P++)f+=t.n[e][P];if(t.K){for(A=1,n=0;n<t.j[e];n++)t.H[t.k[e][n]]==8&&++A;f+=A>>1}if(f-=WA(t,e,f,t.C[e]),i=((t.u[e]&g8)>>>27)-1,i==-1)for(D=Yu(t.C[e]),i=D[0],n=1;i<f&&n<D.length;n++)i=D[n];return w.Math.max(0,i-f)}function JR(t,e,A,n){var P,r,i,f;if(t.g==null&&(t.g=xk(t.d)),i=w.Math.max(t.c[n]+2.72,t.c[n]*2),e.e>i)return!1;for(kI(e,t.g),r=A.a.length-1;r>=0;r--)if(f=(ve(r,A.a.length),A.a[r]),sF(e,f),qJ(e.q,f.q))return f.e>e.e?(ve(r,A.a.length),A.a.splice(r,1),A.a.push(e),t.c[n]>e.e&&(t.c[n]=e.e),!0):!1;if(A.a.push(e),t.c[n]>e.e)for(t.c[n]=e.e,P=A.a.length-1;P>=0;P--)f=(ve(P,A.a.length),A.a[P]),f.e>i&&LA(A,P);return!0}function WA(t,e,A,n){var P,r;return n>=171&&n<=190?0:(r=0,(t.u[e]&48)==32&&(r-=1),((t.u[e]&48)==16||(t.u[e]&48)==48)&&(r-=2),P=t.s[e],P==0&&t.K&&(P0(V(t.B[e],i9),Mf)&&(P=-1),P0(V(t.B[e],i9),Cf)&&(P=1)),n==7||n==8||n==9?r+=P:n==6||n==14||n==32?r-=w.Math.abs(P):n==15||n==33?A-r-P<=3?r+=P:r-=P:n==16||n==34||n==52?A-r-P<=4?r+=P:r-=w.Math.abs(P):n==17||n==35||n==53?A-r-P<=5?r+=P:r-=w.Math.abs(P):r-=P,r)}function SW(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(P=h(F,k,6,t.f.q,15,1),r=h(F,k,6,t.f.q,15,1),i=h(F,k,6,t.f.q,15,1),f=h(F,k,6,t.f.q,15,1),P[0]=e,i[e]=1,f[0]=-1,n=0,D=0;n<=D;){if(n==0||!t.b[P[n]])for(Q=0;Q<Mt(t.f,P[n]);Q++)A=_(t.f,P[n],Q),s=Ot(t.f,P[n],Q),i[A]==0&&!t.c[s]&&(P[++D]=A,r[D]=s,i[A]=i[P[n]]+1,f[D]=n);if(n==D){for(y=new MT(i[P[n]]),U=n,L=0;L<y.a.length;L++)y.a[L]=P[U],y.b[L]=r[U],U=f[U];return y}++n}return null}function qW(t,e,A,n){var P,r,i,f,D,Q,U;return U=A>n?1:-1,Q=A>n?n:A,D=A>n?A:n,r=Gd(t,Q,t.a.length,!0),P=Gd(t,Q,t.a.length,!1),r==-1||P==-1||(f=hA(2,D,r,P+1,!0,new ZU(t)),i=hA(2,D,r,P+1,!1,new ZU(t)),f==-1||i==-1)?j0(t.b[A-1][1])-j0(t.b[n-1][1]):e==0&&Yn(t.a[f][0])==0?U*j0(t.a[f][3]):e==1&&Yn(t.a[i][0])==1?U*j0(t.a[i][3]):j0(t.b[A-1][1])-j0(t.b[n-1][1])}function IW(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(r=h(F,k,6,n,15,1),s=h(F,k,6,4,15,1),s[0]=_(t,A,t.i[A][0]==e?1:0),s[1]=A,s[2]=e,s[3]=_(t,e,t.i[e][0]==A?1:0),D=0,Q=0;Q<t.e[e];Q++)i=t.i[e][Q],i!=A&&(r[D++]=i);L=h(Yt,at,6,3,15,1),f=h(Yt,at,6,3,15,1),U=R1(Yt,[te,at],[16,6],15,[3,2],2),L[0]=60,L[1]=180,L[2]=300,f[0]=33,f[1]=33,f[2]=33,U[0][0]=45,U[0][1]=75,U[1][0]=165,U[1][1]=195,U[2][0]=285,U[2][1]=315,mt(P,new xL(L,f,U,s,r,1))}function S5(t,e,A){var n,P,r,i,f,D;for(i=t.C[e],t.C[e]=t.C[A],t.C[A]=i,i=t.s[e],t.s[e]=t.s[A],t.s[A]=i,i=t.A[e],t.A[e]=t.A[A],t.A[A]=i,i=t.u[e],t.u[e]=t.u[A],t.u[A]=i,D=t.B[e],t.B[e]=t.B[A],t.B[A]=D,i=t.w[e],t.w[e]=t.w[A],t.w[A]=i,r=t.J[e],t.J[e]=t.J[A],t.J[A]=r,t.v!=null&&(f=t.v[e],t.v[e]=t.v[A],t.v[A]=f),t.t!=null&&(f=t.t[e],t.t[e]=t.t[A],t.t[A]=f),n=0;n<t.r;n++)for(P=0;P<2;P++)t.D[P][n]==e?t.D[P][n]=A:t.D[P][n]==A&&(t.D[P][n]=e);t.T=0}function l2(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T;if(A==n)return e[0]=A,0;for(t.$b(1),U=h(F,k,6,t.q,15,1),Q=h(F,k,6,t.q,15,1),T=h(F,k,6,t.q,15,1),Q[0]=A,U[A]=1,D=0,L=0;D<=L&&U[Q[D]]<=P;){for(l=Q[D],s=0;s<t.e[l];s++)if(i==null||i.length<=t.k[l][s]||!i[t.k[l][s]]){if(f=t.i[l][s],f==n){for(y=U[l],e[y]=f,e[--y]=l;y>0;)e[y-1]=T[e[y]],--y;return U[l]}U[f]==0&&(r==null||r.length<=f||!r[f])&&(Q[++L]=f,U[f]=U[l]+1,T[f]=l)}++D}return-1}function xW(t,e){var A,n,P,r,i,f;for(r=0;r<2;r++){for(A=z(e,r,t.a),f=z(e,1-r,t.a);e.o[A]==2&&e.j[A]==2&&e.C[A]<10;)for(i=0;i<2;i++)if(n=e.i[A][i],n!=f){f=A,A=n;break}t.p[r+1]=A,t.k[r]=f}if(a1(e,t.p[1])==0&&O(e,t.p[1])==3)t.p[0]=-1;else for(P=0;P<O(e,t.p[1]);P++)if(n=_(e,t.p[1],P),n!=t.p[2]){t.p[0]=n;break}if(a1(e,t.p[2])==0&&O(e,t.p[2])==3)t.p[3]=-1;else for(P=0;P<O(e,t.p[2]);P++)if(n=_(e,t.p[2],P),n!=t.p[1]){t.p[3]=n;break}}function NW(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(f=ka(e),i=h(yt,wt,6,f.length,15,1),n=0;n<f.length;n++){if(c=e.a[n],y=f[n],g=dI(t.e,c),A=mn(t.b,c),l=0,T=0,w.Math.abs(g)<LU)for(Q=0;Q<e.e[n];Q++)L=e.i[n][Q],f[L]<0&&(y+=f[L]/(2*e.e[L]));if(c==62)for(U=0;U<e.e[n];U++)L=e.i[n][U],f[L]>0&&(y-=f[L]/2);for(D=0;D<e.e[n];D++)L=e.i[n][D],P=D1(e,n,L),s=e.a[L],r=D8(t,e,e.D[0][P],e.D[1][P]),T+=qW(t.e,r,c,s),l+=f[L];i[n]=(1-A*g)*y+g*l+T}return i}function q5(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(L=e.f,s=e.g,P=e.a,g=0,r=z(t.o,0,P),i=z(t.o,1,P),y=0;y<L.c.length;y++)if(A=L.e[L.c[y]],A!=r&&A!=i)for(m=GD(K(t.o,A)),l=0;l<s.c.length;l++)n=s.e[s.c[l]],n!=r&&n!=i&&(T=m+GD(K(t.o,n)),D=w.Math.abs(t.k[A].a-t.k[n].a),D<T&&(Q=w.Math.abs(t.k[A].b-t.k[n].b),Q<T&&(U=w.Math.abs(t.k[A].c-t.k[n].c),U<T&&(f=w.Math.sqrt(D*D+Q*Q+U*U),f<T&&(c=(T-f)/T,g+=c*c)))));return g}function OW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c;if(L=e[n==0?4:n-1],c=e[n==4?0:n+1],O(t.j,L)==3&&O(t.j,c)==3){for(y=h(F,k,6,t.j.f,15,1),s=h(rt,ft,6,t.j.g,16,1),r=A,i=0,f=r.length;i<f;++i)D=r[i],s[D]=!0;for(P=0;P<t.j.g;P++)t.e[P]||(s[P]=!0);if(l=l2(t.j,y,L,c,14,null,s),l==14){for(T=!0,U=2;U<=12;U++)if((U&3)!=1^M9(t.j,y[U])==5){T=!1;break}if(T)for(Pf(t,y[7]),Q=1;Q<=5;Q+=2)n2(t,D1(t.j,y[Q],y[Q+1])),n2(t,D1(t.j,y[Q+7],y[Q+8]))}}}function zR(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;for(D=new zA(t.f,t.g),U=new A7,y=0,s=0,i=h(rt,ft,6,t.f,16,1),r=h(F,k,6,t.f,15,1),T=0;T<A&&s<t.f;T++){if(s==0)r[0]=e,i[e]=!0,s=1;else{for(l=s,Q=y;Q<s;Q++)for(P=r[Q],L=0;L<t.j[P];L++)if(f=t.i[P][L],!i[f])switch(n){case 0:i[f]=!0,r[l++]=f;break;case 1:tm(t,P)&&tm(t,f)||(i[f]=!0,r[l++]=f)}y=s,s=l}ui(t,D,i,!0,null),a7(U,me(new EA(D,8)))}return tg(U,h(it,Dt,2,U.a.a.length,6,1))}function YR(t,e){var A,n,P,r;if(!e||e.q==0)return!1;if(e.r!=0)for(n=Pn(t.V,24*t.ab),SF(new du(e),new a2(ad(t.k)),new QA(0,0,VD(t.k),Vr(t.k)),Q0+vt(n));LK(t,e,.2*n);)CL(e,.5*n,.5*n);if(z1(t),xd(e),$d(e),P=t.V.K,t.V.q==0)uf(e,t.V),t.a||je(t.V,P),t.eb=w.Math.max(t.eb,4),n1(t.k),N1(t,new q1(t,1,!0));else{for(r=t.V.q,RD(t.V,e),t.a||je(t.V,P),A=0;A<t.V.q;A++)dP(t.V,A,A>=r);t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))}return!0}function KR(t,e,A,n){this.V=t,this.U=e,this._=A,this.k=n,this.S=new f1,this.w=5,this.t=-1,this.u=-1,this.v=null,this.e=-1,this.F=6,this.B=0,this.D=-1,this.C=0,this.A=null,this.b=!0,this.a=!1,this.X=0,this.s=11,this.i=new V0,this.c=331,this.$=1,this.ab=(de==-1&&(de=globalThis.devicePixelRatio||1),de),this.T=vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*24))),(this.U&6)!=0&&(this.U|=1),(this.U&12)!=0&&(this.I=new to),this.eb=4}function XR(t){var e,A,n,P,r,i,f,D,Q,U;if(t.e.a.c==1)return t.i;for(Q=Xn(t.i),je(Q,!0),ut(Q,7),P=0;P<Q.g;P++)t.g[P]&&(Q.H[P]=1,Q.T=0,Ge(Q,P,3,!0));for(A=0;A<Q.f;A++)t.b[A]!=0&&e0(t.i,A)<4&&(m5(Q,A),Q.u[A]&=dy,Q.T&=7,He(Q,A,0,-1));for(f=h(F,k,6,t.j,15,1),D=h(F,k,6,t.j,15,1),n=new BA(Q).f,e=0;e<Q.f;e++)t.b[e]!=0&&(U=t.b[e]-1,D[U]<n[e]&&(D[U]=n[e],f[U]=e));for(r=0;r<t.j;r++)i=\"\"+t.n[r]+\"|\"+t.k[r]+\"|\"+t.o[r],u8(Q,f[r],i);return Q}function GW(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(i=h(F,k,6,t.j.q,15,1),A=0;A<t.j.q;A++)i[A]=-p1(t.j,A);for(Ff(new cr(t.j),null,!0),n=0;n<t.j.q;n++)i[n]+=p1(t.j,n);for(e=0;e<t.j.q;e++)if(i[e]!=0)for(f=-i[e],P=0;P<t.j.r;P++)for(Q=0;Q<2;Q++)f>0&&l1(t.j,P)==16&&z(t.j,1-Q,P)==e&&(L=z(t.j,Q,P),_0(t.j,L)&&(U=(s=K(t.j,L),y=s<(Y1(),F4).length?F4[s]:null,y==null?0:y[y.length-1]),r=p1(t.j,L),r<U&&(D=w.Math.min(f,U-r),E0(t.j,L,r+D),f-=D)))}function ZR(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(T=Db(e,t.I),T==null||(l=Db(A,t.B),l==null))return null;if(T.length==1&&l.length==1)return new gD(T[0],l[0]);if(y=tX(t,T,l),y.length==1)return new gD(T[0],l[0]);for(U=Kx(t.i,y.length),s=-1,r=T,f=0,Q=r.length;f<Q;++f)if(n=r[f],t.J[n]==y[U][0]){s=n;break}for(L=-1,P=l,i=0,D=P.length;i<D;++i)if(n=P[i],t.C[n]==y[U][1]){L=n;break}return t.o=Qb(t,t.D,t.J,s,t.o),t.n=Qb(t,t.u,t.C,L,t.n),new gD(s,L)}function er(t,e,A,n,P,r,i,f){var D,Q,U,L;return Q=e.r,Q>=e.N&&eQ(e,e.N*2),L=(t.F[A]&768)>>8,U=-1,L==1&&(n==-1?U=$0(e,L):U=w.Math.min(32,n+((t.F[A]&768)>>8!=1&&(t.F[A]&768)>>8!=2?-1:(t.F[A]&ln)>>10))),L==2&&(P==-1?U=$0(e,L):U=w.Math.min(32,P+((t.F[A]&768)>>8!=1&&(t.F[A]&768)>>8!=2?-1:(t.F[A]&ln)>>10))),e.D[0][Q]=r,e.D[1][Q]=i,D=f&&t.Zb(A)?8:t.H[A],e.H[Q]=D,e.F[Q]=t.F[A],e.G[Q]=e.K?t.G[A]:0,U!=-1&&(e.F[Q]&=-31745,e.F[Q]|=U<<10),++e.r,e.T=0,Q}function ii(t){P9();var e,A,n,P;if(e=vt(t),t<Wf.length)return Wf[e];if(t<=50)return D2((ke(),EU),e);if(t<=1e3)return I9(D2(yr[1],e),e);if(t>1e6)throw At(new p8(\"power of ten too big\"));if(t<=It)return I9(D2(yr[1],e),e);for(n=D2(yr[1],It),P=n,A=E1(t-It),e=vt(t%It);G(A,It)>0;)P=bP(P,n),A=l0(A,It);for(P=bP(P,D2(yr[1],e)),P=I9(P,It),A=E1(t-It);G(A,It)>0;)P=I9(P,It),A=l0(A,It);return P=I9(P,e),P}function r9(t){var e,A,n,P,r,i;if(t.j!=0)return t.j;if(t.i&&K(t.e,t.a)!=15&&K(t.e,t.a)!=16){for(i=0;i<Mt(t.e,t.a);i++)if(r=Ot(t.e,t.a,i),Gr(t.e,r,t.a))return _(t.e,t.a,i)==t.b?t.j=l1(t.e,r)==257?3:1:t.j=l1(t.e,r)==257?1:3,t.j}return e=Y0(t.e,t.a,t.g),n=Y0(t.e,t.a,t.b),n<e&&(n+=F0),Mt(t.e,t.a)==2?(A=n-e,A>3.0915926535897933&&A<3.191592653589793?(t.j=-1,t.j):(t.j=A<Q1?4:2,t.j)):(P=Y0(t.e,t.a,t.d),P<e&&(P+=F0),t.j=P<n?2:4,t.j)}function JW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y;for(L=R1(F,[D0,k],[7,6],15,[A,(t.U&6)!=0?2:1],2),D=0;D<A;D++)L[D][0]=D;if(U=qK(t,e,A),(t.U&4)!=0)for(t.Y=0,n=(t.U&4)!=0?N(t.I,0):null,Q=0;Q<A;Q++)L[Q][1]=bQ(n,U[Q].a,U[Q].b)?1:0,L[Q][1]==0&&++t.Y;else if((t.U&2)!=0)for(t.Y=A,P=0;P<t.V.q;P++)K(t.V,P)==0&&L[e[P]][1]==0&&(L[e[P]][1]=1,--t.Y);for(i=U,wu(L,new K7(t,i)),s=h(F,k,6,A,15,1),f=0;f<A;f++)y=L[f][0],s[y]=f;for(r=0;r<t.V.q;r++)e[r]=s[e[r]]}function zW(t){var e,A,n,P,r,i,f,D,Q,U,L,s;if(!t.A){for(t.A=new f1,U=0,L=h(F,k,6,t.R.f,15,1),i=h(F,k,6,t.R.f,15,1),D=h(F,k,6,t.R.g,15,1),e=0;e<t.R.f;e++)if(L[e]==0&&(qi(t.R,e)||a1(t.R,e)==1)){for(i[0]=e,f=1,Q=0,L[e]=++U,A=h(rt,ft,6,t.R.g,16,1),r=0;r<f;r++)for(s=0;s<O(t.R,i[r]);s++)P=Ot(t.R,i[r],s),(fA(t.R,P)||dt(t.R,P)==2||fi(t.R,P))&&(n=_(t.R,i[r],s),A[P]||(D[Q++]=P,A[P]=!0),L[n]==0&&(i[f++]=n,L[n]=U));mt(t.A,new Dm(i,f,D,Q))}}}function YW(t,e){i8();var A,n,P,r,i,f,D,Q,U,L;for(A=0;A<e.f;A++)if(e.e[A]>=3&&(U=e.u[A]&3,(U==1||U==2)&&!(e.o[A]==2&&e.j[A]==2&&e.n[A][0]==2&&e.n[A][1]==2&&e.C[A]<=7))){for(n=h(F,k,6,5,15,1),P=h(F,k,6,4,15,1),f=0;f<e.e[A];f++){for(r=e.i[A][f],i=e.k[A][f],D=0;D<f&&r>n[D];)++D;for(Q=f-1;Q>=D;Q--)n[Q+1]=n[Q],P[Q+1]=P[Q];n[D]=r,P[D]=i}e.e[A]==3&&(n[3]=-1,P[3]=-1),n[4]=A,U==1&&(L=n[1],n[1]=n[0],n[0]=L,L=P[1],P[1]=P[0],P[0]=L),mt(t,new Wd(e,n,P))}}function KW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(l=0;l<e.j.a.length;l++)if(N(e.k,l).length!=6&&t.i[l]){for(L=!0,c=N(e.k,l),U=0;U<c.length;U++)if(!t.e[c[U]]){L=!1;break}if(L){for(f=-1,D=0,T=N(e.j,l),Q=0;Q<T.length;Q++)n=T[Q],y=t.g[n]?ej(t,n,!1):Ck(t,n,!1),D<y&&(D=y,f=Q);if(f!=-1){if(s=T[f],A){for(P=T,r=0,i=P.length;r<i;++r)n=P[r],n!=s&&yf(t,n,!0);t.g[s]?ej(t,s,!0):Ck(t,s,!0)}return Pf(t,s),t.g[s]&&OW(t,T,c,f),!0}}}return!1}function WR(t,e,A,n){var P,r,i,f,D;if(e[A+1]!=40)throw At(new V1(\"SmilesParser: '$' for recursive SMARTS must be followed by '('. position:\"+A));for(f=1,r=A+2;r<e.length&&f>0;)e[r]==40?++f:e[r]==41&&--f,++r;if(f>0)throw At(new V1(\"SmilesParser: Missing closing ')' for recursive SMARTS. '('-position:\"+(A+1)));if(i=new zA(16,16),D=new LQ(t.k),ES(D,t.n.f),D6(D,i,e,A+2,r-1,!0,!0),je(i,!0),n.a.push(i),e[A-1]==33)for(P=0;P<i.q;P++)T1(i,P,Pe,!0);return r-A}function I5(t){var e,A;for(this.j=t.j,this.i=t.i,this.e=h(F,k,6,t.e.length,15,1),this.k=h(F,k,6,t.e.length,15,1),this.a=h(yt,wt,6,t.e.length,15,1),this.b=h(yt,wt,6,t.e.length,15,1),A=0;A<t.e.length;A++)this.e[A]=t.e[A],this.k[A]=t.k[A],this.a[A]=t.a[A],this.b[A]=t.b[A];if(t.f!=null)for(this.f=h(F,k,6,t.f.length,15,1),e=0;e<t.f.length;e++)this.f[e]=t.f[e];if(t.g!=null)for(this.g=h(F,k,6,t.g.length,15,1),e=0;e<t.g.length;e++)this.g[e]=t.g[e]}function xQ(t){var e,A,n,P,r,i,f,D,Q,U,L;if(t.F.d.a.length==t.u)return null;U=h(F,k,6,t.w.length,15,1),A=h(F,k,6,t.v.length,15,1),n=0;do{if(n++==64)return null;if(t.b){for(f=n/64,Q=0;Q<t.v.length;Q++)A[Q]=IJ(t.v[Q],jn(t.c),f);for(e=z9(t.i,A),D=0;D<t.w.length;D++)U[D]=lz(e,D,jn(t.c),f)}else{for(i=0;i<t.v.length;i++)A[i]=yQ(t.c,t.v[i].b.length);for(r=0;r<t.w.length;r++)U[r]=yQ(t.c,t.w[r].d.length)}L=OD(t,U,A)}while(P=a9(t.F,L),(P<0?-1:P)!=-1);return L}function cA(t,e){var A,n,P,r,i,f;if(e.a==e.b&&e.c==e.d){for(i=new Wt(t.$);i.a<i.c.a.length;)if(r=t1(i),Nr(r,e.a,e.c))return!1;return!0}for(f=ok(e),A=!1,e.a>e.b&&(qu(e),A=!0),n=0;n<t.$.a.length;n++)if(r=N(t.$,n),!(r.c>f.c+f.b||r.d>f.d+f.a||f.c>r.c+r.b||f.d>r.d+r.a)){if(ZD(t,e.a,e.c,n))return ZD(t,e.b,e.d,n)?(A&&qu(e),!1):(qs(t,e,0,n),P=cA(t,e),A&&qu(e),P);if(ZD(t,e.b,e.d,n))return qs(t,e,1,n),P=cA(t,e),A&&qu(e),P}return A&&qu(e),!0}function XW(t,e){var A,n,P,r,i,f,D;if(t.C[e]!=8||t.s[e]!=0||t.j[e]!=1||t.n[e][0]!=1)return!1;if(A=t.i[e][0],t.C[A]==6){for(i=t.j[A],n=0;n<i;n++)if(P=t.i[A][n],P!=e&&t.C[P]==8&&(r=D1(t,A,P),t.H[r]==2))return!0}else if(t.C[A]==7){if(t.s[A]==1)return!0}else if(t.C[A]==16){for(f=t.j[A],D=0,n=0;n<f;n++)P=t.i[A][n],P!=e&&t.C[P]==8&&(r=D1(t,A,P),t.H[r]==2&&++D);if(D==2)return!0}else if(zK(t,e))return!0;return!1}function ZW(t,e,A){var n,P,r,i,f,D,Q,U;if(t.o[e]=A,t.n=null,P=dr(t.c,e),N7(t.s,P,t.o[e]),D=8+(t.a?0:1),sn(t.s,5,D)==0)return t.g[e]=new f1,t.q=0,!1;for(t.g[e]=t.s.F,i=t.g[e].a.length-1;i>=0;i--)for(Q=N(t.g[e],i),f=0;f<Q.length;f++)if(Q[f]!=-1&&(n=0,t.a&&P.s[f]==0&&p1(t.o[e],Q[f])!=0&&(U=Cn(t.o[e],Q[f]),n=Fu(t.o[e],Q[f],U)),t.k[e][f]>0&&t.k[e][f]>Zi(t.o[e],Q[f])-n)){LA(t.g[e],i);break}for(t.q=1,r=0;r<t.o.length;r++)t.q*=t.g[r]?t.g[r].a.length:0;return!0}function WW(t){t=t||{};var e=0;if(t.maxAVBL){if(!Number.isInteger(t.maxAVBL)||t.maxAVBL<0||t.maxAVBL>w1)throw new Error(\"maxAVBL must be an integer between 0 and 65535\");e|=t.maxAVBL}return(t.inflateToMaxAVBL===!0||t.inflateToMaxAVBL===void 0&&t.inflateToHighResAVBL!==!0)&&(e|=Q0),t.inflateToHighResAVBL&&(e|=I0),t.chiralTextBelowMolecule!==!1&&(e|=0),t.chiralTextAboveMolecule&&(e|=T8),t.chiralTextOnFrameTop&&(e|=l8),t.chiralTextOnFrameBottom&&(e|=m1),e}function _W(t,e,A,n){var P,r,i,f,D,Q,U,L;for(L=h(F,k,6,t.g,15,1),D=h(rt,ft,6,t.g,16,1),i=0;i<t.g;i++)L[i]=t.H[i],e[i]&&(D[i]=!0,t.H[i]=1,t.T=0);for(P=0;P<t.f;P++)if(P!=n&&t.o[P]==0&&D[t.k[n][0]])for(U=0;U<t.j[P];U++)f=t.k[P][U],t.H[f]=1,t.T=0,D[f]=!1;for(Q=0;Q<t.j[A];Q++)f=t.k[A][Q],t.H[f]=1,t.T=0,D[f]=!1;if(Ff(new cr(t),D,!1))return t.s[A]=0,t.T=0,t.j[n]!=t.e[n]&&wQ(t,_(t,n,t.e[n]-1)),ut(t,7),!0;for(r=0;r<t.g;r++)w0(t,r,L[r]);return!1}function vf(t,e,A){var n,P,r,i,f;if(t.a=!1,t.d=e,Zn(t.e[e]&w1)){for(f=NL(t),t.c=t.b=f,n=e-1;n>1&&cN(t.e[n-1]);)--n;for(;t.e[t.d]==44;){for(i=!0,r=e-n,P=0;P<r;P++)if(t.e[n+P]!==t.e[t.d+1+P]){i=!1;break}if(!i)break;t.d+=1+r,f=NL(t),t.c>f?t.c=f:t.b<f&&(t.b=f)}return t.d-e}return t.e[e]==123&&Zn(t.e[e+1]&w1)?(++t.d,t.c=NL(t),t.e[t.d++]!=45||!Zn(t.e[t.d]&w1)||(t.b=NL(t),t.e[t.d++]!=125)?0:t.d-e):(t.c=1,t.b=A,t.a=!0,0)}function _R(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y;if(dt(t,A)!=2&&!(A<t.g&&Re(t.p,A))||(y=t.F[A]&3,y!=1&&y!=2))return-1;for(D=0;D<2;D++){for(n=t.D[D][A],P=t.D[1-D][A],s=-1,i=!1,U=0;U<t.j[n];U++)r=t.i[n][U],r!=P&&(r==e?i=!0:s=r);if(i){for(L=-1,f=-1,Q=0;Q<t.j[P];Q++)r=t.i[P][Q],r!=n&&(L==-1?L=r:r>L?f=r:(f=L,L=r));return t.j[n]==2?t.j[P]==2?y==2?L:-1:y==2?L:f:t.j[P]==2?y==2^e<s?-1:L:y==2^e<s?f:L}}return-1}function x5(t,e){var A,n,P,r,i,f,D,Q,U,L;if(e.e==0)throw At(new p8(gV));return P=e.e,e.d==1&&e.a[0]==1?e.e>0||t.e==0?t:new Ue(-t.e,t.d,t.a):(U=t.e,Q=t.d,n=e.d,Q+n==2?(L=Mn(V(t.a[0],h1),V(e.a[0],h1)),U!=P&&(L=p0(L)),G(L,0)>=0?we(L):FP(we(p0(L)))):(A=Q!=n?Q>n?1:-1:rQ(t.a,e.a,Q),A==0?U==P?N2:uc:A==-1?y9:(i=Q-n+1,r=h(F,k,6,i,15,1),f=U==P?1:-1,n==1?CR(r,t.a,Q,e.a[0]):Sj(r,i,t.a,Q,e.a,n),D=new Ue(f,i,r),Rn(D),D)))}function $R(t){var e,A,n,P,r;for(t.a=R1(F,[D0,k],[7,6],15,[t.d.length,4],2),t.c=R1(F,[D0,k],[7,6],15,[t.d.length,2],2),t.e=h(F,k,6,t.d.length,15,1),e=h(F,k,6,2,15,1),P=0;P<t.d.length;P++){for(r=0;r<2;r++)e[0]=z(t.b,1-r,t.d[P]),e[1]=z(t.b,r,t.d[P]),Zo(t.b,e[1])&&w5(t.b,e[0],e,null),t.a[P][1+r]=e[1],t.c[P][r]=e[0];A=DR(t,t.a[P][1],t.c[P][0]),n=DR(t,t.a[P][2],t.c[P][1]),t.e[P]=SV[A][n],t.a[P][0]=Jb(t,t.a[P][1],t.c[P][0],A),t.a[P][3]=Jb(t,t.a[P][2],t.c[P][1],n)}}function $W(t){var e,A,n,P,r,i;for(mW(t),ut(t,31),n=0;n<t.f;n++){if(((t.u[n]&m1)>>18==1||(t.u[n]&m1)>>18==2)&&((t.u[n]&Tn)==0||(t.u[n]&3)==3))throw At(new V1(E6));if((t.u[n]&Q0)!=0)throw At(new V1(S6));if(((t.u[n]&3)==1||(t.u[n]&3)==2)&&t.o[n]==0){for(e=h(yt,wt,6,t.j[n],15,1),r=0;r<t.j[n];r++)e[r]=Y0(t,n,t.i[n][r]);for(P=1;P<t.j[n];P++)if(!Gr(t,t.k[n][P],n)){for(i=0;i<P;i++)if(!Gr(t,t.k[n][i],n)&&(A=w.Math.abs(Je(e[P],e[i])),A<.08||A>Rp))throw At(new V1(q6))}}}}function aW(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(n=h(F,k,6,t.f,15,1),L=h(rt,ft,6,t.f,16,1),L[A]=!0,L[e]=!0,n[0]=e,i=0,f=1;i<=f;){for(Q=0;Q<t.j[n[i]];Q++)_e(t,t.k[n[i]][Q])&&(r=t.i[n[i]][Q],L[r]||(n[++f]=r,L[r]=!0));++i}for(U=0;U<=f;U++)for(s=0;s<t.j[n[U]];s++)r=t.i[n[U]][s],!L[r]&&!fA(t,t.k[n[U]][s])&&SQ(t,n[U],r,L,null,null);for(L[A]=!1,D=0;D<=f;D++)L[n[D]]=!1;for(P=0;P<L.length;P++)L[P]&&(n[++f]=P);return n8(f+1),RP(n,h(F,k,6,f+1,15,1),0,f+1)}function Is(){Is=B1,mE=B(d(F,1),k,6,15,[o1,1162261467,cn,1220703125,362797056,1977326743,cn,387420489,Of,214358881,429981696,815730721,1475789056,170859375,Ur,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,cn,1291467969,1544804416,1838265625,60466176]),kE=B(d(F,1),k,6,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function t_(t,e){var A,n,P,r,i;if(t.i!=0&&t.k!=null){for(n=C5(t)/t.p.c,ae(e,t.i),eL(e,vt(1.6*n),!0,!1),r=0;r<t.k.length;r++)if(t.k[r].q!=0){for(P=new M7,A=0;A<t.k[r].q;A++)P.a=vt(P.a+kt(t.k[r],A)),P.b=vt(P.b+jt(t.k[r],A));P.a=P.a/t.k[r].q|0,P.b=P.b/t.k[r].q|0,P.a=vt(Z1(t.e[r].R,P.a)),P.b=vt(X1(t.e[r].R,P.b)),i=t.c==0?\"\"+(r+1):t.c==2?r<t.j?\"\"+String.fromCharCode(65+r&w1):\"R\"+(r+1-t.j):t.c==1?r<t.n?\"\"+String.fromCharCode(65+r&w1):\"P\"+(r+1-t.n):\"?\"+(r+1),jT(e,P.a,P.b,i)}}}function e_(t){var e,A,n,P,r,i,f,D,Q,U;for(r=0,A=0;A<t.R.f;A++)t.bb[A]!=0&&(t.bb[A]!=2||(t.Q&256)==0)&&++r;if(r!=0){for(U=h(F,k,6,r,15,1),r=0,n=0;n<t.R.f;n++)t.bb[n]!=0&&(t.bb[n]!=2||(t.Q&256)==0)&&(U[r]=t.bb[n]<<29|t.ab[n]<<24|t.f[n]<<12|n,++r);for(U.sort(Fe(u0.prototype.gd,u0,[])),i=0,Q=0,f=U[0]&qn;;)if(++Q,Q==U.length||f!=(U[Q]&qn)){for(P=h(F,k,6,Q-i,15,1),D=i;D<Q;D++)e=U[D]&4095,P[D-i]=e,t.gb[e]=!0;if(mt(t.hb,P),Q==U.length)break;f=U[Q]&qn,i=Q}}}function aR(t){var e,A,n,P;if(t.length==0||(Xt(0,t.length),t.charCodeAt(0)!=62))return null;for(n=1,P=0,e=0;n<t.length;){if(Xt(n,t.length),t.charCodeAt(n)==60){if(P!=0)return null;P=n}else if(Xt(n,t.length),t.charCodeAt(n)==62){if(e!=0)return null;e=n}++n}if(P!=0&&P<e)return pt(P+1,e,t.length),t.substr(P+1,e-(P+1));if(n=t.indexOf(\"DT\",1),n==-1)return null;for(A=n+2;t.length>A&&Zn((Xt(A,t.length),t.charCodeAt(A)));)++A;return A==n+2?null:(pt(n,A,t.length),t.substr(n,A-n))}function A_(t,e,A,n,P,r,i,f,D,Q){var U,L,s,y,l,T,c,g,m,v;t!=e&&(U=O9(t,e),!(D[U[0]][U[1]]&&D[U[0]][U[1]].a.length==1)&&(s=f.a[i]-f.a[A]*w.Math.cos(P)-f.a[n]*w.Math.cos(r),m=f.a[A]*w.Math.sin(P),v=f.a[n]*w.Math.sin(r),y=m+v,l=m-v,c=w.Math.sqrt(s*s+l*l),T=w.Math.sqrt(s*s+y*y),g=h(F,k,6,2,15,1),g[0]=Q.D[0][i],g[1]=Q.D[1][i],L=D[U[0]][U[1]],L?(L.a[0]=w.Math.min(L.a[0],c),L.a[1]=w.Math.min(L.a[1],T)):D[U[0]][U[1]]=new $L(U,g,c,T,3)))}function n_(t,e,A,n,P){if(e[A-1]==42)t.d=6,t.c=Y(t.c,1);else if(e[A-1]==63)t.d=0;else if((e[A-1]==65||e[A-1]==97)&&P)t.d=6,t.c=Y(t.c,1),t.c=Y(t.c,e[A-1]==65?4:2),t.r=!0;else switch(String.fromCharCode(e[A-1]).toUpperCase().charCodeAt(0)){case 66:A<n&&e[A]==114?(t.d=35,++A):t.d=5;break;case 67:A<n&&e[A]==108?(t.d=17,++A):t.d=6;break;case 70:t.d=9;break;case 73:t.d=53;break;case 78:t.d=7;break;case 79:t.d=8;break;case 80:t.d=15;break;case 83:t.d=16}return A}function P_(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(n=h(yt,wt,6,2,15,1),y=MY(t,A),D=0;D<2;D++)if(A[3*D]!=-1){for(r=2-D,l=3-3*D,Q=0,s=0;s<3;s++)i=t.i[A[r]][s],i!=y[1-D]&&t.C[i]!=1&&(A[l]=i,e?n[Q++]=IQ(e,A):n[Q++]=qQ(t,A));return A[l]=-1,uh(n)}for(P=h(yt,wt,6,2,15,1),U=0,f=0;f<3;f++)if(T=t.i[A[1]][f],T!=y[0]&&t.C[T]!=1){for(A[0]=T,L=0,s=0;s<3;s++)c=t.i[A[2]][s],c!=y[1]&&t.C[c]!=1&&(A[3]=c,e?P[L++]=IQ(e,A):P[L++]=qQ(t,A));n[U++]=uh(P)}return A[0]=-1,A[3]=-1,uh(n)}function tj(t,e){gv();var A,n,P,r,i,f,D,Q,U,L,s,y;for(this.e=e,this.a=h(F,k,6,e.length+t.length,15,1),this.b=h(F,k,6,e.length+t.length,15,1),this.d=h(F,k,6,e.length+t.length,15,1),A=0,r=0,P=0,f=e,D=0,Q=f.length;D<Q;++D)i=f[D],n=MB(i.d.length),A+n<=64?(this.b[P]=A,A+=n):(++r,this.b[P]=0,A=0),this.a[P]=n,this.d[P]=r,++P;for(L=t,s=0,y=L.length;s<y;++s)U=L[s],n=MB(U.b.length),A+n<=64?(this.b[P]=A,A+=n):(++r,this.b[P]=0,A=0),this.a[P]=n,this.d[P]=r,++P;this.c=r+1}function r_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(Q=h(F,k,6,t.k.f,15,1),f=h(F,k,6,t.k.f,15,1),D=h(F,k,6,t.k.f,15,1),U=h(F,k,6,t.k.f,15,1),A=z(t.k,0,e),n=z(t.k,1,e),f[0]=A,f[1]=n,D[0]=-1,D[1]=e,Q[A]=1,Q[n]=2,U[A]=-1,U[n]=A,i=1,L=1;i<=L&&Q[f[i]]<15;){for(l=f[i],s=0;s<O(t.k,l);s++)if(P=_(t.k,l,s),P!=U[l]){if(r=Ot(t.k,l,s),P==A){for(D[0]=r,y=0;y<=L;y++)t.g[D[s]]||(t.g[D[s]]=!0,++t.c);return}z0(t.k,P)&&Q[P]==0&&(++L,f[L]=P,D[L]=r,Q[P]=Q[l]+1,U[P]=l)}++i}}function xs(t,e){var A,n,P,r,i,f,D,Q,U,L;if(i=t.e,D=e.e,D==0)return t;if(i==0)return e.e==0?e:new Ue(-e.e,e.d,e.a);if(r=t.d,f=e.d,r+f==2)return A=V(t.a[0],h1),n=V(e.a[0],h1),i<0&&(A=p0(A)),D<0&&(n=p0(n)),ke(),hu(l0(A,n),0)?we(l0(A,n)):FP(we(p0(l0(A,n))));if(P=r!=f?r>f?1:-1:rQ(t.a,e.a,r),P==-1)L=-D,U=i==D?hL(e.a,f,t.a,r):mL(e.a,f,t.a,r);else if(L=i,i==D){if(P==0)return ke(),y9;U=hL(t.a,r,e.a,f)}else U=mL(t.a,r,e.a,f);return Q=new Ue(L,U.length,U),Rn(Q),Q}function i_(){var t,e,A,n,P,r,i;if(!M4)try{for(t=r2(\"bondLengthData.txt\"),A=K1(t),e=A==null?0:c1(A,o1,It),dU=h(F,k,6,e,15,1),p4=h(Ee,PA,6,e,15,1),C4=h(Ee,PA,6,e,15,1),EV=h(F,k,6,e,15,1),P=0;P<e;P++)if(i=K1(t),i!=null&&(r=o8(i,\"\\\\t\"),r.length==4))try{dU[P]=c1(r[0],o1,It),p4[P]=Qn(r[1]),C4[P]=Qn(r[2]),EV[P]=c1(r[3],o1,It)}catch(f){if(f=t0(f),Zt(f,40))break;throw At(f)}M4=!0}catch(f){if(f=t0(f),Zt(f,75))n=f,Z9(n,(x1(),gi),\"\");else throw At(f)}}function f_(t,e){var A,n;return n={},A=t.G[e],n.single=S1(V(A,1),0),n.double=S1(V(A,2),0),n.triple=S1(V(A,4),0),n.delocalized=S1(V(A,8),0),n.metalLigand=S1(V(A,16),0),n.quadruple=S1(V(A,32),0),n.quintuple=S1(V(A,64),0),n.notRing=S1(V(A,128),0),n.ring=S1(V(A,256),0),n.aromatic=S1(V(A,qA),0),n.nonAromatic=S1(V(A,fP),0),n.ringSize=zt(V(A,SP))>>17,n.brigdeMin=zt(V(A,7680))>>9,n.brigdeSpan=zt(V(A,wy))>>13,n}function ej(t,e,A){if(t.f[e])return 0;if(K(t.j,e)==7){if(Mt(t.j,e)==3)return 6;if(O(t.j,e)==2)return t.a?0:4}else{if(K(t.j,e)==8)return 10;if(K(t.j,e)==15||K(t.j,e)==33){if(O(t.j,e)==3)return 8}else if(K(t.j,e)==16||K(t.j,e)==34||K(t.j,e)==52){if(O(t.j,e)==2)return 11;if(O(t.j,e)==3)return p1(t.j,e)==1?12:(A&&E0(t.j,e,1),5)}else if(K(t.j,e)==6)return p1(t.j,e)==-1?Mt(t.j,e)==3?16:De(t.j,e)==3?15:14:(A&&E0(t.j,e,-1),Mt(t.j,e)!=De(t.j,e)?2:3)}return 0}function D_(t){var e,A,n,P,r,i,f;for(f=!1,A=0;A<t.f;A++)((t.u[A]&Tn)==0||(t.u[A]&3)==3)&&(t.u[A]&=By);for(r=0;r<t.g;r++)(dt(t,r)!=1||(t.F[r]&3)==0||(t.F[r]&3)==3)&&(t.F[r]&=-32513);if(t.L){if((t.I&qP)!=I0){for(i=h(rt,ft,6,t.f,16,1),n=0;n<t.f;n++)(t.u[n]&Tn)!=0&&(t.u[n]&3)!=3&&(t.u[n]&m1)>>18==1&&(i[n]=!0);for(P=0;P<t.f;P++)(t.u[P]&Tn)!=0&&(t.u[P]&3)!=3&&(He(t,P,1,0),f=!0);for(e=0;e<t.f;e++)i[e]&&(ce(t,e,1,!1),He(t,e,1,-1),f=!0)}t.L=!1}return $0(t,1),$0(t,2),f}function u_(t){var e,A,n;if(t.a==0)return!0;if(t.d.length==1&&t.c.length==1)return(t.e.i==null||t.e.i[t.d[0]]==null||!t.e.i[t.d[0]][t.c[0]])&&(++t.e.b,t.e.f[t.d[0]]=t.e.b,t.e.d[t.c[0]]=t.e.b),!0;if(Mk(t.d,t.e.e)||Mk(t.c,t.e.c)){for(e=w.Math.min(t.d.length,t.c.length),n=0;e!=0&&n<t.d.length;n++)for(A=0;A<t.c.length;A++)if(t.e.d[t.c[A]]==0&&(t.e.i==null||t.e.i[t.d[n]]==null||!t.e.i[t.d[n]][t.c[A]])){--e,++t.e.b,t.e.f[t.d[n]]=t.e.b,t.e.d[t.c[A]]=t.e.b;break}return!0}return!1}function Q_(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l;for(D=n+1;D<t.j.g.length;D++)if(D!=n&&t.e[e][D]&&t.e[A][D])return i=h(F,k,6,2,15,1),i[0]=A,i[1]=e,i;for(l=h(F,k,6,t.b,15,1),U=h(F,k,6,t.b,15,1),Q=h(F,k,6,t.b,15,1),r=0,L=0,Q[0]=e,U[e]=1;r<=L;){for(s=0;s<t.d[Q[r]].length;s++){if(P=t.d[Q[r]][s],P==A){if(r==0)continue;for(f=U[Q[r]]+1,i=h(F,k,6,f,15,1),i[0]=P,i[1]=Q[r],y=2;y<f;y++)i[y]=l[i[y-1]];return i}U[P]==0&&t.c[P]!=-3&&(U[P]=U[Q[r]]+1,Q[++L]=P,l[P]=Q[r])}++r}return null}function U_(t){var e,A,n,P;if(t.g.a.length+t.f.a.length<=1)return!1;for(e=fb(t),P=h(wl,A0,35,t.g.a.length+t.f.a.length,0,1),A=0;A<t.g.a.length+t.f.a.length;A++)if(P[A]=Ib(A<t.g.a.length?N(t.g,A):N(t.f,A-t.g.a.length),null),P[A]){for(n=0;n<A;n++)if(P[n]&&(P[A].c+P[A].b>=P[n].c&&P[A].c<=P[n].c+P[n].b||P[A].d+P[A].a>=P[n].d&&P[A].d<=P[n].d+P[n].a))return!0;if(A!=0&&P[A-1]&&(P[A].c-P[A-1].c-P[A].b>5*e||P[A].d-P[A-1].d-P[A].a>5*e))return!0}return!1}function He(t,e,A,n){var P,r,i;if(A==0)t.u[e]&=By,t.u[e]|=A<<18;else{if(n>=32)return;if(n==-1){for(i=-1,r=0;r<t.q;r++)r!=e&&A==(t.u[r]&m1)>>18&&i<((t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20)&&(i=(t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20);for(P=0;P<t.r;P++)A==(t.F[P]&768)>>8&&i<((t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10)&&(i=(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10);if(n=i+1,n>=32)return}t.u[e]&=By,t.u[e]|=A<<18|n<<20}t.T&=7}function U8(t,e,A,n){var P,r,i;if(A==0)t.F[e]&=-32513,t.F[e]|=A<<8;else{if(n>=32)return;if(n==-1){for(i=-1,r=0;r<t.q;r++)A==(t.u[r]&m1)>>18&&i<((t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20)&&(i=(t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20);for(P=0;P<t.r;P++)P!=e&&A==(t.F[P]&768)>>8&&i<((t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10)&&(i=(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10);if(n=i+1,n>=32)return}t.F[e]&=-32513,t.F[e]|=A<<8|n<<10}t.T&=7}function o_(t,e){var A,n,P,r,i,f,D;if(r=e.a,!((t.d>0?t.d:w.Math.floor((t.a-1)*hU)+1)-r<0||r==0)&&(n=Lb(t)-r,!(n<=0))){if(t.a<54){PW(t,e,n);return}f=ii(n),P=dR((!t.c&&(t.c=kP(E1(t.f))),t.c),f),i=t.e-n,P[1].e!=0&&(A=rs(om(P[1].e<0?P[1].e==0?P[1]:new Ue(-P[1].e,P[1].d,P[1].a):P[1]),f),A=EQ(RQ(P[0],0)?1:0,P[1].e*(5+A),e.b),A!=0&&(P[0]=T2(P[0],(ke(),G(A,0)>=0?we(A):FP(we(p0(A)))))),D=new Z7(P[0]),Lb(D)>r&&(P[0]=x5(P[0],(ke(),EU)),--i)),t.e=ym(i),t.d=r,yh(t,P[0])}}function Aj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(c=h(o9,or,26,A,0,1),i=h(F,k,6,A,15,1),Q=h(F,k,6,A,15,1),r=h(F,k,6,t.q,15,1),P=0;P<t.q;P++)e[P]!=-1&&(r[P]=i[e[P]]++);for(D=0;D<t.r;D++)l=e[t.D[0][D]],T=e[t.D[1][D]],l==T&&l!=-1&&++Q[l];for(g=0;g<A;g++)c[g]=new zA(i[g],Q[g]),ko(t,c[g]);for(n=0;n<t.q;n++)e[n]!=-1&&En(t,c[e[n]],n,0,0);for(f=0;f<t.r;f++)l=e[t.D[0][f]],T=e[t.D[1][f]],l==T&&l!=-1&&DQ(t,c[l],f,0,0,r,!1);for(L=c,s=0,y=L.length;s<y;++s)U=L[s],$0(U,1),$0(U,2);return c}function L_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(A=z(t.f,0,e),n=z(t.f,1,e),i=h(F,k,6,t.f.q,15,1),f=h(F,k,6,t.f.q,15,1),D=h(F,k,6,t.f.q,15,1),Q=h(F,k,6,t.f.q,15,1),i[0]=A,i[1]=n,f[1]=e,D[A]=1,D[n]=2,Q[0]=-1,Q[1]=0,r=1,U=1;r<=U;){for(L=0;L<O(t.f,i[r]);L++){if(P=_(t.f,i[r],L),r>1&&P==A){for(l=new MT(D[i[r]]),f[0]=Ot(t.f,i[r],L),s=r,y=0;y<l.a.length;y++)l.a[y]=i[s],l.b[y]=f[s],s=Q[s];return l}D[P]==0&&qi(t.f,P)&&(i[++U]=P,f[U]=Ot(t.f,i[r],L),D[P]=D[i[r]]+1,Q[U]=r)}++r}return null}function s_(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(A=0;A<t.k.f;A++)if(z0(t.k,A))for(D=h(F,k,6,t.k.f,15,1),f=h(F,k,6,t.k.f,15,1),Q=h(F,k,6,t.k.f,15,1),f[0]=A,D[A]=1,Q[A]=-1,i=0,U=0;i<=U;){for(P=(D[f[i]]&1)==1?1:2,L=0;L<O(t.k,f[i]);L++)if(n=Ot(t.k,f[i],L),dt(t.k,n)==P&&e[n]&&(r=_(t.k,f[i],L),D[r]==0)){if(P==1&&z0(t.k,r)){for(s=f[i];s!=-1;)w0(t.k,D1(t.k,r,s),P==1?2:1),P=3-P,r=s,s=Q[s];return zn(t.k,A,!1),zn(t.k,r,!1),t.b-=2,!0}f[++U]=r,Q[r]=f[i],D[r]=D[f[i]]+1}++i}return!1}function nj(t,e,A,n,P,r){var i,f,D,Q,U,L;for(t.j=e,t.d=A,t.n=h(F,k,6,n.length,15,1),t.f=h(F,k,6,P.length,15,1),t.k=ty(t.j,!1),t.p=ty(t.j,!0),t.e=ty(t.d,!1),t.i=ty(t.d,!0),t.o=Kk(t.j),t.g=Kk(t.d),t.q=xy,Q=new Qj(e,A,t.n,t.f,r),t.a=0;fK(Q);){for(++t.a,t.c=Q.q,f=Q.r,D=yR(Q);D;)Ua(t,D),D=yR(Q);t.b=t.c,t.c<f?(i=new ij(t.j,t.d,t.n,t.f,t.c,r),U=Da(i),t.c+=i.b-i.g):(L=new Lo(t.j,t.d),U=Ks(L,ah(L,t.n,t.f))),t.q<U&&(t.q=U,sA(t.n,0,n,0,n.length),sA(t.f,0,P,0,P.length))}return t.q!=xy}function y_(t,e){var A,n,P,r,i,f,D,Q,U,L;for(r=null,D=null,i=null,ut(t.g,t.N),t.o=h(F,k,6,t.g.f,15,1),n=0;n<t.g.f;n++)t.o[n]=O(t.g,n);if(t.p!=0){for(Q=new zA(t.g.q,t.g.r),L=h(rt,ft,6,t.g.q,16,1),P=0;P<t.g.q;P++)L[P]=!t.D[P];for(ui(t.g,Q,L,!0,null),ut(Q,t.N),Oj(t,Q,e),r=t.j,D=t.n,i=t.k,U=0,A=0;A<t.g.f;A++)t.D[A]||(t.o[A]=O(Q,U++))}if(Oj(t,t.g,e),t.p!=0){for(U=0,A=0;A<t.g.q;A++)t.D[A]||(t.j[A]=r[U],t.k[A]=i[U++]);for(U=0,f=0;f<t.g.r;f++)!t.D[z(t.g,0,f)]&&!t.D[z(t.g,1,f)]&&(t.n[f]=D[U++])}}function l_(t,e){var A,n,P,r,i,f,D,Q,U;if(A=new uD,!Ql)return mt(A.a,new We(aH,2)),-999;for(mt(A.a,new We(\"Found sub-structure fragments and their contributions:\",2)),mt(A.a,new We(\"(yellow atoms carry at least one more substituent)\",2)),Q=0,D=0,r=0,U=new jD(1),P=new JA,i=0;i<hi.a.a.length;i++)u2(new GA(!1),P,F3(hi,i)),Dn(U,e),Ln(U,P),sn(U,1,U.c)>0&&(f=eg(hi,i),f<-1?Q+=f:(D+=f,++r),ZP(A,F3(hi,i),1),mt(A.a,new We(\"\"+f,3)));return r==0?-1:(n=Q+D/w.Math.sqrt(r),n=n+.0625*(r-40),t.a=A,n)}function Pj(t){Y1();var e,A,n,P,r;for(Yr.call(this,t),yb(this,N5(this)),r=(ut(this,7),this.p),this.b=h(NV,k,6,r.j.a.length,15,1),Hq(this.b),e=!1,A=!0;!e&&A;)for(e=!0,A=!1,P=0;P<r.j.a.length;P++)this.b[P]==2&&(this.b[P]=T$(this,P),this.b[P]!=2&&(A=!0)),this.b[P]==2&&(e=!1);if(!e)throw At(new $w);for(this.a=h(F,k,6,this.q,15,1),n=0;n<this.a.length;n++)if(this.a[n]=-1,this.a[n]=tO(this,n),this.a[n]==0)throw At(new L7(\"Couldn't assign an atom type to atom \"+n+\" (\"+X0[this.C[n]]+\")\"))}function T_(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(r=R1(F,[D0,k],[7,6],15,[2,32],2),i=0;i<2;i++){for(A=h(F,D0,7,32,0,2),s=0,P=0;P<32;P++)if(e[i][P]!=null){for(U=e[i][P].length,A[P]=h(F,k,6,U,15,1),f=0;f<U;f++)A[P][f]=t.f[e[i][P][f]];A[P].sort(Fe(u0.prototype.gd,u0,[])),++s}for(L=s;L>0;L--){for(Q=0,D=null,n=0;n<32;n++)if(A[n]!=null){if(D==null||D.length<A[n].length)D=A[n],Q=n;else if(D.length==A[n].length){for(f=D.length-1;f>=0;f--)if(D[f]<A[n][f]){D=A[n],Q=n;break}}}r[i][Q]=L,A[Q]=null}}return r}function h_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(r=0,A=0;A<t.V.q;A++)r0(t.V,A)&&++r;for(y=t.V.q,l=t.V.r,t.gb=qD(t.gb,t.gb.length+r),t.jb=qD(t.jb,t.jb.length+r),i=h(F,k,6,t.V.q,15,1),D=$0(t.V,1),Q=$0(t.V,2),n=0;n<y;n++)r0(t.V,n)&&(L=t.V.q,t.gb[L]=t.gb[n],t.jb[L]=t.jb[n],i[n]=L,En(t.V,t.V,n,D,Q));for(f=0;f<l;f++)mP(t.V,f)&&DQ(t.V,t.V,f,D,Q,i,!1);for(P=0;P<y;P++)dP(t.V,P,!1);for(e=y;e<t.V.q;e++)Ze(t.V,e,0,!1);if(t.I)for(U=t.I.a.length-1;U>=0;U--)s=N(t.I,U),s.g&&!Zt(s,62)&&mt(t.I,s.Gb())}function c_(t){var e,A,n,P,r,i,f,D;if(t.g!=null)for(i=new Dp(t),t.b=new f1,P=0;P<t.g.length;P++)n=lO(i,P),n==0?(Nb(i,P),f=Wm(t,P,2),e=Wm(t,P,1),A=Gm(t,P),f==1&&e==1&&!A&&(XG(t,P,i.a+i.f++),mt(t.b,new Ki(P,1,-1,-1))),f>0?(A&&(kh(t,P,i.i+i.g++,2),++f),mt(t.b,new Ki(P,1,-1,-1))):e>0?(A&&kh(t,P,i.a+i.f++,1),mt(t.b,new Ki(P,1,-1,-1))):A&&(kh(t,P,i.a+i.f++,1),mt(t.b,new Ki(P,1,-1,-1)))):n==1&&(Gm(t,P)?(r=MG(i,P),D=hG(i,P),mt(t.b,new Ki(P,2,r,D))):(Nb(i,P),mt(t.b,new Ki(P,1,-1,-1))))}function NQ(t){CT(),this.d=t,ut(this.d,15),this.j=new f1,this.k=h(rt,ft,6,(i8(),ml).length,16,1),this.i=h(F,k,6,ml.length,15,1),Za(this.j,t),this.i[0]=this.j.a.length,this.i[1]=-this.j.a.length,la(this.j,t),this.i[1]+=this.j.a.length,this.i[2]=-this.j.a.length,ZY(this.j,t),this.i[2]+=this.j.a.length,this.i[4]=-this.j.a.length,YW(this.j,t),this.i[4]+=this.j.a.length,this.i[5]=-this.j.a.length,y$(this.j,t),this.i[5]+=this.j.a.length,this.i[3]=-this.j.a.length,G$(this.j,t),this.i[3]+=this.j.a.length}function w_(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l;for(i=h(F,k,6,A.q,15,1),U=h(F,k,6,A.q,15,1),Q=h(yt,wt,6,A.q,15,1),U[0]=e,D=0,L=0;D<=L;){for(l=U[D],s=0;s<A.e[l];s++)f=A.i[l][s],i[f]==0&&f!=e&&(U[++L]=f,i[f]=i[l]+1,i[f]==2?Q[f]=f<e?t[e][f].a[0]:t[f][e].a[0]:i[f]>2&&(Q[f]=Q[l]+B9(n,A.k[l][s]),f<e&&!t[e][f]&&(i[f]==3?t[e][f]=new _7:(y=h(F,k,6,2,15,1),y[0]=U[1],y[1]=l,t[e][f]=new $L(O9(e,f),y,(r=A.C[e],(r<(c2(),IA).length?IA[r]:2)+(P=A.C[f],P<IA.length?IA[P]:2)),Q[f],0)))));++D}}function o8(t,e){var A,n,P,r,i,f,D,Q;for(A=new RegExp(e,\"g\"),D=h(it,Dt,2,0,6,1),n=0,Q=t,r=null;;)if(f=A.exec(Q),f==null||Q==\"\"){D[n]=Q;break}else{if(i=f.index,r==null&&i==0&&f[0].length==0){Q=UA(Q,i+f[0].length,Q.length),A.lastIndex=0,r=Q;continue}D[n]=(pt(0,i,Q.length),Q.substr(0,i)),Q=UA(Q,i+f[0].length,Q.length),A.lastIndex=0,r==Q&&(D[n]=(pt(0,1,Q.length),Q.substr(0,1)),Q=(Xt(1,Q.length+1),Q.substr(1))),r=Q,++n}if(t.length>0){for(P=D.length;P>0&&D[P-1]==\"\";)--P;P<D.length&&(D.length=P)}return D}function Ns(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(n=t.e[e],P=h(yt,wt,6,n,15,1),y=0;y<n;y++)P[y]=Y0(t,e,t.i[e][y]);for(l=1;l<n;l++)for(T=0;T<l;T++)if(r=w.Math.abs(Je(P[l],P[T])),r<.08||r>Rp){for(i=0,f=0,c=0;c<n;c++)c!=l&&c!=T&&(i+=w.Math.abs(aB(P[l],P[c])),f+=w.Math.abs(aB(P[T],P[c])));if(Q=i<f?t.k[e][l]:t.k[e][T],dt(t,Q)==1&&(!A||!(t.H[Q]==257||t.H[Q]==129)))return Q}for(g=-1,D=0,s=0;s<n;s++)U=t.i[e][s],L=t.k[e][s],m=CQ(t,L,U),D<m&&(!A||!(t.H[L]==257||t.H[L]==129))&&(D=m,g=L);return g}function g_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(dt(e,t.a)==1&&(qe(e,t.a)==1||qe(e,t.a)==2)){for(Q=!1,f=0;f<2;f++)for(n=t.p[3*f],A=t.p[1+f],T=t.p[2-f],U=0;U<e.j[A];U++)if(l=e.i[A][U],l!=T&&l!=n){l<n&&(Q=!Q);break}for(qe(e,t.a)==1&&(Q=!Q),P=0,r=0,D=0;D<t.d.length;D++)t.d[D]<180^Q&&(r+=t.c[D],++P);if(P<t.d.length){for(y=h(Yt,at,6,P,15,1),L=h(Yt,at,6,P,15,1),s=h(Yt,te,16,P,0,2),P=0,i=0;i<t.d.length;i++)t.d[i]<180^Q&&(y[P]=t.d[i],L[P]=(t.c[i]*100/r|0)<<16>>16,s[P]=t.e[i],++P);t.d=y,t.c=L,t.e=s}}}function d_(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(i=h(F,k,6,t.s,15,1),P=0;P<e.f;P++){for(y=e.j[P]+(e.i[P].length-e.e[P]),s=0,D=0;D<e.i[P].length;D++)if(D<e.j[P]||D>=e.e[P]){for(l=2*A[e.i[P][D]],r=e.k[P][D],dt(e,r)==2&&(r<e.g&&Re(e.p,r)||++l),U=0;U<s&&!(l<i[U]);U++);for(L=s;L>U;L--)i[L]=i[L-1];i[U]=l,++s}for($e(t.b[P],P),_1(t.b[P],t.a,A[P]),Q=y;Q<t.s;Q++)_1(t.b[P],t.a+1,0);for(f=0;f<y;f++)_1(t.b[P],t.a+1,i[f])}for(n=e.f;n<t.b.length;n++)for($e(t.b[n],n),_1(t.b[n],t.a,e.f+1),f=0;f<t.s;f++)_1(t.b[n],t.a+1,0)}function Os(t){var e,A,n,P,r,i,f,D,Q,U;switch(e=null,U=t.c.length,t.e){case 1:for(e=h(Yt,at,6,2*U,15,1),n=0;n<U;n++)e[n]=t.c[n],e[U+n]=t.c[n];return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[U-1]==180?U-1:U,Q=r-P,e=h(Yt,at,6,U+Q,15,1),i=0;i<U;i++)e[i]=t.c[i];for(f=P;f<r;f++)e[e.length-1-f+P]=t.c[f];return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[U-1]==90?U-1:U,Q=r-P,e=h(Yt,at,6,2*U+2*Q,15,1),D=0;D<U;D++)e[D]=t.c[D],e[U+Q+D]=t.c[D];for(A=P;A<r;A++)e[U+Q-1-A+P]=t.c[A],e[e.length-1-A+P]=t.c[A];return e;default:return t.c}}function Ln(t,e){var A,n,P,r,i;if(!e||e.q==0||!e.K){t.g=null;return}for(t.g=e,t.r=!1,ut(t.g,1),t.N=7,n=0;n<t.g.f;n++)gt(V(o0(t.g,n),{l:ge,m:0,h:3}),0)&&(t.N=15);for(i=0;i<t.g.g;i++)(ee(t.g,i)&h8)!=0&&(t.N=15);for(t.L&&t.N!=7&&ut(t.H,t.N),t.p=0,t.q=0,t.D=h(rt,ft,6,t.g.f,16,1),P=0;P<t.g.f;P++)t.D[P]=Qe(t.g,P),t.D[P]&&++t.p;if(t.d=0,t.f=null,t.i=null,t.p!=0){for(r=0;r<t.g.g;r++)(t.D[z(t.g,0,r)]||t.D[z(t.g,1,r)])&&++t.q;for(A=0;A<t.g.q;A++)zn(t.g,A,t.D[A]);t.f=h(F,k,6,t.g.q,15,1),t.d=n9(t.g,t.f,!0,!1)}}function rj(t,e){yg();var A,n,P,r,i,f;r=new Vs(t);try{if(f=new f3,rA(f,nM+B8),Si(f.a,e??\"\"),rA(f,B8+(\"\"+B8)),rA(f,qy+M5(t,!0,11)),rA(f,B8),P=r.g.a.length,n=r.f.a.length,rA(f,pp+P+\" \"+n+B8),i=cX(r),P>0){for(rA(f,iM+B8),A=0;A<r.g.a.length;A++)rA(f,rv(N(r.g,A),i));rA(f,\"M  V30 END REACTANT\"+B8)}if(n>0){for(rA(f,DM+B8),A=0;A<r.f.a.length;A++)rA(f,rv(N(r.f,A),i));rA(f,\"M  V30 END PRODUCT\"+B8)}rA(f,D9+B8),this.a=f.a}catch(D){if(D=t0(D),Zt(D,19))x1();else throw At(D)}}function B_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(D=null,l=On(t.R),L=0;L<l.j.a.length;L++)if(l.f[L]){for(r=0,s=N(l.j,L),A=s,n=0,P=A.length;n<P;++n)e=A[n],ys(t,e)&&++r;if(r!=0)if(y=N(l.k,L),D==null&&(D=h(rt,ft,6,t.R.g,16,1)),r==s.length){for(Q=-1,U=It,i=0;i<s.length;i++)U>t.B[y[i]]&&(U=t.B[y[i]],Q=i);for(;r>0;)D[y[Q]]=!0,Q=Do(Q+2,s.length),r-=2}else{for(f=0;ys(t,s[f]);)++f;for(;!ys(t,s[f]);)f=Do(f+1,s.length);for(;r>0;)for(D[y[f]]=!0,f=Do(f+2,s.length),r-=2;!ys(t,s[f]);)f=Do(f+1,s.length)}}return D}function v_(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(t.b=oA(t.c),r=WV,f=0,Q=r.length;f<Q;++f)n=r[f],Gt(t.b,n);for(s=t.b.Ec(),s.setEditable(!0),zx(t.b,\"\"+vt(t.e.c)),t.a=oA(t.c),P=_V,i=0,D=P.length;i<D;++i)n=P[i],Gt(t.a,n);for(U=0,A=0;A<cl.length;A++)if(t.e.d==cl[A]){U=A;break}_t(t.a,U),e=B(d(F,1),k,6,15,[8,-2,4,-2,8]),L=B(d(F,1),k,6,15,[8,-2,4,-2,8,-2,8]),_o(t.c,e,L),f0(t.c,oe(t.c,\"Text size:\"),1,1),f0(t.c,t.b,3,1),f0(t.c,oe(t.c,\"Text style:\"),1,3),f0(t.c,t.a,3,3),t.d=Gu(t.c,20,3),O8(t.d,t.e.e),he(t.c,t.d,1,5,3,5)}function F_(t,e){var A,n,P;return n=Fk(t,e),A=_0(t,t.D[0][e])||_0(t,t.D[1][e]),P=A?16:1,t.H[e]==64?(t.H[e]=P,t.T=0,!0):t.H[e]==32?(t.H[e]=n>4?64:P,t.T=0,!0):t.H[e]==4?(t.H[e]=n>3?32:P,t.T=0,!0):t.H[e]==2&&(t.H[e]=386,t.T&=7,(t.F[e]&128)==0)?!0:t.H[e]==386?(n>2?t.H[e]=4:t.H[e]=P,t.T=0,!0):(384&t.H[e])!=0?(t.H[e]=1,t.T&=7,!0):!A&&n<2?!1:t.H[e]==1?(t.H[e]=2,t.T=0,!0):n<1?!1:t.H[e]==16?(t.H[e]=1,t.T=0,!0):!1}function m_(t,e){var A,n;if(e.j==1){if(A=Kh(t,e),!(A>=0&&A<34&&(A!=t.b||A==20||A==33)&&(A!=19||(t.a.U&4)!=0)&&(A!=21||(t.a.U&8)!=0)))return;A==20&&A==t.b&&(t.d=++t.d%3),t.k=A,MD(t.n)}else if(e.j==2){if(t.k==-1)return;if(n=Kh(t,e),n!=t.k||t.k==19&&(t.a.U&4)==0||t.k==21&&(t.a.U&8)==0){t.k=-1,MD(t.n);return}if(t.k=-1,n==0||n==1||n==17){MD(t.n),UK(t.a,n);return}t.b=n,MD(t.n),t.b==20?au(t.a,t.d==0?101:t.d==1?103:102):t.b==33?XF(t.a,-1,new X7(t,n)):au(t.a,n)}else(e.j==6||e.j==5)&&(A=Kh(t,e),A==t.k&&(A=-1),A!=t.f&&(t.f=A,MD(t.n)))}function fi(t,e){var A,n,P,r,i,f;return t.H[e]!=1||e<t.g&&Re(t.p,e)||(t.F[e]&64)!=0&&(t.p&&e<t.g?yP(t.p,e):0)<7||(A=t.D[0][e],!(A<t.f&&i0(t.p,A))||(t.p&&A<t.f?iA(t.p,A):0)<5)||(n=t.D[1][e],!(n<t.f&&i0(t.p,n))||(t.p&&n<t.f?iA(t.p,n):0)<5)?!1:(P=QF(t,A,n),r=QF(t,n,A),(t.p&&A<t.f?iA(t.p,A):0)>5&&(t.p&&n<t.f?iA(t.p,n):0)>5?P+r>2:(i=Vk(t,A,n),f=Vk(t,n,A),P==2&&f>=1||r==2&&i>=1||i==2&&(r>=1||f>=1)||f==2&&(P>=1||i>=1)))}function k_(t){var e,A,n,P,r,i,f;for(t.L=!0,n=Gh(t),t.P&&Q2(t.P,t.f)&&(n=Gh(t)),i2(t,!1)&&s2(t),i=!0;t.U<t.R.f&&i;){for(P=T_(t,n),e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],20,0),!t.cb[e]&&t.bb[e]!=0&&ue(t.e[e],O1(t.bb[e]<<18,M1(P[t.bb[e]==1?0:1][t.ab[e]],8))),f=t.db[e],t.eb[e]&&(f==1?f=2:f==2&&(f=1)),ue(t.e[e],f<<4);for(A=0;A<t.R.g;A++)ue(t.e[z(t.R,0,A)],t.o[A]),ue(t.e[z(t.R,1,A)],t.o[A]);if(r=Wn(t),t.U==r)break;t.U=r,i=!1,t.P&&Q2(t.P,t.f)&&(i=!0,n=Gh(t)),i2(t,!1)&&(i=!0,s2(t))}}function b_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(e=0;e<t.j.f;e++)if(t.d[e])for(i=!1,f=h(F,k,6,t.j.f,15,1),l=h(F,k,6,t.j.f,15,1),D=h(F,k,6,t.j.f,15,1),f[0]=e,l[e]=-1,D[e]=1,P=0,Q=0;P<=Q&&!i;){for(r=f[P],U=0;U<O(t.j,r)&&!i;U++)if(L=(D[r]&1)==1^dt(t.j,Ot(t.j,r,U))>1,n=_(t.j,r,U),D[n]==0&&L)if(t.d[n]){if((D[r]&1)==1){for(t.d[e]=!1,t.d[n]=!1,t.k+=2,y=r,s=0;s<D[r];s++)A=D1(t.j,n,y),t.e[A]&&(t.e[A]=!1,--t.c),uT(t.j,A,dt(t.j,A)==1?2:dt(t.j,A)-1),n=y,y=l[n];i=!0}}else f[++Q]=n,l[n]=r,D[n]=D[r]+1;++P}}function SA(t,e){Y1();var A,n,P,r,i;if((e&256)!=0&&A1(t,\"?\"))return 0;for(n=1;n<=128;n++)if(!A1(t,$1)&&K9(t,X0[n]))return n;if((e&2)!=0){for(P=129;P<=144;P++)if(K9(t,X0[P]))return P}if((e&4)!=0){for(r=146;r<=148;r++)if(K9(t,X0[r]))return r}if((e&1)!=0){for(i=151;i<=152;i++)if(K9(t,X0[i]))return i}if((e&32)!=0&&K9(t,X0[153]))return 153;if((e&8)!=0&&K9(t,X0[154]))return 154;if((e&16)!=0&&K9(t,X0[145]))return 145;if((e&128)!=0&&K9(t,X0[159]))return 159;if((e&64)!=0){for(A=171;A<=190;A++)if(K9(t,X0[A]))return A}return 0}function R_(t,e){var A,n,P,r,i,f,D;if(t.db[e]==1||t.db[e]==2){if(f=!1,a1(t.R,e)==2&&O(t.R,e)==2)try{for(i=0;i<2;i++)if(A=_(t.R,e,i),O(t.R,A)==3){for(P=h(F,k,6,2,15,1),r=0,D=0;D<O(t.R,A);D++)pA(t.R,A,D)==1&&(P[r++]=_(t.R,A,D));t.f[P[0]]>t.f[P[1]]^A6(t,A,P[0],P[1])&&(f=!f)}}catch(Q){if(Q=t0(Q),Zt(Q,19)){t.$[e]=3;return}else throw At(Q)}else{try{n=CK(t,e)}catch(Q){if(Q=t0(Q),Zt(Q,19)){t.$[e]=3;return}else throw At(Q)}for(i=1;i<n.length;i++)for(D=0;D<i;D++)t.f[n[i]]<t.f[n[D]]&&(f=!f)}t.db[e]==1^f?t.$[e]=1:t.$[e]=2}}function j_(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;for(L=-1,U=0;U<t.j[A];U++)t.n[A][U]==2&&(L=t.i[A][U]);for(r=h(F,k,6,n,15,1),T=h(F,k,6,4,15,1),T[0]=L,T[1]=A,T[2]=e,D=0,Q=0;Q<t.e[e];Q++)i=t.i[e][Q],t.C[i]==1&&(D==0&&(T[3]=i),r[D++]=i);y=!(A<t.f&&i0(t.p,A))&&n==1?1:2,l=h(Yt,at,6,y,15,1),f=h(Yt,at,6,y,15,1),s=R1(Yt,[te,at],[16,6],15,[y,2],2),!(A<t.f&&i0(t.p,A))&&n==1?(l[0]=0,f[0]=100,s[0][0]=-15,s[0][1]=15):(l[0]=0,l[1]=180,f[0]=50,f[1]=50,s[0][0]=-15,s[0][1]=15,s[1][0]=165,s[1][1]=195),mt(P,new xL(l,f,s,T,r,1))}function be(t){var e,A,n,P,r;return t.g!=null?t.g:t.a<32?(t.g=ta(E1(t.f),vt(t.e)),t.g):(P=t6((!t.c&&(t.c=kP(E1(t.f))),t.c),0),t.e==0?P:(e=(!t.c&&(t.c=kP(E1(t.f))),t.c).e<0?2:1,A=P.length,n=-t.e+A-e,r=new V0,r.a+=\"\"+P,t.e>0&&n>=-6?n>=0?mD(r,A-vt(t.e),\".\"):(lF(r,e-1,e-1,\"0.\"),mD(r,e+1,tP(HU,0,-vt(n)-1))):(A-e>=1&&(mD(r,e,\".\"),++A),mD(r,A,\"E\"),n>0&&mD(r,++A,\"+\"),mD(r,++A,\"\"+Te(E1(n)))),t.g=r.a,t.g))}function p_(t){var e,A,n,P,r,i,f;if(n=new uD,mt(n.a,new We(\"Solubility values are estimated applying an atom-type based increment system.\",2)),mt(n.a,new We($H,2)),mt(n.a,new We(A4,2)),mt(n.a,new We(\"Base value = -0.530\",2)),A=h(F,k,6,Kf.length,15,1),t)for(Qi(t),ut(t,7),e=0;e<t.f;e++){f=-1;try{f=ny(t,e,2144)}catch(D){if(D=t0(D),!Zt(D,19))throw At(D)}for(i=0;i<Kf.length;i++)if(P0(Ul[i],f)){++A[i];break}}for(P=new Pu(\"#0.000\"),r=0;r<Kf.length;r++)A[r]!=0&&ZP(n,\"\"+A[r]+\" * \"+ng(P,Kf[r])+\"   AtomType: 0x\"+Nh(Ul[r]),2);return n}function N5(t){var e,A,n,P,r,i,f,D;for(f=h(rt,ft,6,t.q,16,1),A=0;A<t.q;A++)f[A]=t.C[A]==1&&t.A[A]==0&&t.s[A]==0&&(t.u[A]&g8)==0&&(t.t==null||t.t[A]==null);for(D=h(rt,ft,6,t.q,16,1),i=0;i<t.r;i++){if(n=t.D[0][i],P=t.D[1][i],dt(t,i)!=1){f[n]=!1,f[P]=!1;continue}D[n]&&(f[n]=!1),D[P]&&(f[P]=!1),f[n]&&_0(t,P)&&t.C[P]!=13&&(f[n]=!1),f[P]&&_0(t,n)&&t.C[n]!=13&&(f[P]=!1),D[n]=!0,D[P]=!0}for(r=0;r<t.r;r++)f[t.D[0][r]]&&f[t.D[1][r]]&&(f[t.D[0][r]]=!1,f[t.D[1][r]]=!1);for(e=0;e<t.q;e++)D[e]||(f[e]=!1);return f}function C_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(g=0;g<t.e.length;g++)if(t.e[g]){for(c=!1,n=N(t.j,g),r=0,f=n.length;r<f;++r)e=n[r],t.a[e]|=Q0,aY(t,e)&&(c=!0);for(U=N(t.k,g),s=0,T=U.length;s<T;++s)D=U[s],t.c[D]|=Q0;if(t.f[g]){for(A=N(t.j,g),P=0,i=A.length;P<i;++P)e=A[P],t.a[e]|=I0;for(Q=N(t.k,g),L=0,l=Q.length;L<l;++L)D=Q[L],t.c[D]|=I0}if(c){for(A=N(t.j,g),P=0,i=A.length;P<i;++P)e=A[P],t.a[e]|=T8;for(Q=N(t.k,g),L=0,l=Q.length;L<l;++L)D=Q[L],t.c[D]|=T8}}for(y=new Wt(t.b);y.a<y.c.a.length;)D=t1(y).a,t.c[D]=0}function AP(t){var e,A,n,P,r,i,f,D,Q;e=null;try{for(e=new nn(new Fi((P=_D(t),c0(),P))),D=c1(v1(K1(e)),o1,It),n=o8(v1(K1(e)),\",\"),Q=R1(uP,[nA,A0],[8,1],5,[D,n.length],2),i=0;(r=K1(e))!=null&&i<D;i++)for(f=o8(v1(r),\",\"),A=0;A<n.length;A++)switch(Yi(n[A],0)){case 105:Q[i][A]=k1(c1(v1(f[A]),o1,It));break;case 102:Q[i][A]=Le(v1(f[A]));break;case 99:Q[i][A]=FG(Yi(ef(ef(v1(f[A]),\"'\"),'\"'),0))}return Q}catch(U){if(U=t0(U),Zt(U,75))x1();else throw At(U)}return R1(uP,[nA,A0],[8,1],5,[1,1],2)}function M_(t,e,A,n,P){var r,i;return!(K(t.j,A)==6&&w.Math.abs(O(t.j,A)-O(t.d,P))>1||K(t.j,A)==8&&O(t.j,A)==2&&Zr(t.j,e,8)>Zr(t.d,n,8)||K(t.d,P)==8&&O(t.d,P)==2&&Zr(t.j,e,8)<Zr(t.d,n,8)||K(t.j,A)==8&&O(t.j,A)==2&&O(t.d,P)==2&&(i=_(t.j,A,0)==e?0:1,r=_(t.d,P,0)==n?0:1,cs(t.p[A][i][3],t.i[P][r][3])!=0)||K(t.j,A)==7&&Zr(t.j,e,7)<Zr(t.d,n,7)||K(t.d,P)==7&&Zr(t.j,e,7)>Zr(t.d,n,7)||pr(t.j,D1(t.j,e,A))==3^pr(t.d,D1(t.d,n,P))==3)}function Gs(t,e){_r();var A,n,P,r,i,f,D,Q,U,L,s;return A=(xA[0]*((e&iP)>>16)+xA[1]*((e&PP)>>8)+xA[2]*(e&255))/255,i=(xA[0]*((t&iP)>>16)+xA[1]*((t&PP)>>8)+xA[2]*(t&255))/255,P=w.Math.abs(A-i),P>jf||(f=(mQ(),jR(((e&iP)>>16)/255,((e&PP)>>8)/255,(e&255)/255,null)),D=jR(((t&iP)>>16)/255,((t&PP)>>8)/255,(t&255)/255,null),Q=w.Math.abs(D[0]-f[0]),Q>.5&&(Q=1-Q),s=1-w.Math.max(D[1],f[1]),n=w.Math.abs(i+A-1),U=w.Math.cos(Q1*Q*3),L=jf*w.Math.max(s,w.Math.max(n,U)),P>L)?t:(r=i>A?i+L>1:i-L>0,n5(t,r?A-L:A+L))}function Ff(t,e,A){var n,P,r,i;if(ut(t.j,1),i=new Qo(t.j,1),Q$(t,e,i),t.c==0)return!0;if(A)for(P=0;P<t.j.f;P++)t.d[P]&&K(t.j,P)==7&&(t.f[P]||O(t.j,P)==3&&!t.g[P])&&E0(t.j,P,1);for(t.a=!1,Oz(t,A),t.j.K&&wW(t),Ta(t,i),RG(t,i),bY(t),A&&K$(t),jQ(t);A$(t,i,A);)jQ(t);for(;YX(t,i,A);)jQ(t);for(;KW(t,i,A);)jQ(t);for(;t.c!=0;)for(r=0;r<t.j.g;r++)t.e[r]&&(n2(t,r),jQ(t));for(A&&x_(t,A),t.b-t.k>=2&&b_(t),n=0;n<t.j.f;n++)t.d[n]&&xt(t.j,n)!=0&&(A&&(p1(t.j,n)==1&&tA(t.j,n)||p1(t.j,n)==-1&&K(t.j,n)==5)?E0(t.j,n,0):Ne(t.j,n,32),++t.k);return t.b==t.k}function ij(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y;for(this.e=t,this.c=e,this.f=A,this.d=n,this.g=P,this.b=P,this.i=r,Q=new lP,f=0;f<t.f;f++)A[f]==0&&(D=t.C[f]+(t.A[f]<<16),s=le(Q,k1(D)),s||(s=new NT(this),ze(Q,k1(D),s)),s.d=KF(f,s.d),s.d.length<=s.c.length&&(s.a=s.d.length));for(i=0;i<e.f;i++)n[i]==0&&(D=e.C[i]+(e.A[i]<<16),s=le(Q,k1(D)),s||(s=new NT(this),ze(Q,k1(D),s)),s.c=KF(i,s.c),s.c.length<=s.d.length&&(s.a=s.c.length));for(this.a=new f1,y=(L=new fD(Q).a.$c().Tb(),new DD(L));y.a.ad();)s=(U=y.a.bd(),U.ed()),u_(s)||mt(this.a,s)}function fj(t,e){var A,n,P,r,i;r=0,YA(t.d)?(P=B0(t.p),A=B0(t.o),r|=P<<9,r|=A<<13,r&=-128,w0(t.u,e,1)):(YA(t.k)&&(r|=1),YA(t.c)&&(r|=2),YA(t.n)&&(r|=4),YA(t.i)&&(r|=32),YA(t.j)&&(r|=64),YA(t.b)&&(r|=8),YA(t.g)&&(r|=16),B0(t.q)!=0&&(B0(t.q)==1?fA(t.u,e)||(r|=128):B0(t.q)==2?fA(t.u,e)||(r|=256):B0(t.q)==3?_e(t.u,e)||(r|=4194560):B0(t.q)==4?_e(t.u,e)||(r|=qA):B0(t.q)==5&&(_e(t.u,e)||(r|=fP))),B0(t.r)!=0&&(i=B0(t.r)+2,i>7&&(i-=7),n=pr(t.u,e),(i<=2||i!=n)&&(r|=i<<17)),YA(t.e)&&(r|=Ef),YA(t.f)&&(r|=h8)),Ge(t.u,e,oi,!1),Ge(t.u,e,r,!0),Cs(t.u,e)}function Js(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;for(P=h(F,k,6,e.q,15,1),D=$0(t,1),Q=$0(t,2),n=0;n<e.q;n++)if(e.C[n]!=0||(e.t==null||e.t[n]==null?null:rn((y=e.t[n],c0(),y)))!=null)P[n]=En(e,t,n,D,Q);else if(P[n]=A,(e.T&8)!=0){for(f=0;f<e.r;f++)for(U=0;U<2;U++)if(e.D[U][f]==n){if(l=e.D[1-U][f],T=e.u[l]&3,L=!1,T==1||T==2){for(r=0;r<e.r;r++)if(r!=f)for(s=0;s<2;s++)e.D[s][r]==l&&e.D[1-s][r]<n&&(L=!L)}L&&ce(e,l,T==1?2:1,(e.u[l]&4)!=0)}}for(i=0;i<e.r;i++)er(e,t,i,D,Q,P[e.D[0][i]],P[e.D[1][i]],!1);return t.L=t.L&&e.L,t.I=0,t.T=0,P}function Dj(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;this.g=e,this.b=e.a[A],this.d=e.a[n],this.a=A,this.c=n,P=(i=GF(t.p,this.b),f=GF(t.p,this.d),D=PL(t.p,this.b),Q=PL(t.p,this.d),U=(i-f)/(i+f),.5*(i+f)*(1+(D==68||Q==68?0:.2*(1-w.Math.exp(-12*U*U))))),r=(L=NB(t.p,this.b),s=NB(t.p,this.d),y=xB(t.p,this.b),l=xB(t.p,this.d),T=OB(t.p,this.b),c=OB(t.p,this.d),g=P*P,181.16*L*s*y*l/((w.Math.sqrt(y/T)+w.Math.sqrt(l/c))*g*g*g)),this.e=PL(t.p,this.b),this.f=PL(t.p,this.d),(this.e==68&&this.f==65||this.e==65&&this.f==68)&&(P=P*.8,r*=.5),this.i=P,this.j=r}function H_(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;return U=_d(t.a,e,D1(e,A,n)),r=e.a[A],f=e.a[n],r>f&&(r=(l=k1(f),k1(f=r),l).a),s=_9(B(d(F,1),k,6,15,[1,2,0]),B(d(F,1),k,6,15,[r,f,U]),t),s>=0?j0(t.b[s][3]):(P=e.C[A],i=e.C[n],P>i&&(P=(y=k1(i),k1(i=P),y).a),T=y2(t,e,A,n),Q=_9(B(d(F,1),k,6,15,[0,1]),B(d(F,1),k,6,15,[P,i]),t.a.c),Q>=0?(L=w.Math.pow(UI(t.a.c,Q)/T,6),QI(t.a.c,Q)*L):(D=_9(B(d(F,1),k,6,15,[0,1]),B(d(F,1),k,6,15,[Tk(P),Tk(i)]),t.a.j),w.Math.pow(10,-(T-Ig(t.a.j,D,2))/Ig(t.a.j,D,3))))}function V_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E;return A=t.l&8191,n=t.l>>13|(t.m&15)<<9,P=t.m>>4&8191,r=t.m>>17|(t.h&255)<<5,i=(t.h&1048320)>>8,f=e.l&8191,D=e.l>>13|(e.m&15)<<9,Q=e.m>>4&8191,U=e.m>>17|(e.h&255)<<5,L=(e.h&1048320)>>8,S=A*f,p=n*f,x=P*f,a=r*f,E=i*f,D!=0&&(p+=A*D,x+=n*D,a+=P*D,E+=r*D),Q!=0&&(x+=A*Q,a+=n*Q,E+=P*Q),U!=0&&(a+=A*U,E+=n*U),L!=0&&(E+=A*L),y=S&x0,l=(p&511)<<13,s=y+l,c=S>>22,g=p>>9,m=(x&262143)<<4,v=(a&31)<<17,T=c+g+m+v,b=x>>18,j=a>>5,C=(E&4095)<<8,R=b+j+C,T+=s>>22,s&=x0,R+=T>>22,T&=x0,R&=aA,S0(s,T,R)}function E_(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(D5(e,t.j),r=0,n=0;n<t.d.q;n++)i=e.a==null?NaN:e.a[n],i>1e3&&mX(t,e,n)&&++r;if(r==0){for(s=16,P=0;P<t.d.q;P++)s>Mt(t.d,P)&&(e.a==null?NaN:e.a[P])>(U=w.Math.min(4,Mt(t.d,P)),400+U*2e3/5)&&(s=Mt(t.d,P));if(s!=16)for(A=0;A<t.d.q;A++)s==Mt(t.d,A)&&(e.a==null?NaN:e.a[A])>(Q=w.Math.min(4,Mt(t.d,A)),400+Q*2e3/5)&&(f=e.k[A],Mt(t.d,A)==1?(D=J0(e,_(t.d,A,0)),I8(f,2*(D.a-f.a),2*(D.b-f.b),2*(D.c-f.c))):(L=Mt(t.d,A)==0?16:8,I8(f,L*jn(t.f)-L/2,L*jn(t.f)-L/2,L*jn(t.f)-L/2)),++r)}return r!=0&&po(e),r}function uj(t){var e,A,n,P,r,i,f;for(i=h(F,k,6,t.U+1,15,1),A=0;A<t.R.f;A++)Ae(t.R,A)==0&&(t.db[A]==1?++i[t.f[A]]:t.db[A]==2&&--i[t.f[A]]);for(P=0;P<t.R.g;P++)dt(t.R,P)==1&&cP(t.R,P)==0&&(t.o[P]==1?(++i[t.f[z(t.R,0,P)]],++i[t.f[z(t.R,1,P)]]):t.o[P]==2&&(--i[t.f[z(t.R,0,P)]],--i[t.f[z(t.R,1,P)]]));for(f=1;f<=t.U;f++)if(i[f]!=0){if(r=i[f]<0,r){for(e=0;e<t.R.f;e++)Ae(t.R,e)==0&&(t.db[e]==1?t.db[e]=2:t.db[e]==2&&(t.db[e]=1));for(n=0;n<t.R.g;n++)dt(t.R,n)==1&&cP(t.R,n)==0&&(t.o[n]==1?t.o[n]=2:t.o[n]==2&&(t.o[n]=1))}return r}return!1}function S_(t,e){var A,n,P,r,i,f,D,Q,U,L;for(t.j=0,P=0;P<e.g.a.length+e.f.a.length;P++)for(D=Pv(t.c,P),A=0;A<D.f;A++)gt(V(D.B[A],Pe),0)?D.w[A]=0:t.j<w.Math.abs(D.w[A])&&(t.j=w.Math.abs(D.w[A]));for(L=h(rt,ft,6,t.j+1,16,1),r=0;r<e.g.a.length;r++)for(U=N(e.g,r),A=0;A<U.f;A++)f=w.Math.abs(U.w[A]),f!=0&&(L[f]=!0);for(i=0;i<e.f.a.length;i++)for(Q=N(e.f,i),A=0;A<Q.f;A++)f=w.Math.abs(Q.w[A]),f!=0&&(L[f]?L[f]=!1:Q.w[A]=0);for(n=0;n<e.g.a.length;n++)for(U=N(e.g,n),A=0;A<U.f;A++)f=w.Math.abs(U.w[A]),f!=0&&L[f]&&(U.w[A]=0)}function q_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(l=null,l=new Ni,Dn(l,t.f),i=h(rt,ft,6,t.f.f,16,1),c=e.Tb();c.ad();)if(T=c.bd(),y=null,m=T.b,Ln(l,m),sn(l,4,8)!=0&&(y=l.F),y)for(s=new Wt(y);s.a<s.c.a.length;){for(L=t1(s),g=0,n=L,P=0,r=n.length;P<r;++P)A=n[P],i[A]&&++g;if(g<=1){for(D=T.c,t.a?D=!1:t.a=!0,Q=new MP(t.f,L.length,D),U=0;U<L.length;U++)A=L[U],D&&zn(t.f,A,!0),Q.k[U]=256,Q.e[U]=A,Q.a[U]=kt(T.b,U)/T.a,Q.b[U]=jt(T.b,U)/T.a,i[A]=!0,t.b[A]=!0;for(f=0;f<m.g;f++)t.c[D1(t.f,L[m.D[0][f]],L[m.D[1][f]])]=!0;pP(t.d,Q)}}return i}function Qj(t,e,A,n,P){var r,i,f,D,Q;for(this.D=t,this.u=e,this.I=A,this.B=n,this.L=P,mZ(this),rb(this),this.k=pZ(this),this.j=MK(this.k),this.r=0,Q=(f=new N8(new x8(new w9(this.k[0]).a).b),new g9(f));p9(Q.a.a);)D=(i=Br(Q.a),i.dd()),r=le(this.k[0],D),this.r+=w.Math.min(r[0].length,r[1].length);this.p=this.r==this.D.f&&this.D.f==this.u.f,this.G=h(F,k,6,this.D.f,15,1),this.w=h(F,k,6,this.u.f,15,1),this.H=h(rt,ft,6,n9(this.D,this.G,!1,!1),16,1),this.A=h(rt,ft,6,n9(this.u,this.w,!1,!1),16,1),this.q=gR(this),this.g=7,this.K=0}function Uj(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c;if(t.o&&I$(t,e),r=null,t.e!=null)for(f=t.e,Q=0,L=f.length;Q<L;++Q)i=f[Q],L2(i,e,null,0),r=r?dQ(r,i.v):i.v;if(t.b!=null)for(f=t.b,Q=0,L=f.length;Q<L;++Q)i=f[Q],L2(i,e,null,0),r=r?dQ(r,i.v):i.v;if(t.g)for(l=new Wt(t.g);l.a<l.c.a.length;)y=t1(l),T=y.Jb(e),Nu(t.p,T),r=r?dQ(r,T):T;if(!r)return null;if(P=C5(t),c=new Ws(r,A,P,n),!(c.c==1&&c.a==0&&c.b==0)){if(Eu(c,t.p),t.e!=null)for(D=t.e,U=0,s=D.length;U<s;++U)i=D[U],qo(i,c);if(t.b!=null)for(f=t.b,Q=0,L=f.length;Q<L;++Q)i=f[Q],qo(i,c);return c}return null}function zs(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(D=JE[n],f=1,y=n==4?w.Math.exp(w.Math.log(.01)/D):1,P=t.d.q*t.d.q,s=h(yt,wt,6,10,15,1),L=0,U=0;U<D&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)));U++){for(n!=0&&U%10==0&&na(t,e),Q=0;Q<P&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)));Q++)l=null,l=N(t.j,vt(jn(t.f)*t.j.a.length)),l.g&&!t.k[l.rd()]&&(i=l.qd(e,f),i&&po(e));if(D5(e,t.j),s[L++]=e.e,L==10&&(L=0),U>10){for(r=0,c=s,g=0,m=c.length;g<m;++g)T=c[g],r+=T;if(r/=10,e.e>r)break}A.e>e.e&&(WD(A,e),lh(A,e)),f*=y}e.e>A.e&&(WD(e,A),lh(e,A))}function oj(){oj=B1,gE=B(d(yt,1),wt,6,15,[5.55,15,15,15,15,15,15,15,15,wA,wA,wA,wA,wA,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,wA,wA,7.1,ie,ie,17.78,Q9,3.82,6.66,6.66,7.78,11.68,wA,6.66,wA,wA,ie,ie,ie,ie,ie,ie,ie,ie,ie,ie,wA,wA,11.68,11.68,11.68,ie,20.3,Q9,Q9,Gf,Gf,Q9,12.22,15.56,Gf,wA,10,Q9,ie,16.66,Gf,15.56,Q9,15.56,Gf,Q9,12.22,Gf,Q9,18.88,Q9,Q9,12.22,wA,wA,wA,9.38,ie,6.66,ie,ie,10,ie,ie,wA,ie,ie,4.44,4.44,10,4.44,16.66,ie,ie,ie,ie,6.66,10,wA,ie,10,Gf,10,10,10,6.68,5.2,6.68,11.68,10.5])}function I_(t,e){var A,n,P,r,i,f,D,Q,U,L;if(uN(t.C[e]))return 0;if(t.C[e]==1)return t.j[e]==0?0:ei(t.C[t.i[e][0]])?-1:1;if(L=t.s[e],D=t.e[e]-e0(t,e)+xt(t,e),t.C[e]!=1&&t.C[e]!=15&&(ei(t.C[e])?L+=D:L-=D),t.j[e]==0)return L;for(U=0;U<t.j[e];U++)r=t.i[e][U],A=G8(t,t.k[e][U])?1:t.n[e][U],ei(t.C[e])?ei(t.C[r])||(L+=A):ei(t.C[r])?L-=A:t.C[e]!=t.C[r]&&(TB(t.C[e]).a<TB(t.C[r]).a?L+=A:L-=A);if(e<t.f&&lI(t.p,e)){for(n=0,P=0,f=0,Q=0;Q<t.j[e];Q++)G8(t,t.k[e][Q])&&(i=t.C[t.i[e][Q]],i==6?++P:ar(i)?++f:++n);t.C[e]==6?n>1?--L:f>1&&++L:tA(t,e)?n+P>1&&--L:f+P>1&&++L}return L}function O5(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(l=h(F,k,6,16,15,1),A=h(yt,wt,6,16,15,1),r=h(yt,wt,6,2,15,1),n=0,U=0;U<2;U++)for(P=t.D[U][e],L=0;L<t.j[P];L++)if(D=t.k[P][L],D!=e){if(n==4)return 0;f=t.i[P][L],l[n]=16,t.o[f]!=0&&(l[n]+=(t.u[f]&hn)!=0?1:4),(t.F[e]&64)!=0&&(t.F[D]&64)!=0&&(s=KL(t.p,e,D),s!=-1&&(l[n]+=u3(t.p,s)?64:6)),A[n++]=kA(t.J[P].a,t.J[P].b,t.J[f].a,t.J[f].b)}for(r[0]=Y0(t,t.D[0][e],t.D[1][e]),r[0]<0?(r[1]=r[0]+Q1,i=!1):(r[1]=r[0],r[0]=r[1]-Q1,i=!0),y=0,Q=0;Q<n;Q++)A[Q]>r[0]&&A[Q]<r[1]?y-=l[Q]:y+=l[Q];return i?-y:y}function Lj(t){var e;if(this.e=t.e,t.a!=null)for(this.a=h(Yt,at,6,t.a.length,15,1),e=0;e<this.a.length;e++)this.a[e]=360-t.a[this.a.length-e-1]<<16>>16;if(t.d!=null)for(this.d=R1(Yt,[te,at],[16,6],15,[t.d.length,2],2),e=0;e<this.d.length;e++)this.d[e][0]=360-t.d[this.a.length-e-1][1]<<16>>16,this.d[e][1]=360-t.d[this.a.length-e-1][0]<<16>>16;if(t.c!=null)for(this.c=h(Yt,at,6,t.c.length,15,1),e=0;e<this.c.length;e++)this.c[e]=t.c[this.c.length-e-1];if(t.b!=null)for(this.b=h(q,I,6,t.b.length,15,1),e=0;e<this.b.length;e++)this.b[e]=t.b[this.b.length-e-1]}function x_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;for(A=0;A<t.j.f;A++)if(ut(t.j,1),K(t.j,A)==7&&p1(t.j,A)==1&&a1(t.j,A)==1&&!mz(t,A,e))for(f=!1,D=h(F,k,6,t.j.f,15,1),T=h(F,k,6,t.j.f,15,1),Q=h(F,k,6,t.j.f,15,1),D[0]=A,T[A]=-1,Q[A]=1,r=0,U=0;r<=U&&!f;){for(i=D[r],L=0;L<O(t.j,i)&&!f;L++)if(s=(Q[i]&1)==0^dt(t.j,Ot(t.j,i,L))>1,P=_(t.j,i,L),Q[P]==0&&s)if(K(t.j,P)==7&&a1(t.j,P)==0&&O(t.j,P)==2){if((Q[i]&1)==0){for(E0(t.j,A,0),l=i,y=0;y<Q[i];y++)n=D1(t.j,P,l),uT(t.j,n,dt(t.j,n)==1?2:dt(t.j,n)-1),P=l,l=T[P];f=!0}}else D[++U]=P,T[P]=i,Q[P]=Q[i]+1;++r}}function N_(t,e){if(e<128)t.push((e&127)<<24>>24);else if(e<I1)t.push((e>>6&31|192)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<Q0)t.push((e>>12&15|224)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<qA)t.push((e>>18&7|240)<<24>>24),t.push((e>>12&63|128)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<Tn)t.push((e>>24&3|248)<<24>>24),t.push((e>>18&63|128)<<24>>24),t.push((e>>12&63|128)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else throw At(new C8(\"Character out of range: \"+e))}function O_(t,e,A){var n,P,r,i,f;return K(t.R,e)!=6&&K(t.R,e)!=7||(P=_(t.R,e,0),r=_(t.R,e,1),a1(t.R,P)!=1||a1(t.R,r)!=1)||O(t.R,P)==1||O(t.R,r)==1||Mt(t.R,P)>3||Mt(t.R,r)>3||(i=new gf(t.R,t.f,e,P),i.f&&A==1)||(f=new gf(t.R,t.f,e,r),f.f&&A==1)||i.f&&f.f?!1:(A==3&&(i.f&&i.c&&(t.W[e]=!0),f.f&&f.c&&(t.W[e]=!0)),n=t.jb?rY(t,i,f):Pz(i,f),A==1?t.db[e]=n:A==2&&(i.f&&(n==1?ue(t.e[i.b],t.f[P]):ue(t.e[i.d],t.f[P])),f.f&&(n==2?ue(t.e[f.b],t.f[r]):ue(t.e[f.d],t.f[r]))),!0)}function Ys(t,e,A){var n,P,r,i,f,D,Q,U,L,s;if(Q=t.K[e],i=t.n[A],(ee(t.g,A)&Ef)!=0){if(D=Lu(t.H,e),P=Lu(t.g,A),r=ee(t.g,A)&127,D!=P&&!(D==1&&(r&1)!=0)&&!(D==2&&(r&2)!=0)&&!(D==4&&(r&4)!=0)&&!(D==32&&(r&32)!=0)&&!(D==64&&(r&64)!=0)&&!(D==16&&(r&16)!=0)&&!(D==8&&(r&8)!=0))return!1;Q&=-128,i&=-128}if((Q&~i)!=0)return!1;if(s=(ee(t.g,A)&SP)>>17,s!=0){if(t.H.K&&s==(ee(t.H,A)&SP)>>17)return!0;if(s<=2)return U=pr(t.H,e),s==1?U>=8&&U<=12:U>=12;for(n=!1,L=On(t.H),f=0;f<L.j.a.length;f++)if(N(L.k,f).length==s&&Af(L,f,e)){n=!0;break}if(!n)return!1}return!0}function G_(t,e,A,n,P,r,i,f,D,Q){var U,L,s,y,l,T,c,g,m,v,R,b,j,C;t!=e&&(U=O9(t,e),!(D[U[0]][U[1]]&&D[U[0]][U[1]].a.length==1)&&(C=.866,L=.5,(Q.F[i]&64)!=0&&(R=Q.p&&i<Q.g?yP(Q.p,i):0,R<6&&(C=0,L=1)),y=f.a[i]-f.a[A]*w.Math.cos(P)-f.a[n]*w.Math.cos(r),b=f.a[A]*w.Math.sin(P),j=f.a[n]*w.Math.sin(r),l=b+j,T=b-j*L,c=j*C,m=w.Math.sqrt(y*y+T*T+c*c),g=w.Math.sqrt(y*y+l*l),v=h(F,k,6,2,15,1),v[0]=Q.D[0][i],v[1]=Q.D[1][i],s=D[U[0]][U[1]],s?(s.a[0]=w.Math.min(s.a[0],m),s.a[1]=w.Math.min(s.a[1],g)):D[U[0]][U[1]]=new $L(U,v,m,g,3)))}function Ar(t,e){var A,n,P,r,i,f,D;for(f=(e.T&15)!=0,D=e.T&248,!t.g&&(t.g=new aD),(t.e&2)!=0&&g5(e,!1),t.f=e,ut(t.f,7),t.d=new _w,t.b=h(rt,ft,6,t.f.q,16,1),t.c=h(rt,ft,6,t.f.r,16,1),t.i=h(F,k,6,t.f.q,15,1),A=0;A<t.f.q;A++)t.i[A]=p1(t.f,A);for((t.e&12)!=0&&h$(t),(t.e&1)==0&&mU&&q_(t,mU),Ka(t),wj(t),QW(t),wj(t),r=new Wt(t.d);r.a<r.c.a.length;)n=t1(r),IX(n);for(i$(t),H$(t),Rz(t),jN(t),ax(t),tN(t),P=new Wt(t.d);P.a<P.c.a.length;)for(n=t1(P),i=0;i<n.e.length;i++)Be(t.f,n.e[i],n.a[i]),Ie(t.f,n.e[i],n.b[i]),hP(t.f,n.e[i],0);f&&(sD(t.f,D),Lf(t.f)),t.a&&nT(t.f)}function Ks(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(L=0,i=h(rt,ft,6,t.a.f,16,1),n=e,P=0,r=n.length;P<r;++P)A=n[P],A!=-1&&(i[A]=!0);for(s=h(rt,ft,6,t.a.g,16,1),c=0;c<t.b.g;c++)if(l=z(t.b,0,c),T=z(t.b,1,c),!(t.b.K&&(Qe(t.b,l)||Qe(t.b,T)))){if(f=e[l],D=e[T],mN(t.b,c),f==-1||D==-1){(f!=-1||D!=-1)&&(L+=F5(t.b,c));continue}if(U=D1(t.a,f,D),U==-1){L+=F5(t.b,c);continue}s[U]=!0,L+=dv(t.b,c)==dv(t.a,U)?0:1}for(Q=0;Q<t.a.g;Q++)t.a.K&&(Qe(t.a,z(t.a,0,Q))||Qe(t.a,z(t.a,1,Q)))||s[Q]||(L+=F5(t.a,Q));for(y=0;y<t.b.f;y++)d0(t.b,y)!=0&&(L+=FY(t,y,e));return-L}function J_(t){if(!t)return 0;var e=0;return t.noTabus&&(e|=1),t.showAtomNumber&&(e|=2),t.showBondNumber&&(e|=4),t.highlightQueryFeatures&&(e|=8),t.showMapping&&(e|=16),t.suppressChiralText&&(e|=32),t.suppressCIPParity&&(e|=64),t.suppressESR&&(e|=128),t.noCarbonLabelWithCustomLabel&&(e|=s8),t.noAtomCustomLabels&&(e|=Q0),t.showSymmetryAny&&(e|=768),t.showSymmetrySimple&&(e|=256),t.showSymmetryStereoHeterotopicity&&(e|=512),t.noImplicitAtomLabelColors&&(e|=re),t.noStereoProblem&&(e|=I1),t.noColorOnESRAndCIP&&(e|=C0),t.noImplicitHydrogen&&(e|=ge),t.drawBondsInGray&&(e|=Sn),e}function Di(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;for(s=!1,P.a=0,P.b=0,n>0?r=y6:r=l6,l=Y0(t.L,e,A),U=0;U<O(t.L,e);U++)i=Ot(t.L,e,U),f=l,z(t.L,0,i)==e?L=z(t.L,1,i):L=z(t.L,0,i),L!=A&&(y=Y0(t.L,e,L),f<y&&(f+=F0),D=f-y,n>0?(D<Q1&&(s=!0),D>y6&&(D=y6),D<.523598776&&(D=.523598776),D<=r&&(r=D,Q=t.T*w.Math.tan(r-bA)/2,P.a=-(Q*w.Math.sin(f)),P.b=-(Q*w.Math.cos(f)))):(D>=Q1&&(s=!0),D<l6&&(D=l6),D>5.759586531&&(D=5.759586531),D>=r&&(r=D,Q=t.T*w.Math.tan(4.712388981-r)/2,P.a=-(Q*w.Math.sin(f)),P.b=-(Q*w.Math.cos(f)))));return s}function z_(t,e,A){var n,P,r,i,f,D;for(n=h(F,k,6,4,15,1),f=0;f<Mt(t.R,e);f++)n[f]=_(t.R,e,A[f]);for(Mt(t.R,e)==3&&(n[3]=e),P=R1(yt,[h0,wt],[15,6],15,[3,3],2),i=0;i<3;i++)P[i][0]=kt(t.R,n[i+1])-kt(t.R,n[0]),P[i][1]=jt(t.R,n[i+1])-jt(t.R,n[0]),P[i][2]=vA(t.R,n[i+1])-vA(t.R,n[0]);return D=h(yt,wt,6,3,15,1),D[0]=P[0][1]*P[1][2]-P[0][2]*P[1][1],D[1]=P[0][2]*P[1][0]-P[0][0]*P[1][2],D[2]=P[0][0]*P[1][1]-P[0][1]*P[1][0],r=(P[2][0]*D[0]+P[2][1]*D[1]+P[2][2]*D[2])/(w.Math.sqrt(P[2][0]*P[2][0]+P[2][1]*P[2][1]+P[2][2]*P[2][2])*w.Math.sqrt(D[0]*D[0]+D[1]*D[1]+D[2]*D[2])),r>0?1:2}function sj(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(ut(t,7),ut(e,7),this.c=t,this.d=new pi,n=0;n<t.g;n++)X8(this.d,new Q5(t,n));for(A=0;A<e.g;A++)U=new Q5(e,A),D=(f=a9(this.d,U),f<0?-1:f),D==-1?(U.i=(t9(),yl),X8(this.d,U)):pX(kr(this.d,D),U);for(i=this.d.d.a.length-1;i>=0;i--)U=kr(this.d,i),U.i!=(t9(),Tl)?kr(this.d,i).i==bU&&aU(this.d,i):U.i=ll;for(this.b=h(F,k,6,t.f,15,1),r=0;r<t.f;r++)for(Q=0;Q<e.f;Q++)if(w.Math.abs(e.w[Q])==w.Math.abs(t.w[r])){P=(s=Cn(t,r),s+WA(t,r,s,t.C[r])-G1(t,r)-(L=Cn(e,Q),L+WA(e,Q,L,e.C[Q])-G1(e,Q))),this.b[r]=P>0?P:0;break}this.e=new Ni}function yj(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;for(f=0;f<A;f++)if(n[f]!=-1&&t.e[f]>3&&(t.u[f]&Tn)!=0){for(T=0,s=-1,L=-1,U=0;U<t.e[f];U++)P[t.k[f][U]]!=-1?++T:t.n[f][U]==1&&Cr(t,t.k[f][U])&&t.D[0][t.k[f][U]]==f&&(s=t.k[f][U],L=t.i[f][U]);if(s!=-1&&T>=3){for(r=kA(t.J[f].a,t.J[f].b,t.J[L].a,t.J[L].b),y=10,l=-1,Q=0;Q<t.e[f];Q++)t.n[f][Q]==1&&(!Cr(t,t.k[f][Q])||t.D[0][t.k[f][Q]]==f)&&P[t.k[f][Q]]!=-1&&(i=w.Math.abs(Je(r,Y0(t,f,t.i[f][Q]))),y>i&&(y=i,l=t.k[f][Q]));l!=-1&&(D=P[l],w0(e,D,t.H[l]==257?129:257),t.D[0][l]!=f&&(BD(e,1,D,n[t.D[0][l]]),BD(e,0,D,n[f])))}}}function lj(t){var e,A,n,P;for(KD.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)if(n=(pt(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(Xt(A+1,t.length+1),t.substr(A+1)):(pt(A+1,e,t.length),t.substr(A+1,e-(A+1))),A1(n,\"x1\"))try{this.i[0].a=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}else if(A1(n,\"y1\"))try{this.i[0].b=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}else if(A1(n,\"x2\"))try{this.i[1].a=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}else if(A1(n,\"y2\"))try{this.i[1].b=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}}function G5(t,e,A){var n,P,r,i,f,D;if(e.l==0&&e.m==0&&e.h==0)throw At(new p8(\"divide by zero\"));if(t.l==0&&t.m==0&&t.h==0)return A&&(In=S0(0,0,0)),S0(0,0,0);if(e.h==l8&&e.m==0&&e.l==0)return pJ(t,A);if(D=!1,e.h>>19!=0&&(e=Wr(e),D=!D),i=FX(e),r=!1,P=!1,n=!1,t.h==l8&&t.m==0&&t.l==0)if(P=!0,r=!0,i==-1)t=cg((Xr(),tc)),n=!0,D=!D;else return f=u5(t,i),D&&WL(f),A&&(In=S0(0,0,0)),f;else t.h>>19!=0&&(r=!0,t=Wr(t),n=!0,D=!D);return i!=-1?xG(t,i,D,r,A):jh(t,e)<0?(A&&(r?In=Wr(t):In=S0(t.l,t.m,t.h)),S0(0,0,0)):AW(n?t:S0(t.l,t.m,t.h),e,D,r,P,A)}function T2(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;if(i=t.e,D=e.e,i==0)return e;if(D==0)return t;if(r=t.d,f=e.d,r+f==2)return A=V(t.a[0],h1),n=V(e.a[0],h1),i==D?(U=O1(A,n),l=zt(U),y=zt(DA(U,32)),y==0?new mA(i,l):new Ue(i,2,B(d(F,1),k,6,15,[l,y]))):(ke(),hu(i<0?l0(n,A):l0(A,n),0)?we(i<0?l0(n,A):l0(A,n)):FP(we(p0(i<0?l0(n,A):l0(A,n)))));if(i==D)s=i,L=r>=f?mL(t.a,r,e.a,f):mL(e.a,f,t.a,r);else{if(P=r!=f?r>f?1:-1:rQ(t.a,e.a,r),P==0)return ke(),y9;P==1?(s=i,L=hL(t.a,r,e.a,f)):(s=D,L=hL(e.a,f,t.a,r))}return Q=new Ue(s,L.length,L),Rn(Q),Q}function Xs(t,e,A){var n,P,r,i,f;if(e==A||t.a[e]!=t.a[A]||t.o[e]!=0&&(t.o[e]==3||t.o[A]==3||t.p[e]^t.o[e]!==t.o[A]||t.k[e]!==t.k[A]||t.j[e]!==t.j[A])||(n=D1(t.i,e,A),n!=-1&&(dt(t.i,n)==1&&t.c[n]!=0||dt(t.i,n)==2&&t.c[n]==1)))return!1;if(a1(t.i,e)==1&&!vn(t.i,e)){for(P=-1,f=0;f<O(t.i,e);f++)if(_(t.i,e,f)!=A&&pA(t.i,e,f)==2){P=Ot(t.i,e,f);break}for(r=-1,i=0;i<O(t.i,A);i++)if(_(t.i,A,i)!=e&&pA(t.i,A,i)==2){r=Ot(t.i,A,i);break}if(P!=-1&&t.c[P]!=0&&t.d[P]^t.c[P]===t.c[r])return!1}return!0}function Y_(t){var e,A,n,P,r,i,f;r=ee(t.u,t.a),n=l1(t.u,t.a)==8||G8(t.u,t.a)?6:dt(t.u,t.a),((r&1)!=0||n==1)&&uA(t.k,!0),((r&2)!=0||n==2)&&uA(t.c,!0),((r&4)!=0||n==3)&&uA(t.n,!0),((r&32)!=0||n==4)&&uA(t.i,!0),((r&64)!=0||n==5)&&uA(t.j,!0),((r&8)!=0||n==6)&&uA(t.b,!0),((r&16)!=0||n==0)&&uA(t.g,!0),(r&Ef)!=0&&uA(t.e,!0),(r&h8)!=0&&uA(t.f,!0),f=r&384,e=r&AU,f==128?_t(t.q,1):e==qA?_t(t.q,4):f==256?_t(t.q,e==0?2:3):_t(t.q,e==0?0:5),i=(r&SP)>>17,_t(t.r,i==0?0:i<=2?i+5:i-2),(r&y8)!=0?(uA(t.d,!0),P=(r&7680)>>9,A=(r&wy)>>13,_t(t.p,P),Ah(t,P),_t(t.o,A)):_t(t.o,0),Tb(t)}function Tj(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(ZF.call(this,t),this.f=P,this.g=A,this.i=h(Yt,te,16,A.length,0,2),this.d=h(Yt,te,16,A.length,0,2),this.e=h(yt,h0,15,A.length,0,2),f=h(Yt,nA,37,A.length,0,3),i=0;i<A.length;i++)s=A[i].d,this.i[i]=fL(s,s.length),D=A[i].c,this.d[i]=fL(D,D.length),this.e[i]=h(yt,wt,6,this.i[i].length,15,1),f[i]=A[i].e;for(this.a=h(F,k,6,A.length,15,1),U=h(rt,ft,6,e.length,16,1),r=0;r<A.length;r++)Oa(this,A[r],r,U,n,f[r]);for(Q=0;Q<e.length;Q++)if(!U[Q])for(L=0;L<e[Q].c.length;L++)yD(this,e[Q].e[e[Q].c[L]],J0(e[Q].b[n[Q]],e[Q].c[L]));this.c=new f1}function Zs(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c;for(r=h(F,D0,7,t.j.a.length,0,2),Q=0;Q<t.j.a.length;Q++)for(r[Q]=h(F,k,6,N(t.j,Q).length,15,1),U=0;U<N(t.j,Q).length;U++)r[Q][U]=-1;for(T=h(F,k,6,t.i.g,15,1),y=0;y<t.k.a.length;y++)if(l=N(t.k,y),l.length==3||l.length>=5&&l.length<=7)for(D=0;D<l.length;D++)f=l[D],O(t.i,z(t.i,0,f))==3&&O(t.i,z(t.i,1,f))==3&&(T[f]>0?(r[T[f]>>>16][T[f]&32767]=y,r[y][D]=T[f]>>>16):T[f]=(y<<16)+s8+D);for(i=h(rt,ft,6,t.j.a.length,16,1),c=0,L=-1;c>L;)for(L=c,s=0;s<t.j.a.length;s++)i[s]||ja(t,s,r,i,e,A,n,P)&&(i[s]=!0,++c)}function K_(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(A<2)return A;for(b=h(rt,h0,12,A,0,2),l=1;l<A;l++)b[l]=h(rt,ft,6,l,16,1);for(i=Pn(t.V,24*t.ab),P=1;P<t.V.q;P++)for(r=0;r<P;r++)D=kt(t.V,r)-kt(t.V,P),Q=jt(t.V,r)-jt(t.V,P),f=w.Math.sqrt(D*D+Q*Q),f<UU*i&&(L=e[P],s=e[r],L!=s&&(L>s?b[L][s]=!0:b[s][L]=!0));for(C=h(F,k,6,A,15,1),U=0;U<A;U++)C[U]=U;for(R=0,y=1;y<A;y++)for(g=0;g<y;g++)if(b[y][g]&&(T=C[y],c=C[g],T!=c))for(++R,j=w.Math.min(T,c),v=w.Math.max(T,c),m=0;m<A;m++)C[m]==v?C[m]=j:C[m]>v&&--C[m];for(n=0;n<t.V.q;n++)e[n]=C[e[n]];return A-R}function OQ(t,e,A){var n,P,r,i,f,D,Q,U,L;return t==null?null:(D=t,U=null,Q=null,L=null,f=null,n=t.indexOf(k0(35)),n==-1?D=t:(D=(pt(0,n,t.length),t.substr(0,n)),P=t.indexOf(k0(35),n+1),P==-1?U=(Xt(n+1,t.length+1),t.substr(n+1)):(U=(pt(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(k0(35),P+1),r==-1?Q=(Xt(P+1,t.length+1),t.substr(P+1)):(Q=(pt(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=t.indexOf(k0(35),r+1),i==-1?L=(Xt(r+1,t.length+1),t.substr(r+1)):(L=(pt(r+1,i,t.length),t.substr(r+1,i-(r+1))),f=(Xt(i+1,t.length+1),t.substr(i+1)))))),ep(D,U,Q,L,f,e,A))}function J5(t,e,A,n,P,r,i,f){var D,Q,U,L,s,y,l,T,c,g;for(e!=n&&(c=t.J[e].a-t.J[n].a,g=t.J[e].b-t.J[n].b,f=w.Math.sqrt(c*c+g*g)),D=e,U=$u(t,e)!=3,T=1;T<A;T++){for(s=t.J[D].a+f*w.Math.sin(r),y=t.J[D].b+f*w.Math.cos(r),l=-1,L=0;L<t.q;L++)if(w.Math.abs(s-t.J[L].a)<4&&w.Math.abs(y-t.J[L].b)<4){l=L;break}l==-1&&(l=W0(t,s,y,0),t.J[l].a=s,t.J[l].b=y,t.J[l].c=0),Q=Om(t,D,l),Q==-1&&(Q=O0(t,D,l,_0(t,D)||_0(t,l)?16:1),P&&(U&&$u(t,t.D[0][Q])<4&&$u(t,t.D[1][Q])<3&&(t.H[Q]=2),U=!U)),D=l,r+=i}Q=Om(t,D,n),Q==-1&&(Q=O0(t,D,n,_0(t,D)||_0(t,n)?16:1)),P&&U&&$u(t,t.D[0][Q])<4&&$u(t,t.D[1][Q])<4&&(t.H[Q]=2)}function hj(t){var e,A,n,P,r,i,f,D,Q,U;nk();var L,s;for(ut(t,7),this.a=h(Ee,PA,6,t.r,15,1),this.b=h(Ee,PA,6,t.r,15,1),L=0;L<t.r;L++)s=(e=t.D[0][L],A=t.D[1][L],n=t.C[e],P=t.C[A],r=t.j[e],i=t.j[A],pz(dt(t,L),L<t.g&&Re(t.p,L),L<t.g&&(S8(t.p,L)||t.H[L]==8),n,P,vF(t,e),vF(t,A),r,i,!1)),s==-1?(this.a[L]=(f=K(t,t.D[0][L]),D=K(t,t.D[1][L]),(f<(c2(),Jf).length?Jf[f]:f<IA.length?DU*IA[f]:py)+(D<Jf.length?Jf[D]:D<IA.length?DU*IA[D]:py)),this.b[L]=(Q=K(t,t.D[0][L]),U=K(t,t.D[1][L]),(Q<Jf.length?N6:.125)+(U<Jf.length?N6:.125))):(this.a[L]=s==-1?2.000499963760376:p4[s],this.b[L]=s==-1?1:C4[s])}function Ws(t,e,A,n){var P,r,i,f;fo(this),e?(n&ly)==0?Nr(e,t.c,t.d)&&Nr(e,t.c+t.b,t.d+t.a)||((t.b>e.b||t.a>e.a)&&(r=e.b/t.b,f=e.a/t.a,this.c=w.Math.min(r,f)),t.c*this.c<e.c?this.a=e.c-t.c*this.c:(t.c+t.b)*this.c>e.c+e.b&&(this.a=e.c+e.b-(t.c+t.b)*this.c),t.d*this.c<e.d?this.b=e.d-t.d*this.c:(t.d+t.a)*this.c>e.d+e.a&&(this.b=e.d+e.a-(t.d+t.a)*this.c)):(r=e.b/t.b,f=e.a/t.a,i=n&w1,i==0?i=24:(n&I0)!=0&&(i/=256),P=i/A,this.c=w.Math.min(P,w.Math.min(r,f)),this.a=e.c+e.b/2-this.c*(t.c+t.b/2),this.b=e.d+e.a/2-this.c*(t.d+t.a/2)):(n&Q0)!=0&&(i=(n&w1)!=0?n&w1:24,this.c=i/A)}function z5(t,e){var A,n,P,r,i,f,D,Q,U,L,s;if(L=p2,e!=-1){for(A=h(yt,wt,6,9,15,1),i=0;i<De(t.V,e);i++)A[i]=Y0(t.V,e,_(t.V,e,i));if(De(t.V,e)==1)A[0]<-2.6179938779914944?L=AA:A[0]<eU?L=p2:A[0]<e4?L=AA:A[0]<0?L=p2:A[0]<m2?L=d6:A[0]<bA?L=oU:A[0]<2.6179938779914944?L=d6:L=oU;else{for(f=De(t.V,e)-1;f>0;f--)for(D=0;D<f;D++)A[D]>A[D+1]&&(s=A[D],A[D]=A[D+1],A[D+1]=s);for(A[De(t.V,e)]=A[0]+F0,U=0,Q=0,r=0;r<De(t.V,e);r++)n=A[r+1]-A[r],Q<n&&(Q=n,U=r);L=(A[U]+A[U+1])/2}}P=Pn(t.V,24*t.ab),t.ib=(e==-1?t.hb:kt(t.V,e))+P*w.Math.sin(L),t.lb=(e==-1?t.kb:jt(t.V,e))+P*w.Math.cos(L)}function X_(t,e){var A,n,P,r,i,f,D,Q,U;for(Ui(t),Q=new zA(t.R.f,t.R.g),je(Q,t.R.K),i=0;i<t.R.f;i++)En(t.R,Q,t.B[i],0,0),He(Q,i,t.bb[t.B[i]],t.ab[t.B[i]]);for(f=0;f<t.R.g;f++)DQ(t.R,Q,t.C[f],0,0,t.H,!1),!(Q.H[f]==257||Q.H[f]==129)&&Q.D[0][f]>Q.D[1][f]&&(U=Q.D[0][f],BD(Q,0,f,Q.D[1][f]),Q.D[1][f]=U,Q.T=0),U8(Q,f,t.n[t.C[f]],t.k[t.C[f]]);if(e)for(r=0;r<t.R.f;r++)for(A=t.B[r],D=O(t.R,A);D<Mt(t.R,A);D++)P=En(t.R,Q,_(t.R,A,D),0,0),er(t.R,Q,Ot(t.R,A,D),0,0,t.H[A],P,!1);for(n=0;n<Q.r;n++)A=Q.D[0][n],t.eb[t.B[A]]&&(Q.H[n]==257?(Q.H[n]=129,Q.T=0):Q.H[n]==129&&(Q.H[n]=257,Q.T=0));return ko(t.R,Q),Q.T&=-9,Q}function GQ(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;if(Q=h(F,k,6,2,15,1),D=h(yt,wt,6,2,15,1),Q[0]=t.D[0][e],Q[1]=t.D[1][e],G1(t,Q[0])>3||G1(t,Q[1])>3)return!1;for(i=0,r=h(yt,wt,6,4,15,1),s=0;s<t.r;s++)if(s!=e){for(y=0;y<2;y++){for(l=0;l<2;l++)if(t.D[y][s]==Q[l]){if(i==4){i=5;break}r[i++]=Y0(t,Q[l],t.D[1-y][s])}if(i==5)break}if(i==5)break}if(i==5)return!1;for(D[0]=Y0(t,Q[0],Q[1]),D[0]<0?(D[1]=D[0]+Q1,f=0):(D[1]=D[0],D[0]=D[1]-Q1,f=1),T=0,L=0;L<i;L++)r[L]>D[0]&&r[L]<D[1]?--T:++T;return f=T>0?1-f:f,U=Q1*(A-2)/A,J5(t,Q[f],A-1,Q[1-f],n,D[T>0?0:1]+Q1-U,Q1-U,P),t.T=0,!0}function Y5(t,e){var A;Zt(e,137)?m_(t,e):Zt(e,156)&&(A=e.b,e.j==1&&(A==-9&&t.b>=17?m0(t,t.b-17):A==-10&&t.b<17?m0(t,t.b+17):A==-11&&t.b%17>0?m0(t,t.b-1):A==-12&&t.b%17<16?m0(t,t.b+1):A==122?m0(t,18):A==32?m0(t,2):A==48?m0(t,4):A==116?m0(t,21):A==49?m0(t,5):A==50?m0(t,22):A==109?m0(t,19):A==51?m0(t,7):A==52?m0(t,24):A==53?m0(t,8):A==54?m0(t,25):A==55?m0(t,9):A==97?m0(t,26):A==45?m0(t,27):A==43?m0(t,10):A==117?m0(t,6):A==100?m0(t,23):A==99?m0(t,11):A==110?m0(t,12):A==112?m0(t,29):A==111?m0(t,13):A==115?m0(t,30):A==102?m0(t,14):A==108?m0(t,31):A==98?m0(t,15):A==105?m0(t,32):A==104?m0(t,16):A==46&&m0(t,33)))}function W1(t,e){if(!t.K&&(e==-10&&(t.C=-999,e=t.Q),e!=-2&&e!=-7&&t.N!=0&&(e=-4),e!=t.C&&!(t.C==-8&&e!=-9)))switch(e==-8&&(t.O=t.C),e==-9&&(e=t.O),t.C=e,e){case 0:t.Bb(t.F==0?qn:t.F);break;case-6:t.Bb(t.F);break;case-4:t.Bb(t.N);break;case-2:t.Bb(t.t);break;case-3:t.Bb(t.u);break;case-7:t.Bb(t.H);break;case-8:t.Bb(t.I);break;case-5:t.Bb(t.P);break;case 64:t.Bb(-14655233);break;case 128:t.Bb(qP);break;case 256:t.Bb(-4194049);break;case 192:t.Bb(-16711936);break;case 320:t.Bb(-24576);break;case 384:t.Bb(-16744448);break;case 448:t.Bb(-6291456);break;case 1:t.Bb(Dy);break;default:t.Bb(qn)}}function Z_(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(U=new D3,L=0;L<t.i.f;L++)if(a1(t.i,L)<2||O(t.i,L)>2)for(i=1;i<O(t.i,L);i++)for(e=_(t.i,L,i),f=0;f<i;f++)A=_(t.i,L,f),Xs(t,e,A)&&(D=Qp(t,e,A),D&&iF(D,t.f)&&ze(U.a,D,(R9(),wU))==null);for(s=0;s<t.i.g;s++)t.c[s]!=0&&(dt(t.i,s)!=2||t.c[s]!=2)||(e=z(t.i,0,s),A=z(t.i,1,s),Xs(t,e,A)&&(D=Qp(t,e,A),D&&iF(D,t.f)&&ze(U.a,D,(R9(),wU))==null));for(t.g=h(F,D0,7,U.a.c,0,2),t.e=h(rt,ft,6,t.i.f,16,1),r=0,Q=(P=new N8(new x8(new w9(U.a).a).b),new g9(P));p9(Q.a.a);)for(D=(n=Br(Q.a),n.dd()),t.g[r++]=D.b,i=0;i<D.b.length;i++)t.e[D.b[i]]=!0}function W_(t,e){var A,n,P,r,i,f,D,Q,U,L,s;if(dt(t,e)!=1||e<t.g&&Re(t.p,e)||(t.p&&e<t.g?yP(t.p,e):0)==3)return!1;for(A=h(F,k,6,2,15,1),f=0;f<2;f++)if(A[f]=t.D[f][e],(t.u[A[f]]&I0)!=0||e0(t,A[f])<=1)return!1;if(Zo(t,A[0])||Zo(t,A[1])){for(L=h(F,k,6,1,15,1),L[0]=e,n=h(F,D0,7,2,0,2),D=0;D<2;D++)if(Zo(t,A[D])&&(n[D]=h(F,k,6,2,15,1),n[D][0]=A[1-D],n[D][1]=A[D],!w5(t,A[1-D],n[D],L)))return!1;if(e!=L[0])return!1;for(Q=0;Q<2;Q++)n[Q]!=null&&(A[Q]=n[Q][1])}for(i=0;i<2;i++){if(r=t.j[A[i]],r==1)return!1;for(s=0,U=0;U<r;U++)P=t.i[A[i]][U],(t.u[P]&I0)!=0||++s;if(s<2)return!1}return!0}function cj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(D=h(F,k,6,32,15,1),Q=0,n=0;n<t.R.f;n++)(t._[n]==1||t._[n]==2)&&t.bb[n]==e&&(f=t.ab[n],D[f]<t.f[n]&&(D[f]==0&&++Q,D[f]=t.f[n]));for(r=0;r<t.R.g;r++)(t.j[r]==1||t.j[r]==2)&&t.n[r]==e&&l1(t.R,r)==1&&(f=t.k[r],l=w.Math.max(t.f[z(t.R,0,r)],t.f[z(t.R,1,r)]),D[f]<l&&(D[f]==0&&++Q,D[f]=l));for(i=h(q,I,6,32,15,1),U=0;U<Q;U++){for(s=-1,y=0,L=0;L<32;L++)y<D[L]&&(y=D[L],s=L);D[s]=0,i[s]=U<<24>>24}for(A=0;A<t.R.f;A++)(t._[A]==1||t._[A]==2)&&t.bb[A]==e&&(t.ab[A]=i[t.ab[A]]);for(P=0;P<t.R.g;P++)(t.j[P]==1||t.j[P]==2)&&t.n[P]==e&&l1(t.R,P)==1&&(t.k[P]=i[t.k[P]])}function __(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(ut(t.k,7),L=!1,s=h(F,k,6,2,15,1),y=h(F,k,6,2,15,1),U=h(F,k,6,2,15,1),n=0;n<t.k.g;n++)if(!WP(t.k,n)&&l1(t.k,n)==2){for(i=0;i<2;i++){for(s[i]=-1,U[i]=-1,e=z(t.k,i,n),Q=0;Q<O(t.k,e);Q++)P=Ot(t.k,e,Q),P!=n&&(s[i]==-1&&(l1(t.k,P)==257||l1(t.k,P)==129)?(s[i]=_(t.k,e,Q),y[i]=P):U[i]=_(t.k,e,Q));if(s[i]==-1)break}if(s[0]!=-1&&s[1]!=-1){for(D=l1(t.k,y[0])==l1(t.k,y[1]),f=0;f<2;f++)s[f]==z(t.k,0,y[f])&&(D=!D);for(r=0;r<2;r++)U[r]!=-1&&U[r]<s[r]&&(D=!D);A8(t.k,n,D?2:1,!1),L=!0}}for(A=0;A<t.k.g;A++)(l1(t.k,A)==257||l1(t.k,A)==129)&&w0(t.k,A,1);return L}function wj(t){for(var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;;){for(m=0,y=0,c=null,g=null,i=1;i<t.d.a.length;i++)for(n=N(t.d,i),f=0;f<i;f++){for(P=N(t.d,f),e=0,A=0,l=0,T=0,U=0;U<n.e.length;U++)for(s=0;s<P.e.length;s++)n.e[U]==P.e[s]&&(++A,e=n.e[U],l<n.k[U]&&(l=n.k[U]),T<P.k[s]&&(T=P.k[s]));if(A>0&&(r=A==1&&IL(t,n,e)==1&&IL(t,P,e)==1?0:1,l>T?D=(r<<24)+(l<<16)+(T<<8)+A:D=(r<<24)+(T<<16)+(l<<8)+A,m<D)){for(m=D,y=A,l=0,T=0,L=0;L<n.e.length;L++)l<n.k[L]&&(l=n.k[L]);for(Q=0;Q<P.e.length;Q++)T<P.k[Q]&&(T=P.k[Q]);l>T?(c=n,g=P):(c=P,g=n)}}if(m==0)break;y==c.e.length?Z8(t.d,c):y==g.e.length?Z8(t.d,g):zZ(t,c,g,y)}}function _s(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;if(t.d>1){for(Q=h(yt,wt,6,t.d,15,1),U=h(yt,wt,6,t.d,15,1),L=h(yt,wt,6,t.d,15,1),D=h(yt,wt,6,t.d,15,1),i=0;i<t.d;i++)L[i]=Of,D[i]=-1e9;for(n=0;n<e.k.length;n++)Q[t.e[n]]+=e.k[n].a,U[t.e[n]]+=e.k[n].b,L[t.e[n]]>e.k[n].c&&(L[t.e[n]]=e.k[n].c),D[t.e[n]]<e.k[n].c&&(D[t.e[n]]=e.k[n].c);for(f=0;f<t.d;f++)Q[f]/=t.f[f],U[f]/=t.f[f];for(s=h(yt,wt,6,t.d,15,1),y=h(yt,wt,6,t.d,15,1),l=h(yt,wt,6,t.d,15,1),r=1;r<t.d;r++)s[r]=Q[0]-Q[r],y[r]=U[0]-U[r],l[r]=l[r-1]+D[r-1]-L[r]+3;for(A=0;A<e.k.length;A++)t.e[A]!=0&&(P=e.k[A],P.a+=s[t.e[A]],P.b+=y[t.e[A]],P.c+=l[t.e[A]])}}function mf(t){var e,A,n,P,r,i,f,D;for(i=0;i<t.r;i++)t.H[i]==512&&(A=t.D[0][i],n=t.D[1][i],t.C[A]==-1^t.C[n]==-1&&t.s[A]!=0&&t.s[n]!=0&&t.s[A]<0^t.s[n]<0&&(t.s[A]<0?(++t.s[A],--t.s[n]):(--t.s[A],++t.s[n])));for(D=h(F,k,6,t.q,15,1),P=0,e=0;e<t.q;e++){if(t.C[e]==-1){D[e]=-1;continue}P<e&&(t.C[P]=t.C[e],t.s[P]=t.s[e],t.A[P]=t.A[e],t.u[P]=t.u[e],t.B[P]=t.B[e],t.w[P]=t.w[e],bD(t.J[P],t.J[e]),t.v!=null&&(t.v[P]=t.v[e]),t.t!=null&&(t.t[P]=t.t[e])),D[e]=P,++P}for(t.q=P,f=0,r=0;r<t.r;r++)t.H[r]!=512&&(t.H[f]=t.H[r],t.F[f]=t.F[r],t.G[f]=t.G[r],t.D[0][f]=D[t.D[0][r]],t.D[1][f]=D[t.D[1][r]],++f);return t.r=f,D}function gj(t,e,A,n,P,r,i){lR();var f,D,Q,U;(U=ri(gn,kV),U?Os(U):null)[0]==-1&&x1(),this.a=e,this.p=h(F,k,6,4,15,1),this.k=h(F,k,6,2,15,1),f=new mh,HF(t,e,this.p,f)!=null?(this.k[0]=f.e[0],this.k[1]=f.e[1]):xW(this,t),this.i=A[this.p[1]],this.j=A[this.p[2]],this.f=r[this.i],this.g=r[this.j],this.b=A[t.D[0][e]]==this.i,(Q=ri(gn,kV),Q?Os(Q):null)[0]==-1&&x1(),i?(this.d=OE,this.c=xE,this.e=NE):(this.d=Rx(f.d),this.d==null?(D=new r6(t,this.p),this.d=D.b,this.c=D.a,this.e=D.c):(this.c=kx(f.d),this.e=bx(f.d))),g_(this,t),uW(this,t),FW(this,t,n,P)}function dj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;for(P=h(yt,wt,6,Mt(t.f,A)+1,15,1),i=h(F,k,6,Mt(t.f,A)+1,15,1),f=h(F,k,6,Mt(t.f,A)+1,15,1),c=r8(e,A),r=0,Q=0;Q<Mt(t.f,A);Q++)i[r]=_(t.f,A,Q),f[r]=Ot(t.f,A,Q),L=r8(e,i[r]),L!=-1&&(P[r++]=on(e.a[c],e.b[c],e.a[L],e.b[L]));if(r==1)return P[0]+Q1;for(U=r-1;U>0;U--)for(s=0;s<U;s++)P[s]>P[s+1]&&(g=P[s],P[s]=P[s+1],P[s+1]=g,m=i[s],i[s]=i[s+1],i[s+1]=m,v=f[s],f[s]=f[s+1],f[s+1]=v);for(P[r]=P[0]+F0,i[r]=i[0],f[r]=f[0],y=-100,l=0,D=0;D<r;D++)n=P[D+1]-P[D],r>2&&fA(t.f,f[D])&&fA(t.f,f[D+1])&&(T=BX(t,i[D],A,i[D+1]),T!=0&&(n-=100-T)),y<n&&(y=n,l=D);return(P[l]+P[l+1])/2}function $_(t){var e,A,n;for(e=0;e<t.R.f;e++)t.db[e]==3&&!Fr(t.R,e)&&sP(t.R,e),(Ae(t.R,e)==1||Ae(t.R,e)==2)&&t.db[e]==3&&sP(t.R,e),Fr(t.R,e)&&t.db[e]!=3&&!$G(t,e)&&sP(t.R,e);for(n=0;n<t.R.r;n++)Cr(t.R,n)&&!_X(t,n)&&sP(t.R,z(t.R,0,n));for(A=0;A<t.R.g;A++)dt(t.R,A)==2&&(E3(t.R,A)&&(t.o[A]==1||t.o[A]==2)&&(t.o[A]=3,w0(t.R,A,386)),t.o[A]==3&&!t.p[A]&&l1(t.R,A)!=386&&(sP(t.R,z(t.R,0,A)),sP(t.R,z(t.R,1,A)))),l1(t.R,A)==1&&t.o[A]==3&&!Fr(t.R,z(t.R,0,A))&&!Fr(t.R,z(t.R,1,A))&&(sP(t.R,z(t.R,0,A)),sP(t.R,z(t.R,1,A))),(cP(t.R,A)==1||cP(t.R,A)==2)&&(l1(t.R,A)!=1||t.o[A]!=1&&t.o[A]!=2)&&(sP(t.R,z(t.R,0,A)),sP(t.R,z(t.R,1,A)))}function a_(t){var e,A,n,P,r,i,f,D,Q;for(A=0;A<t.R.f;A++)$e(t.e[A],A),_1(t.e[A],2*t.c+4,M1(t.f[A],t.c+4));for(D=1;D<=t.U;D++){for(P=!1,n=0;n<t.R.f;n++)t.f[n]==D&&(P=P|ey(t,n,2));if(P){if(f=t.U,t.U=Wn(t),t.U!=f)return!0;for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],2*t.c+4,M1(t.f[e],t.c+4))}}for(Q=h(utt,k2,173,t.R.g,0,1),i=0;i<Q.length;i++)Q[i]=new kv(t.f[z(t.R,0,i)],t.f[z(t.R,1,i)],i);for(Wi(Q,0,Q.length,null),r=0;r<Q.length;r++)if(JQ(t,Q[r].a,2)){for(;r+1<Q.length&&$v(Q[r],Q[r+1])==0;)JQ(t,Q[++r].a,2);if(f=t.U,t.U=Wn(t),t.U!=f)return!0;for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],2*t.c+4,M1(t.f[e],t.c+4))}return!1}function t$(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(L=t.e[e]-A,R=-1,m=NaN,l=0;l<L;l++)if(Gr(t,t.k[e][l],e)){R=l,m=Y0(t,e,t.i[e][l]);break}if(v=R==-1?0:1,i=null,v<L){for(i=h(yt,wt,6,L-v,15,1),Q=0,T=0;T<L;T++)T!=R&&(i[Q++]=Y0(t,e,t.i[e][T]));i.sort(Fe(vi.prototype.gd,vi,[]))}if(f=F0/w.Math.max(A,3),g=0,i!=null)if(i.length==1&&A==1)g=i[0];else{for(D=0,T=0;T<i.length;T++)P=T==0?i[i.length-1]-F0:i[T-1],r=i[T],D<r-P&&(D=r-P,g=P);f=D/(A+1)}for(y=0;y<A;y++)g+=f,s=g,v!=0&&(U=Je(s,m),w.Math.abs(U)<f/2&&(U<0?s=m-f/2:s=m+f/2)),c=t.i[e][L+y],Be(t,c,t.J[e].a+n*w.Math.sin(s)),Ie(t,c,t.J[e].b+n*w.Math.cos(s))}function Bj(t){var e,A;if(t.K)for(ut(t,7),e=0;e<t.f;e++)(t.u[e]&hn)!=0&&(P0(V(t.B[e],120),8)&&(t.B[e]=V(t.B[e],-9)),t.B[e]=V(t.B[e],-4294967297)),e<t.f&&i0(t.p,e)?t.B[e]=V(t.B[e],{l:4194297,m:x0,h:1048571}):gt(V(t.B[e],2),0)&&(t.B[e]=V(t.B[e],-5)),(gt(V(t.B[e],f9),0)||gt(V(t.B[e],rr),0)&&P0(V(t.B[e],L8),0))&&P0(V(t.B[e],120),8)&&(t.B[e]=V(t.B[e],-9)),t.s[e]!=0&&(t.B[e]=V(t.B[e],-234881025)),G1(t,e)==(A=Cn(t,e),A+WA(t,e,A,t.C[e]))&&(t.B[e]=V(t.B[e],-4063233),t.B[e]=V(t.B[e],-0xf8000000001),t.B[e]=V(t.B[e],-1921),t.B[e]=V(t.B[e],-114689)),gt(V(t.B[e],Pe),0)&&t.w[e]!=0&&Zu(t,t.w[e])}function vj(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(ut(t,7),D=new zA(t.f,t.g),f=R1(q,[Ny,w8],[58,10],0,[t.f,8],2),n=h(F,k,6,t.f,15,1),P=h(rt,ft,6,t.f,16,1),r=h(rt,ft,6,t.g,16,1),T=0;T<t.f;T++){for(T!=0&&(Hu(P,P.length),Hu(r,r.length)),f[T][0]=h(q,I,6,2,15,1),f[T][0][0]=t.C[T]<<24>>24,f[T][0][1]=t.A[T]<<24>>24,n[0]=T,P[T]=!0,y=0,s=1,t.u[T]|=512,c=1;c<=7&&s<t.f;c++){for(l=s,Q=y;Q<s;Q++)for(A=n[Q],U=0;U<t.j[A];U++)i=t.i[A][U],P[i]||(P[i]=!0,n[l++]=i),r[t.k[A][U]]=!0;if(l==s)break;for(y=s,s=l,Mj(t,D,r,!0,null),e=0;e<D.q;e++)D.s[e]=0,D.T=0,Ne(D,e,0);f[T][c]=KA((L=me(new EA(D,16)),c0(),L))}t.u[T]&=-513}return f}function e$(t){var e,A,n,P,r,i,f,D,Q;for(f=null,D=v1(Gi(t.D));D.length!=0;){if(A=D.indexOf(k0(44)),A==-1?(i=v1(D),D=\"\"):(i=v1((pt(0,A,D.length),D.substr(0,A))),D=v1((Xt(A+1,D.length+1),D.substr(A+1)))),A1(i,\"X\")){D.length!=0&&(D=\",\"),D=(U1(D),D+(U1(\"F,Cl,Br,I\"),\"F,Cl,Br,I\"));continue}if(e=(Y1(),SA(i,321)),e!=0)if(e==1)CD(t.v,\"'H' cannot be part of an atom list and is removed.\");else if(f==null)f=h(F,k,6,1,15,1),f[0]=e;else{for(n=!1,r=0;r<f.length;r++)if(e==f[r]){n=!0;break}if(!n){for(Q=h(F,k,6,f.length+1,15,1),P=0;P<f.length;P++)Q[P]=f[P];Q[f.length]=e,f=Q}}}return f?.sort(Fe(u0.prototype.gd,u0,[])),f}function h2(t,e,A){var n,P,r,i,f,D,Q,U,L;for(r=0,Q=0;Q<A;){if(++r,P=t[e+Q],(P&192)==128)throw At(new C8(c4));if((P&128)==0)++Q;else if((P&224)==192)Q+=2;else if((P&240)==224)Q+=3;else if((P&248)==240)Q+=4;else throw At(new C8(c4));if(Q>A)throw At(new gr(c4))}for(i=h(l9,a0,6,r,15,1),L=0,f=0,D=0;D<A;){for(P=t[e+D++],(P&128)==0?(f=1,P&=127):(P&224)==192?(f=2,P&=31):(P&240)==224?(f=3,P&=15):(P&248)==240?(f=4,P&=7):(P&252)==248&&(f=5,P&=3);--f>0;){if(n=t[e+D++],(n&192)!=128)throw At(new C8(\"Invalid UTF8 sequence at \"+(e+D-1)+\", byte=\"+(U=n>>>0,U.toString(16))));P=P<<6|n&63}L+=vz(P,i,L)}return i}function Fj(t){var e,A,n,P,r,i,f,D,Q,U;for(e=null,Q=null,i=0;i<t.f.g;i++)if(l1(t.f,i)==16){for(A=z(t.f,0,i),P=-1,f=0;f<t.d.a.length&&(P=r8(N(t.d,f),A),P==-1);f++);for(n=z(t.f,1,i),r=-1,D=0;D<t.d.a.length&&(r=r8(N(t.d,D),n),r==-1);D++);f!=D&&(f>D&&(U=f,f=D,D=U,U=P,P=r,r=U),Q==null&&(Q=h(IV,nA,457,t.d.a.length,0,2)),Q[D]==null&&(Q[D]=h(IV,{457:1,4:1,5:1,8:1},105,D,0,1)),Q[D][f]?(Q[D][f].c[0]+=ru(Q[D][f].b[0],P),Q[D][f].d[0]+=iu(Q[D][f].b[0],P),Q[D][f].c[1]+=ru(Q[D][f].b[1],r),Q[D][f].d[1]+=iu(Q[D][f].b[1],r),++Q[D][f].a[0],++Q[D][f].a[1]):(Q[D][f]=new HQ(N(t.d,f),N(t.d,D),P,r),!e&&(e=new f1),e.a.push(Q[D][f])))}return e}function A$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(m=h(F,k,6,t.j.g,15,1),T=0;T<e.j.a.length;T++){for(g=N(e.k,T),L=!0,D=0;D<g.length;D++)if(!t.e[g[D]]){L=!1;break}if(L)for(f=0;f<g.length;f++)++m[g[f]]}for(P=t.c,l=0;l<e.j.a.length;l++)for(i=!1,c=N(e.j,l),g=N(e.k,l),f=0;f<g.length&&!i;f++)if(m[g[f]]>1&&(r=m3(f,g.length),m[g[r]]==1)){for(Q=!1,y=m3(r,g.length);m[g[y]]==1;)(!yf(t,c[y],!1)||g.length!=6&&K(t.j,c[y])!=6)&&(Q=!0),y=m3(y,g.length);if(!Q&&(n=y>r?y-r:y+g.length-r,n>2&&(n&1)==1)){for(s=1;s<n;s+=2)U=r+s<g.length?r+s:r+s-g.length,A&&(yf(t,c[U],!0),yf(t,c[U==c.length-1?0:U+1],!0)),n2(t,g[U]);i=!0}}return P!=t.c}function n$(t,e){var A,n,P,r,i,f,D,Q,U;return t==null?null:(f=t,Q=null,D=null,U=null,i=null,A=t.indexOf(k0(35)),A==-1?f=t:(f=(pt(0,A,t.length),t.substr(0,A)),n=t.indexOf(k0(35),A+1),n==-1?Q=(Xt(A+1,t.length+1),t.substr(A+1)):(Q=(pt(A+1,n,t.length),t.substr(A+1,n-(A+1))),P=t.indexOf(k0(35),n+1),P==-1?D=(Xt(n+1,t.length+1),t.substr(n+1)):(D=(pt(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(k0(35),P+1),r==-1?U=(Xt(P+1,t.length+1),t.substr(P+1)):(U=(pt(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=(Xt(r+1,t.length+1),t.substr(r+1)))))),ep(f,(e&1)!=0?Q:null,(e&2)!=0?D:null,(e&4)!=0?U:null,(e&8)!=0?i:null,!1,null))}function mj(t,e,A){var n,P,r,i,f,D,Q;if(e&&e.g&&++t.C,e&&t.s>e.b&&(t.s=e.b),t.G)return hm(t);if(t.F.d.a.length==t.t)return null;if(e&&e.b>3){if(n=A?z9(t.i,e.d):null,i=A?n.c:null,r=A?i.a.length:0,CZ(t,e),A)for(f=r;f<i.a.length;f++)uq(le(A.a,J3(e.c)),lW(t.D,(ve(f,i.a.length),i.a[f]),n));e.g||(e.b<6?X8(t.A,e):(!t.e||t.e.b>e.b)&&(t.e=e)),++t.g}for(D=t.s+3,Q=IF(t,D,e);Q&&(P=aG(Q,z9(t.i,Q.d).c),!(P<D));){if(P<6&&X8(t.B,new ug(Q,P)),++t.g,pm(t.F,Q),t.F.d.a.length==t.t)return null;D=t.s+3,Q=IF(t,D,Q)}if(!Q){if(t.A.d.a.length!=0){for(t.G=!0;t.A.d.a.length!=0&&kr(t.A,t.A.d.a.length-1).b>t.s+3;)aU(t.A,t.A.d.a.length-1);Q=hm(t)}return Q}return pm(t.F,Q),Q}function P$(t,e){var A,n,P,r,i,f,D,Q;A=(Q=t.n.Ac(),Q.getBackgroundRGB()),P=(_r(),(xA[0]*((A&iP)>>16)+xA[1]*((A&PP)>>8)+xA[2]*(A&255))/255<.5),n=P?y5(A,jf):A&qn|vt(w.Math.round(DU*((A&iP)>>16)))<<16|vt(w.Math.round(DU*((A&PP)>>8)))<<8|vt(w.Math.round(DU*(A&255))),i=P?y5(A,.5):A&qn|vt(w.Math.round(xf*((A&iP)>>16)))<<16|vt(w.Math.round(xf*((A&PP)>>8)))<<8|vt(w.Math.round(xf*(A&255))),D=xo(t.i),f=Oo(t.i),ZL(e,t.i,0,0,D,f,v8,v8,D/t.j,f/t.j),r=AF(20),ZL(e,t.c,0,t.d*84,84,84,r[0],r[1],dn,dn),(t.a.U&4)==0&&FQ(t,e,19,-1,!0),(t.a.U&8)==0&&FQ(t,e,21,-1,!0),FQ(t,e,t.b,i,!1),t.f!=-1&&t.f!=t.k&&FQ(t,e,t.f,n,!1),t.k!=-1&&FQ(t,e,t.k,7167924,!1)}function kj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y;if(!t.b)return!1;for(i=null,s=null,D=new RL(null,null),P=1,D.a[1]=t.b,L=D;L.a[P];)Q=P,f=s,s=L,L=L.a[P],n=t.a.Rb(e,L.c),P=n<0?0:1,n==0&&(!A.c||K8(L.d,A.d))&&(i=L),!(L&&L.b)&&!zP(L.a[P])&&(zP(L.a[1-P])?s=s.a[Q]=_u(L,P):zP(L.a[1-P])||(y=s.a[1-Q],y&&(!zP(y.a[1-Q])&&!zP(y.a[Q])?(s.b=!1,y.b=!0,L.b=!0):(r=f.a[1]==s?1:0,zP(y.a[Q])?f.a[r]=zB(s,Q):zP(y.a[1-Q])&&(f.a[r]=_u(s,Q)),L.b=f.a[r].b=!0,f.a[r].a[0].b=!1,f.a[r].a[1].b=!1))));return i&&(A.b=!0,A.d=i.d,L!=i&&(U=new RL(L.c,L.d),IY(t,D,i,U),s==i&&(s=U)),s.a[s.a[1]==L?1:0]=L.a[L.a[0]?0:1],--t.c),t.b=D.a[1],t.b&&(t.b.b=!1),A.b}function K5(t,e,A){ji();var n,P,r,i,f;KZ.call(this,t),this.a=new f1,this.b=new Pj(t),ut(this.g,7),f=xu(ul,e),r=$P(A.c,JC)?LD(A.c.a.get(JC)):100,n=$P(A.c,zC)?LD(A.c.a.get(zC)):1,P=$P(A.c,YC)&&VP(A.c.a.get(YC),\"distance\"),i=new wR(this.b),(!$P(A.c,KC)||Ri(A.c.a.get(KC)))&&jP(this.a,dY(f,this.b)),(!$P(A.c,XC)||Ri(A.c.a.get(XC)))&&jP(this.a,uO(f,this.b)),(!$P(A.c,ZC)||Ri(A.c.a.get(ZC)))&&jP(this.a,QX(f,this.b,i,r,P,n)),(!$P(A.c,WC)||Ri(A.c.a.get(WC)))&&jP(this.a,rK(f,this.b)),(!$P(A.c,_C)||Ri(A.c.a.get(_C)))&&jP(this.a,fZ(f,this.b)),(!$P(A.c,$C)||Ri(A.c.a.get($C)))&&jP(this.a,HZ(f,this.b)),(!$P(A.c,aC)||Ri(A.c.a.get(aC)))&&jP(this.a,gK(f,this.b,i,r))}function r$(t){var e,A,n,P,r;for(r=t.U,P=bn(t.f,t.R.f),t.R.K||(gZ(t),qm(t,r,P)),t.bb=h(q,I,6,t.R.f,15,1),t.ab=h(q,I,6,t.R.f,15,1),A=0;A<t.R.f;A++)t.bb[A]=Ae(t.R,A)<<24>>24,t.ab[A]=VA(t.R,A)<<24>>24;for(t.n=h(q,I,6,t.R.g,15,1),t.k=h(q,I,6,t.R.g,15,1),n=0;n<t.R.g;n++)t.n[n]=cP(t.R,n)<<24>>24,t.k[n]=$i(t.R,n)<<24>>24;for(jW(t),t.Z=!1,t.M=h(rt,ft,6,t.R.f,16,1),e=0;e<t.R.f;e++)t.db[e]!=0&&(t.M[e]=!0,t.Z=!0);gz(t),t.P=null,t.cb=h(rt,ft,6,t.R.f,16,1),t.Z&&(t.P=new xm(t.R,P,t.M,t.db,t.o,t.bb,t.ab,t.ib,t.q,t.cb),c_(t.P)),t.eb=h(rt,ft,6,t.R.f,16,1),t.gb=h(rt,ft,6,t.R.f,16,1),t.hb=new f1,t.P&&Q2(t.P,t.f),e_(t),qm(t,r,P),k_(t),t.P&&(t.K=UG(t.P)),Z$(t)}function i$(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(D=new Wt(t.d);D.a<D.c.a.length;)for(f=t1(D),Q=0;Q<f.f.length;Q++)if(n=f.f[Q],dt(t.f,n)==2&&(!WP(t.f,n)&&(qe(t.f,n)==3||qe(t.f,n)==0)&&n3(t.f,n),!fA(t.f,n)&&O(t.f,z(t.f,0,n))>1&&O(t.f,z(t.f,1,n))>1&&(qe(t.f,n)==1||qe(t.f,n)==2))){for(s=h(F,k,6,2,15,1),P=h(F,k,6,2,15,1),U=0;U<2;U++)for(s[U]=t.f.M,P[U]=z(t.f,U,n),L=0;L<Mt(t.f,P[U]);L++)r=_(t.f,P[U],L),r!=z(t.f,1-U,n)&&s[U]>r&&(s[U]=r);i=on(f.a[f.g[P[0]]],f.b[f.g[P[0]]],f.a[f.g[P[1]]],f.b[f.g[P[1]]]),e=on(f.a[f.g[s[0]]],f.b[f.g[s[0]]],f.a[f.g[P[0]]],f.b[f.g[P[0]]]),A=on(f.a[f.g[P[1]]],f.b[f.g[P[1]]],f.a[f.g[s[1]]],f.b[f.g[s[1]]]),FL(i,e)<0^FL(i,A)<0^qe(t.f,n)==2&&Xj(f,n)}}function f$(t,e,A){var n,P,r,i,f,D,Q,U,L;return r=dR(t,e),i=r[0],D=r[1],D.e==0?new pD(i,2):(Q=t.e*e.e,wh(e)<54?(f=(L=D.d>1?S9(D.a[0],D.a[1]):S9(D.a[0],0),D.e>0?L:p0(L)),P=(U=e.d>1?S9(e.a[0],e.a[1]):S9(e.a[0],0),e.e>0?U:p0(U)),n=Hi(M1(G(f,0)<0?p0(f):f,1),G(P,0)<0?p0(P):P)?-1:S1(M1(G(f,0)<0?p0(f):f,1),G(P,0)<0?p0(P):P)?1:0,n=EQ(RQ(i,0)?1:0,Q*(5+n),A)):(n=rs(om(D.e<0?D.e==0?D:new Ue(-D.e,D.d,D.a):D),e.e<0?e.e==0?e:new Ue(-e.e,e.d,e.a):e),n=EQ(RQ(i,0)?1:0,Q*(5+n),A)),n!=0?wh(i)<54?rO((U=i.d>1?S9(i.a[0],i.a[1]):S9(i.a[0],0),O1(i.e>0?U:p0(U),n))):(i=T2(i,(ke(),G(n,0)>=0?we(n):FP(we(p0(n))))),new pD(i,2)):new pD(i,2))}function bj(t){var e,A,n,P,r,i,f,D,Q;switch(e=null,t.e){case 1:for(e=h(Yt,at,6,2*t.a.length,15,1),n=0;n<t.a.length;n++)e[n]=t.a[n],e[t.a.length+n]=180+t.a[n]<<16>>16;return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[t.a.length-1]==180?t.a.length-1:t.a.length,Q=r-P,e=h(Yt,at,6,t.a.length+Q,15,1),i=0;i<t.a.length;i++)e[i]=t.a[i];for(f=P;f<r;f++)e[e.length-1-f+P]=360-t.a[f]<<16>>16;return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[t.a.length-1]==90?t.a.length-1:t.a.length,Q=r-P,e=h(Yt,at,6,2*t.a.length+2*Q,15,1),D=0;D<t.a.length;D++)e[D]=t.a[D],e[t.a.length+Q+D]=180+t.a[D]<<16>>16;for(A=P;A<r;A++)e[t.a.length+Q-1-A+P]=180-t.a[A]<<16>>16,e[e.length-1-A+P]=360-t.a[A]<<16>>16;return e;default:return t.a}}function D$(t){var e,A,n,P,r,i,f,D,Q,U,L;for(L=new Wt(t.g);L.a<L.c.a.length;){for(Q=t1(L),A=0,r=0;r<O(t.k,Q.a);r++)t.c[Ot(t.k,Q.a,r)]||++A;if(A!=0){for(Q.c=h(F,k,6,A,15,1),A=0,i=0;i<O(t.k,Q.a);i++)t.c[Ot(t.k,Q.a,i)]||(D=_(t.k,Q.a,i),Q.c[A++]=t.q[D]<<16|D);for(Q.c.sort(Fe(u0.prototype.gd,u0,[])),P=0;P<Q.c.length;P++)Q.c[P]=w1&Q.c[P]}}for(n=h(rt,ft,6,t.k.g,16,1),t.e=h(F,k,6,t.k.g,15,1),U=new Wt(t.g);U.a<U.c.a.length;)if(Q=t1(U),Q.c!=null){for(Q.d=h(rt,ft,6,Q.c.length,16,1),P=0;P<Q.c.length;P++)for(f=0;f<O(t.k,Q.a);f++)if(Q.c[P]==_(t.k,Q.a,f))if(e=Ot(t.k,Q.a,f),t.c[e])n[t.e[e]]=!1;else{for(t.c[e]=!0,Q.d[P]=!0,t.e[e]=1;n[t.e[e]];)++t.e[e];n[t.e[e]]=!0}}}function Rj(){if(Wh(),!ol)try{Xf=h(Utt,h0,101,4,0,1),L9=h(v4,h0,20,4,0,1),s9=h(v4,h0,20,4,0,1),L9[0]=Ai(\"/resources/toxpredictor/m1.txt\"),L9[1]=Ai(\"/resources/toxpredictor/t1.txt\"),L9[2]=Ai(\"/resources/toxpredictor/i1.txt\"),L9[3]=Ai(\"/resources/toxpredictor/r1.txt\"),s9[0]=Ai(\"/resources/toxpredictor/m2.txt\"),s9[1]=Ai(\"/resources/toxpredictor/t2.txt\"),s9[2]=Ai(\"/resources/toxpredictor/i2.txt\"),s9[3]=Ai(\"/resources/toxpredictor/r2.txt\"),Xf[0]=gs(\"/resources/toxpredictor/m3.txt\"),Xf[1]=gs(\"/resources/toxpredictor/t3.txt\"),Xf[2]=gs(\"/resources/toxpredictor/i3.txt\"),Xf[3]=gs(\"/resources/toxpredictor/r3.txt\"),ol=!0}catch(t){if(t=t0(t),Zt(t,19))x1();else throw At(t)}}function u$(t,e){var A,n,P,r,i,f,D;if(D=new uD,!ol)return mt(D.a,new We(\"Toxicity predictor not properly initialized.\",2)),D;if(i=me(new BA(t)),Xf[e].bc(i)!=-1)return ZP(D,\"This molecule is known to be \"+YV[e]+\":\",2),mt(D.a,new We(i,1)),D;for(f=new jD(1),A=!1,n=new JA,r=0;r<L9[e].a.length;r++)u2(new GA(!1),n,N(L9[e],r)),Dn(f,t),Ln(f,n),sn(f,1,f.c)>0&&(A||ZP(D,\"High-risk fragments indicating \"+kU[e]+\":\",2),A=!0,ZP(D,N(L9[e],r),1));for(A=!1,P=0;P<s9[e].a.length;P++)u2(new GA(!1),n,N(s9[e],P)),Dn(f,t),Ln(f,n),sn(f,1,f.c)>0&&(A||ZP(D,\"Medium-risk fragments indicating \"+kU[e]+\":\",2),A=!0,ZP(D,N(s9[e],P),1));return D.a.a.length==0&&ZP(D,\"No indication for \"+kU[e]+\" found.\",2),D}function jj(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l;for(l=B(d(yt,1),wt,6,15,[0,0,0]),Q=B(d(yt,1),wt,6,15,[0,0,0]),f=B(d(F,1),k,6,15,[e.C[A],e.C[n],e.C[P]]),D=1.75,U=0;U<3;U++)switch(f[U]){case 1:l[U]=1.395;break;case 6:l[U]=2.494,Q[U]=1.016;break;case 7:l[U]=2.711,Q[U]=1.113;break;case 8:l[U]=3.045,Q[U]=1.337;break;case 9:l[U]=2.847;break;case 14:l[U]=2.35,Q[U]=.811;break;case 15:l[U]=2.35,Q[U]=1.068;break;case 16:l[U]=2.98,Q[U]=1.249;break;case 17:l[U]=2.909,Q[U]=1.078;break;case 35:l[U]=3.017;break;case 53:l[U]=3.086}return L=y2(t.a.d,e,A,n),s=y2(t.a.d,e,n,P),i=(L-s)*(L-s)/((L+s)*(L+s)),y=NC*r,U2(e,A,n,P,4)?D*=.85:U2(e,A,n,P,3)&&(D*=.05),D*l[0]*Q[1]*l[2]/((L+s)*y*y*w.Math.exp(2*i))}function Q$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(e!=null)t.e=e;else for(t.e=h(rt,ft,6,t.j.g,16,1),s=0;s<t.j.g;s++)l1(t.j,s)==8&&(t.e[s]=!0,w0(t.j,s,1));for(y=0;y<t.j.g;y++)t.e[y]&&++t.c;for(t.d=h(rt,ft,6,t.j.f,16,1),t.f=h(rt,ft,6,t.j.f,16,1),f=0;f<t.j.f;f++){for(l=0,T=0;T<O(t.j,f);T++)t.e[Ot(t.j,f,T)]&&++l;l>0&&(t.d[f]=!0,++t.b,l==3&&(t.f[f]=!0))}for(t.i=h(rt,ft,6,A.j.a.length,16,1),g=0;g<A.j.a.length;g++)for(t.i[g]=!0,Q=N(A.k,g),U=0,L=Q.length;U<L;++U)if(D=Q[U],!t.e[D]){t.i[g]=!1;break}for(t.g=h(rt,ft,6,t.j.f,16,1),c=0;c<A.j.a.length;c++)if(t.i[c]&&N(A.k,c).length!=6)for(P=N(A.j,c),r=0,i=P.length;r<i;++r)n=P[r],N(A.k,c).length==5&&(t.g[n]=!0);t.k=0}function $s(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g,m;for(y=0;y<e.j[A];y++)if(f=e.i[A][y],!r[f]&&(U=e.k[A][y],g=dt(e,U),n&&g>=2||!n&&g<=2)){for(r[f]=!0,i.add(k1(U)),l=0;l<e.j[f];l++)if(D=e.i[f][l],!r[D]&&(L=e.k[f][l],m=dt(e,L),e.o[f]+2==g+m&&(n&&m<=2||!n&&m>=2))){if(r[D]=!0,i.add(k1(L)),t.f[D]&&(K(t.i,D)==5||K(t.i,D)==6||K(t.i,D)==7||K(t.i,D)==8||K(t.i,D)==16||K(t.i,D)==34||K(t.i,D)==52)&&(!n||uQ(e,D))){for(s=new fs(t,e),T=0;T<i.a.length;T++)Q=(ve(T,i.a.length),i.a[T]).a,c=T<2?n^(T&1)==0:P^(T&1)==0,c?TL(s,Q,dt(e,Q)==1?2:3):TL(s,Q,dt(e,Q)==2?1:2),t.g[Q]=!0;zi(t.e,s)&&uL(t.d,s)}else $s(t,e,D,n,P,r,i);LA(i,i.a.length-1),r[D]=!1}LA(i,i.a.length-1),r[f]=!1}return!1}function $0(t,e){var A,n,P,r,i,f,D,Q,U;if(e==0)return 0;for(f=null,n=0;n<t.q;n++)(t.u[n]&m1)>>18==e&&(f==null&&(f=h(rt,ft,6,32,16,1)),f[(t.u[n]&m1)>>18!=1&&(t.u[n]&m1)>>18!=2?-1:(t.u[n]&RA)>>20]=!0);for(r=0;r<t.r;r++)(t.F[r]&768)>>8==e&&(f==null&&(f=h(rt,ft,6,32,16,1)),f[(t.F[r]&768)>>8!=1&&(t.F[r]&768)>>8!=2?-1:(t.F[r]&ln)>>10]=!0);if(U=0,f!=null){for(Q=h(F,k,6,32,15,1),D=0;D<32;D++)f[D]&&(Q[D]=U++);for(A=0;A<t.q;A++)(t.u[A]&m1)>>18==e&&(i=Q[(t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>20],t.u[A]&=-32505857,t.u[A]|=i<<20);for(P=0;P<t.r;P++)(t.F[P]&768)>>8==e&&(i=Q[(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10],t.F[P]&=-31745,t.F[P]|=i<<10)}return U}function ui(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(ut(t,n?7:1),e.v=null,t.K&&je(e,!0),D=A.length,P==null&&(P=h(F,k,6,D,15,1)),e.q=0,r=0;r<D;r++)if(A[r]){if(P[r]=En(t,e,r,0,0),t.C[r]==1&&(s=G1(t,r),s>1)){for(L=0;L<t.e[r];L++)if(!A[t.i[r][L]]){XA(e,P[r],s);break}}}else P[r]=-1;for(U=h(F,k,6,t.r,15,1),V9(U,U.length,-1),e.r=0,Q=0;Q<t.r;Q++)i=t.D[0][Q],f=t.D[1][Q],i<D&&f<D&&(A[i]&&A[f]?U[Q]=er(t,e,Q,0,0,P==null?t.D[0][Q]:P[t.D[0][Q]],P==null?t.D[1][Q]:P[t.D[1][Q]],n):t.s[i]!=0&&t.s[f]!=0&&t.s[i]<0^t.s[f]<0&&(A[i]&&(e.s[P[i]]+=t.s[i]<0?1:-1),A[f]&&(e.s[P[f]]+=t.s[f]<0?1:-1)));LL(t,e),t.d&&(e.T=0),e.T=0,$0(e,1),$0(e,2),e.q!=D&&je(e,!0),yj(t,e,D,P,U),_k(t,e,D,P),n&&Ff(new cr(e),null,!1)}function U$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(D=!1,a1(t.k,e)!=0&&O(t.k,e)==2&&pA(t.k,e,0)==2&&pA(t.k,e,1)==2){for(i=0;i<O(t.k,e);i++)if(n=_(t.k,e,i),n!=A&&O(t.k,n)==2){D=!0;break}for(r=0;r<O(t.k,e);r++){for(n=_(t.k,e,r),l=0,y=h(F,k,6,3,15,1),U=0;U<O(t.k,n);U++)y[l]=_(t.k,n,U),y[l]!=e&&++l;l==2&&t.q[y[0]]<t.q[y[1]]^y[0]<y[1]&&(D=!D)}}else{for(L=h(F,k,6,4,15,1),s=h(F,k,6,4,15,1),f=0,A!=-1&&(L[f]=A,s[f++]=8*t.q[A]),(xt(t.k,e)!=0||O(t.k,e)==3)&&(L[f]=It,s[f++]=8*t.q[e]),r=0;r<O(t.k,e);r++)n=_(t.k,e,r),n!=A&&(L[f]=n,s[f++]=uY(t,e,r));D=uJ(L,s)}return Q=d0(t.k,e)==1^D,Ei(t.k,e)&&(P=hq(t.d,e),t.n[P]||(t.n[P]=!0,t.o[P]=Q),t.o[P]&&(Q=!Q)),Q?\"@@\":\"@\"}function o$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(ut(t.H,t.N),U=t.H.f,t.J=h(F,k,6,U,15,1),t.I=h(NA,a0,6,U,14,1),i=0;i<U;i++)t.I[i]=Or(V(Y(up(t.H,i),o0(t.H,i)),C6),Vp),t.J[i]=K(t.H,i),(e&1)!=0&&(t.J[i]+=p1(t.H,i)+16<<8),(e&2)!=0&&(t.J[i]+=ye(t.H,i)<<16);for(t.M=h(NA,a0,6,U,14,1),s=On(t.H),Q=0;Q<s.j.a.length;Q++)for(y=N(s.k,Q).length,n=N(s.j,Q),P=0,r=n.length;P<r;++P)f=n[P],y==3?t.M[f]=Y(t.M[f],ir):y==4?t.M[f]=Y(t.M[f],fr):y==5?t.M[f]=Y(t.M[f],Dr):y==6?t.M[f]=Y(t.M[f],ur):y==7&&(t.M[f]=Y(t.M[f],Qr));for(A=0;A<U;A++)y=M9(t.H,A),y==0?t.M[A]=Y(t.M[A],L8):y>7&&(t.M[A]=Y(t.M[A],pf));for(L=t.H.g,t.K=h(F,k,6,L,15,1),D=0;D<L;D++)t.K[D]=(Ob(t.H,D)|ee(t.H,D))&6422527^6291840}function as(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;if(un(t.i,0),n=SA(e,t.c),n!=0){if(z1(t),L=n==1^K(t.V,t.t)==1,Bf(t.V,t.t,n,0,-1,0)){L&&(t.t=-1,N1(t,new q1(t,4,!0))),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));return}t.eb=w.Math.max(t.eb,0),n1(t.k)}if(t.j!=null&&t.j.length!=0&&(e=t.j),y=(iy(),U=(!il&&SY(),le(il,ef(e.toLowerCase(),\"-\"))),U==null?null:_i(new GA(!1),U)),y){for(z1(t),D=new JA,OR(D,t.V,t.t,null),s=Pn(D,t.ab*24),i=D.q,A=0;A<D.q;A++)D.u[A]|=I0;for(Js(D,y,0),Ar(new Y8(4),D),P=kt(t.V,t.t)-s*D.J[0].a,r=jt(t.V,t.t)-s*D.J[0].b,f=t.V.q,Js(t.V,y,t.t),l=t.V.q-f,Q=0;Q<l;Q++)Be(t.V,f+Q,s*D.J[i+Q].a+P),Ie(t.V,f+Q,s*D.J[i+Q].b+r);Lf(t.V),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))}}function pj(t,e,A){if(p1(t.j,e)!=0)return 0;if(t.a){if(K(t.j,e)==5)return G1(t.j,e)!=2?0:(A&&E0(t.j,e,1),1);if(K(t.j,e)==7)return G1(t.j,e)!=2?0:(A&&E0(t.j,e,-1),tf(t,e)?6:3);if(K(t.j,e)==8)return G1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),tf(t,e)?7:4);if(K(t.j,e)==16)return G1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),tf(t,e)?5:2);if(K(t.j,e)==34)return G1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),tf(t,e)?4:1)}else{if(K(t.j,e)==5)return G1(t.j,e)>2?0:(A&&E0(t.j,e,1),1);if(K(t.j,e)==7)return G1(t.j,e)>2?0:(A&&E0(t.j,e,-1),tf(t,e)?5:3);if(K(t.j,e)==8)return G1(t.j,e)>1?0:(A&&E0(t.j,e,-1),tf(t,e)?7:4);if(K(t.j,e)==16)return G1(t.j,e)>1?0:(A&&E0(t.j,e,-1),tf(t,e)?5:2)}return 0}function Cj(t){var e,A;if(t.s==null&&!t.t)return null;if(t.t)return A=BQ(t.t),A?(_s(t,A),++t.p,bw(A,\"SO#\"+ ++t.a),A):null;if(t.j)return null;for(t.b.c==0&&z9(t,h(F,k,6,t.q.length,15,1)),t.A=mj(t.B,t.A,t.c);t.A&&!(gt(t.v,0)&&(x1(),S1(E1(Date.now()),t.v)));){if(e=z9(t,t.A.d),t.A.c||(Nx(t.A,eJ(e,t.A.i,\"#\"+ ++t.a)),t.i&&VI(t.c,t.A)),t.A.b==0&&(Hj(t,t.A,t.A.c),t.A.b!=0&&_$(t,t.A),t.i&&(wz(Ii(t.c,t.A),e,t.A.c),Ii(t.c,t.A))),t.A.b>t.B.s+3){if(t.A=mj(t.B,t.A,t.c),t.A||t.p!=0)continue;if(t.C&&(t.t=new NQ(t.k),$U(t.t,t.v),d5(t.t,t.o,-1),A=BQ(t.t),A))return _s(t,A),++t.p,bw(A,\"SO#\"+ ++t.a),A;t.A=t.B.e,t.j=!0}if(t.A)return _s(t,t.A.c),t.A.g=!0,++t.p,t.i&&Ii(t.c,t.A),t.A.c}return null}function L$(t,e,A,n){var P,r,i,f,D,Q;if(P=W9(e,t.d),E0(e,P,t.e),Ze(e,P,t.o,!1),XA(e,P,t.a),gt(t.c,0)&&(gt(V(t.c,2),0)?(t.c=V(t.c,-3),e.u[P]|=I0):e.u[P]&=gy,T1(e,P,t.c,!0)),t.b){for(Q=h(F,k,6,t.b.d.a.length,15,1),D=0;D<t.b.d.a.length;D++)Q[D]=kr(t.b,D).a;sh(e,P,Q),t.b.d.a.length=0}else if(String.fromCharCode(A).toLowerCase().charCodeAt(0)==A&&BB(A)){if(t.d!=5&&t.d!=6&&t.d!=7&&t.d!=8&&t.d!=15&&t.d!=16&&t.d!=33&&t.d!=34)throw At(new V1(\"SmilesParser: atomicNo \"+t.d+\" must not be aromatic. Position:\"+(n-1)));e.u[P]|=I0}else e.u[P]&=gy;if(t.f)for(f=new Wt(t.f);f.a<f.c.a.length;)i=t1(f),t.r=!0,K0(i,0,0),je(e,!0),Js(e,i,P);return t.g!=-1&&t.d!=1&&(r=h(q,I,6,1,15,1),r[0]=t.g<<24>>24,iz(e,P,r)),P}function s$(t,e){var A,n,P,r,i,f,D,Q,U,L,s;if(e==2||e==5)mt(t.F,ai(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length));else if(e==4)s=jb(ai(t.G,t.G.length)),lo(t.O,s)||(zi(t.O,s),mt(t.F,ai(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length)));else if(e==3){if(s=jb(ai(t.G,t.G.length)),!lo(t.O,s)){for(L=!1,Q=(f=new N8(new x8(new w9(t.O.a).a).b),new g9(f));p9(Q.a.a);){for(D=(i=Br(Q.a),i.dd()),U=0,n=s,P=0,r=n.length;P<r;++P){for(A=n[P];U<D.length&&D[U]<A;)++U;if(U<D.length&&A==D[U]){L=!0;break}}if(L)break}L||(zi(t.O,s),mt(t.F,ai(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length)))}}else e==6&&(s=jX(t,ai(t.G,t.G.length)),lo(t.O,s)||(zi(t.O,s),mt(t.F,ai(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length))))}function En(t,e,A,n,P){var r,i,f;return r=e.q,r>=e.M&&kQ(e,e.M*2),f=(t.u[A]&m1)>>18,i=-1,f==1?n==-1?i=$0(e,f):i=w.Math.min(31,n+((t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>20)):f==2&&(P==-1?i=$0(e,f):i=w.Math.min(31,P+((t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>20))),e.C[r]=t.C[A],e.s[r]=t.s[A],e.A[r]=t.A[A],e.u[r]=t.u[A],e.B[r]=e.K?t.B[A]:0,bD(e.J[r],t.J[A]),e.w[r]=t.w[A],e.v!=null&&(e.v[r]=null),t.v!=null&&t.v[A]!=null&&e.K&&(e.v==null&&(e.v=h(F,D0,7,e.C.length,0,2)),e.v[r]=bn(t.v[A],t.v[A].length)),e.t!=null&&(e.t[r]=null),t.t!=null&&t.t[A]!=null&&(e.t==null&&(e.t=h(q,w8,10,e.C.length,0,2)),e.t[r]=TN(t.t[A],t.t[A].length)),i!=-1&&(e.u[r]&=-32505857,e.u[r]|=i<<20),++e.q,e.T=0,r}function X5(){X5=B1,XV=B(d(it,1),Dt,2,6,[\"\",\"r0\",\"r\",\"r3\",\"r3-4\",\"r3-5\",\"r3-6\",\"r3-7\",\"r4\",\"r4-5\",\"r4-6\",\"r4-7\",\"r>3\",\"r5\",\"r5-6\",\"r5-7\",\"r>4\",\"r6\",\"r6-7\",\"r>5\",\"r7\",\"r>6\",\"r>7\"]),KV=B(d(it,1),Dt,2,6,[d8,fV,\"is in any ring\",\"3 members\",\"3-4 members\",\"3-5 members\",\"3-6 members\",\"3-7 members\",\"4 members\",\"4-5 members\",\"4-6 members\",\"4-7 members\",\"> 3 members\",\"5 members\",\"5-6 members\",\"5-7 members\",\"> 4 members\",\"6 members\",\"6-7 members\",\"> 5 members\",\"7 members\",\"> 6 members\",\"> 7 members\"]),ci=B(d(NA,1),a0,6,14,[0,L8,jp,ir,25769803776,60129542144,128849018880,266287972352,fr,51539607552,120259084288,257698037760,532575944704,Dr,103079215104,240518168576,515396075520,ur,206158430208,481036337152,Qr,412316860416,pf])}function y$(t,e){i8();var A,n,P,r,i,f,D,Q,U,L,s;for(r=0;r<e.f;r++)if(e.o[r]==2&&e.j[r]==2&&e.n[r][0]==2&&e.n[r][1]==2&&e.C[r]<=7&&(U=e.u[r]&3,U==1||U==2)){for(n=h(F,k,6,4,15,1),s=h(F,k,6,2,15,1),f=0;f<e.j[r];f++){for(A=e.i[r][f],Q=It,D=0;D<e.j[A];D++)i=e.i[A][D],i!=r&&Q>i&&(Q=i);n[3*f]=Q,n[1+f]=A,s[f]=r}if(n[0]==It||n[3]==It){x1(),\"\"+me(new BA(e));break}mt(t,new xT(e,n,s,(e.u[r]&hn)!=0,U==1))}for(P=0;P<e.g;P++)if(U=e.F[P]&3,(U==1||U==2)&&dt(e,P)!=2){for(n=h(F,k,6,4,15,1),s=h(F,k,6,2,15,1),f=0;f<2;f++){for(A=e.D[f][P],L=e.D[1-f][P],Q=It,D=0;D<e.j[A];D++)i=e.i[A][D],i!=L&&Q>i&&(Q=i);n[3*f]=Q,n[1+f]=A,s[f]=e.D[1-f][P]}mt(t,new xT(e,n,s,(e.F[P]&64)!=0,U==2))}}function l$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(f=ms(t),i=h(rt,ft,6,f+1,16,1),l=new Wt(t.g);l.a<l.c.a.length;)for(s=t1(l),A=0;A<s.q;A++)if(P=w.Math.abs(s.w[A]),P!=0){if(i[P])throw At(new V1(\"Duplicate mapping no in reactants: \"+P));i[P]=!0}for(r=h(rt,ft,6,f+1,16,1),L=new Wt(t.f);L.a<L.c.a.length;)for(Q=t1(L),A=0;A<Q.q;A++)if(P=w.Math.abs(Q.w[A]),P!=0){if(r[P])throw At(new V1(\"Duplicate mapping no in products: \"+P));r[P]=!0}for(D=h(F,k,6,f+1,15,1),n=0,e=1;e<=f;e++)i[e]&&r[e]&&(D[e]=++n);if(n!=f){for(y=new Wt(t.g);y.a<y.c.a.length;)for(s=t1(y),A=0;A<s.q;A++)Ze(s,A,D[w.Math.abs(s.w[A])],s.w[A]<0);for(U=new Wt(t.f);U.a<U.c.a.length;)for(Q=t1(U),A=0;A<Q.q;A++)Ze(Q,A,D[w.Math.abs(Q.w[A])],Q.w[A]<0)}}function T$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(g=(ut(t,7),t.p),!g.e[e])return 1;if(N(g.k,e).length==6){for(n=N(g.j,e),P=0,r=n.length;P<r;++P)if(A=n[P],G1(t,A)+xt(t,A)!=t.e[A]+xt(t,A)+1)return 1;for(D=N(g.k,e),Q=0,U=D.length;Q<U;++Q)if(f=D[Q],L=B(d(F,1),k,6,15,[-1,-1]),dt(t,f)==1){for(y=0;y<=1;y++)for(i=t.D[y][f],s=0;s<t.e[i];s++)if(l=t.i[i][s],!yA(g,e,l)&&dt(t,D1(t,i,l))==2){L[y]=l;break}if(L[0]>-1&&L[1]>-1)for(c=0;c<g.j.a.length;c++){if(yA(g,c,L[0])&&yA(g,c,L[1])&&t.b[c]==2)return 2;if(yA(g,c,L[0])&&yA(g,c,L[1])&&t.b[c]!=0)return 1}}}if(N(g.k,e).length==5)for(T=1,n=N(g.j,e),P=0,r=n.length;P<r;++P){if(A=n[P],G1(t,A)+xt(t,A)==t.e[A]+xt(t,A)&&T>0){--T;continue}if(G1(t,A)+xt(t,A)!=t.e[A]+xt(t,A)+1)return 1}return 0}function Z5(t){var e,A,n,P,r,i,f,D,Q,U,L;for(e=0;e<t.R.f;e++)if(t.db[e]==1||t.db[e]==2){if(D=!1,ZT(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,U=h(F,k,6,3,15,1),Q=0;Q<O(t.R,P);Q++)U[L]=_(t.R,P,Q),U[L]!=e&&++L;L==2&&t.f[U[0]]>t.f[U[1]]^U[0]<U[1]&&(D=!D)}else for(f=1;f<O(t.R,e);f++)for(Q=0;Q<f;Q++)r=_(t.R,e,f),i=_(t.R,e,Q),t.f[r]>t.f[i]&&(D=!D),r<i&&(D=!D);ce(t.R,e,t.db[e]==1^D?1:2,t.fb[e])}else ce(t.R,e,t.db[e],t.fb[e]);for(A=0;A<t.R.g;A++)if(t.o[A]==1||t.o[A]==2){for(D=!1,f=0;f<2;f++)if(n=z(t.R,f,A),O(t.R,n)==3){for(U=h(F,k,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=z(t.R,1-f,A)&&(U[L++]=_(t.R,n,Q));t.f[U[0]]>t.f[U[1]]&&(D=!D),U[0]<U[1]&&(D=!D)}A8(t.R,A,t.o[A]==1^D?1:2,t.p[A])}else A8(t.R,A,t.o[A],t.p[A])}function Mj(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(ut(t,n?7:1),e.v=null,t.K&&je(e,!0),P==null&&(P=h(F,k,6,t.q,15,1)),e.q=0,r=0;r<t.q;r++)for(P[r]=-1,U=0;U<t.j[r];U++)if(A[t.k[r][U]]){if(P[r]=En(t,e,r,0,0),t.C[r]==1&&(s=G1(t,r),s>1)){for(L=0;L<t.e[r];L++)if(!A[t.k[r][L]]){XA(e,P[r],s);break}}break}for(Q=h(F,k,6,t.r,15,1),e.r=0,D=0;D<t.r;D++)A[D]?Q[D]=er(t,e,D,0,0,P==null?t.D[0][D]:P[t.D[0][D]],P==null?t.D[1][D]:P[t.D[1][D]],n):(Q[D]=-1,i=t.D[0][D],f=t.D[1][D],P[i]==-1^P[f]==-1&&t.s[i]!=0&&t.s[f]!=0&&t.s[i]<0^t.s[f]<0&&(P[i]!=-1&&(e.s[P[i]]+=t.s[i]<0?1:-1),P[f]!=-1&&(e.s[P[f]]+=t.s[f]<0?1:-1)));return LL(t,e),t.d&&(e.T=0),e.T=0,$0(e,1),$0(e,2),e.q!=t.q&&je(e,!0),yj(t,e,t.q,P,Q),_k(t,e,t.q,P),n&&Ff(new cr(e),null,!1),P}function h$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(f=0,A=0;A<t.f.q;A++)z0(t.f,A)&&++f;if(!(f<2)){for(L=0,Q=0,U=0;U<t.f.r;U++)n=z(t.f,0,U),P=z(t.f,1,U),z0(t.f,n)&&z0(t.f,P)&&(t.c[U]=!0,t.b[n]=!0,t.b[P]=!0,Q+=hh(t.f,U),++L);for(L!=0&&Q!=0?Q/=L:Q=V8(t.f),r=0;r<t.f.q;r++)z0(t.f,r)&&!t.b[r]&&--f;if(!(f<2)){for(v=h(F,k,6,t.f.q,15,1),s=n9(t.f,v,!0,!0),m=h(F,k,6,s,15,1),i=0;i<t.f.q;i++)v[i]!=-1&&++m[v[i]];for(g=h(G4,A0,48,s,0,1),l=0;l<s;l++)g[l]=new MP(t.f,m[l],!0);for(D=h(F,k,6,s,15,1),e=0;e<t.f.q;e++)T=v[e],T!=-1&&(g[T].k[D[T]]=re,g[T].e[D[T]]=e,g[T].a[D[T]]=kt(t.f,e)/Q,g[T].b[D[T]]=jt(t.f,e)/Q,++D[T]);for(R=-1,b=0,c=0;c<s;c++)b<m[c]&&(b=m[c],R=c);for(pP(t.d,g[R]),y=0;y<s;y++)y!=R&&pP(t.d,g[y])}}}function c$(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(n=0;n<t.e[e];n++)switch(U=t.i[e][n],t.C[U]){case 6:return 5;case 7:switch(u6(t,U)){case 8:case 39:case 62:case 67:case 68:return 23;case 34:case 54:case 55:case 56:case 58:case 81:return 36;case 9:return 27;default:return 28}case 8:switch(u6(t,U)){case 49:return 50;case 51:return 52;case 70:return 31;case 6:for(P=!1,r=!1,i=!1,f=!1,D=0;D<t.e[U];D++){if(L=t.i[U][D],t.C[L]==6)for(Q=0;Q<t.e[L];Q++)s=t.i[L][Q],s!=U&&(A=D1(t,L,s),(t.C[s]==6||t.C[s]==7)&&(dt(t,A)==2||A<t.g&&Re(t.p,A))&&(P=!0),t.C[s]==8&&dt(t,A)==2&&(r=!0));t.C[L]==15&&(i=!0),t.C[L]==16&&(f=!0)}if(r||i)return 24;if(P)return 29;if(f)return 33;default:return 21}case 14:return 5;case 16:case 15:return 71}return 0}function w$(t){var e,A,n,P,r,i,f,D,Q,U,L;if(t.n==null){if(t.b)for(n=t.j+1,t.p=h(F,nA,28,t.o.length,0,3),r=0;r<t.o.length;r++){for(t.p[r]=h(F,D0,7,t.g[r].a.length,0,2),f=0;f<t.g[r].a.length;f++)t.p[r][f]=uK(t,r,N(t.g[r],f),n);for(n+=t.o[r].f,P=dr(t.c,r),e=0;e<P.f;e++)gt(V(P.B[e],Pe),0)||--n}if(t.n=R1(o9,[nA,or],[74,26],0,[t.q,t.c.f.a.length],2),t.d=R1(it,[nA,Dt],[13,2],6,[t.q,t.c.f.a.length],2),t.e=h(rt,ft,6,t.q,16,1),L=new nu,U=new V0,i=0,A=0,t.q!=0){D=h(F,k,6,t.o.length,15,1);do{for(Q=U.a.length,0<Q?U.a=UA(U.a,0,0):0>Q&&(U.a+=q8(h(l9,a0,6,-Q,15,1))),r=0;r<t.c.f.a.length;r++)t.n[i][r]=_a(t,t.g,D,r),t.d[i][r]=me(new BA(t.n[i][r])),J(U,t.d[i][r]);t.e[i]=js(L,U.a)==-1,(!t.t||!t.e[i])&&++A,++i}while(AJ(t,D)&&A<t.i)}}}function Hj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(t.i&&(Ii(t.c,e).a=null),D=0,f=null,c=A.o,n=1;n<c.q;n++)for(m=GD(c.C[n]),P=0;P<n;P++)t.u[n][P]||(T=m+GD(c.C[P]),U=w.Math.abs(A.k[n].a-A.k[P].a),U<T&&(L=w.Math.abs(A.k[n].b-A.k[P].b),L<T&&(s=w.Math.abs(A.k[n].c-A.k[P].c),s<T&&(Q=w.Math.sqrt(U*U+L*L+s*s),Q<T&&(g=(T-Q)/T,i=20*g*g,D+=i,t.i&&(oN(Ii(t.c,e),\"a1:\"+n+\" f1:\"+t.g[n]+\" a2:\"+P+\" f2:\"+t.g[P]+FV+(J9(),tr(Q,5))+\" min:\"+tr(T,5)),Ii(t.c,e).a==null&&(r=h(F,k,6,2,15,1),r[0]=n,r[1]=P,OS(Ii(t.c,e),r))),f==null&&(f=h(yt,h0,15,t.q.length,0,2)),y=t.g[n],l=t.g[P],y<l?(f[l]==null&&(f[l]=h(yt,wt,6,l,15,1)),f[l][y]+=i):(f[y]==null&&(f[y]=h(yt,wt,6,y,15,1)),f[y][l]+=i))))));return Av(e,D,f),D!=0}function g$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(Q=v1(K1(e)),Q.length==0||(t.e=Q),K1(e),n=K1(e),!A&&n.startsWith(qy)&&(P=(Xt(13,n.length+1),n.substr(13)),OQ(P,!0,t)))return!0;if(l=K1(e),i=new tu,l!=null&&l.startsWith(\"M  V30 COUNTS\")){if(y=v1((Xt(13,l.length+1),l.substr(13))),U=o8(y,\" \"),s=c1(U[0],o1,It),L=c1(U[1],o1,It),s>0){if(l=K1(e),A1(iM,l))for(r=0;r<s;r++){f=new JA,D=new fu,D.a+=fM;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(j6));mo(i,f,new nn(new b9(D.a))),mt(t.g,f),t.d=-1}l=K1(e)}if(L>0&&(l=K1(e),A1(DM,l))){for(r=0;r<L;r++){f=new JA,D=new fu,D.a+=fM;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(j6));mo(i,f,new nn(new b9(D.a))),mt(t.f,f),t.d=-1}l=K1(e)}return!0}return!1}function Vj(t){var e,A,n,P,r,i,f;return i=\"\",t.length==0?new oT(y4,l4):(f=v1(t),f.startsWith(\"at \")&&(f=(Xt(3,f.length+1),f.substr(3))),f=f.replace(/\\[.*?\\]/g,\"\"),P=f.indexOf(\"(\"),P==-1?(P=f.indexOf(\"@\"),P==-1?(i=f,f=\"\"):(i=v1((Xt(P+1,f.length+1),f.substr(P+1))),f=v1((pt(0,P,f.length),f.substr(0,P))))):(e=f.indexOf(\")\",P),i=(pt(P+1,e,f.length),f.substr(P+1,e-(P+1))),f=v1((pt(0,P,f.length),f.substr(0,P)))),P=f.indexOf(k0(46)),P!=-1&&(f=(Xt(P+1,f.length+1),f.substr(P+1))),(f.length==0||A1(f,\"Anonymous function\"))&&(f=y4),r=i.lastIndexOf(k0(58)),A=Bx(i,k0(58),r-1),n=l4,r!=-1&&A!=-1&&(n=(pt(0,A,i.length),i.substr(0,A)),Tg((pt(A+1,r,i.length),i.substr(A+1,r-(A+1)))),Tg((Xt(r+1,i.length+1),i.substr(r+1)))),new oT(f,n))}function Ej(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(l=!1,n=0;n<t.L.g;n++)Q=null,Bu(t.L,n)?(L=x3(t.L,n),U=gT(t.L,n),Q=L==U?\"[\"+L+\"]\":\"[\"+L+\":\"+U+\"]\"):(ee(t.L,n)&AU)!=0?Q=(ee(t.L,n)&AU)==qA?\"a\":(ee(t.L,n)&384)==256?\"!ar\":\"!a\":(ee(t.L,n)&384)!=0&&(Q=(ee(t.L,n)&384)==256?\"r\":\"!r\"),s=(ee(t.L,n)&SP)>>17,s!=0&&(y=s==1?\"8-11\":s==2?\">11\":\"\"+s,Q=(Q==null?\"\":Q.endsWith(\"r\")?Q:Q+\"r\")+y),Q!=null&&(e=z(t.L,0,n),A=z(t.L,1,n),l||(t.Cb((t.X*2+1)/3|0),l=!0),T=(Z1(t.R,kt(t.L,e))+Z1(t.R,kt(t.L,A)))/2,c=(X1(t.R,jt(t.L,e))+X1(t.R,jt(t.L,A)))/2,r=Z1(t.R,kt(t.L,A))-Z1(t.R,kt(t.L,e)),i=X1(t.R,jt(t.L,A))-X1(t.R,jt(t.L,e)),P=w.Math.sqrt(r*r+i*i),D=.6*t.vb(Q),f=.55*t.wb(),P!=0&&(r>0?HP(t,T+D*i/P,c-f*r/P,Q,!0):HP(t,T-D*i/P,c+f*r/P,Q,!0)));l&&t.Cb(t.X)}function Qi(t){var e,A,n,P,r,i,f,D,Q,U,L;for(ut(t,1),oG(t),Q=!1,A=0;A<t.f;A++)if(t.C[A]==7&&t.s[A]==0){if(L=G1(t,A),L==4){for(U=0;U<t.j[A];U++)if(f=t.i[A][U],t.n[A][U]==1&&t.C[f]==8&&t.j[f]==1&&t.s[f]==0){Q=!0,++t.s[A],--t.s[f];break}}else if(L==5)for(U=0;U<t.j[A];U++){if(f=t.i[A][U],D=t.k[A][U],t.n[A][U]==2&&t.C[f]==8){Q=!0,++t.s[A],--t.s[f],t.H[D]=1;break}if(t.n[A][U]==3&&t.C[f]==7){Q=!0,++t.s[A],--t.s[f],t.H[D]=2;break}}}for(i=!1,r=0;r<t.g;r++)for(U=0;U<2;U++)if(tA(t,t.D[U][r])){e=t.D[1-U][r],P=t.C[e],(P==3||P==11||P==19||P==37||P==55||P==87||(n=t.C[e],n==4||n==12||n==20||n==38||n==56||n==88))&&(dt(t,r)==1?(++t.s[e],--t.s[t.D[U][r]],t.H[r]=512,i=!0):t.H[r]==16&&(t.H[r]=512,i=!0));break}return i&&(mf(t),Q=!0),Q&&(t.T=0),Q}function W5(t,e){var A,n,P,r,i,f;if(t.L.q!=0){for(ut(t.L,(t.G&256)!=0?63:(t.G&512)!=0?95:31),t.B=e,Pk(t),P=d$(t.L),r=!1,t.p=h(F,k,6,t.L.q,15,1),A=0;A<t.L.q;A++)t.p[A]=ou(t.L,A),t.p[A]!=0&&(r=!0),r0(t.L,A)&&(t.p[A]=128),Vg(t.L,A)&&(t.G&I1)==0&&(t.p[A]=256);for(W1(t,-10),MZ(t),BK(t),cW(t),tK(t),t.Cb(t.X),t.Ab(t.Y),W1(t,t.Q),em(t),t.U.a.length=0,t.$.a.length=0,(t.G&1)!=0&&(np(t,P),MF(t),Ej(t)),i=0;i<t.L.q;i++)UQ(t,i)?(W1(t,-3),zQ(t,i,P),W1(t,t.Q)):t.p[i]!=0?(W1(t,t.p[i]),zQ(t,i,P),W1(t,t.Q)):!r&&t.L.O!=1&&K(t.L,i)!=1&&K(t.L,i)!=6&&(t.G&re)==0&&MA(t.L,i)==null&&K(t.L,i)<Pl.length&&Pl[K(t.L,i)]!=0?(f=Pl[K(t.L,i)],bO(t,(n=t.M!=0?t.M:t.D!=0?t.D:-1,Gs(f,n))),zQ(t,i,P),W1(t,t.Q)):zQ(t,i,P);(t.G&1)==0&&(MF(t),Ej(t),np(t,P))}}function Sj(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;for(c=h(F,k,6,n+1,15,1),g=h(F,k,6,r+1,15,1),m=r,D=$9(P[r-1]),D!=0?(qh(g,P,0,D),qh(c,A,0,D)):(sA(A,0,c,0,n),sA(P,0,g,0,r)),Q=g[m-1],L=e-1,s=n;L>=0;){if(U=0,c[s]==Q)U=-1;else if(v=O1(M1(V(c[s],h1),32),V(c[s-1],h1)),j=wZ(v,Q),U=zt(j),b=zt(q0(j,32)),U!=0){l=0,C=0,R=!1,++U;do{if(--U,R)break;l=Un(V(U,h1),V(g[m-2],h1)),C=O1(M1(b,32),V(c[s-2],h1)),T=O1(V(b,h1),V(Q,h1)),$9(zt(DA(T,32)))<32?R=!0:b=zt(T)}while(S1(Or(l,dV),Or(C,dV)))}if(U!=0&&(i=dX(c,s-m,g,m,U),i!=0))for(--U,f=0,y=0;y<m;y++)f=O1(f,O1(V(c[s-m+y],h1),V(g[y],h1))),c[s-m+y]=zt(f),f=DA(f,32);t[L]=U,--s,--L}return D!=0?($k(g,m,c,0,D),g):(sA(c,0,g,0,r),c)}function d$(t){var e,A,n,P,r,i,f;for(ut(t,15),i=h(F,k,6,3,15,1),A=0;A<t.f;A++)(t.u[A]&Tn)!=0&&(f=(t.u[A]&m1)>>18,f!=0&&(i[f]=w.Math.max(i[f],(t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>20)));for(P=0;P<t.g;P++)((t.F[P]&3)==1||(t.F[P]&3)==2)&&t.H[P]==1&&(f=(t.F[P]&768)>>8,f!=0&&(i[f]=w.Math.max(i[f],(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10)));for(r=h(F,D0,7,3,0,2),r[1]=h(F,k,6,1+i[1],15,1),r[2]=h(F,k,6,1+i[2],15,1),e=0;e<t.f;e++)(t.u[e]&Tn)!=0&&(f=(t.u[e]&m1)>>18,f!=0&&++r[f][(t.u[e]&m1)>>18!=1&&(t.u[e]&m1)>>18!=2?-1:(t.u[e]&RA)>>20]);for(n=0;n<t.g;n++)((t.F[n]&3)==1||(t.F[n]&3)==2)&&t.H[n]==1&&(f=(t.F[n]&768)>>8,f!=0&&++r[f][(t.F[n]&768)>>8!=1&&(t.F[n]&768)>>8!=2?-1:(t.F[n]&ln)>>10]);return r}function B$(t,e){var A,n,P,r;for(t.b&&bi(t.b),t.c&&bi(t.c),P=0,n=K1(e);n!=null&&n.startsWith(rU);){for(n=v1((Xt(7,n.length+1),n.substr(7)));n.endsWith(\"-\");){if(A=K1(e),!A.startsWith(rU))return!1;n=v1(ju(UA(n,0,n.length-1),(Xt(7,A.length+1),A.substr(7))))}if(n.startsWith(\"BEGIN\"))if(r=v1((Xt(6,n.length+1),n.substr(6))),r.startsWith(\"CTAB\"))P=1;else if(r.startsWith(\"ATOM\"))P=2;else if(r.startsWith(\"BOND\"))P=3;else if(r.startsWith(\"SGROUP\"))P=4;else if(r.startsWith(\"COLLECTION\"))P=5;else return!1;else if(n.startsWith(\"END\"))P=0;else if(P==1)Zz(t,n);else if(P==2)Ha(t,n);else if(P==3)N$(t,n);else if(P==4)X$(t,n);else if(P==5)v$(t,n);else return!1;n=K1(e)}for(;n!=null&&!(n.startsWith(D9)||A1(n,PU));)n=K1(e);return!0}function v$(t,e){var A,n,P,r,i,f;if(f=mG(e),f!=null){if(i=zX(e,f),e.startsWith(\"MDLV30/STEABS\"))if(A1(f,R2))for(r=0;r<i.length;r++)He(t.j,ND(t,i[r]),0,-1);else for(P=0;P<i.length;P++)U8(t.j,oL(t,i[P]),0,-1);else if(e.startsWith(\"MDLV30/STERAC\"))if(n=c1(UA(e,13,ne(e,13)),o1,It),A1(f,R2))for(r=0;r<i.length;r++)He(t.j,ND(t,i[r]),1,n-1);else for(P=0;P<i.length;P++)U8(t.j,oL(t,i[P]),1,n-1);else if(e.startsWith(\"MDLV30/STEREL\"))if(n=c1(UA(e,13,ne(e,13)),o1,It),A1(f,R2))for(r=0;r<i.length;r++)He(t.j,ND(t,i[r]),2,n-1);else for(P=0;P<i.length;P++)U8(t.j,oL(t,i[P]),2,n-1);else if(e.startsWith(\"MDLV30/HILITE\"))if(A1(f,R2))for(P=0;P<i.length;P++)FD(t.j,ND(t,i[P]),448);else for(P=0;P<i.length;P++)A=oL(t,i[P]),FD(t.j,z(t.j,0,A),448),FD(t.j,z(t.j,1,A),448)}}function F$(t){var e,A,n,P,r,i,f,D,Q;if(!t.i)return!1;un(t.g,0),un(t.b,0),t.f=null,Q=!1,A=-1,n=null,t.c=t.d==null?null:h(it,Dt,2,t.d.length,6,1),t.e=-1;do{try{if(D=K1(t.i),D==null)return un(t.g,0),!1}catch(U){if(U=t0(U),Zt(U,75))return un(t.g,0),!1;throw At(U)}if(Q)J(t.b,D),Oe(t.b,10);else if(D.startsWith(\">\"))Q=!0,J(t.g,D9),Oe(t.g,10),J(t.b,D),Oe(t.b,10);else{J(t.g,D),Oe(t.g,10),D.startsWith(D9)&&(Q=!0);continue}if(t.d!=null)if(D.length==0)A=-1;else if(A==-1){if(n=aR(D),n!=null){for(A=-1,e=0;e<t.d.length;e++)if(A1(n,t.d[e])){A=e;break}if(t.e==-1){for(r=GV,i=0,f=r.length;i<f;++i)if(P=r[i],A1(n,P)){t.e=A;break}}}}else t.c[A]==null?t.c[A]=D:t.c[A]=ju(ju(t.c[A],$A),D)}while(!D.startsWith(PU));return!0}function m$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(A=0;A<t.q;A++)y=Cn(t,A),y+WA(t,A,y,t.C[A])-G1(t,A)<=0&&!(t.s[A]==0&&(t.C[A]==5||(P=t.C[A],P==7||P==15||P==33)||(n=t.C[A],n==8||n==16||n==34||n==52||n==84)))&&(t.B[A]=V(t.B[A],-6145));if(t.S)return!1;for(i=!1,e=0;e<t.f;e++)if(f=t.e[e]-t.j[e],f>0)for(P0(V(t.B[e],I1),0)&&(U=P0(V(t.B[e],rP),896)?3:P0(V(t.B[e],rP),384)?2:P0(V(t.B[e],128),128)?1:0,D=(y=Cn(t,e),y+WA(t,e,y,t.C[e])-G1(t,e)),t.s[e]==0&&P0(V(t.B[e],i9),0)&&t.C[e]!=6&&++D,L=f,L>3-U&&(L=3-U),L>D+f-U&&(L=D+f-U),L>0&&(s=U==0?0:M1(V(t.B[e],rP),L),s=Y(s,(L==3?7:f==2?3:1)<<7),t.B[e]=V(t.B[e],-1921),t.B[e]=Y(t.B[e],V(rP,s)))),Q=t.j[e];Q<t.e[e];Q++)r=t.k[e][Q],t.H[r]==1&&(t.C[t.i[e][Q]]=-1,t.H[r]=512,i=!0);return i&&mf(t),i}function qj(t,e){var A,n,P,r,i,f,D,Q,U,L;if((e&~t.T)!=0&&((t.T&1)==0&&(HR(t),tp(t),t.T|=1,t.K&&!GT(t)&&m$(t)&&(HR(t),tp(t),t.T|=1)),(e&~t.T)!=0)){if((t.T&-7)!=0){for(n=0;n<t.f;n++)t.u[n]&=-15369;for(r=0;r<t.g;r++)t.F[r]&=-705;if((e&4)==0){bR(t,1),t.T|=2;return}for(bR(t,7),P=0;P<t.f;P++)for(U=0;U<t.j[P];U++)if(D=t.k[P][U],!(D<t.g&&Re(t.p,D)))for(f=t.i[P][U],L=0;L<t.j[f];L++)t.k[f][L]!=D&&t.n[f][L]>1&&(t.C[t.i[f][L]]==6?t.u[P]|=C0:!_e(t,t.k[f][L])&&tA(t,t.i[f][L])&&(t.u[P]|=ge));for(;;){for(Q=!1,A=0;A<t.f;A++)if(t.o[A]>0&&(t.u[A]&ge)!=0&&!i0(t.p,A)){for(U=0;U<t.j[A];U++)if(t.n[A][U]>1)for(f=t.i[A][U],D=t.k[A][U],L=0;L<t.j[f];L++)t.k[f][L]!=D&&(i=t.i[f][L],(t.u[i]&ge)==0&&(t.u[i]|=ge,Q=!0))}if(!Q)break}}t.T|=6}}function Ij(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(ut(t,7),Q=0,P=0;P<t.g;P++)dt(t,P)==1&&!(P<t.g&&Re(t.p,P))&&e0(t,t.D[0][P])>1&&e0(t,t.D[1][P])>1&&(t.F[P]&64)==0&&!((t.F[P]&128)!=0&&(t.p&&P<t.g?yP(t.p,P):0)<=5)&&(e[P]=!0,++Q);for(i=h(F,k,6,2,15,1),y=h(F,k,6,2,15,1),r=null,n=0;n<t.g;n++)if(e[n]&&(r==null||!r[n])){for(A=0,L=0;L<2;L++)for(i[L]=t.D[L][n],y[L]=t.D[1-L][n],T=y[L];t.o[i[L]]==2&&e0(t,i[L])==2&&t.C[i[L]]<10;){for(s=0;s<2;s++)if(f=t.i[i[L]][s],f!=y[L]){D=t.k[i[L]][s],e[D]&&dt(t,D)==1&&(e[D]=!1,--Q),y[L]=i[L],i[L]=f,++A;break}if(i[L]==T){A=0;break}}A!=0&&(e[n]=!1,--Q,e0(t,i[0])>1&&e0(t,i[1])>1&&(c=L5(t,y[0],i[0]),g=L5(t,y[1],i[1]),U=c<g?0:1,l=D1(t,y[U],i[U]),r==null&&(r=h(rt,ft,6,t.g,16,1)),r[l]=!0,e[l]=!0,++Q))}return Q}function JQ(t,e,A){var n,P,r,i,f,D,Q,U;if(t.o[e]!=0)return!1;if(t.R.K){for(Q=0;Q<2;Q++)for(n=z(t.R,Q,e),U=0;U<Mt(t.R,n);U++)if(Qe(t.R,_(t.R,n,U)))return!1}return dt(t.R,e)==1?HW(t,e,A):dt(t.R,e)!=2||_e(t.R,e)||(r=z(t.R,0,e),i=z(t.R,1,e),O(t.R,r)==1||O(t.R,i)==1)||O(t.R,r)>3||O(t.R,i)>3||a1(t.R,r)==2||a1(t.R,i)==2||(f=new gf(t.R,t.f,i,r),f.f&&A==1)||(D=new gf(t.R,t.f,r,i),D.f&&A==1)||f.f&&D.f?!1:(A==3&&(f.f&&f.c&&(t.V[e]=!0),D.f&&D.c&&(t.V[e]=!0)),P=E3(t.R,e)?3:t.jb?J$(t,f,D):OG(f,D),A==1?t.o[e]=P:A==2&&(f.f&&(P==1?ue(t.e[f.b],t.f[r]):P==2&&ue(t.e[f.d],t.f[r])),D.f&&(P==1?ue(t.e[D.b],t.f[i]):P==2&&ue(t.e[D.d],t.f[i]))),!0)}function k$(t){var e,A,n,P,r,i,f,D,Q,U,L;for(A=0,L=new Wt(t.g);L.a<L.c.a.length;)if(Q=t1(L),ut(Q,1),Q.K)for(e=0;e<Q.f;e++)if(gt(V(Q.B[e],Pe),0)){if(w.Math.abs(Q.w[e])!=0)return!1}else++A;else A+=Q.f;for(D=new Wt(t.f);D.a<D.c.a.length;)if(i=t1(D),ut(i,1),i.K)for(e=0;e<i.f;e++)if(gt(V(i.B[e],Pe),0)){if(w.Math.abs(i.w[e])!=0)return!1}else--A;else A-=i.f;if(A!=0)return!1;for(r=ms(t),n=h(rt,ft,6,r+1,16,1),U=new Wt(t.g);U.a<U.c.a.length;)for(Q=t1(U),e=0;e<Q.f;e++)if(!Q.K||P0(V(Q.B[e],Pe),0)){if(P=w.Math.abs(Q.w[e]),n[P])return!1;n[P]=!0}for(f=new Wt(t.f);f.a<f.c.a.length;)for(i=t1(f),ut(i,1),e=0;e<i.f;e++)if(!i.K||P0(V(i.B[e],Pe),0)){if(P=w.Math.abs(i.w[e]),P>=r||!n[P])return!1;n[P]=!1}return!0}function b$(t,e,A,n){var P,r,i,f,D,Q,U,L;for(f=t.e[n],D=f+1;D<t.A&&t.f[t.s[D]]==n;)++D;for(U=f;U<D;U++)A[U]=-1;for(i=f;;){if(L=t.u[i]==-1?t.H.f:De(t.H,t.G[t.u[i]]),++A[i],A[i]==L){if(A[i]=-1,i==f)break;--i,t.t[i]||(e[t.G[t.s[i]]]=!1,t.G[t.s[i]]=-1);continue}if(t.u[i]==-1)e[A[i]]||Py(t,A[i],t.s[i])&&(t.G[t.s[i]]=A[i],e[A[i]]=!0,++i);else{if(_(t.H,t.G[t.u[i]],A[i])>=t.H.f)continue;r=_(t.H,t.G[t.u[i]],A[i]),t.t[i]?r==t.G[t.s[i]]&&Ys(t,Ot(t.H,t.G[t.u[i]],A[i]),t.v[i])&&++i:e[r]||Py(t,r,t.s[i])&&Ys(t,Ot(t.H,t.G[t.u[i]],A[i]),t.v[i])&&(e[r]=!0,t.G[t.s[i]]=r,++i)}if(i==D){if(zj(t,n)&&pR(t,n)&&TR(t,e,n)){for(Q=f;Q<D;Q++)t.t[Q]||(P=t.s[Q],e[t.G[P]]=!1,t.G[P]=-1);return!0}--i,t.t[i]||(e[t.G[t.s[i]]]=!1,t.G[t.s[i]]=-1)}}return!1}function R$(t){var e,A,n,P,r,i,f;if(i=Gi(t.o),A=null,i.length!=0&&(n=i.indexOf(k0(64)),n!=-1&&(A=(pt(0,n,i.length),i.substr(0,n)),i=(Xt(n+1,i.length+1),i.substr(n+1)))),i.length!=0&&(e=SA(i,t.d.c),e!=0||A1(i,\"?\"))){if(P=0,Gi(t.p).length!=0)try{if(P=c1(Gi(t.p),o1,It),P<(Y1(),U9)[e]-18||P>U9[e]+12){CD(t.c,\"Your mass is out of range!\");return}}catch(D){if(D=t0(D),Zt(D,40)){CD(t.c,\"Your mass is not a number!\");return}else throw At(D)}if(f=-1,Gi(t.q).length!=0)try{if(f=c1(Gi(t.q),o1,It),f<0||f>15){CD(t.c,\"Your valence is out of range!\");return}}catch(D){if(D=t0(D),Zt(D,40)){CD(t.c,\"Your valence is not a number!\");return}else throw At(D)}r=B0(t.b)==1?32:B0(t.b)==2?48:B0(t.b)==3?16:0,Sx(t.d,e,P,f,r,A),t.a!=-1&&(Bf(t.e,t.a,e,P,f,r),u8(t.e,t.a,A)),t.f=!0,Rr(t.c)}}function j$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;if(A&&t.eb==6)for(c=h(F,k,6,t.L.length,15,1),r=0;r<t.V.q;r++)s=t.M[r],zn(t.L[s],c[s],!r0(t.V,r)),++c[s];for(f=h(wl,A0,35,t.L.length,0,1),y=0;y<t.L.length;y++)t.eb==6&&(Ar(new Y8(A?4:0),t.L[y]),Lf(t.L[y])),D=new du(t.L[y]),SF(D,e,null,Q0|t.T),f[y]=D.v;for(m=1.8000000715255737*t.T,i=Pn(t.V,24*t.ab),n=(t.U&4)==0?0:t.eb==5?WH*VD(t.k):rh(N(t.I,0))*t.T/i,g=.5*m,l=0;l<=t.L.length&&((t.U&4)!=0&&l==t.Y&&(mT(N(t.I,0),g-m/2,Vr(t.k)/2,g-m/2+n,Vr(t.k)/2),g+=n),l!=t.L.length);l++)Q=g-f[l].c,U=.5*(Vr(t.k)-f[l].a)-f[l].d,CL(t.L[l],Q,U),g+=m+f[l].b;for(j5(t.G,e,new QA(0,0,VD(t.k),Vr(t.k)),Q0|t.T),T=h(F,k,6,t.L.length,15,1),P=0;P<t.V.q;P++)L=t.M[P],Be(t.V,P,kt(t.L[L],T[L])),Ie(t.V,P,jt(t.L[L],T[L])),++T[L];Lf(t.V)}function p$(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(f=new f1,ut(e,1),Q=h(rt,ft,6,e.f,16,1),A=0;A<e.f;A++)if(t.f[A]&&(K(t.i,A)==7||K(t.i,A)==8||K(t.i,A)==16||K(t.i,A)==34||K(t.i,A)==52)){for(Q[A]=!0,D=0;D<e.j[A];D++)if(n=e.i[A][D],r=e.k[A][D],L=e.n[A][D],e.o[n]!=0&&e.o[A]<L){for(Q[n]=!0,mt(f,k1(r)),U=0;U<e.j[n];U++)P=e.i[n][U],Q[P]||(Q[P]=!0,i=e.k[n][U],s=e.n[n][U],e.o[n]+2==L+s&&(mt(f,k1(i)),L>=s&&(e.o[P]<s?uQ(e,P)&&$s(t,e,P,!0,!1,Q,f):$s(t,e,P,!0,!0,Q,f)),s>=L&&uQ(e,A)&&$s(t,e,P,!1,!1,Q,f),t.f[P]&&(K(t.i,P)==5||K(t.i,P)==6||K(t.i,P)==7||K(t.i,P)==8||K(t.i,P)==16||K(t.i,P)==34||K(t.i,P)==52)&&e.o[P]<s&&(L<=2&&s>=2&&uQ(e,A)&&$m(t,e,r,i),L>=2&&s<=2&&uQ(e,P)&&$m(t,e,i,r)),LA(f,f.a.length-1)),Q[P]=!1);LA(f,f.a.length-1),Q[n]=!1}Q[A]=!1}}function C$(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a;for(v=-1,C=0,j=0,p=0,c=0,g=0,m=0,x=0,a=0,C=0,U=0;U<t.d;U++)C+=n[U]*n[U];if(C=w.Math.sqrt(C),C>r)for(L=0;L<t.d;L++)n[L]*=r/C;for(j=0,s=0;s<t.d;s++)j+=n[s]*t.e[s];if(j>=0)return v;for(p=0,y=0;y<t.d;y++)S=w.Math.abs(n[y])/w.Math.max(w.Math.abs(e[y]),1),S>p&&(p=S);for(m=1e-7/p,c=1,T=0;T<1e3;){if(c<m){v=1;break}for(l=0;l<t.d;l++)P[l]=e[l]+c*n[l];if(t.k=is(t,P),t.k-A<=LU*c*j)return 0;T==0?x=-j/(2*(t.k-A-j)):(R=t.k-A-c*j,b=a-A-g*j,i=(R/(c*c)-b/(g*g))/(c-g),f=(-g*R/(c*c)+c*b/(g*g))/(c-g),i==0?x=-j/(2*f):(D=f*f-3*i*j,D<0?x=.5*c:f<=0?x=(-f+w.Math.sqrt(D))/(3*i):x=-j/(f+w.Math.sqrt(D))),x>.5*c&&(x=.5*c)),g=c,a=t.k,c=w.Math.max(x,.1*c),++T}for(Q=0;Q<t.d;Q++)P[Q]=e[Q];return v}function M$(t){var e,A,n,P,r,i,f,D,Q,U,L;for(t._=h(q,I,6,t.R.f,15,1),e=0;e<t.R.f;e++)if(t.db[e]==1||t.db[e]==2){if(D=t.eb[e],ZT(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,U=h(F,k,6,3,15,1),Q=0;Q<O(t.R,P);Q++)U[L]=_(t.R,P,Q),U[L]!=e&&++L;L==2&&t.f[U[0]]>t.f[U[1]]^t.H[U[0]]<t.H[U[1]]&&(D=!D)}else for(f=1;f<O(t.R,e);f++)for(Q=0;Q<f;Q++)r=_(t.R,e,f),i=_(t.R,e,Q),t.f[r]>t.f[i]&&(D=!D),t.H[r]<t.H[i]&&(D=!D);t._[e]=t.db[e]==1^D?1:2}else t._[e]=t.db[e];for(t.j=h(q,I,6,t.R.g,15,1),A=0;A<t.R.g;A++)if(t.o[A]==1||t.o[A]==2){for(D=!1,f=0;f<2;f++)if(n=z(t.R,f,A),O(t.R,n)==3){for(U=h(F,k,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=z(t.R,1-f,A)&&(U[L++]=_(t.R,n,Q));t.f[U[0]]>t.f[U[1]]&&(D=!D),t.H[U[0]]<t.H[U[1]]&&(D=!D)}t.j[A]=t.o[A]==1^D?1:2}else t.j[A]=t.o[A]}function H$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(e=eW(t),r=h(q,I,6,t.f.r,15,1),EW(t,r,e),P=0;P<t.f.r;P++)r[P]==2&&(qi(t.f,z(t.f,0,P))||qi(t.f,z(t.f,1,P)))&&(r[P]=3);for(y=0;y<t.d.a.length;y++){for(L=N(t.d,y),D=zb(L),g=L.c,c=new I5(L),T=-1,s=0;s<224&&D.a.length!=0;s++){if(Q=yQ(t.g,D.a.length),f=(ve(Q,D.a.length),D.a[Q]),i=MW(t,f[0],f[1]),A=h(F,k,6,i.length,15,1),n=0,s<32)for(l=1;l<i.length-1;l++)r[i[l]]==3&&(A[n++]=i[l]);else if(s<96)for(l=1;l<i.length-1;l++)r[i[l]]>=2&&(A[n++]=i[l]);else for(l=1;l<i.length-1;l++)r[i[l]]>=1&&(A[n++]=i[l]);if(n!=0){if(v=A[0],n>1)do v=A[yQ(t.g,n)];while(v==T);v!=T&&(T=v,Xj(L,v),D=zb(L),g>L.c&&(g=L.c,c=new I5(L)))}}q9(t.d,y,c),L=c,U=1;do{for(m=9999,l=0;l<L.e.length;l++)R=e[L.e[l]],R==U?Pa(L,l):R>U&&R<m&&(m=R);U=m}while(m!=9999)}}function xj(t,e,A,n,P){var r,i;if(P.d=!0,P.c=!0,e[A]==35){for(++A,t.r=!0,P.a=0,P.b=1;A<n&&Zn(e[A]&w1);)P.a=10*P.a+e[A]-48,++P.b,++A;if(P.a==0||P.a>=(Y1(),X0).length)throw At(new V1(\"SmilesParser: Atomic number out of range. position:\"+(A-1)));return!0}if(e[A]>=65&&e[A]<=90){if(P.b=e[A+1]>=97&&e[A+1]<=122?2:1,P.a=(Y1(),SA(q8(h2(e,A,(i=P.b,c0(),i))),321)),P.b==2&&P.a==0&&(P.b=1,P.a=SA(q8(h2(e,A,(r=P.b,r))),321)),P.d=!1,P.a==0)throw At(new V1(\"SmilesParser: Unknown atom label. position:\"+(A-1)));return!0}return e[A]==65&&e[A+1]==115||e[A]==83&&e[A+1]==101?(P.b=2,P.a=(Y1(),SA(q8(h2(e,A,(r=P.b,c0(),r))),321)),P.c=!1,!0):e[A]==99||e[A]==110||e[A]==111||e[A]==112||e[A]==115?(P.b=1,P.a=(Y1(),SA(q8(h2(e,A,(r=P.b,c0(),r))),321)),P.c=!1,!0):!1}function V$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(A=-1,Q=!1,y=Ve,e=z9(t.i,t.c),T=0;T<t.d.length;T++)t.d[T]<t.w[T].d.length-1&&(s=k3(e,T,t.d[T])/k3(e,T,t.d[T]+1),y>s&&(y=s,A=T));for(c=0;c<t.c.length;c++)t.c[c]<t.v[c].b.length-1&&(s=s3(t.v[c],t.c[c])/s3(t.v[c],t.c[c]+1),y>s&&(y=s,A=c,Q=!0));if(A==-1){t.a=null;return}for(r=1,f=0;f<t.d.length;f++)(Q||f!=A)&&(r*=t.d[f]+1);for(D=0;D<t.c.length;D++)(!Q||D!=A)&&(r*=t.c[D]+1);for(t.a=h(GE,k2,165,r,0,1),Q?++t.c[A]:++t.d[A],i=0;i<r;i++){for(l=i,m=h(F,k,6,t.d.length,15,1),L=0;L<t.d.length;L++)(Q||L!=A)&&(g=t.d[L]+1,g!=1&&(m[L]=l%g,l=l/g|0));for(P=h(F,k,6,t.c.length,15,1),U=0;U<t.c.length;U++)(!Q||U!=A)&&(n=t.c[U]+1,n!=1&&(P[U]=l%n,l=l/n|0));Q?P[A]=t.c[A]:m[A]=t.d[A],t.a[i]=OD(t,m,P)}wu(t.a,new vw),t.b=-1}function Nj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(!((t.F[e]&3)==0||(t.F[e]&3)==3||!fi(t,e))){for(b=-1,v=-1,R=-1,m=-1,P=0,L=0;L<2;L++)for(n=t.D[L][e],l=0;l<t.e[n];l++)f=t.k[n][l],f!=e&&dt(t,f)==1&&(i=t.i[n][l],j=CQ(t,f,i),P<j&&(P=j,v=i,b=f,R=n,m=t.D[1-L][e]));if(v!=-1){for(s=0;s<2;s++)for(l=0;l<t.e[t.D[s][e]];l++)f=t.k[t.D[s][e]][l],f!=e&&dt(t,f)==1&&(t.H[f]=1);for(t.D[1][b]!=v&&(t.D[0][b]=t.D[1][b],t.D[1][b]=v),D=It,y=0;y<t.j[R];y++)i=t.i[R][y],t.k[R][y]!=e&&D>i&&(D=i);for(c=h(F,k,6,2,15,1),g=0,U=0;U<t.j[m];U++)t.k[m][U]!=e&&(c[g++]=t.i[m][U]);r=kA(t.J[R].a,t.J[R].b,t.J[m].a,t.J[m].b),A=0,g==2?(c[0]>c[1]&&(C=c[0],c[0]=c[1],c[1]=C),Q=Je(r,Y0(t,m,c[0])),T=Je(r,Y0(t,m,c[1])),A=Q-T):A=Je(r,Y0(t,m,c[0])),A<0^(t.F[e]&3)==2^D==v?t.H[b]=257:t.H[b]=129}}}function E$(t){var e,A,n;if(null.vd()||null.vd())p5(t,!0);else if(null.vd())t.r&&wv();else if(null.vd())KI(t,null.vd());else if(null.vd())Lv(t);else if(!null.vd())if(null.vd())hQ(t),kL(t,w.Math.max(t.eb,1));else if(null.vd())xh(t,!0,!0);else if(null.vd())xh(t,!1,!0);else if(null.vd())xh(t,!0,!1);else if(null.vd())Iz(t);else if(null.vd())jU=!jU,jU&&hQ(t);else if(null.vd())v5(t,!0);else if(null.vd())v5(t,!1);else if(null.vd())xK(t);else if(null.vd())hT(t._,LV,sV);else if(null.vd())if(null.vd(),e=c1(null.vd(),o1,It),A=c1(null.vd(),o1,It),r0(t.V,e))for(n=0;n<t.V.f;n++)r0(t.V,n)&&FD(t.V,n,A);else FD(t.V,e,A);else null.vd()?(t.H=6,t.eb=w.Math.max(t.eb,1),n1(t.k)):null.vd()?(t.H=256,t.eb=w.Math.max(t.eb,1),n1(t.k)):null.vd()&&Wx(t,t.w==19?16:0)}function S$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(P=new uD,mt(P.a,new We(\"cLogP Values are estimated applying an atom-type based increment system.\",2)),mt(P.a,new We($H,2)),mt(P.a,new We(A4,2)),t){for(Qi(t),ut(t,7),f=0,n=new lP,D=new Pu(\"#0.000\"),e=0;e<t.f;e++)try{A=ny(t,e,6241),T=le(n,oQ(A)),T?ze(n,oQ(A),k1(T.a+1)):ze(n,oQ(A),k1(1))}catch(c){if(c=t0(c),Zt(c,19))++f;else throw At(c)}for(f!=0&&mt(P.a,new We(\"Warning: \"+f+\" atom type(s) could not be determined.\",2)),l=(i=new N8(new x8(new w9(n).a).b),new g9(i));p9(l.a.a);)y=(r=Br(l.a),r.dd()),U=a9(Yf,y),(U<0?-1:U)!=-1?ZP(P,(s=y,XP(G9(n,s))+\" * \"+ng(D,K4[Q=a9(Yf,y),Q<0?-1:Q])+\" AtomType: 0x\"+Nh(y.a)),2):ZP(P,\"Warning: For atom type 0x\"+Nh(y.a)+\" (\"+(L=y,XP(G9(n,L)))+\" times found) is no increment available.\",2)}return P}function Oj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(T=e.f,t.j=h(NA,a0,6,e.f,14,1),t.k=h(F,k,6,e.f,15,1),f=0;f<T;f++)t.j[f]=Or(V(Y(up(e,f),e.B[f]),C6),Vp),t.k[f]=e.C[f],(A&1)!=0&&(t.k[f]+=e.s[f]+16<<8),(A&2)!=0&&(t.k[f]+=e.A[f]<<16);for(t.B=h(NA,a0,6,e.f,14,1),g=(ut(e,7),e.p),l=0;l<g.j.a.length;l++){for(y=!1,Q=N(g.k,l),U=0,L=Q.length;U<L;++U)if(s=Q[U],(e.G[s]&y8)!=0){y=!0;break}if(!y)for(m=N(g.k,l).length,P=N(g.j,l),r=0,i=P.length;r<i;++r)n=P[r],m==3?t.B[n]=Y(t.B[n],ir):m==4?t.B[n]=Y(t.B[n],fr):m==5?t.B[n]=Y(t.B[n],Dr):m==6?t.B[n]=Y(t.B[n],ur):m==7&&(t.B[n]=Y(t.B[n],Qr))}for(c=e.g,t.n=h(F,k,6,e.g,15,1),D=0;D<c;D++)t.n[D]=(Ob(e,D)|e.G[D])&6291967^6291840,(A&4)!=0?(t.n[D]&2)!=0&&(t.n[D]|=8):(A&8)!=0&&(t.n[D]&2)!=0&&D<e.g&&Re(e.p,D)&&(t.n[D]|=8)}function q$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(f=-1,P=bs(t,e),i=P==-1?XL(t,e):-1,A!=0){for(y=-1,U=0;U<t.V.f;U++)U!=P&&Ae(t.V,U)==A&&(!mP(t.V,e)||!r0(t.V,U))&&(D=VA(t.V,U),y<D&&(y=D));for(L=0;L<t.V.g;L++)L!=i&&cP(t.V,L)==A&&(!mP(t.V,e)||!mP(t.V,L))&&(D=$i(t.V,L),y<D&&(y=D));if((P==-1?cP(t.V,i):Ae(t.V,P))!=A)f=w.Math.min(y+1,31);else if(f=P==-1?$i(t.V,i):VA(t.V,P),mP(t.V,e)){for(l=!0,s=0;s<t.V.f;s++)if(s!=P&&r0(t.V,s)&&Ae(t.V,s)==A&&VA(t.V,s)!=f){l=!1;break}for(Q=0;Q<t.V.g;Q++)if(Q!=i&&mP(t.V,Q)&&cP(t.V,Q)==A&&$i(t.V,Q)!=f){l=!1;break}l&&(f<=y?(++f,f==32&&(f=0)):f=0)}else f<=y?(++f,f==32&&(f=0)):f=0}if(mP(t.V,e))for(Q=0;Q<t.V.g;Q++)mP(t.V,Q)&&Cr(t.V,Q)&&(n=bs(t,Q),r=XL(t,Q),n!=-1?He(t.V,n,A,f):r!=-1&&U8(t.V,r,A,f));else P!=-1?He(t.V,P,A,f):i!=-1&&U8(t.V,i,A,f)}function I$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(P=h(wl,A0,35,t.k.length,0,1),b=0,R=0,y=0;y<t.k.length;y++)L2(t.e[y],e,null,Q0),P[y]=t.e[y].v,b+=P[y].b,R=w.Math.max(R,P[y].a);for(f=h(wl,A0,35,t.a.length,0,1),v=0,m=0,l=0;l<t.a.length;l++)L2(t.b[l],e,null,65552),f[l]=t.b[l].v,v=w.Math.max(v,f[l].b),m+=f[l].a+12;if(n=w.Math.max(48,v+24),R=w.Math.max(R,24+2*m),A=-1,!t.g)t.g=new to,mt(t.g,new KD),A=0;else{for(T=0;T<t.g.a.length;T++)if(Zt(N(t.g,T),62)){A=T;break}A==-1&&(A=t.g.a.length,mt(t.g,new KD))}for(g=18,s=0;s<t.k.length;s++){if(s==t.n){for(mT(N(t.g,A),g-18,R/2,g-18+n,R/2),r=g+-6,i=.5*(R-12)-m,c=0;c<t.a.length;c++)Q=r+.5*(v-f[c].b)-f[c].c,L=i-f[c].d,qo(t.b[c],new z3(Q,L)),i+=12+f[c].a;g+=n}D=g-P[s].c,U=.5*(R-P[s].a)-P[s].d,qo(t.e[s],new z3(D,U)),g+=36+P[s].b}t.o=!1}function x$(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(ut(t.g,t.N),D=w.Math.max(t.g.f,t.g.g)+16,t.s=h(F,k,6,D,15,1),t.u=h(F,k,6,D,15,1),t.v=h(F,k,6,D,15,1),t.t=h(rt,ft,6,D+1,16,1),i=h(rt,ft,6,t.g.f,16,1),f=h(rt,ft,6,t.g.g,16,1),n=0,A=0;A<t.g.f;A++)if(!t.D[A]&&!i[A])for(t.s[n]=A,t.v[n]=-1,t.u[n]=-1,Q=n;n<=Q;){for(U=0;U<De(t.g,t.s[n]);U++)Q=A5(t,n,Q,U,i,f,-1);for(;t.t[++n];);}if(t.w=n,t.p!=0){for(Q=t.w-1,r=0;r<t.d;r++)for(n=0;n<=Q;){for(L=0;L<De(t.g,t.s[n]);L++)Q=A5(t,n,Q,L,i,f,r);for(;t.t[++n];);}for(e=0;e<t.g.f;e++)if(t.D[e]&&!i[e])for(t.s[n]=e,t.v[n]=-1,t.u[n]=-1,Q=n;n<=Q;){for(L=0;L<De(t.g,t.s[n]);L++)_(t.g,t.s[n],L)<t.g.f&&(Q=A5(t,n,Q,L,i,f,t.f[e]));for(;t.t[++n];);}for(t.e=h(F,k,6,t.d,15,1),s=0;s<t.d;s++)t.e[s]=-1;for(U=t.w;U<n;U++)P=t.f[t.s[U]],t.e[P]==-1&&(t.e[P]=U)}t.A=n}function N$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;for(l=0,T=(D=ne(e,l),D==-1?e.length:D),r=c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It),l=lA(e,T),T=(Q=ne(e,l),Q==-1?e.length:Q),i=c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It),l=lA(e,T),T=(U=ne(e,l),U==-1?e.length:U),A=ND(t,c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It)),l=lA(e,T),T=(L=ne(e,l),L==-1?e.length:L),n=ND(t,c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It)),g=0,m=0;(l=lA(e,T))!=-1;)if(T=(f=ne(e,l),f==-1?e.length:f),c=(pt(l,T,e.length),e.substr(l,T-l)),y=c.indexOf(k0(61)),s=(pt(0,y,c.length),c.substr(0,y)),v=c1((Xt(y+1,c.length+1),c.substr(y+1)),o1,It),A1(s,\"CFG\"))switch(v){case 1:g=1;break;case 2:g=i==2?3:4;break;case 3:g=6}else A1(s,\"TOPO\")&&(m=v);P=GR(t,A,n,i,g,m),P+1!=r&&(!t.c&&(t.c=new lP),ze(t.c,k1(r),k1(P)))}function O$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(Q=v1(K1(e)),Q.length==0||(t.e=Q),K1(e),n=K1(e),!A&&n.startsWith(qy)&&(P=(Xt(13,n.length+1),n.substr(13)),OQ(P,!0,t)))return!0;for(l=K1(e),y=c1(v1((pt(0,3,l.length),l.substr(0,3))),o1,It),L=c1(v1((pt(3,6,l.length),l.substr(3,3))),o1,It),f=new tu,i=0;i<y;i++){if(l=K1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new V1(PM));s=new JA,D=new fu;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(D9));if(l==null)throw At(new V1(rM));mo(f,s,new nn(new b9(D.a))),mt(t.g,s),t.d=-1}for(r=0;r<L;r++){if(l=K1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new V1(PM));U=new JA,D=new fu;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(D9));if(l==null)throw At(new V1(rM));mo(f,U,new nn(new b9(D.a))),mt(t.f,U),t.d=-1}return!0}function G$(t,e){i8();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x;for(Nm(),l=h(rt,ft,6,e.r,16,1),Ij(e,l),i=0;i<e.g;i++)if(l[i]&&(S=h(F,k,6,4,15,1),p=new mh,x=HF(e,i,S,p),x!=null&&!OX(S,t)&&(C=(b=ri(gn,x),b?bj(b):null),Q=(j=ri(gn,x),j?Os(j):null),g=(R=ri(gn,x),R?Zj(R):null),C==null&&(c=new r6(e,S),C=c.b,Q=c.a,g=c.c),C!=null))){if(n=null,v=0,(e.F[i]&64)==0){for(y=R1(rt,[h0,ft],[12,6],16,[2,e.q],2),D=h(F,k,6,2,15,1),L=0;L<2;L++)D[L]=SQ(e,p.e[L],p.b[L],y[L],null,null);for(v=D[0]<D[1]?0:1,n=h(F,k,6,D[v],15,1),s=0,A=0;A<e.q;A++)y[v][A]&&(n[s++]=A)}mt(t,new xL(C,Q,g,S,n,v))}for(r=0;r<e.g;r++)if(e.H[r]==1&&(e.F[r]&64)==0){for(L=0;L<2;L++)if(f=e.D[L][r],T=e0(e,f),U=e.e[f]-T,T==1&&U!=0){m=e.D[1-L][r],P=e.C[f],P>6&&e.o[m]==1?j_(e,f,m,U,t):e.o[m]!=2&&e.e[m]>1&&IW(e,f,m,U,t);break}}}function J$(t,e,A){var n,P,r,i,f,D,Q;return r=h(yt,wt,6,3,15,1),r[0]=kt(t.R,A.a)-kt(t.R,e.a),r[1]=jt(t.R,A.a)-jt(t.R,e.a),r[2]=vA(t.R,A.a)-vA(t.R,e.a),D=h(yt,wt,6,3,15,1),D[0]=kt(t.R,e.b)-kt(t.R,e.a),D[1]=jt(t.R,e.b)-jt(t.R,e.a),D[2]=vA(t.R,e.b)-vA(t.R,e.a),Q=h(yt,wt,6,3,15,1),Q[0]=kt(t.R,A.b)-kt(t.R,A.a),Q[1]=jt(t.R,A.b)-jt(t.R,A.a),Q[2]=vA(t.R,A.b)-vA(t.R,A.a),i=h(yt,wt,6,3,15,1),i[0]=r[1]*D[2]-r[2]*D[1],i[1]=r[2]*D[0]-r[0]*D[2],i[2]=r[0]*D[1]-r[1]*D[0],f=h(yt,wt,6,3,15,1),f[0]=r[1]*i[2]-r[2]*i[1],f[1]=r[2]*i[0]-r[0]*i[2],f[2]=r[0]*i[1]-r[1]*i[0],n=(D[0]*f[0]+D[1]*f[1]+D[2]*f[2])/(w.Math.sqrt(D[0]*D[0]+D[1]*D[1]+D[2]*D[2])*w.Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2])),P=(Q[0]*f[0]+Q[1]*f[1]+Q[2]*f[2])/(w.Math.sqrt(Q[0]*Q[0]+Q[1]*Q[1]+Q[2]*Q[2])*w.Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2])),n<0^P<0?1:2}function Gj(t,e,A,n){var P,r,i,f,D;D=n.a.length,t.f[e]!=0&&Oe(n,t.f[e]==1?47:92),t.j==1&&(P=ee(t.k,e)&127,P!=0&&((P&1)!=0&&t.f[e]==0&&(n.a+=\"-\"),(P&2)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"=\"),(P&4)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"#\"),(P&32)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"$\"),(P&64)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"$\"),(P&8)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\":\"),(P&16)!=0&&(n.a.length!=D&&(n.a+=\",\"),J(n,_0(t.k,A)?\"<-\":\"->\")))),D==n.a.length&&(!_e(t.k,e)||(t.j&4)!=0)&&(r=l1(t.k,e)&127,r==1?vn(t.k,z(t.k,0,e))&&vn(t.k,z(t.k,1,e))&&(t.j&4)==0&&t.f[e]==0&&(n.a+=\"-\"):r==2?n.a+=\"=\":r==4?n.a+=\"#\":r==32||r==64?n.a+=\"$\":r==8?n.a+=\":\":r==16&&J(n,_0(t.k,A)?\"<-\":\"->\")),t.j==1&&(i=D==n.a.length?\"\":\";\",f=ee(t.k,e)&384,f==256?n.a+=i+\"@\":f==128&&(n.a+=i+\"!@\"))}function z$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;if(t.R.f==0){t.s=\"\";return}for(L=t.jb&t.b,c=t.jb?16:8,_3(t,!0),Oe(t.u,L?35:33),Jt(t,t.jb?1:0,1),Jt(t,e?1:0,1),Jt(t,c>>1,4),l=0,D=1;D<t.R.f;D++)l=eR(t,t.B[D],t.F[D]==-1?-1:t.B[t.F[D]],l,A);if(L)for(Q=0;Q<t.R.f;Q++)for(n=t.B[Q],y=O(t.R,n);y<Mt(t.R,n);y++)l=eR(t,_(t.R,n,y),n,l,A);if(t.R.f>1&&l==0){t.s=\"\";return}for(i=1<<c,s=l/((i>>1)-1),T=l+.5*s,U=1;U<t.R.f;U++)mb(t,t.B[U],t.F[U]==-1?-1:t.B[t.F[U]],T,s,c,A);if(L)for(f=0;f<t.R.f;f++)for(n=t.B[f],y=O(t.R,n);y<Mt(t.R,n);y++)mb(t,_(t.R,n,y),n,T,s,c,A);e&&(r=t.jb?1.5:(Y1(),Y1(),wn),P=kR(t.R,L?t.R.q:t.R.f,L?t.R.r:t.R.g,r,A),Jt(t,w.Math.min(i-1,w.Math.max(0,vt(.5+w.Math.log10(P/.1)/w.Math.log10(2e3)*(i-1)))),c),Jt(t,Fh(A[t.B[0]].a/P,i),c),Jt(t,Fh(A[t.B[0]].b/P,i),c),t.jb&&Jt(t,Fh(A[t.B[0]].c/P,i),c)),t.s=ML(t)}function _5(t,e){var A,n,P,r,i,f,D,Q,U,L;for(P=Ju(e,0);P>0&&e[P-1]==45;)P=Ju(e,P+1);for(r=P==-1?-1:Ju(e,P+1);r>0&&e[r-1]==45;)r=Ju(e,r+1);if(r==-1)throw At(new V1(\"Missing one or both separators ('>').\"));if(Ju(e,r+1)!=-1)throw At(new V1(\"Found more than 2 separators ('>').\"));for(L=new P8,U=0,n=0;n<e.length;){for(;n<e.length&&e[n]==46;)++n;if(n==e.length)break;for(Q=n,D=-1,i=0,A=n;A<e.length;A++){if(e[A]==40){++i;continue}if(e[A]==41){if(--i<0)throw At(new V1(\"Found closing bracket without matching opening one.\"));continue}if(i==0&&(e[A]==46&&(t.o||A+1<e.length&&e[A+1]==46)||e[A]==62&&(A==0||e[A-1]!=45))){D=A;break}}if(D==-1&&(D=e.length),Q<D){if(f=new JA,D6(t,f,e,Q,D,!0,!0),t.q==1&&t.p)return _5(new LQ(t.j|2),e);U==0?(mt(L.g,f),L.d=-1):U==1?mt(L.a,f):(mt(L.f,f),L.d=-1)}for(n=D;n<e.length&&e[n]==62;)++n,++U}return L}function $5(){$5=B1;var t,e,A;for(new nf(1,0),new nf(10,0),new nf(0,0),BE=h(vE,Ye,31,11,0,1),HU=h(l9,a0,6,100,15,1),ic=B(d(yt,1),wt,6,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),fc=h(F,k,6,ic.length,15,1),di=B(d(yt,1),wt,6,15,[1,10,100,1e3,nP,jy,1e6,1e7,1e8,Of,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),dl=h(F,k,6,di.length,15,1),VU=h(vE,Ye,31,11,0,1),t=0;t<VU.length;t++)BE[t]=new nf(t,0),VU[t]=new nf(0,t),HU[t]=48;for(;t<HU.length;t++)HU[t]=48;for(A=0;A<fc.length;A++)fc[A]=vs(ic[A]);for(e=0;e<dl.length;e++)dl[e]=vs(di[e]);P9()}function Jj(t){var e,A,n,P,r,i;if(r='<svg id=\"'+hf(t.g!=null?t.g:\"mol\"+I2)+M0+'xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"'+t.n+'px\" height=\"'+t.f+'px\" viewBox=\"0 0 '+t.n+\" \"+t.f+`\">\n`,i=t.i?\"<style> #\"+hf(t.g!=null?t.g:\"mol\"+I2)+\" { pointer-events:none; } #\"+hf(t.g!=null?t.g:\"mol\"+I2)+` .event  { pointer-events:all; } line { stroke-linecap:round; } polygon { stroke-linejoin:round; } </style>\n`:'<g style=\"font-size:'+t.k+'px; fill-opacity:1; stroke-opacity:1; fill:black; stroke:black; font-weight:normal; text-rendering:optimizeLegibility; font-family:sans-serif; stroke-linejoin:round; stroke-linecap:round; stroke-dashoffset:0;\">',r+=\"  \",r+=i,t.i){for(P=new Wt(t.b);P.a<P.c.a.length;)n=t1(P),Er(t,n);for(A=new Wt(t.a);A.a<A.c.a.length;)e=t1(A),Er(t,e)}return t.i||Er(t,\"</g>\"),r+t.c.a+\"</svg>\"}function Y$(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m;if(s=h(rt,ft,6,t.g,16,1),s[P]=!0,y=h(F,k,6,11,15,1),l=l2(t,y,n,e,10,null,s),l==-1)return!1;for(i=1;!yA(t.p,A,y[i]);)++i;if(r=l-i,f=y[i],m=N3(t.p,A),m==6&&r==2&&i==3&&HT(t,y[1])>=3){for(g=h3(t.p,A),L=0;L<6;L++)if(e==g[L]){if(c=WT(t.p,A,f==g[WT(t.p,A,L+2)]?L-2:L+2),T=g[c],U=t.u[T]&hn,(U==0?0:U==re?2:U==I1?3:4)>=3&&AR(t,y[1],T,2,null)==2)return!0;break}}if(D=t.o[f]==1||f<t.f&&i0(t.p,f)||EP(t,f,!1),Q=!D&&t.C[f]==7&&t.s[f]!=1,r==1)return!D&&!Q&&m<=4&&i<=3;switch(m){case 4:if(!D&&!Q&&i<=4)return!0;break;case 5:if(Q){if(i<=3)return!0}else if(!D&&i<=4)return!0;break;case 6:if(r==2){if(D){if(i<=4)return!0}else if(!Q&&i<=3)return!0}else if(r==3){if(D){if(i<=6)return!0}else if(i<=4)return!0}break;case 7:if(r==3&&i<=3)return!0}return!1}function K$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(e=0;e<t.j.f;e++){for(i=0,f=!1,Q=!1,s=0;s<O(t.j,e)&&!f;s++)if(P=Ot(t.j,e,s),t.e[P]){for(++i,n=_(t.j,e,s),tA(t.j,n)&&(Q=!0),T=0;T<O(t.j,n);T++)if(c=_(t.j,n,T),g=Ot(t.j,n,T),c!=e&&t.e[g]){f=!0;break}}if(i>=2&&!f){for(r=h(F,k,6,i,15,1),U=gQ(t.j,e),U==0&&(U=2),l=0,y=0;y<O(t.j,e);y++)P=Ot(t.j,e,y),t.e[P]&&(n=_(t.j,e,y),r[l++]=(A=K(t.j,n),((A==8?14+(O(t.j,n)==1?1:0):A==7?12+(O(t.j,n)==1?1:0):A==16?10+(O(t.j,n)==1?1:0):A==34?8+(O(t.j,n)==1?1:0):A==15?6+(O(t.j,n)==1?1:0):A==33?4+(O(t.j,n)==1?1:0):A==6?2+(O(t.j,n)==1?0:1):O(t.j,n)==1?0:1)<<16)+y));for(r.sort(Fe(u0.prototype.gd,u0,[])),t.b-=1+i,t.d[e]=!1,D=w.Math.min(i-1,U),L=0;L<r.length;L++)n=_(t.j,e,r[L]&w1),P=Ot(t.j,e,r[L]&w1),t.d[n]=!1,t.e[P]=!1,--t.c,L<r.length-D?E0(t.j,n,Q?-1:1):w0(t.j,P,2)}}}function zj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;for(i=0,D=0;D<t.g.f;D++)if((t.f==null||t.f[D]==e)&&gt(V(o0(t.g,D),ge),0)){if(s=t.G[D],L=d0(t.g,D),l=d0(t.H,s),L==0||L==3)continue;if(l==0||l==3)return!1;if(Ae(t.g,D)==1){++i;continue}if(Ae(t.H,s)==1)return!1;if(Ae(t.g,D)==2){++i;continue}if(Ae(t.H,s)==2||B5(t,D)==(L==l))return!1}if(i!=0){for(P=h(F,k,6,i,15,1),r=0,Q=0;Q<t.g.f;Q++)(t.f==null||t.f[Q]==e)&&gt(V(o0(t.g,Q),ge),0)&&(L=d0(t.g,Q),L!=0&&L!=3&&(P[r++]=VA(t.g,Q)<<24|Ae(t.g,Q)<<22|Q));for(P.sort(Fe(u0.prototype.gd,u0,[])),r=0;r<P.length;)for(U=P[r]&x0,y=t.G[U],A=P[r]&-4194304,n=B5(t,U)^d0(t.g,U)==d0(t.H,y),++r;r<P.length&&(P[r]&-4194304)==A;r++)if(f=P[r]&x0,s=t.G[f],Ae(t.H,s)!=Ae(t.H,y)||VA(t.H,s)!=VA(t.H,y)||(T=B5(t,f)^d0(t.g,f)==d0(t.H,s),T!=n))return!1}return!0}function X$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(s=0,y=(r=ne(e,s),r==-1?e.length:r),v=(pt(s,y,e.length),e.substr(s,y-s)),A1(\"DEFAULT\",v)&&(s=lA(e,y),y=(i=ne(e,s),i==-1?e.length:i),v=(pt(s,y,e.length),e.substr(s,y-s)),v.startsWith(\"CLASS\")&&(s=lA(e,y),y=(f=ne(e,s),f==-1?e.length:f),v=(pt(s,y,e.length),e.substr(s,y-s)),A1(\"-\",v)&&(s=lA(e,y),y=(D=ne(e,s),D==-1?e.length:D),v=(pt(s,y,e.length),e.substr(s,y-s))))),c1(v,o1,It),s=lA(e,y),y=(Q=ne(e,s),Q==-1?e.length:Q),m=(pt(s,y,e.length),e.substr(s,y-s)),!!A1(\"DAT\",m)){for(s=lA(e,y),y=(P=ne(e,s),P==-1?e.length:P),c1((pt(s,y,e.length),e.substr(s,y-s)),o1,It),g=new lP,s=lA(e,y);s!=-1;)s=PZ(g,e,s);n=(T=R2,XP(G9(g,T))),L=(c=\"FIELDNAME\",XP(G9(g,c))),U=(l=\"FIELDDATA\",XP(G9(g,l))),!(!A1(by,L)||n==null||U==null)&&(A=o8(n,\" \"),A.length==2&&u8(t.j,c1(A[1],o1,It)-1,U))}}function Yj(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X;if(v=t.f.k,P=N(t.e,A),X=P.a,L=e[t.a],c=xt(v,X)>0&&v.j[X]==v.e[X],T=CO(t.f.a,t.f.t[X]),!c&&!T)return i=v.i[X][2],v.C[i]==1&&(i=t.f.t[i],(A==0?i>X:t.f.t[v.i[X][1]]>i)&&(n=!n)),n;if(c&&(r=v.i[X][A],i=t.f.t[r],i>X&&(n=!n,v.C[r]==1&&(n=!n))),T){for(R=v.e[X],y=h(F,k,6,R-1,15,1),l=h(F,k,6,R-1,15,1),b=0,g=0,C=0;g<R;g++)i=v.i[X][g],i!=L&&(y[C]=i,Q=D1(v,X,i),x=xu(t.f.s,t.f.t[X]+\"_\"+t.f.t[i]),l[C++]=x==null?-1:Q,x!=null&&++b);if(c)y[0]<X&&(n=!n);else switch(b){case 1:if(xt(v,X)>0)break;m=l[0]>=0,s=y[m?0:1],j=y[m?1:0],j>X?s>X&&v.C[j]!=1&&(n=!n):s<X&&(n=!n);break;case 2:f=uv(t,l[0],X),D=uv(t,l[1],X),a=xu(t.f.s,X+\"_\"+t.f.t[f]),E=xu(t.f.s,X+\"_\"+t.f.t[D]),U=t.b,A==0?(S=a[1]<U?a[1]:a[0],p=E[1]<U?E[1]:E[0]):(S=a[0]<U?a[1]:a[0],p=E[0]<U?E[1]:E[0]),S<p!=f<D&&(n=!n)}}return n}function Z$(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(r=0,U=0,i=0,f=0,D=0,Q=0,L=0,s=!1,e=h(rt,ft,6,32,16,1),A=0;A<t.R.f;A++)t.db[A]!=0&&(++r,t.db[A]==3?++U:t.bb[A]==0?(++i,t.P&&UD(t.P,A)&&++f):t.bb[A]==2?t.ab[A]==0&&++Q:t.bb[A]==1&&(P=t.ab[A],e[P]||(++L,e[P]=!0),t.ab[A]==0&&++D,t.P&&UD(t.P,A)&&(s=!0)));for(n=0;n<t.R.g;n++)t.o[n]!=0&&l1(t.R,n)==1&&(++r,t.o[n]==3?++U:t.n[n]==0?(++i,t.P&&UD(t.P,z(t.R,0,n))&&UD(t.P,z(t.R,1,n))&&++f):t.n[n]==2?t.k[n]==0&&++Q:t.n[n]==1&&(P=t.k[n],e[P]||(++L,e[P]=!0),t.k[n]==0&&++D,t.P&&UD(t.P,z(t.R,0,n))&&UD(t.P,z(t.R,1,n))&&(s=!0)));if(r==0){t.R.I=Q0;return}if(U!=0){t.R.I=0;return}if(t.K){Gl(t.R,I0+(1<<L));return}D+f==r&&!s?t.R.I=ly:i==r?t.R.I=T8:Q==r?t.R.I=327680:i==r-1&&D==1?t.R.I=yi:Gl(t.R,458752+(1<<L))}function W$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(t.j[e]!=2||t.n[e][0]!=2||t.n[e][1]!=2||t.j[t.i[e][0]]<2||t.j[t.i[e][1]]<2||t.o[t.i[e][0]]!=1||t.o[t.i[e][1]]!=1){ce(t,e,0,!1);return}for(b=-1,R=-1,v=-1,c=-1,r=0,L=0;L<2;L++)for(n=t.i[e][L],l=0;l<t.e[n];l++)i=t.i[n][l],i!=e&&(f=t.k[n][l],j=CQ(t,f,i),r<j&&(r=j,R=i,b=f,v=n,c=t.i[e][1-L]));if(R!=-1){for(s=0;s<2;s++)for(n=t.i[e][s],l=0;l<t.e[n];l++)i=t.i[n][l],f=t.k[n][l],i!=e&&t.D[0][f]==n&&(t.H[f]=1);for(t.D[1][b]!=R&&(t.D[0][b]=t.D[1][b],t.D[1][b]=R),D=It,y=0;y<t.j[v];y++)i=t.i[v][y],i!=e&&D>i&&(D=i);for(g=h(F,k,6,2,15,1),m=0,U=0;U<t.j[c];U++)i=t.i[c][U],i!=e&&(g[m++]=i);A=kA(t.J[e].a,t.J[e].b,t.J[c].a,t.J[c].b),P=0,m==2?(g[0]>g[1]&&(C=g[0],g[0]=g[1],g[1]=C),Q=Je(A,Y0(t,c,g[0])),T=Je(A,Y0(t,c,g[1])),P=Q-T):P=Je(A,Y0(t,c,g[0])),P<0^(t.u[e]&3)==1^D==R?t.H[b]=257:t.H[b]=129}}function _$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(gt(t.v,0)&&(x1(),S1(E1(Date.now()),t.v)))return!1;for(y=e.a,m=0,i=1;i<y.length;i++)if(y[i]!=null)for(D=0;D<i;D++)y[i][D]!=0&&b3(t.B,i,D).length!=2&&(m+=y[i][D]);if(m>6)return!1;for(P=null,s=null,Q=null,A=Ve,l=e.b,r=1;r<y.length;r++)if(y[r]!=null){for(f=0;f<r;f++)if(y[r][f]>1&&b3(t.B,r,f).length==2){for(g=b3(t.B,r,f),R=h(F,k,6,2,15,1),L=0;L<2;L++)v=t.s[g[L]],R[L]=ed(e.c,v.a);for(C=h(F,k,6,2,15,1),T=-1;T<=1;T+=2)for(C[0]=T*8,c=-1;c<=1;c+=2){for(C[1]=c*8,n=y[r][f],b=1;b<=3;b++){for(P?WD(P,e.c):P=new cD(e.c),U=0;U<2;U++)jk(P,t.s[g[U]],R[U]+b*C[U]<<16>>16);if(j=aZ(t,P,t.q[r],t.q[f]),j<n-1){if(n=j,s?WD(s,P):s=new cD(P),n<1)break}else break}n<y[r][f]&&n<A&&(A=n,Q?WD(Q,s):Q=new cD(s))}}}return Q?(Hj(t,e,Q),e.b>=l?(Av(e,l,y),!1):(WD(e.c,Q),!0)):!1}function $$(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E;if(t.e.length==1)return 0;for(p=P+w.Math.sqrt(n),U=h(yt,wt,6,36,15,1),l=0;l<t.e.length;l++)r=on(e,A,t.a[l],t.b[l]),f=II(zt(E1(w.Math.round(r*36/F0)))),L=e-t.a[l],s=A-t.b[l],a=L*L+s*s,U[f]<a&&(U[f]=a);for(b=-1,R=-1,T=0;T<36;T++)U[T]=w.Math.sqrt(U[T]),b<U[T]&&(b=U[T],R=T);for(x=R-18<0?R-18+36:R-18>=36?R-18-36:R-18,c=0;c<=18;c++)U[x+c<0?x+c+36:x+c>=36?x+c-36:x+c]+=.01*c,U[x-c<0?x-c+36:x-c>=36?x-c-36:x-c]+=.01*c;for(E=h(yt,wt,6,9,15,1),D=h(yt,wt,6,9,15,1),g=1;g<9;g++)E[g]=w.Math.sin(g*OC),D[g]=w.Math.cos(g*OC);for(C=Ve,j=-1,i=0;i<36;i++)if(!(U[i]>=C)){for(v=U[i],y=1;y<9;y++){for(m=-1;m<=1&&(S=i+m*y<0?i+m*y+36:i+m*y>=36?i+m*y-36:i+m*y,!(!(U[S]*D[y]<=v)&&(Q=D[y]*w.Math.min(U[S],p/E[y]),v<Q&&(v=Q,C<=v))));m+=2);if(C<=v)break}C>v&&(C=v,j=i)}return F0*j/36}function Kj(t){for(var e,A,n,P,r;t.t.a.length!=0;)if(n=LA(t.t,0),t.I[n.b]==0&&t.B[n.a]==0)return n;for(;t.g>=0;){for(;t.g>=2&&t.c<t.j[t.g].length;){if(A=t.j[t.g][t.c],e=le(t.k[t.g],A),K(t.D,e[0][0])==6&&(n=ZR(t,e[0],e[1]),n))return n;++t.c}for(;t.g>=2&&t.d<t.j[t.g].length;){if(A=t.j[t.g][t.d],e=le(t.k[t.g],A),K(t.D,e[0][0])!=6&&(n=ZR(t,e[0],e[1]),n))return n;++t.d}for(;t.p&&t.g==0&&t.e<t.j[0].length;)if(A=t.j[0][t.e++],e=le(t.k[t.g],A),e[0].length==1&&e[1].length==1&&(n=Jk(t,e[0][0],e[1][0]),n))return n;for(;t.g==0&&t.f<t.j[t.g].length;)if(A=t.j[t.g][t.f++],e=le(t.k[t.g],A),e[0].length>=e[1].length&&ab(e[0],t.I,t.G,t.H,t.J)||e[1].length>=e[0].length&&ab(e[1],t.B,t.w,t.A,t.C)){for(r=0,P=0;r<e[0].length&&t.I[e[0][r]]!=0;)++r;for(;P<e[1].length&&t.B[e[1][P]]!=0;)++P;if(r<e[0].length&&P<e[1].length&&(n=Jk(t,e[0][r],e[1][P]),n))return n}--t.g,t.c=0,t.d=0,t.e=0,t.f=0}return null}function EP(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(t.C[e]!=7||t.j[e]==4)return!1;if(e<t.f&&i0(t.p,e)||t.o[e]!=0||gt(V(t.B[e],Ur),0))return!0;if(t.s[e]==1)return!1;for(D=0;D<t.j[e];D++)if(pr(t,t.k[e][D])==3)return!1;for(i=0,Q=0;Q<t.j[e];Q++)t.n[e][Q]==1&&(n=t.C[t.i[e][Q]],(n==8||n==9||n==17)&&++i);if(i==0){for(f=0;f<t.j[e];f++)if(P=t.i[e][f],t.o[P]!=0){if(P<t.f&&i0(t.p,P)){if((t.p&&P<t.f?iA(t.p,P):0)>=5){for(T=0,s=0;s<t.j[P];s++)l=t.i[P][s],l!=e&&e0(t,l)>=3&&++T;if(y=e0(t,e),T==2&&y>=2||T==1&&y==3)continue}return!A||!Ss(t,e)}for(L=0;L<t.j[P];L++)if(t.n[P][L]==2||_e(t,t.k[P][L]))return!A||!Ss(t,e)}}if(i<2)for(f=0;f<t.j[e];f++){for(P=t.i[e][f],U=!1,r=!1,L=0;L<t.j[P];L++)t.i[P][L]!=e&&(t.n[P][L]!=1&&(t.C[t.i[P][L]]==7||t.C[t.i[P][L]]==8||t.C[t.i[P][L]]==16)&&(U=!0),t.n[P][L]==1&&t.C[t.i[P][L]]==7&&(r=!0));if(U&&(!r||i==0))return!A||!Ss(t,e)}return!1}function a$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j;for(n=h(yt,wt,6,2,15,1),Q=0;Q<2;Q++)t.c[Q]/=t.a[Q],t.d[Q]/=t.a[Q],n[Q]=$$(t.b[Q],t.c[Q],t.d[Q],t.b[1-Q].e.length,e);for(sf(t.b[0],t.c[0],t.d[0],bA-n[0]),sf(t.b[1],t.c[1],t.d[1],4.71238898038469-n[1]),j=Ve,b=k6,i=t.d[0]-t.d[1],U=0;U<t.b[1].b.length;U++)t.b[1].b[U]+=i,j>t.b[1].b[U]&&(j=t.b[1].b[U]),b<t.b[1].b[U]&&(b=t.b[1].b[U]);for(v=b-j+2*e,P=vt(w.Math.ceil(v)),j+=(v-P)/2-e,g=h(yt,wt,6,P,15,1),L=0;L<P;L++)g[L]=t.c[1]+e;for(s=0;s<t.b[1].b.length;s++)for(R=t.b[1].b[s]-j,m=vt(R-e),f=w.Math.min(vt(R+e),P-1),c=m;c<=f;c++)g[c]>t.b[1].a[s]&&(g[c]=t.b[1].a[s]);for(y=0;y<P;y++)g[y]-=e;for(r=t.c[0]-t.c[1],l=0;l<t.b[0].a.length;l++)T=vt(t.b[0].b[l]-j),T>=0&&T<g.length&&r<t.b[0].a[l]-g[T]&&(r=t.b[0].a[l]-g[T]);for(D=0;D<t.b[1].a.length;D++)t.b[1].a[D]+=r;A&&(sf(t.b[0],t.c[0],t.d[0],n[0]-bA),sf(t.b[1],t.c[0],t.d[0],n[0]-bA))}function Xj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j;if(t.d==null&&(t.d=h(F,D0,7,t.j.r,0,2)),t.d[e]==null){for(y=h(F,k,6,t.e.length,15,1),v=h(rt,ft,6,t.j.q,16,1),P=z(t.j,0,e),r=z(t.j,1,e),y[0]=P,v[P]=!0,U=0,l=0;U<=l;){for(c=0;c<Mt(t.j,y[U]);c++)i=_(t.j,y[U],c),!v[i]&&i!=r&&(y[++l]=i,v[i]=!0);if(U==l)break;++U}if(s=l+1>(t.e.length/2|0),t.i){for(D=!1,f=!1,c=0;c<t.e.length;c++)n=t.e[c],z0(t.j,n)&&n!=P&&n!=r&&(v[t.e[c]]?D=!0:f=!0);D!=f&&(s=D)}for(Q=2,t.d[e]=h(F,k,6,s?t.e.length-l:l+2,15,1),g=0;g<t.e.length;g++)t.e[g]==P?t.d[e][s?0:1]=g:t.e[g]==r?t.d[e][s?1:0]=g:s^v[t.e[g]]&&(t.d[e][Q++]=g)}for(b=t.a[t.d[e][0]],j=t.b[t.d[e][0]],R=on(b,j,t.a[t.d[e][1]],t.b[t.d[e][1]]),T=2;T<t.d[e].length;T++)m=t.d[e][T],L=w.Math.sqrt((t.a[m]-b)*(t.a[m]-b)+(t.b[m]-j)*(t.b[m]-j)),A=2*R-on(b,j,t.a[m],t.b[m]),t.a[m]=b+L*w.Math.sin(A),t.b[m]=j+L*w.Math.cos(A)}function Zj(t){var e,A,n,P,r,i,f,D,Q,U;switch(e=null,U=t.d.length,t.e){case 1:for(e=R1(Yt,[te,at],[16,6],15,[2*U,2],2),n=0;n<U;n++)e[n][0]=t.d[n][0],e[n][1]=t.d[n][1],e[U+n][0]=180+t.d[n][0]<<16>>16,e[U+n][1]=180+t.d[n][1]<<16>>16;return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[U-1]==180?U-1:U,Q=r-P,e=R1(Yt,[te,at],[16,6],15,[U+Q,2],2),i=0;i<U;i++)e[i][0]=t.d[i][0],e[i][1]=t.d[i][1];for(f=P;f<r;f++)e[e.length-1-f+P][0]=360-t.d[f][1]<<16>>16,e[e.length-1-f+P][1]=360-t.d[f][0]<<16>>16;return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[U-1]==90?U-1:U,Q=r-P,e=R1(Yt,[te,at],[16,6],15,[2*U+2*Q,2],2),D=0;D<U;D++)e[D][0]=t.d[D][0],e[D][1]=t.d[D][1],e[U+Q+D][0]=180+t.d[D][0]<<16>>16,e[U+Q+D][1]=180+t.d[D][1]<<16>>16;for(A=P;A<r;A++)e[U+Q-1-A+P][0]=180-t.d[A][1]<<16>>16,e[U+Q-1-A+P][1]=180-t.d[A][0]<<16>>16,e[e.length-1-A+P][0]=360-t.d[A][1]<<16>>16,e[e.length-1-A+P][1]=360-t.d[A][0]<<16>>16;return e;default:return t.d}}function Wj(t,e,A,n){var P,r,i,f,D,Q;if(i=ZA(t.V,e,A),f=-1,n&&t.X==8&&i!=-1&&(!RZ(t,t.e,i)||C1(t.V,t.e)!=0&&C1(t.V,t.e)==C1(t.V,i)&&!Bn(t.V,t.e)||DG(t,t.e,i))&&(i=-1),i!=-1&&(t.w==101||t.w==103||t.w==102?(f=pQ(t.V,i),i=-1):t.w==19&&i>=t.V.f&&(i=-1)),f==-1&&i==-1&&t.w!=22&&t.w!=19&&t.w!=3&&t.w!=10&&t.w!=27&&t.w!=16&&t.w!=11&&t.w!=12&&t.w!=13&&t.w!=28&&t.w!=29&&t.w!=30&&t.w!=14&&t.w!=31&&t.w!=15&&t.w!=32&&t.w!=33&&(f=df(t.V,e,A)),f!=-1&&(t.w==101||t.w==103||t.w==102)&&!(Cr(t.V,f)&&(bs(t,f)!=-1||XL(t,f)!=-1))&&(f=-1),P=t.v,!n&&t.I&&(P=null,i==-1&&f==-1&&(t.w==2||t.w==4||t.w==21))){for(Q=new Wt(t.I);Q.a<Q.c.a.length;)if(D=t1(Q),(t.w==2||t.w==4&&!Zt(D,62)||t.w==21&&Zt(D,93))&&D.Eb(e,A)){P=D,t.v&&t.v!=D&&t.v.Fb();break}}return r=t.t!=i||t.u!=f||t.v!=P||!!P,t.t!=i&&(t.t!=-1&&t.i.a.length!=0?as(t,t.i.a):(t.t=i,un(t.i,0),N1(t,new q1(t,4,!0)))),t.u!=f&&(t.u=f,N1(t,new q1(t,8,!0))),t.v=P,r}function ty(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(ut(t,7),U=new zA(t.f,t.g),Q=R1(q,[nA,Ny],[204,58],0,[t.f,8],2),n=h(F,k,6,t.f,15,1),P=h(F,k,6,t.f,15,1),r=h(rt,ft,6,t.f,16,1),v=0;v<t.f;v++)if(Q[v]=R1(q,[Ny,w8],[58,10],0,[t.j[v],8],2),!(e&&t.C[v]!=6))for(D=0;D<t.j[v];D++){for(L=t.i[v][D],Hu(r,r.length),g=1,c=2,t.u[L]|=512,R=0;R<8&&c<t.f;R++){if(R==0)n[0]=L,r[L]=!0,n[1]=v,r[v]=!0;else{for(m=c,y=g;y<c;y++)for(A=n[y],l=0;l<t.j[A];l++)f=t.i[A][l],!r[f]&&(!e||t.C[f]==6)&&(r[f]=!0,n[m++]=f);if(m==c){if(!e)for(s=R;s<8;s++)Q[v][D][s]=Q[v][D][s-1];break}g=c,c=m}if(R==0)Q[v][D][R]=h(q,I,6,2,15,1),Q[v][D][R][0]=t.C[v]<<24>>24,Q[v][D][R][1]=t.A[v]<<24>>24;else{for(ui(t,U,r,!0,P),E0(U,P[L],0),Ne(U,P[L],0),A=0;A<t.f;A++)P[A]!=-1&&t.j[A]>U.j[P[A]]&&T1(U,P[A],C0,!0);if(e)for(i=0;i<U.g;i++)U.H[i]=1,U.T=0;Q[v][D][R]=KA((T=me(new EA(U,16)),c0(),T))}}t.u[L]&=-513}return Q}function ta(t,e){Is();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(D=G(t,0)<0,D&&(t=p0(t)),G(t,0)==0)switch(e){case 0:return\"0\";case 1:return\"0.0\";case 2:return\"0.00\";case 3:return\"0.000\";case 4:return ky;case 5:return\"0.00000\";case 6:return\"0.000000\";default:return y=new V0,e<0?y.a+=\"0E+\":y.a+=\"0E\",y.a+=e==o1?\"2147483648\":\"\"+-e,y.a}U=18,L=h(l9,a0,6,U+1,15,1),A=U,T=t;do Q=T,T=Mn(T,10),L[--A]=zt(O1(48,l0(Q,Un(T,10))))&w1;while(G(T,0)!=0);if(P=l0(l0(l0(U,A),e),1),e==0)return D&&(L[--A]=45),tP(L,A,U-A);if(e>0&&G(P,-6)>=0){if(G(P,0)>=0){for(r=A+zt(P),f=U-1;f>=r;f--)L[f+1]=L[f];return L[++r]=46,D&&(L[--A]=45),tP(L,A,U-A+1)}for(i=2;Hi(i,O1(p0(P),1));i++)L[--A]=48;return L[--A]=46,L[--A]=48,D&&(L[--A]=45),tP(L,A,U-A)}return l=A+1,n=U,s=new k9,D&&(s.a+=\"-\"),n-l>=1?(Oe(s,L[A]),s.a+=\".\",s.a+=tP(L,A+1,U-A-1)):s.a+=tP(L,A,U-A),s.a+=\"E\",G(P,0)>0&&(s.a+=\"+\"),s.a+=\"\"+Te(P),s.a}function ea(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(e==0||(e&A)!=0){TQ(t);return}for(c=-1,g=0,r=1<<t.e.length-2,P=1<<t.e.length-1,f=1,i=2,Q=0;Q<t.e.length;Q++)(A&(P|f))==0&&(e&(P|f))!=0&&(e&r)==0&&(l=0,(A&r)!=0&&(l+=4),(e&P)!=0&&(l+=2),(e&f)!=0&&(l+=1),g<l&&(g=l,c=Q)),r=P,P=f,f=i,i=1<<(Q+2<t.e.length?Q+2:Q+2-t.e.length);if(c==-1){TQ(t);return}for(s=0,s|=1<<c,y=2;y<t.e.length-1;){if(L=c+y<t.e.length?c+y:c+y-t.e.length,P=1<<(L==0?t.e.length-1:L-1),(A&P)!=0){++y;continue}if(f=1<<L,(e&P)!=0){if((A&f)!=0){TQ(t);return}s|=f,y+=2;continue}if(i=1<<(L+1<t.e.length?L+1:L+1-t.e.length),(e&f)!=0&&(A&i)!=0){s|=f,y+=3;continue}++y}if(s==0){TQ(t);return}for(n=Q1-Q1*(t.e.length-2)/t.e.length,U=1;U<t.e.length;U++)t.a[U]=t.a[U-1]+w.Math.sin(n*(U-1)),t.b[U]=t.b[U-1]+w.Math.cos(n*(U-1));for(f=1,T=2*w.Math.sin(n/2),D=0;D<t.e.length;D++)(s&f)!=0&&(t.a[D]+=T*w.Math.cos(n*(D-.5)),t.b[D]-=T*w.Math.sin(n*(D-.5))),f<<=1}function _j(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;for(t.v=P0(t.w,0)?0:(x1(),O1(E1(Date.now()),t.w)),JS(t.r,t.v),t.t=null,ut(e,1),P=0;P<e.f;P++)if(G1(e,P)>(T=Cn(e,P),T+WA(e,P,T,e.C[P])))return!1;if(XX(e),e.S=!0,i=null,U=null,f=null,L=null,(e.T&8)!=0){for(i=h(F,k,6,e.f,15,1),f=h(rt,ft,6,e.f,16,1),r=0;r<e.f;r++)i[r]=e.u[r]&3,f[r]=(e.u[r]&4)!=0;for(U=h(F,k,6,e.g,15,1),L=h(rt,ft,6,e.g,16,1),Q=0;Q<e.g;Q++)U[Q]=e.F[Q]&3,L[Q]=(e.F[Q]&4)!=0}if(ut(e,63),i!=null){for(r=0;r<e.f;r++)ce(e,r,i[r],f[r]);for(Q=0;Q<e.g;Q++)A8(e,Q,U[Q],L[Q])}for(t.k=e,t.a=0,t.p=0,t.A=null,t.s=null,t.e=h(F,k,6,e.q,15,1),t.d=n9(e,t.e,!1,!0),t.f=h(F,k,6,t.d,15,1),n=0;n<e.q;n++)++t.f[t.e[n]];if(y=h(rt,ft,6,e.r,16,1),s=Ij(e,y),s==0)return!0;if(!oY(t,y))return!1;for(t.s=h(gPt,A0,176,s,0,1),l=0,D=0;D<e.g;D++)y[D]&&(t.s[l++]=new gj(e,D,t.g,t.e,t.f[t.e[e.D[0][D]]],t.q,A));return wu(t.s,new mw),t.i&&(t.c=new D7),TW(t),!0}function Aa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a;for(fz(),D=new jA,lK(D,e),c=D.j,L=D.d,ut(c,1),ut(L,1),R=new Ni,T=new Ni,Dn(R,c),Dn(T,L),t.c=o1,i=null,r=null,P=0,p=0,t.a=new V0,A=new JA,j=hl,C=0,S=j.length;C<S&&(b=j[C],p++!=t.b);++C)if(Ln(R,b.g),VS(R,b.i),sn(R,6,8)!=0&&(Ln(T,b.f),sn(T,2,8)!=0&&R.F.a.length<=512)){for(f=-1e4,l=N(T.F,0),v=new Wt(R.F);v.a<v.c.a.length&&(m=t1(v),!(p++>=t.b));)uf(c,A),Q=bZ(b,A,m),a=sX(b,c.f,m,L.f,l),ut(A,1),n=h(F,k,6,A.f,15,1),y=h(F,k,6,L.f,15,1),nj(D,A,L,n,y,a)&&(x=D.q-b.e,f<x&&(f=x),t.c<x&&(t.c=x,i=oK(n,y,Q,c.f),r=y,P=D.b));U=D.a<=1?\"\":iV+D.a+\")\",J(t.a,b.d+(b.b?\"_S\":b.j.length==0?\"_L\":b.n.a.length==0?\"_I\":\"_U\")+(J9(),tr(f,5))+U+$A)}return g=h(F,k,6,c.f,15,1),s=h(F,k,6,L.f,15,1),nj(D,c,L,g,s,null)&&(x=D.q,t.c<=x&&(t.c=x,i=g,r=s,P=D.b),U=D.a<=1?\"\":iV+D.a+\")\",J(t.a,(J9(),\"no rule:\"+tr(x,5)+U+$A))),t.c==o1?!1:(hZ(D,e,i,r,P),!0)}function na(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x;for(r=!1,S=On(t.d),m=0;m<S.j.a.length;m++)if(C=N(S.j,m),C.length==6&&!S.f[m]){for(y=!0,R=N(S.k,m),b=0,j=R.length;b<j;++b)if(v=R[b],dt(t.d,v)!=1||G8(t.d,v)){y=!1;break}if(y){for(i=new Nn,T=new Nn,D=R1(yt,[h0,wt],[15,6],15,[6,3],2),V5(e,C,i,T,D),Q=h(yt,wt,6,C.length,15,1),p=0,L=0;L<C.length;L++)Q[L]=-(T.a*D[L][0]+T.b*D[L][1]+T.c*D[L][2]),Q[L]<0^(L&1)==1&&++p;if(p!=0&&p!=6){for(U=0;U<C.length;U++)if(Q[U]<0^(U&1)==1^p>=3){if(c=h(F,k,6,2,15,1),c[0]=C[U==0?5:U-1],c[1]=C[U==5?0:U+1],g=e.k[C[U]],n=ti(TO(z8(e.k[C[U]],i),T)),A=.6+w.Math.asin(w.Math.abs(Q[U])/w.Math.sqrt((i.a-g.a)*(i.a-g.a)+(i.b-g.b)*(i.b-g.b)+(i.c-g.c)*(i.c-g.c))),x=Q[U]<0?A:-A,P=zN(new vu(g),i),s=!1,O(t.d,C[U])>2){for(l=0;l<O(t.d,C[U]);l++)if(f=_(t.d,C[U],l),f!=c[0]&&f!=c[1]&&fA(t.d,Ot(t.d,C[U],l))){s=!0;break}}s||rZ(e,C[U],c,P,n,x)}r=!0}}}return r&&(po(e),D5(e,t.j)),r}function Pa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(l=t.a[e],m=t.b[e],r=h(li,A0,41,4,0,1),U=0,L=0;L<t.f.length&&!(U>=4);L++)if(!(e==t.g[z(t.j,0,t.f[L])]||e==t.g[z(t.j,1,t.f[L])])){if(T=t.a[t.g[z(t.j,0,t.f[L])]],v=t.b[t.g[z(t.j,0,t.f[L])]],c=t.a[t.g[z(t.j,1,t.f[L])]],R=t.b[t.g[z(t.j,1,t.f[L])]],f=w.Math.sqrt((T-l)*(T-l)+(v-m)*(v-m)),D=w.Math.sqrt((c-l)*(c-l)+(R-m)*(R-m)),P=w.Math.sqrt((c-T)*(c-T)+(R-v)*(R-v)),f<P&&D<P){T==c?(i=w.Math.abs(l-T),i<.5&&(r[U++]=new KP(on(T,m,l,m),(.5-i)/2))):v==R?(i=w.Math.abs(m-v),i<.5&&(r[U++]=new KP(on(l,v,l,m),(.5-i)/2))):(s=(R-v)/(c-T),y=-1/s,A=v-s*T,n=m-y*l,g=(n-A)/(s-y),b=s*g+A,i=w.Math.sqrt((g-l)*(g-l)+(b-m)*(b-m)),i<.5&&(r[U++]=new KP(on(g,b,l,m),(.5-i)/2)));continue}if(f<.5){r[U++]=new KP(on(T,v,l,m),(.5-f)/2);continue}if(D<.5){r[U++]=new KP(on(c,R,l,m),(.5-D)/2);continue}}U>0&&(Q=f2(r,U),t.a[e]+=Q.b*w.Math.sin(Q.a),t.b[e]+=Q.b*w.Math.cos(Q.a))}function $j(t){var e,A,n,P,r,i,f,D,Q;for(A=B(d(F,1),k,6,15,[8,-2,8,-2,8]),Q=B(d(F,1),k,6,15,[8,-2,4,-2,12,-2,4,-2,12,-2,4,-2,12,-2,8]),_o(t.c,A,Q),t.o=Gu(t.c,1,1),JP(t.o,t),f0(t.c,oe(t.c,\"Atom Label:\"),1,1),f0(t.c,t.o,3,1),he(t.c,oe(t.c,\"(examples: 'D', 'Li', 'Cys', 'R12', 'R3@C')\"),1,3,3,3),t.p=Gu(t.c,1,1),JP(t.p,t),f0(t.c,oe(t.c,\"Atom Mass:\"),1,5),f0(t.c,t.p,3,5),he(t.c,oe(t.c,\"(empty for natural abundance)\"),1,7,3,7),t.q=Gu(t.c,1,1),JP(t.q,t),f0(t.c,oe(t.c,\"Abnormal Valence:\"),1,9),f0(t.c,t.q,3,9),he(t.c,oe(t.c,\"(empty for default valence)\"),1,11,3,11),t.a==-1?(n=(Y1(),X0)[t.k],O8(t.o,t.n==null?n:t.n+\"@\"+n),t.g!=0&&O8(t.p,\"\"+t.g),t.j!=-1&&O8(t.q,\"\"+t.j)):(n=Ci(t.e,t.a),e=_n(t.e,t.a),O8(t.o,e==null?n:e+\"@\"+n),ye(t.e,t.a)!=0&&O8(t.p,\"\"+ye(t.e,t.a)),br(t.e,t.a)!=-1&&O8(t.q,\"\"+br(t.e,t.a))),t.b=oA(t.c),r=ZV,i=0,f=r.length;i<f;++i)P=r[i],Gt(t.b,P);D=t.a==-1?t.i:FA(t.e,t.a),_t(t.b,D==32?1:D==48?2:D==16?3:0),f0(t.c,oe(t.c,\"Radical State:\"),1,13),f0(t.c,t.b,3,13)}function ra(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(s=B(d(F,2),D0,7,0,[B(d(F,1),k,6,15,[2,1,2,1]),B(d(F,1),k,6,15,[1,2,2,1]),B(d(F,1),k,6,15,[1,1,2,2]),B(d(F,1),k,6,15,[2,1,1,2]),B(d(F,1),k,6,15,[2,2,1,1]),B(d(F,1),k,6,15,[1,2,1,2])]),n=h(yt,wt,6,Mt(t.R,e),15,1),i=0;i<Mt(t.R,e);i++)n[i]=Y0(t.R,_(t.R,e,A[i]),e);if(Q=R5(t.R,e,A,n,null)<<24>>24,Q!=3)return Q;for(U=0,L=0,f=0;f<Mt(t.R,e);f++)P=Ot(t.R,e,A[f]),z(t.R,0,P)==e&&(l1(t.R,P)==129&&(L!=0&&sP(t.R,e),U=f,L=1),l1(t.R,P)==257&&(L!=0&&sP(t.R,e),U=f,L=2));if(L==0)return 3;for(r=1;r<Mt(t.R,e);r++)n[r]<n[0]&&(n[r]+=F0);if(Mt(t.R,e)==3){switch(U){case 0:(n[1]<n[2]&&n[2]-n[1]<Q1||n[1]>n[2]&&n[1]-n[2]>Q1)&&(L=3-L);break;case 1:n[2]-n[0]>Q1&&(L=3-L);break;case 2:n[1]-n[0]<Q1&&(L=3-L)}return L==1?2:1}return D=0,n[1]<=n[2]&&n[2]<=n[3]?D=0:n[1]<=n[3]&&n[3]<=n[2]?D=1:n[2]<=n[1]&&n[1]<=n[3]?D=2:n[2]<=n[3]&&n[3]<=n[1]?D=3:n[3]<=n[1]&&n[1]<=n[2]?D=4:n[3]<=n[2]&&n[2]<=n[1]&&(D=5),s[D][U]==L?2:1}function ia(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(t.g.a.length==0||t.f.a.length==0||(s=ms(t),s==0))return null;for(L=h(F,D0,7,t.f.a.length,0,2),r=0;r<t.f.a.length;r++)for(T=N(t.f,r),ut(T,15),L[r]=h(F,k,6,s+1,15,1),co(L[r],-1),e=0;e<T.q;e++){if(U=w.Math.abs(T.w[e]),U!=0&&L[r][U]!=-1)return null;L[r][U]=e}for(i=h(rt,ft,6,s+1,16,1),P=0;P<t.g.a.length;P++)for(v=N(t.g,P),ut(v,15),g=0;g<v.q;g++)if(U=w.Math.abs(v.w[g]),U!=0&&!i[U]){for(f=0;f<t.f.a.length;f++)if(y=L[f][U],y!=-1){if(T=N(t.f,f),v.j[g]!=T.j[y]){i[U]=!0;break}if((v.u[g]&3)!=(T.u[y]&3)){i[U]=!0;break}for(D=0;D<v.j[g];D++)if(A=C1(v,v.i[g][D]),A==0)i[U]=!0;else{for(m=v.k[g][D],n=!1,Q=0;Q<T.j[y];Q++){if(c=C1(T,T.i[y][Q]),c==0){i[U]=!0;break}if(c==A){if(n=!0,l=T.k[y][Q],(m<v.g&&(S8(v.p,m)||v.H[m]==8))^(l<T.g&&(S8(T.p,l)||T.H[l]==8))||!(m<v.g&&(S8(v.p,m)||v.H[m]==8))&&(dt(v,m)!=dt(T,l)||(v.F[m]&3)!=(T.F[l]&3))){i[U]=!0,i[A]=!0;break}break}}n||(i[U]=!0)}}}return i}function fa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(this.r=!0,this.b=!1,this.t=!0,this.a=!1,this.i=It,this.c=t,this.o=h(o9,or,26,t.g.a.length,0,1),n=0;n<t.g.a.length;n++)je(N(t.g,n),!0),ut(N(t.g,n),15);for(P=0;P<t.f.a.length;P++)ut(N(t.f,P),15);for(S_(this,t),this.k=h(F,D0,7,t.g.a.length,0,2),r=0;r<t.g.a.length;r++)for(L=N(t.g,r),this.k[r]=h(F,k,6,L.f,15,1),i=0;i<L.f;i++)if(Q=w.Math.abs(L.w[i]),Q!=0)for(f=0;f<t.f.a.length;f++)for(U=N(t.f,f),D=0;D<U.f;D++)w.Math.abs(U.w[D])==Q&&(e=(y=Cn(L,i),y+WA(L,i,y,L.C[i])-G1(L,i)-(s=Cn(U,D),s+WA(U,D,s,U.C[D])-G1(U,D))),this.k[r][i]=w.Math.max(e,0));for(this.f=h(rt,h0,12,t.f.a.length,0,2),A=0;A<t.f.a.length;A++)for(U=N(t.f,A),this.f[A]=h(rt,ft,6,U.f,16,1),i=0;i<U.f;i++)if(Q=w.Math.abs(U.w[i]),Q!=0)for(f=0;f<t.g.a.length;f++)for(L=N(t.g,f),D=0;D<L.f;D++)w.Math.abs(L.w[D])==Q&&(hs(Ab(U,i),Ab(L,D))!=0||hs(Ok(U,i),Ok(L,D))!=0)&&(this.f[A][i]=!0);this.s=new Ni,this.g=h(v4,h0,20,this.o.length,0,1)}function Da(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(g=new Lo(t.e,t.c),T=ah(g,t.f,t.d),t.a.a.length==0)return Ks(g,T);for(m=1,R=new Wt(t.a);R.a<R.c.a.length;)v=t1(R),m*=pG(v);if(m>4e6)return x1(),-m;for(e=0,i=h(F,k,6,t.a.a.length,15,1),y=h(F,k,6,t.a.a.length,15,1),D=0;D<t.a.a.length;D++)v=N(t.a,D),y[D]=(v.b=new f1,j=h(F,k,6,v.a,15,1),C=h(rt,ft,6,w.Math.max(v.d.length,v.c.length),16,1),ek(v,0,C,j),v.b.a.length),i[D]=e,e+=v.a;for(r=xy,P=null,n=null,l=h(F,k,6,t.a.a.length,15,1),s=t.a.a.length!=0;s;){if(b=!1,t.i!=null){for(Q=0;Q<t.a.a.length;Q++)if(VK(N(t.a,Q),l[Q],t.i)){b=!0;break}}if(!b){for(Q=0;Q<t.a.a.length;Q++)iK(N(t.a,Q),l[Q],T);if(c=Ks(g,T),r<c)for(r=c,P=h(F,k,6,e,15,1),n=h(F,k,6,e,15,1),A=0,U=0;U<t.a.a.length;U++)v=N(t.a,U),Az(v,l[U],P,A),ez(v,l[U],n,A),A+=v.a}for(s=!1,f=0;f<l.length;f++){if(++l[f],l[f]<y[f]){s=!0;break}l[f]=0}}if(r!=xy)for(L=t.b,f=0;f<e;f++)++L,t.f[P[f]]=L,t.d[n[f]]=L;return r}function aj(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(s=new f1,g=new f1,n=new f1,r=new Wt(t.d);r.a<r.c.a.length;){for(P=t1(r),i=0,n.a.length=0,f=0;f<P.e.length;f++)e=P.e[f],A=t.i[e],A!=0&&(mt(n,new W3(P,f,A)),i+=A);if(i!=0)for(j3(n,new j8),Q=new Wt(n);Q.a<Q.c.a.length&&(D=t1(Q),!(i*D.b>0&&(A=w.Math.abs(i)>=w.Math.abs(D.b)?D.b:i,i-=A,mt(A<0?s:g,new W3(P,D.a,A)),i==0))););}if(s.a.length==0||g.a.length==0)return null;for(j3(g,new Xe),j3(s,new Se),T=new Wt(g);T.a<T.c.a.length;)for(y=t1(T),L=new Wt(s);L.a<L.c.a.length;)if(U=t1(L),y.b==-U.b)return t.i[oD(y.c,y.a)]-=y.b,t.i[oD(U.c,U.a)]-=U.b,new HQ(y.c,U.c,y.a,U.a);for(c=new Wt(g);c.a<c.c.a.length;)for(y=t1(c),L=new Wt(s);L.a<L.c.a.length;)if(U=t1(L),y.b>-U.b)return t.i[oD(y.c,y.a)]+=U.b,t.i[oD(U.c,U.a)]-=U.b,new HQ(y.c,U.c,y.a,U.a);for(l=new Wt(g);l.a<l.c.a.length;)for(y=t1(l),L=new Wt(s);L.a<L.c.a.length;)if(U=t1(L),y.b<-U.b)return t.i[oD(y.c,y.a)]-=y.b,t.i[oD(U.c,U.a)]+=y.b,new HQ(y.c,U.c,y.a,U.a);return null}function sn(t,e,A){var n,P,r,i,f,D,Q;if(t.P=!1,t.F=new f1,t.a=new f1,bi(t.O.a),!t.H||!t.g||t.g.f-t.p>t.H.f||t.g.g-t.q>t.H.g||t.g.f==0)return 0;for(e==6&&(t.N=63),hO(t,A),n=h(rt,ft,6,t.H.f,16,1),t.G=h(F,k,6,t.g.f,15,1),co(t.G,-1),f=h(F,k,6,t.A,15,1),V9(f,f.length,-1),r=0;!t.P;){if(t.w!=0){if(Q=t.u[r]==-1?t.H.f:De(t.H,t.G[t.u[r]]),++f[r],f[r]==Q){if(f[r]=-1,r==0)break;--r,t.t[r]||(n[t.G[t.s[r]]]=!1);continue}if(t.u[r]==-1)n[f[r]]||Py(t,f[r],t.s[r])&&(t.G[t.s[r]]=f[r],n[f[r]]=!0,++r);else{if(_(t.H,t.G[t.u[r]],f[r])>=t.H.f)continue;P=_(t.H,t.G[t.u[r]],f[r]),t.t[r]?P==t.G[t.s[r]]&&Ys(t,Ot(t.H,t.G[t.u[r]],f[r]),t.v[r])&&++r:n[P]||Py(t,P,t.s[r])&&Ys(t,Ot(t.H,t.G[t.u[r]],f[r]),t.v[r])&&(n[P]=!0,t.G[t.s[r]]=P,++r)}}if(r==t.w){if(zj(t,-1)&&pR(t,-1)&&TR(t,n,-1)){for(D=!1,i=0;i<t.d;i++)if(b$(t,n,f,i)){D=!0;break}if(e==1&&!D||!D&&(s$(t,e),e==2))return 1}if(r==0)break;--r,t.t[r]||(n[t.G[t.s[r]]]=!1)}}return UZ(t),t.F.a.length}function ua(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st;for($=On(t.e),et=N($.k,e).length,tt=N($.j,e),W=N($.k,e),p=!0,g=1;g<et;g++)if(B9(t.b,W[g])!=B9(t.b,W[0])){p=!1;break}if(p){for(r=(et-2)*j2/et,m=0;m<et;m++)Ih(t,tt[m],W[m],W[m==0?et-1:m-1],r);return}for(E=h(Ee,PA,6,et,15,1),P=0,v=0;v<et;v++)E[v]=a1(t.e,tt[v])==0?1.9106119386631804:a1(t.e,tt[v])==1?2.094499897810209:j2,P+=E[v];for(n=((et-2)*j2-P)/et,R=0;R<et;R++)E[R]+=n;for(U=h(Ee,PA,6,et,15,1),b=1;b<et;b++)U[b]=U[b-1]+j2-E[b];for(f=h(Ee,PA,6,et,15,1),i=0;i<100;i++){for(lt=0,st=0,m=0;m<et;m++)lt+=B9(t.b,W[m])*w.Math.sin(U[m]),st+=B9(t.b,W[m])*w.Math.cos(U[m]);for(y=kA(0,0,lt,st),T=w.Math.sqrt(lt*lt+st*st),a=-1,x=0,j=0;j<et;j++)C=j==0?et-1:j-1,S=j+1==et?0:j+1,D=Je(U[j],U[C]),Q=Je(U[S],U[j]),X=Je(E[j],E[S]),f[j]=2*D-2*Q+2*X,l=w.Math.cos(U[j]-I6-y),s=T*l-Yp*f[j],w.Math.abs(s)>w.Math.abs(x)&&(x=s,a=j);L=w.Math.exp(-5*i/100),U[a]+=L*x}for(c=0;c<et;c++)C=c==0?et-1:c-1,A=U[C]+j2-U[c],A>F0&&(A-=F0),Ih(t,tt[c],W[C],W[c],A)}function tp(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(t.j=h(F,k,6,t.q,15,1),t.e=h(F,k,6,t.q,15,1),t.i=h(F,D0,7,t.q,0,2),t.k=h(F,D0,7,t.q,0,2),t.n=h(F,D0,7,t.q,0,2),t.o=h(F,k,6,t.f,15,1),U=h(F,k,6,t.q,15,1),i=0;i<t.r;i++)++U[t.D[0][i]],++U[t.D[1][i]];for(n=0;n<t.q;n++)t.i[n]=h(F,k,6,U[n],15,1),t.k[n]=h(F,k,6,U[n],15,1),t.n[n]=h(F,k,6,U[n],15,1);for(s=!1,Q=0;Q<t.g;Q++){if(y=dt(t,Q),y==0){s=!0;continue}for(L=0;L<2;L++)A=t.D[L][Q],e=t.e[A],t.n[A][e]=y,t.i[A][e]=t.D[1-L][Q],t.k[A][e]=Q,++t.e[A],++t.j[A],A<t.f&&y>1&&(t.o[A]+=y-1)}for(D=0;D<t.g;D++)if(t.H[D]==8)for(L=0;L<2;L++)A=t.D[L][D],A<t.f&&t.o[A]==0&&(t.o[A]=1);for(f=t.g;f<t.r;f++){if(y=dt(t,f),y==0){s=!0;continue}for(L=0;L<2;L++)A=t.D[L][f],e=t.e[A],t.n[A][e]=y,t.i[A][e]=t.D[1-L][f],t.k[A][e]=f,++t.e[A],t.D[1-L][f]<t.f&&++t.j[A]}if(s){for(e=h(F,k,6,t.q,15,1),P=0;P<t.q;P++)e[P]=t.e[P];for(r=0;r<t.r;r++)if(y=dt(t,r),y==0)for(L=0;L<2;L++)A=t.D[L][r],t.n[A][e[A]]=y,t.i[A][e[A]]=t.D[1-L][r],t.k[A][e[A]]=r,++e[A]}}function Qa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;t.b|=e;try{for(l=r2(\"torsionID.txt\"),n=(e&1)==0?null:r2(\"torsionAngle.txt\"),s=(e&1)==0?null:r2(\"torsionRange.txt\"),f=(e&1)==0?null:r2(\"torsionFrequency.txt\"),r=(e&2)==0?null:r2(\"torsionBins.txt\"),T=K1(l);T!=null;){if(y=le(t.c,T),y||(y=new jw(T.endsWith(\"<\")||T.endsWith(\">\")?0:T.endsWith(\"-\")||T.endsWith(\"+\")?1:T.endsWith(\"=\")?3:2),ze(t.c,T,y)),n)for(A=o8(K1(n),\",\"),y.a=h(Yt,at,6,A.length,15,1),Q=0;Q<A.length;Q++)y.a[Q]=c1(A[Q],yy,32767)<<16>>16;if(s)for(L=o8(K1(s),\",\"),y.d=R1(Yt,[te,at],[16,6],15,[L.length,2],2),Q=0;Q<L.length;Q++)U=L[Q].indexOf(k0(45),1),y.d[Q][0]=c1(UA(L[Q],0,U),yy,32767)<<16>>16,y.d[Q][1]=c1(HD(L[Q],U+1),yy,32767)<<16>>16;if(f)for(D=o8(K1(f),\",\"),y.c=h(Yt,at,6,D.length,15,1),Q=0;Q<D.length;Q++)y.c[Q]=c1(D[Q],-128,127)<<24>>24;if(r)for(P=o8(K1(r),\",\"),y.b=h(q,I,6,P.length,15,1),Q=0;Q<P.length;Q++)y.b[Q]=c1(P[Q],-128,127)<<24>>24;T=K1(l)}}catch(c){if(c=t0(c),Zt(c,75))i=c,Z9(i,(x1(),gi),\"\");else throw At(c)}}function Ui(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;if(t.R.f!=0&&!t.G){for(t.I=0,b=0,A=1;A<t.R.f;A++)t.f[A]>t.f[b]&&(b=A);for(n=h(rt,ft,6,t.R.f,16,1),i=h(rt,ft,6,t.R.g,16,1),t.H=h(F,k,6,t.R.f,15,1),t.B=h(F,k,6,t.R.f,15,1),t.F=h(F,k,6,t.R.f,15,1),t.C=h(F,k,6,t.R.g,15,1),t.B[0]=b,t.H[b]=0,n[b]=!0,P=1,D=0,Q=1,U=0;D<t.R.f;)if(D<Q){for(;;){for(l=0,T=0,s=-1,e=t.B[D],c=0;c<De(t.R,e);c++)(c<O(t.R,e)||c>=Mt(t.R,e))&&(f=_(t.R,e,c),!n[f]&&t.f[f]>s&&(l=f,T=Ot(t.R,e,c),s=t.f[f]));if(s==-1)break;t.H[l]=Q,t.F[Q]=D,t.B[Q++]=l,t.C[U++]=T,n[l]=!0,i[T]=!0}++D}else{for(y=0,s=-1,e=0;e<t.R.f;e++)!n[e]&&t.f[e]>s&&(y=e,s=t.f[e]);++P,t.H[y]=Q,t.F[Q]=-1,t.B[Q++]=y,n[y]=!0}for(t.D=h(F,k,6,2*(t.R.g-U),15,1);;){for(m=t.R.M,v=t.R.M,R=-1,r=0;r<t.R.g;r++)i[r]||(t.H[z(t.R,0,r)]<t.H[z(t.R,1,r)]?(g=t.H[z(t.R,0,r)],L=t.H[z(t.R,1,r)]):(g=t.H[z(t.R,1,r)],L=t.H[z(t.R,0,r)]),(g<m||g==m&&L<v)&&(m=g,v=L,R=r));if(R==-1)break;i[R]=!0,t.C[U++]=R,t.D[2*t.I]=m,t.D[2*t.I+1]=v,++t.I}t.G=!0}}function ep(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j;if(t==null||t.length==0||(j=t.indexOf(k0(33)),j==-1))return null;for(l=!1,L=j!=0?0:t.length==1?-1:1,v=0,D=0,i?nv(i):i=new P8;L!=-1;)L>j&&(l=!0),Q=t.indexOf(k0(32),L),j>L&&(Q>j||Q==-1)&&(Q=j),U=Q==-1?(Xt(L,t.length+1),t.substr(L)):(pt(L,Q,t.length),t.substr(L,Q-L)),L=Q==-1||Q==t.length-1?-1:Q+1,m=null,e!=null&&e.length!=0&&(Q=e.indexOf(k0(32),v),Q==-1?m=(Xt(v,e.length+1),e.substr(v)):(m=(pt(v,Q,e.length),e.substr(v,Q-v)),v=Q+1)),f=null,A!=null&&A.length!=0&&(Q=A.indexOf(k0(32),D),Q==-1?f=(Xt(D,A.length+1),A.substr(D)):(f=(pt(D,Q,A.length),A.substr(D,Q-D)),D=Q+1)),b=new GA(r),R=U==null?null:Ls(b,KA((c=U,c0(),c)),f==null?null:KA((g=f,g)),0),m!=null&&RY(b,KA((T=m,c0(),T))),l?(mt(i.f,R),i.d=-1):(mt(i.g,R),i.d=-1);if(n!=null&&n.length!=0&&qS(i,new ak(n)),P!=null&&P.length!=0){for(b=new GA(r),s=0,y=P.indexOf(k0(43));y!=-1;)al(i,_i(b,(pt(s,y,P.length),P.substr(s,y-s)))),s=y+1,y=P.indexOf(k0(43),s);al(i,_i(b,(Xt(s,P.length+1),P.substr(s))))}return i}function Ua(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S;for(Q=h(F,k,6,t.j.f,15,1),g=h(F,k,6,t.d.f,15,1),U=h(F,k,6,t.j.f,15,1),v=h(F,k,6,t.d.f,15,1),Q[0]=e.b,U[e.b]=e.b,g[0]=e.a,v[e.a]=e.a,t.n[e.b]==0&&(++t.c,t.n[e.b]=t.c,t.f[e.a]=t.c),f=0,L=0;f<=L;){for(j=Q[f],R=g[f],c=R1(F,[D0,k],[7,6],15,[O(t.j,j),O(t.d,R)],2),y=0;y<O(t.j,j);y++)if(b=_(t.j,j,y),t.n[b]==0)for(r=Bv(t.j,Ot(t.j,j,y)),T=0;T<O(t.d,R);T++)m=_(t.d,R,T),t.f[m]==0&&K(t.j,b)==K(t.d,m)&&(i=Ot(t.d,R,T),S=UX(t,j,b,R,m),r==Bv(t.d,i)||S!=0?M_(t,j,b,R,m)&&(D=cb(t,j,b,R,m),C=w.Math.max(S,D),C!=0&&(l=$Z(t,U[j],j,b,v[R],R,m),fW(t,j,b,R,m,C,l)&&(c[y][T]=C,l&&(c[y][T]+=64),Id(U[j],j,b,t.o)==Id(v[R],R,m,t.g)&&(c[y][T]+=128),Jv(t.j,b)==Jv(t.d,m)&&(c[y][T]+=1)))):cb(t,j,b,R,m)==I1&&(c[y][T]=768));for(;;){for(A=0,P=-1,n=-1,s=0;s<c.length;s++)if(b=_(t.j,j,s),t.n[b]==0)for(T=0;T<c[s].length;T++)m=_(t.d,R,T),t.f[m]==0&&A<c[s][T]&&(A=c[s][T],P=b,n=m);if(A==0)break;++L,Q[L]=P,U[P]=Q[f],g[L]=n,v[n]=g[f],++t.c,t.n[P]=t.c,t.f[n]=t.c}++f}return L+1}function Ap(){Ap=B1,gU=B(d(Yt,1),at,6,15,[-1,-1,-1,0,0,1,2,3,4,5,-1,0,0,0,6,7,8,9,-1,0,0,10,10,10,10,10,10,10,10,10,10,1,11,11,12,13,-1,0,0,10,10,10,10,10,10,10,10,10,10,0,0,0,11,14,-1,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,10,10,10,10,10,10,10,10,1,1,1,1,-1,-1,-1,-1,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),d4=B(d(Yt,1),at,6,15,[-1,-1,-1,0,0,0,2,5,5,5,-1,0,0,0,0,9,9,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])}function oa(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;P=e.a,y=e.g,Q=gt(V(o0(t.k,P),1),0),r=MA(t.k,P),L=r!=null?oX(t,P,r,n):Q?\"*\":Ci(t.k,P),!Q&&r==null&&vn(t.k,P)&&(t.j&4)==0&&(a1(t.k,P)!=0||br(t.k,P)==-1&&FA(t.k,P)==0)&&(L=L.toLowerCase()),e.f&&(A.a+=\"(\"),y!=-1&&Gj(t,D1(t.k,e.a,e.g),e.g,A),i=p1(t.k,P),i==0&&(t.j&1)!=0&&(f=V(o0(t.k,P),i9),G(f,Mf)==0?i=-1:G(f,Cf)==0&&(i=1)),U=ye(t.k,P),s=(t.j&2)!=0?C1(t.k,P):0,l=(t.j&1)!=0?Ea(t,P,n):null,g=!Q&&!DN(K(t.k,P))||r!=null||(d0(t.k,P)==1||d0(t.k,P)==2)&&(c=Ae(t.k,P)-1,!(c!=-1&&t.i[c][VA(t.k,P)]<=1))&&(K(t.k,P)!=7||p1(t.k,P)>0)||vn(t.k,P)&&a1(t.k,P)==0&&(t.j&4)==0||i!=0||U!=0||s!=0||br(t.k,P)!=-1||FA(t.k,P)!=0||l!=null,g&&(A.a+=\"[\"),U!=0&&(A.a+=U),A.a+=\"\"+L,(d0(t.k,P)==1||d0(t.k,P)==2)&&(T=Ae(t.k,P)-1,!(T!=-1&&t.i[T][VA(t.k,P)]<=1))&&(K(t.k,P)!=7||p1(t.k,P)>0)&&J(A,U$(t,P,y)),(t.j&1)==0&&g&&(D=Td(t.k,P),D==1?A.a+=\"H\":D>1&&(A.a+=\"H\"+D)),i!=0&&(A.a+=String.fromCharCode(i>0?43:45),w.Math.abs(i)>1&&g3(A,w.Math.abs(i))),l!=null&&(A.a+=\"\"+l),s!=0&&(A.a+=\":\",A.a+=s),g&&(A.a+=\"]\"),$Y(t,e,A),e.e&&(A.a+=\")\")}function La(t,e,A,n){var P,r,i,f,D,Q;if(i=1,G(t,0)==0)return n||A==1?\"0\":\"0.\"+CP(A-1);if(G(t,0)!=0){for(;P0(Y9(t,10),0);)t=Mn(t,10),++e;for(i=0,f=t;G(f,0)!=0;f=Mn(f,10))++i}return r=new V0,G(t,0)<0&&(r.a+=\"-\"),D=w.Math.max(0,A-i),P=\"\"+Te(G(t,0)<0?p0(t):t),e==0?(r.a+=P,!n&&D!=0&&(r.a+=\".\",J(r,CP(D)))):e>0?(Q=n?e>4:e-D>4,Q?(i==1?(r.a+=P,A>1&&(r.a+=\".\",n?r.a+=\"0\":J(r,CP(D)))):(J(r,(pt(0,1,P.length),P.substr(0,1))),r.a+=\".\",J(r,(Xt(1,P.length+1),P.substr(1))),!n&&D!=0&&J(r,CP(D))),r.a+=\"e\",r.a+=\"\"+(e+i-1)):(r.a+=P,J(r,CP(e)),!n&&D>e&&(r.a+=\".\",J(r,CP(D-e))))):-e<i?(J(r,(pt(0,i+e,P.length),P.substr(0,i+e))),r.a+=\".\",J(r,(Xt(i+e,P.length+1),P.substr(i+e))),!n&&D!=0&&J(r,CP(D))):-e==i?(r.a+=\"0.\",r.a+=P,!n&&D!=0&&J(r,CP(D))):e+i<-2?(i==1?(r.a+=P,A>1&&(r.a+=\".\",n?r.a+=\"0\":J(r,CP(D)))):(Oe(r,(Xt(0,P.length),P.charCodeAt(0))),r.a+=\".\",J(r,(Xt(1,P.length+1),P.substr(1))),!n&&D!=0&&J(r,CP(D))),r.a+=\"e-\",r.a+=\"\"+(1-e-i)):(r.a+=\"0.\",J(r,CP(-e-i)),r.a+=P,!n&&D!=0&&J(r,CP(D))),r.a}function sa(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(r=ZA(t.V,e,A),i=df(t.V,e,A),t.w==2){if(t.V.K){if(r!=-1)nF(t,r);else if(i!=-1)Qv(t,i);else if(t.v){if(!t.Z){for(s=0;s<t.V.q;s++)dP(t.V,s,!1);for(P=new Wt(t.I);P.a<P.c.a.length;)n=t1(P),n.g=!1}t.v.g=!0,t.eb=w.Math.max(t.eb,1),n1(t.k)}}else if(g=-1,r!=-1?g=r:i!=-1&&(g=z(t.V,0,i)),g!=-1||t.v){if(!t.Z){for(s=0;s<t.V.q;s++)dP(t.V,s,!1);if(t.I)for(Q=new Wt(t.I);Q.a<Q.c.a.length;)D=t1(Q),D.g=!1}if(g!=-1)if((t.U&1)!=0)for(U=t.M[g],s=0;s<t.V.q;s++)t.M[s]==U&&dP(t.V,s,!0);else for(L=_m(t.V,g,!1),s=0;s<L.length;s++)dP(t.V,L[s],!0);else t.v.g=!0;t.eb=w.Math.max(t.eb,1),n1(t.k)}}else if(t.w==18&&(U=-2,(t.U&1)!=0&&(U=Jz(t)),U!=-1)){for(c=It,T=o1,y=0;y<t.V.q;y++)(U==-2||t.M[y]==U)&&(c>kt(t.V,y)&&(c=kt(t.V,y)),T<kt(t.V,y)&&(T=kt(t.V,y)));if(T>c){for(f=(T+c)/2,l=0;l<t.V.q;l++)(U==-2||t.M[l]==U)&&Be(t.V,l,2*f-kt(t.V,l));for(s=0;s<t.V.r;s++)if(U==-2||t.M[z(t.V,0,s)]==U)switch(l1(t.V,s)){case 257:w0(t.V,s,129);break;case 129:w0(t.V,s,257)}}t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))}}function np(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(U=t.Q,L=t.F,(t.G&Sn)!=0&&(t.Q=-6,t.F=Dy,W1(t,1)),t.o=h(X4,A0,56,t.L.q,0,1),D=0;D<t.L.r;D++)(l1(t.L,D)==2||l1(t.L,D)==386||l1(t.L,D)==8)&&Lp(t,D);for(Q=0;Q<t.L.r;Q++)l1(t.L,Q)!=2&&l1(t.L,Q)!=386&&l1(t.L,Q)!=8&&Lp(t,Q);if((t.G&64)==0)for(f=0;f<t.L.r;f++)gu(t.L,f)!=0&&(P=null,gu(t.L,f)==1||gu(t.L,f)==2?(dt(t.L,f)==2||cP(t.L,f)==0||e[cP(t.L,f)][$i(t.L,f)]>1)&&(gu(t.L,f)==1?P=dt(t.L,f)==2?\"E\":wo(t.L,f)?\"p\":\"P\":P=dt(t.L,f)==2?\"Z\":wo(t.L,f)?\"m\":\"M\"):P=\"?\",P!=null&&(t.Cb((t.X*2+1)/3|0),W1(t,vr(t.L,f)?-3:t.L.O==1||(t.G&C0)!=0?t.Q:448),A=z(t.L,0,f),n=z(t.L,1,f),y=(Z1(t.R,kt(t.L,A))+Z1(t.R,kt(t.L,n)))/2,l=(X1(t.R,jt(t.L,A))+X1(t.R,jt(t.L,n)))/2,r=(Z1(t.R,kt(t.L,A))-Z1(t.R,kt(t.L,n)))/3,i=(X1(t.R,jt(t.L,A))-X1(t.R,jt(t.L,n)))/3,HP(t,y+i,l-r,P,!0),W1(t,t.Q),t.Cb(t.X)));if((t.G&4)!=0){for(t.Cb((t.X*2+1)/3|0),W1(t,384),f=0;f<t.L.r;f++)A=z(t.L,0,f),n=z(t.L,1,f),s=G8(t.L,f)?\"d\":_e(t.L,f)?\"a\":\"\",y=(Z1(t.R,kt(t.L,A))+Z1(t.R,kt(t.L,n)))/2,l=(X1(t.R,jt(t.L,A))+X1(t.R,jt(t.L,n)))/2,HP(t,y,l,s+(\"\"+f),!0);W1(t,t.Q),t.Cb(t.X)}(t.G&Sn)!=0&&(t.Q=U,t.F=L)}function Pp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j;for(ut(t,1),A&&(e=!0),D=0;D<t.r;D++)if(Q=dt(t,D),Q==1||Q==2){if(t.s[t.D[0][D]]>0&&t.s[t.D[1][D]]<0)r=t.D[0][D],i=t.D[1][D];else if(t.s[t.D[0][D]]<0&&t.s[t.D[1][D]]>0)r=t.D[1][D],i=t.D[0][D];else continue;if(_0(t,r)||_0(t,i)||t.C[r]<9&&G1(t,r)>3||t.C[i]<9&&G1(t,i)>3)continue;L=xt(t,r)!=0,t.s[r]-=1,t.s[i]+=1,L||(m=t.H[D],Q==1?t.H[D]=2:t.H[D]=4,(m==129||m==257)&&(j=t.D[0][D],g=Ns(t,j,!1),t.D[0][g]!=j&&(t.D[1][g]=t.D[0][g],t.D[0][g]=j))),t.T=0}for(v=0,T=0,y=0,P=0;P<t.q;P++)v+=t.s[P],t.s[P]<0&&!_v(t,P)&&(++T,tA(t,P)&&(y-=t.s[P]));if(!e&&v!=0)throw At(new V1(\"molecule's overall charges are not balanced\"));for(ut(t,1),R=0,b=A?v+y:y,f=0;f<t.q;f++)t.s[f]>0&&!xO(t,f)&&tA(t,f)&&(U=w.Math.min(xt(t,f),t.s[f]),U!=0&&b>=U&&(v-=U,R-=U,b-=U,t.s[f]-=U,t.T&=1));if(c=A?v:R,c<0){for(l=h(F,k,6,T,15,1),T=0,r=0;r<t.q;r++)t.s[r]<0&&!_v(t,r)&&(l[T++]=(t.C[r]<<22)+r);for(l.sort(Fe(u0.prototype.gd,u0,[])),s=l.length-1;c<0&&s>=l.length-T;s--)n=l[s]&x0,tA(t,n)&&(U=w.Math.min(-c,-t.s[n]),v+=U,c+=U,t.s[n]+=U,t.T&=1)}return v}function rp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(U=h(it,Dt,2,t.g.a.length+t.f.a.length,6,1),l=h(it,Dt,2,t.g.a.length+t.f.a.length,6,1),r=h(it,Dt,2,t.g.a.length+t.f.a.length,6,1),D=0;D<t.g.a.length+t.f.a.length;D++){if(g=D<t.g.a.length?N(t.g,D):N(t.f,D-t.g.a.length),g.K&&D<t.g.a.length)for(n=0;n<g.q;n++)T1(g,n,c8,!1);if(P=new BA(g),U[D]=me(P),U[D]==null)return null;l[D]=Jd(P),r[D]=Iu(P,e)}for(L=new V0,i=new V0,T=new V0,Q=0;Q<t.g.a.length;Q++){if(s=Q,A)for(c=\"\",s=-1,y=0;y<t.g.a.length;y++)Kr(c,U[y])<0&&(c=U[y],s=y);Q>0&&(L.a+=\" \",T.a+=\" \",i.a+=\" \"),L.a+=\"\"+U[s],T.a+=\"\"+l[s],i.a+=\"\"+r[s],U[s]=\"\"}for(L.a+=\"!\",t.f.a.length!=0&&t.g.a.length!=0&&(T.a+=\" \",i.a+=\" \"),f=t.g.a.length;f<t.g.a.length+t.f.a.length;f++){if(s=f,A)for(c=\"\",s=-1,y=t.g.a.length;y<t.g.a.length+t.f.a.length;y++)Kr(c,U[y])<0&&(c=U[y],s=y);f>t.g.a.length&&(L.a+=\" \",T.a+=\" \",i.a+=\" \"),L.a+=\"\"+U[s],T.a+=\"\"+l[s],i.a+=\"\"+r[s],U[s]=\"\"}return m=h(it,Dt,2,5,6,1),m[0]=L.a,T.a.length>t.g.a.length+t.f.a.length-1&&(m[1]=T.a),i.a.length>t.g.a.length+t.f.a.length-1&&(m[2]=i.a),t.b&&(m[3]=Sm(t.b)),t.a.a.length!=0&&(m[4]=yY(t,e)),m}function ya(t,e){var A,n;return n={},A=t.B[e],n.aromatic=S1(V(A,2),0),n.notAromatic=S1(V(A,4),0),n.notChain=S1(V(A,8),0),n.not2RingBonds=S1(V(A,16),0),n.not3RingBonds=S1(V(A,32),0),n.not4RingBonds=S1(V(A,64),0),n.noMoreNeighbours=S1(V(A,I1),0),n.moreNeighbours=S1(V(A,C0),0),n.matchStereo=S1(V(A,ge),0),n.not0PiElectrons=S1(V(A,Sn),0),n.not1PiElectron=S1(V(A,s8),0),n.not2PiElectrons=S1(V(A,Q0),0),n.not0Hydrogen=S1(V(A,128),0),n.not1Hydrogen=S1(V(A,256),0),n.not2Hydrogen=S1(V(A,512),0),n.not3Hydrogen=S1(V(A,re),0),n.not0Neighbours=S1(V(A,I0),0),n.not1Neighbour=S1(V(A,T8),0),n.not2Neighbours=S1(V(A,l8),0),n.not3Neighbours=S1(V(A,h8),0),n.not4Neighbours=S1(V(A,qA),0),n.notChargeNeg=S1(V(A,nU),0),n.notCharge0=S1(V(A,Tn),0),n.noChargePos=S1(V(A,134217728),0),n.ringSize0=S1(V(A,L8),0),n.ringSize3=S1(V(A,ir),0),n.ringSize4=S1(V(A,fr),0),n.ringSize5=S1(V(A,Dr),0),n.ringSize6=S1(V(A,ur),0),n.ringSize7=S1(V(A,Qr),0),n.ringSizeLarge=S1(V(A,pf),0),n}function la(t,e){i8();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(g=h(rt,ft,6,e.g,16,1),b=(ut(e,7),e.p),c=h(rt,ft,6,b.j.a.length,16,1),Zs(b,c,h(rt,ft,6,b.j.a.length,16,1),h(F,k,6,b.j.a.length,15,1),!0),R=0;R<b.j.a.length;R++)if(c[R])for(T=0;T<N(b.k,R).length;T++)g[N(b.k,R)[T]]=!0;for(P=h(F,k,6,2,15,1),i=0;i<e.g;i++)if(D=e.D[0][i],Q=e.D[1][i],P[0]=e.C[D],P[1]=e.C[Q],g[i]=g[i]|(i<e.g&&Re(e.p,i)||dt(e,i)==2&&P[0]<=8&&P[1]<=8&&e.o[D]==1&&e.o[Q]==1&&e.e[D]>1&&e.e[Q]>1),!g[i]&&dt(e,i)==1){for(l=0;l<2;l++)if((P[l]==7||P[l]==8)&&P[1-l]==6){for(U=e.D[1-l][i],v=0;v<e.j[U];v++)if(e.n[U][v]==2&&(L=e.i[U][v],e.C[L]==7||e.C[L]==8||e.C[L]==16)){g[i]=!0;break}}}for(m=h(rt,ft,6,e.f,16,1),f=0;f<e.g;f++)g[f]&&(m[e.D[0][f]]=!0,m[e.D[1][f]]=!0);for(y=h(F,k,6,e.q,15,1),r=0;r<e.g;r++)if(g[r]){for(y[0]=e.D[0][r],s=xZ(y,g,e),n=h(F,k,6,s,15,1),l=0;l<s;l++)n[l]=y[l];mt(t,new zh(n,e))}for(A=0;A<e.f;A++)if(!m[A]&&(e.C[A]==5&&e.s[A]==0&&e.e[A]<=3||e.C[A]<=8&&e.o[A]==1&&e.e[A]>1||EP(e,A,!0)&&e.o[A]!=2&&e.e[A]>1)){for(n=h(F,k,6,1+e.e[A],15,1),l=0;l<e.e[A];l++)n[l]=e.i[A][l];n[e.e[A]]=A,mt(t,new zh(n,e))}}function Ta(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E;for(v=h(rt,ft,6,t.j.f,16,1),p=0;p<e.j.a.length;p++)if(x=N(e.k,p).length,(x==3||x==5||x==6||x==7)&&t.i[p])for(n=N(e.j,p),P=0,r=n.length;P<r;++P)A=n[P],v[A]=!0;for(s=h(F,k,6,t.j.f,15,1),l=h(rt,ft,6,t.j.f,16,1),Q=0;Q<t.j.g;Q++)i=z(t.j,0,Q),f=z(t.j,1,Q),!v[i]&&!v[f]&&(t.e[Q]&&(++s[i],++s[f]),l1(t.j,Q)==16&&(l[i]=!0,l[f]=!0));for(S=h(F,k,6,t.j.f,15,1),y=h(F,k,6,t.j.f,15,1),E=0;E<t.j.f;E++)if(s[E]==1)for(y[0]=E,L=0,T=0;L<=T;){for(c=0;c<O(t.j,y[L]);c++)if(t.e[Ot(t.j,y[L],c)]&&(U=_(t.j,y[L],c),(L==0||U!=y[L-1])&&s[U]!=0)){if(y[++T]=U,(s[U]&1)!=0){for(b=1;b<T;b+=2)S[y[b]]=-1;T=0}break}++L}for(D=h(rt,ft,6,t.j.f,16,1),a=0;a<t.j.f;a++)if(!D[a]&&s[a]!=0){for(y[0]=a,D[a]=!0,L=0,T=0;L<=T;){for(c=0;c<O(t.j,y[L]);c++)t.e[Ot(t.j,y[L],c)]&&(U=_(t.j,y[L],c),D[U]||(y[++T]=U,D[U]=!0));++L}if((T&1)==0){for(g=0;g<=T;g++)S[y[g]]==0&&(S[y[g]]=pj(t,y[g],!1));for(R=!0,m=0;m<=T;m++)if(S[y[m]]<=0&&!yf(t,y[m],!1)){R=!1;break}if(R){for(C=0,j=-1,c=0;c<=T;c++)C<S[y[c]]&&(C=S[y[c]],j=y[c]);C>0&&(pj(t,j,!0),Pf(t,j))}}}}function ip(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;P=new L1,D=new L1,U=new c9,Q=new c9,i=z(t.L,0,A),f=z(t.L,1,A),n&&(s=e.a,e.a=e.b,e.b=s,s=e.c,e.c=e.d,e.d=s,y=i,i=f,f=y),cA(t,e)&&(fA(t.L,A)?(P.a=e.a,P.c=e.c,P.b=e.b,P.d=e.d,L=n?-O5(t.L,A):O5(t.L,A),L==0&&(L=1),Qf(t,e.b-e.a,e.d-e.c,U),L>0?(D.a=e.a+U.a,D.c=e.c+U.b,D.b=e.b+U.a,D.d=e.d+U.b,(Di(t,i,f,1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+U.b,D.c+=Q.b-U.a)):(D.a=e.a-U.a,D.c=e.c-U.b,D.b=e.b-U.a,D.d=e.d-U.b,(Di(t,i,f,-1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+U.b,D.c+=Q.b-U.a)),l1(t.L,A)==386&&iL(P,D),cA(t,P)&&Hn(t,P,i,f),l1(t.L,A)==8?cA(t,D)&&VQ(t,D,i,f):cA(t,D)&&Hn(t,D,i,f)):(Qf(t,e.b-e.a,e.d-e.c,U),l=U.a/2,T=U.b/2,r=!1,P.a=e.a+l,P.c=e.c+T,P.b=e.b+l,P.d=e.d+T,O(t.L,i)>1&&(Di(t,i,f,1,Q)?(P.a+=Q.a,P.c+=Q.b,O(t.L,i)==2&&(Q.a!=0||Q.b!=0)&&(P.a+=U.b,P.c-=U.a)):t.o[i]=new v3(P.a,P.c)),D.a=e.a-l,D.c=e.c-T,D.b=e.b-l,D.d=e.d-T,O(t.L,i)>1&&(Di(t,i,f,0,Q)?(D.a+=Q.a,D.c+=Q.b,O(t.L,i)==2&&(Q.a!=0||Q.b!=0)&&(D.a+=U.b,D.c-=U.a)):(t.o[i]=new v3(D.a,D.c),r=!0)),l1(t.L,A)==386&&iL(P,D),l1(t.L,A)==8?r?(VQ(t,P,i,f),Hn(t,D,i,f)):(Hn(t,P,i,f),VQ(t,D,i,f)):(Hn(t,P,i,f),Hn(t,D,i,f))))}function ha(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;this.i=t,this.g=7,this.j=new f1,this.k=new f1,this.b=new f1,this.a=h(F,k,6,this.i.f,15,1),this.c=h(F,k,6,this.i.g,15,1),this.i.$b(1),s=h(rt,ft,6,this.i.f,16,1),y=h(rt,ft,6,this.i.g,16,1);do for(i=!1,A=0;A<this.i.f;A++)if(!s[A]){for(c=0,L=0;L<O(this.i,A);L++)s[_(this.i,A,L)]||++c;if(c<2){for(s[A]=!0,U=0;U<O(this.i,A);U++)y[Ot(this.i,A,U)]=!0;i=!0}}while(i);for(m=0;m<this.i.f&&s[m];)++m;if(m!=this.i.f){for(D=h(F,k,6,this.i.f,15,1),D[0]=m,T=h(F,k,6,this.i.f,15,1),T[0]=-1,f=h(F,k,6,this.i.f,15,1),f[m]=1,r=0,Q=0,l=1;r<=Q;){for(U=0;U<O(this.i,D[r]);U++)if(P=_(this.i,D[r],U),P!=T[D[r]]){if(f[P]!=0){DW(this,Ot(this.i,D[r],U),s);continue}s[P]||(f[P]=l,T[P]=D[r],D[++Q]=P)}if(++r,r>Q){for(A=0;A<this.i.f;A++)if(f[A]==0&&!s[A]){f[A]=++l,D[++Q]=A,T[A]=-1;break}}}if((e&4)!=0&&(this.e=h(rt,ft,6,this.j.a.length,16,1),this.f=h(rt,ft,6,this.j.a.length,16,1),this.d=h(F,k,6,this.j.a.length,15,1),Zs(this,this.e,this.f,this.d,(e&8)!=0),C_(this)),(e&2)!=0)for(n=0;n<this.i.g;n++)!y[n]&&dt(this.i,n)!=0&&(g=kW(this,n,s),g!=null&&gb(this,g,Gk(this,g)))}}function ca(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et;for(v=h(F,k,6,P,15,1),R=h(F,k,6,P,15,1),T=0;T<P;T++)v[T]=r8(e,n[T]),R[T]=r8(A,n[T]);for(a=0,X=0,E=0,tt=0,c=0;c<P;c++)a+=e.a[v[c]],X+=e.b[v[c]],E+=A.a[R[c]],tt+=A.b[R[c]];for(a/=P,X/=P,E/=P,tt/=P,tv(A,a-E,X-tt),Q=h(li,A0,41,P,0,1),L=h(li,A0,41,P,0,1),r=h(li,A0,41,P,0,1),i=h(li,A0,41,P,0,1),g=0;g<P;g++)Q[g]=new Wu(a,X,e.a[v[g]],e.b[v[g]]),L[g]=new Wu(a,X,A.a[R[g]],A.b[R[g]]),r[g]=new KP(Q[g].a-L[g].a,Q[g].b*L[g].b),i[g]=new KP(Q[g].a+L[g].a,Q[g].b*L[g].b);for(j=f2(r,P),C=f2(i,P),$=0,et=0,m=0;m<P;m++)for(b=0;b<Mt(t.f,n[m]);b++)f=_(t.f,n[m],b),N9(e,f)&&!N9(A,f)&&++$,!N9(e,f)&&N9(A,f)&&++et;for(U=h(li,A0,41,$,0,1),s=h(li,A0,41,et,0,1),y=h(li,A0,41,et,0,1),$=0,et=0,l=0;l<P;l++)for(b=0;b<Mt(t.f,n[l]);b++)f=_(t.f,n[l],b),N9(e,f)&&!N9(A,f)&&(D=r8(e,f),U[$]=new Wu(e.a[v[l]],e.b[v[l]],e.a[D],e.b[D]),++$),!N9(e,f)&&N9(A,f)&&(D=r8(A,f),W=new Wu(A.a[R[l]],A.b[R[l]],A.a[D],A.b[D]),s[et]=new KP(j.a+W.a,W.b),y[et]=new KP(C.a-W.a,W.b),++et);return S=f2(U,$),p=f2(s,et),x=f2(y,et),w.Math.abs(FL(S.a,p.a))>w.Math.abs(FL(S.a,x.a))?sf(A,a,X,j.a):(WY(A,a,X),sf(A,a,X,C.a)),k5(t,e,A,P)}function fp(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(this.i=t,this.w=t.s,this.v=t.q,this.D=new tj(this.v,this.w),this.n=0,Q=this.w,s=0,T=Q.length;s<T;++s)f=Q[s],this.n=w.Math.max(this.n,w.Math.max(1+f.i,1+f.j));for(e=h(F,k,6,this.n,15,1),U=this.w,y=0,c=U.length;y<c;++y)f=U[y],++e[f.i],++e[f.j];for(this.j=h(F,D0,7,e.length,0,2),this.k=h(F,D0,7,e.length,0,2),i=0;i<e.length;i++)this.j[i]=h(F,k,6,e[i],15,1),this.k[i]=h(F,k,6,e[i],15,1);for(V9(e,e.length,0),r=0;r<this.w.length;r++)n=gg(this.w[r],0),P=gg(this.w[r],1),this.j[n][e[n]]=P,this.j[P][e[P]]=n,this.k[n][e[n]]=r,this.k[P][e[P]]=r,++e[n],++e[P];for(this.p=h(F,k,6,this.n,15,1),this.o=h(F,k,6,this.n,15,1),this.r=h(F,k,6,this.n,15,1),this.q=h(rt,ft,6,this.n,16,1),this.f=h(F,nA,28,this.n,0,3),A=1;A<this.n;A++)for(this.f[A]=h(F,D0,7,A,0,2),P=0;P<A;P++)this.f[A][P]=EZ(this,A,P);for(this.u=1,D=this.w,L=0,l=D.length;L<l;++L)f=D[L],this.u*=f.d.length;for(m=this.v,v=0,R=m.length;v<R;++v)g=m[v],this.u*=g.b.length;this.u<=0&&(this.u=It),this.F=new Kg,this.A=new M3((U1(new Fw),new ew)),this.B=new pi,this.g=0,this.C=0,this.s=3,this.G=!1,this.t=w.Math.min(nP,this.u)}function wa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;for(ut(t,7),S=0,y=h(rt,ft,6,t.f,16,1),p=h(F,k,6,t.f,15,1),r=0;r<t.g;r++)A=t.D[0][r],n=t.D[1][r],i=t.s[A],f=t.s[n],i!=0&&f!=0&&i<0^f<0&&(y[A]=!0,y[n]=!0),p[A]+=dt(t,r),p[n]+=dt(t,r);for(D=0;D<t.f;D++)if(S+=t.s[D],t.s[D]==1){if(t.C[D]==7&&!y[D]){if(p[D]<=3)S-=1,t.s[D]=0,t.T=0,t.j[D]!=t.e[D]&&(wQ(t,_(t,D,t.e[D]-1)),ut(t,7));else if(D<t.f&&i0(t.p,D)){for(g=h(rt,ft,6,t.f,16,1),m=h(rt,ft,6,t.g,16,1),nR(t,D,!0,g,m),U=0;U<t.f;U++)if(g[U]&&t.C[U]==7&&t.s[U]==0&&p[U]==2&&_W(t,m,D,U)){S-=1;break}}}}else if(t.s[D]<0&&(t.C[D]==6||t.C[D]==7||t.C[D]==8||t.C[D]==16))if(y[D]){for(b=h(F,k,6,16,15,1),b[0]=D,C=1,j=0;j<C;){for(P=0;P<t.r;P++)if(e=-1,t.D[0][P]==b[j]?e=t.D[1][P]:t.D[1][P]==b[j]&&(e=t.D[0][P]),e!=-1&&t.s[e]!=0){for(L=!1,T=0;T<C;T++)if(e==b[T]){L=!0;break}L||(C==b.length&&(Q=h(F,k,6,2*b.length,15,1),sA(b,0,Q,0,b.length),b=Q),b[C++]=e)}++j}for(s=0,c=0;c<C;c++)s+=t.s[b[c]];if(s<0){for(v=-1,R=99,l=0;l<C;l++)t.s[b[l]]<0&&R>lb(t.C[b[l]])&&(R=lb(t.C[b[l]]),v=b[l]);v!=-1&&(S-=t.s[v],t.s[v]=0,t.T=0)}}else S-=t.s[D],t.s[D]=0,t.T=0;return S>0&&(S=nW(t,S)),S}function a5(){a5=B1,Pl=B(d(F,1),k,6,15,[0,oi,14286847,13402367,12779264,16758197,9474192,3166456,16715021,9494608,11789301,11230450,9109248,12560038,1578e4,16744448,16777008,2093087,8442339,9388244,4062976,15132390,12567239,10921643,9083335,10255047,14706227,15765664,5296208,13140019,8224944,12750735,6721423,12419299,16752896,10889513,6076625,7351984,PP,9764863,9756896,7586505,5551541,3907230,2396047,687500,27013,12632256,16767375,10909043,6717568,10380213,13924864,9699476,4366e3,5707663,51456,7394559,16777159,14286791,13107143,10747847,9437127,6422471,4587463,3211207,2097095,65436,58997,54354,48952,43812,5096191,5089023,2200790,2522539,2516630,1528967,13684960,16765219,12105936,10900557,5724513,10375093,11230208,7688005,4358806,4325478,32e3,7384058,47871,41471,36863,33023,27647,5528818,7888099,9064419,10565332,11739092,11739066,11734438,12389767,13041766,13369433,13697103,14221381,14680120,15073326,15400998,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13158600,1334015,56540,15075850,15132160,56540,15075850,15461355,8553170,1016335,1016335,1334015,15132160,3289770,14456450,16422400,16422400,11819700,3289770,1016335])}function ey(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(t.db[e]!=0||K(t.R,e)!=5&&K(t.R,e)!=6&&K(t.R,e)!=7&&K(t.R,e)!=14&&K(t.R,e)!=15&&K(t.R,e)!=16||(t.Q&C0)!=0&&K(t.R,e)>=14)return!1;if(a1(t.R,e)!=0){if(ZT(t.R,e))return O_(t,e,A);if(K(t.R,e)!=15&&K(t.R,e)!=16)return!1}if(O(t.R,e)<3||Mt(t.R,e)>4||p1(t.R,e)>0&&K(t.R,e)==6||K(t.R,e)==5&&Mt(t.R,e)!=4)return!1;if(t.R.K){if(Qe(t.R,e))return!1;for(f=0;f<Mt(t.R,e);f++)if(Qe(t.R,_(t.R,e,f)))return!1}if(K(t.R,e)==7&&!t.S[e])return!1;for(l=h(F,k,6,4,15,1),T=h(F,k,6,4,15,1),U=h(rt,ft,6,4,16,1),D=0;D<Mt(t.R,e);D++){for(r=-1,P=0,Q=0;Q<Mt(t.R,e);Q++)U[Q]||r<t.f[_(t.R,e,Q)]&&(r=t.f[_(t.R,e,Q)],P=Q);l[D]=P,T[D]=r,U[P]=!0}if(Mt(t.R,e)==4&&T[0]==T[1]&&T[2]==T[3]||Mt(t.R,e)==4&&(T[0]==T[2]||T[1]==T[3])||Mt(t.R,e)==3&&T[0]==T[2])return!1;for(L=0,s=0,y=!1,i=1;i<Mt(t.R,e);i++)if(T[i-1]==T[i]){if(A==1||T[i]==0)return!1;L=_(t.R,e,l[i-1]),s=_(t.R,e,l[i]),A==3&&fA(t.R,Ot(t.R,e,l[i]))&&(t.W[e]=!0),y=!0}return A!=1&&!y?!1:(n=t.jb?z_(t,e,l):ra(t,e,l),A==1?t.db[e]=n:A==2&&(n==1?ue(t.e[L],t.f[e]):n==2&&ue(t.e[s],t.f[e])),!0)}function Ay(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;if(m5(t,e),!((t.u[e]&3)==0||(t.u[e]&3)==3)){if(t.o[e]==2&&t.j[e]==2){W$(t,e);return}if(t.j[e]<3||t.j[e]>4){ce(t,e,0,!1);return}for(A=t.e[e],l=!1,i=0;i<A;i++)if(dt(t,t.k[e][i])==1){l=!0;break}if(l){for(T=sY(t,e),n=h(yt,wt,6,A,15,1),f=0;f<A;f++)n[f]=Y0(t,t.i[e][T[f]],e);for(D=0;D<A;D++)t.D[0][t.k[e][D]]==e&&dt(t,t.k[e][D])==1&&(t.H[t.k[e][D]]=1);if(!((t.p&&e<t.f?iA(t.p,e):0)<=24&&eX(t,e,T,n))&&(s=Ns(t,e,!0),s!=-1)){for(t.D[0][s]!=e&&(t.D[1][s]=t.D[0][s],t.D[0][s]=e),y=-1,Q=0;Q<A;Q++)if(s==t.k[e][T[Q]]){y=Q;break}for(c=B(d(F,2),D0,7,0,[B(d(F,1),k,6,15,[2,1,2,1]),B(d(F,1),k,6,15,[1,2,2,1]),B(d(F,1),k,6,15,[1,1,2,2]),B(d(F,1),k,6,15,[2,1,1,2]),B(d(F,1),k,6,15,[2,2,1,1]),B(d(F,1),k,6,15,[1,2,1,2])]),r=1;r<A;r++)n[r]<n[0]&&(n[r]+=F0);if(A==3){switch(U=!1,y){case 0:U=n[1]<n[2]&&n[2]-n[1]<Q1||n[1]>n[2]&&n[1]-n[2]>Q1;break;case 1:U=n[2]-n[0]>Q1;break;case 2:U=n[1]-n[0]<Q1}P=(t.u[e]&3)==1^U?257:129}else L=0,n[1]<=n[2]&&n[2]<=n[3]?L=0:n[1]<=n[3]&&n[3]<=n[2]?L=1:n[2]<=n[1]&&n[1]<=n[3]?L=2:n[2]<=n[3]&&n[3]<=n[1]?L=3:n[3]<=n[1]&&n[1]<=n[2]?L=4:n[3]<=n[2]&&n[2]<=n[1]&&(L=5),P=(t.u[e]&3)==1^c[L][y]==1?129:257;t.H[s]=P}}}}function ny(t,e,A){Ap();var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(ut(t,7),y=h(NA,a0,6,t.j[e],14,1),s=0,D=0;D<t.j[e];D++)if(P=t.i[e][D],t.C[P]!=1){if(i=0,(A&32)!=0&&(r=t.n[e][D],A==32190?G(r,3)<0&&G8(t,t.k[e][D])&&t.o[e]==1&&(r=0):G(r,3)<0&&_e(t,t.k[e][D])&&(r=0),i=Y(i,M1(r,4))),(A&128)!=0){if(gU[t.C[P]]==-1)throw At(new V1(F6+t.C[P]));i=O1(i,gU[t.C[P]])}else if((A&64)!=0){if(d4[t.C[P]]==-1)throw At(new V1(F6+t.C[P]));i=O1(i,d4[t.C[P]])}for((A&256)!=0&&(l=t.j[P]-1,l>3&&(l=3),(A&512)==0&&l>1&&(l=1),i=Y(i,l<<6)),(A&re)!=0&&(t.u[P]&8)!=0&&(i=Y(i,256)),(A&I1)!=0&&P<t.f&&i0(t.p,P)&&(i=Y(i,512)),(A&Sn)!=0&&(t.u[P]&ge)!=0&&(i=Y(i,re)),U=0;G(i,y[U])<0;)++U;for(L=D;L>U;L--)y[L]=y[L-1];y[U]=i,++s}for(s>4&&(s=4),n=0,Q=0;Q<s;Q++)n=M1(n,11),n=Y(n,y[Q]);if(n=M1(n,15),gU[t.C[e]]==-1)throw At(new V1(F6+t.C[e]));if(n=Y(n,gU[t.C[e]]),(A&2)!=0?(c=t.p&&e<t.f?iA(t.p,e):0,c>9&&(c=9),c>2&&(c-=2),n=Y(n,c<<4)):(A&1)!=0&&(t.u[e]&8)!=0&&(n=Y(n,64)),(A&4)!=0&&e<t.f&&i0(t.p,e)&&(n=Y(n,re)),(A&8)!=0&&(t.u[e]&C0)!=0&&(n=Y(n,I1)),(A&16)!=0&&(t.u[e]&ge)!=0&&(n=Y(n,C0)),(A&C0)!=0&&(bK(t,e)&&(n=Y(n,ge)),Sa(t,e))){for(f=0;f<t.f;f++)if(XW(t,f)){n=Y(n,Sn);break}}return(A&ge)!=0&&(T=E5(t,e,10),n=Y(n,M1(T,7))),n}function t6(t,e){Is();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X;if(S=t.e,l=t.d,P=t.a,S==0)switch(e){case 0:return\"0\";case 1:return\"0.0\";case 2:return\"0.00\";case 3:return\"0.000\";case 4:return ky;case 5:return\"0.00000\";case 6:return\"0.000000\";default:return j=new V0,e<0?j.a+=\"0E+\":j.a+=\"0E\",j.a+=-e,j.a}if(v=l*10+1+7,R=h(l9,a0,6,v+1,15,1),A=v,l==1)if(f=P[0],f<0){X=V(f,h1);do T=X,X=Mn(X,10),R[--A]=48+zt(l0(T,Un(X,10)))&w1;while(G(X,0)!=0)}else{X=f;do T=X,X=X/10|0,R[--A]=48+(T-X*10)&w1;while(X!=0)}else{x=h(F,k,6,l,15,1),E=l,sA(P,0,x,0,E);t:for(;;){for(C=0,Q=E-1;Q>=0;Q--)a=O1(M1(C,32),V(x[Q],h1)),g=mY(a),x[Q]=zt(g),C=zt(q0(g,32));m=zt(C),c=A;do R[--A]=48+m%10&w1;while((m=m/10|0)!=0&&A!=0);for(n=9-c+A,D=0;D<n&&A>0;D++)R[--A]=48;for(L=E-1;x[L]==0;L--)if(L==0)break t;E=L+1}for(;R[A]==48;)++A}if(y=S<0,i=v-A-e-1,e==0)return y&&(R[--A]=45),tP(R,A,v-A);if(e>0&&i>=-6){if(i>=0){for(U=A+i,s=v-1;s>=U;s--)R[s+1]=R[s];return R[++U]=46,y&&(R[--A]=45),tP(R,A,v-A+1)}for(L=2;L<-i+1;L++)R[--A]=48;return R[--A]=46,R[--A]=48,y&&(R[--A]=45),tP(R,A,v-A)}return p=A+1,r=v,b=new k9,y&&(b.a+=\"-\"),r-p>=1?(Oe(b,R[A]),b.a+=\".\",b.a+=tP(R,A+1,v-A-1)):b.a+=tP(R,A,v-A),b.a+=\"E\",i>0&&(b.a+=\"+\"),b.a+=\"\"+i,b.a}function Py(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y;if(f=O(t.H,e),n=t.o[A],n>f)return!1;if(Q=o0(t.H,e),r=o0(t.g,A),P=MA(t.g,A),D=MA(t.H,e),gt(V(r,1),0)){if(P!=null){if(gt(V(Q,1),0)){if(D==null||!am(P,D))return!1}else if(D!=null){if(RJ(D,P))return!1}else if(Ev(K(t.H,e),P))return!1}}else{if(gt(V(Q,1),0))return!1;if(P!=null){if(D!=null){if(!am(D,P))return!1}else if(!Ev(K(t.H,e),P))return!1}else if(D!=null||t.J[e]!=t.k[A])return!1}if(gt(Y(Q,r),0)){if(gt(V(r,I1),0)){if(t.H.K&&P0(V(Q,I1),0))return!1;if(n!=f)return!1}if(gt(V(r,C0),0)&&n>=f&&P0(V(Q,C0),0))return!1}if(gt(V(t.I[e],Jn(t.j[A])),0)||gt(V(t.B[A],Jn(t.M[e])),0))return!1;if(i=V(r,rr),t.H.K){if(U=V(r,rr),G(U,0)!=0&&(G(i,0)==0||gt(V(i,Jn(U)),0)))return!1}else if(G(i,0)!=0&&P0(V(i,t.M[e]),0))return!1;return p1(t.g,A)!=0&&p1(t.g,A)!=p1(t.H,e)||ye(t.g,A)!=0&&ye(t.g,A)!=ye(t.H,e)||FA(t.g,A)!=0&&FA(t.g,A)!=FA(t.H,e)||(L=V(r,F2),G(L,0)!=0&&I_(t.H,e)!=zt(q0(L,47))-7)?!1:(s=V(r,f9),G(s,0)!=0?(s=q0(s,22),t.H.K?(y=zt(q0(V(o0(t.H,e),f9),22)),zt(s)==y):M9(t.H,e)==zt(s)):!0)}function ga(t,e){var A,n,P,r,i,f,D,Q;if(A=0,i=0,r=e.length,f=null,Q=new k9,i<r&&(Xt(i,e.length),e.charCodeAt(i)==43)&&(++i,++A,i<r&&(Xt(i,e.length),e.charCodeAt(i)==43||(Xt(i,e.length),e.charCodeAt(i)==45))))throw At(new YP(g2+e+'\"'));for(;i<r&&(Xt(i,e.length),e.charCodeAt(i)!=46)&&(Xt(i,e.length),e.charCodeAt(i)!=101)&&(Xt(i,e.length),e.charCodeAt(i)!=69);)++i;if(Q.a+=\"\"+(pt(A,i,(e??Pr).length),(e??Pr).substr(A,i-A)),i<r&&(Xt(i,e.length),e.charCodeAt(i)==46)){for(++i,A=i;i<r&&(Xt(i,e.length),e.charCodeAt(i)!=101)&&(Xt(i,e.length),e.charCodeAt(i)!=69);)++i;t.e=i-A,Q.a+=\"\"+(pt(A,i,(e??Pr).length),(e??Pr).substr(A,i-A))}else t.e=0;if(i<r&&(Xt(i,e.length),e.charCodeAt(i)==101||(Xt(i,e.length),e.charCodeAt(i)==69))&&(++i,A=i,i<r&&(Xt(i,e.length),e.charCodeAt(i)==43)&&(++i,i<r&&(Xt(i,e.length),e.charCodeAt(i)!=45)&&++A),f=(pt(A,r,e.length),e.substr(A,r-A)),t.e=t.e-c1(f,o1,It),t.e!=vt(t.e)))throw At(new YP(\"Scale out of range.\"));if(D=Q.a,D.length<16){if(t.f=(Dc==null&&(Dc=new RegExp(\"^[+-]?\\\\d*$\",\"i\")),Dc.test(D)?parseInt(D,10):NaN),isNaN(t.f))throw At(new YP(g2+e+'\"'));t.a=vs(t.f)}else yh(t,new jg(D));for(t.d=Q.a.length,P=0;P<Q.a.length&&(n=Yi(Q.a,P),!(n!=45&&n!=48));++P)--t.d;t.d==0&&(t.d=1)}function Dp(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(this.j=t,n=0;n<t.i.f;n++)t.f[n]&&(t.o[n]==1||t.o[n]==2)&&(t.k[n]==1?this.a<=t.j[n]&&(this.a=1+t.j[n]):t.k[n]==2&&this.i<=t.j[n]&&(this.i=1+t.j[n]));for(this.b=this.a+this.i,this.e=R1(rt,[h0,ft],[12,6],16,[this.b+1,t.g.length+1],2),P=0;P<t.i.f;P++)t.f[P]&&(t.o[P]==1||t.o[P]==2)&&!t.e[P]&&(this.e[cv(this,P)][t.g.length]=!0);for(D=0;D<t.g.length;D++)for(c=0;c<t.g[D].length;c++)A=t.g[D][c],t.f[A]&&(t.o[A]==1||t.o[A]==2)&&(this.e[cv(this,A)][D]=!0);for(this.d=h(F,D0,7,this.b,0,2),Q=0;Q<t.g.length;Q++)for(y=1;y<this.b;y++)if(this.e[y][Q])for(l=0;l<y;l++)this.e[l][Q]&&(this.d[y]=rf(this.d[y],l),this.d[l]=rf(this.d[l],y));for(this.c=h(F,k,6,this.b+1,15,1),s=0;s<this.b;s++)this.e[s][t.g.length]?this.c[s]=-1:this.c[s]=-2;for(U=0;U<t.g.length;U++)if(this.e[this.b][U])for(L=0;L<this.b;L++)this.e[L][U]&&this.c[L]!=U&&(this.c[L]==-2?this.c[L]=U:this.c[L]=-3);for(e=0;e<this.b;e++)if(this.c[e]>=-1&&(r=h(F,k,6,this.b,15,1),OK(this,r,e)))for(L=0;L<this.b;L++)r[L]!=0&&(this.c[L]=-3);for(f=0;f<t.g.length-1;f++)for(y=1;y<this.b;y++)if(this.e[y][f]&&this.c[y]!=-3){for(l=0;l<y;l++)if(this.e[l][f]&&this.c[l]!=-3&&(i=Q_(this,y,l,f),i!=null)){for(T=0;T<i.length;T++)this.c[i[T]]=-3;bW(this,i);break}}}function da(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct;for(t.e=h(yt,wt,6,t.d,15,1),n=h(yt,wt,6,t.d,15,1),Q=h(yt,wt,6,t.d,15,1),S=h(yt,wt,6,t.d,15,1),ct=h(yt,wt,6,t.d,15,1),m=h(yt,wt,6,t.d*t.d,15,1),L=0;L<t.d;L++)S[L]=t.i[L];for(f=is(t,t.i),Hb(t),x=0,s=0;s<t.d;s++)m[s*t.d+s]=1,ct[s]=-t.e[s],x+=t.i[s]*t.i[s];for(C=100*w.Math.max(w.Math.sqrt(x),t.d),X=(x1(),E1(Date.now())),R=1;R<=e&&!t.f;R++){if(p=C$(t,t.i,f,ct,S,C),p<0)return 2;for(f=t.k,et=0,y=0;y<t.d;y++)ct[y]=S[y]-t.i[y],t.i[y]=S[y],W=w.Math.abs(ct[y])/w.Math.max(w.Math.abs(t.i[y]),1),W>et&&(et=W),n[y]=t.e[y];if(et<12e-8)return 0;for(D=Hb(t),et=0,$=w.Math.max(t.k*D,1),l=0;l<t.d;l++)st=w.Math.abs(t.e[l])*w.Math.max(w.Math.abs(t.i[l]),1),et=w.Math.max(et,st),n[l]=t.e[l]-n[l];if(et/=$,et<A)return 0;for(P=0,i=0,a=0,E=0,T=0;T<t.d;T++){for(v=T*t.d,Q[T]=0,b=0;b<t.d;b++)Q[T]+=m[v+b]*n[b];P+=n[T]*ct[T],i+=n[T]*Q[T],a+=n[T]*n[T],E+=ct[T]*ct[T]}if(P>w.Math.sqrt(3e-8*a*E)){for(P=1/P,r=1/i,c=0;c<t.d;c++)n[c]=P*ct[c]-r*Q[c];for(g=0;g<t.d;g++)for(v=g*t.d,b=g;b<t.d;b++)m[v+b]+=P*ct[g]*ct[b]-r*Q[g]*Q[b]+i*n[g]*n[b],m[b*t.d+g]=m[v+b]}for(U=0;U<t.d;U++)for(v=U*t.d,ct[U]=0,b=0;b<t.d;b++)ct[U]-=m[v+b]*t.e[b];if(tt=E1(Date.now()),lt=l0(tt,X),hu(lt,t.j)){for(j=new Wt(t.c);j.a<j.c.a.length;)t1(j),null.vd();X=tt}}return 1}function Ba(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(e=0;t.a.length!=0;){if(t.a.length==1){if(t.e==1||t.e==0)break;if(t.e==2&&(t.a[0]==0||t.a[0]==180))break;if(t.e==3&&(t.a[0]==0||t.a[0]==90))break}for(s=t.a[0]!=0&&(t.e==2||t.e==3)?-1:0,L=-1,U=It,i=s;i<t.a.length;i++)D=i+1,A=i>=0?t.a[i]:-t.a[0],n=D<t.a.length?t.a[D]:t.e==1?t.a[0]+180:t.e==2?360-t.a[t.a[i]==180?i-1:i]:t.e==3?180-t.a[t.a[i]==90?i-1:i]:t.a[0]+360,U>n-A&&(U=n-A,L=i);if(U>15)break;r=L,f=r+1,r==-1?(e+=t.c[0],t.a[0]=0,t.c[0]=t.c[0]*2<<16>>16,t.d[0][0]=-t.d[0][1]):f<t.a.length?(Q=Xu(t,r,f,t.a[f]),cf(t,Q,r,f,t.d[r][0],t.d[f][1])):t.e==1?(f=0,Q=Xu(t,r,f,t.a[f]+180),Q<=180?cf(t,Q,r,f,t.d[r][0],t.d[f][1]+180):cf(t,Q-180,f,r,t.d[f][0],t.d[r][1]-180)):t.e==2?(f=t.a[r]==180?r-1:r,t.a[r]<180?(e+=t.c[r],t.a[r]=180,t.c[r]=t.c[r]*2<<16>>16,t.d[r][1]=360-t.d[r][0]<<16>>16):(x1(),Q=Xu(t,r,f,t.a[f]),cf(t,Q,f,r,t.d[f][0],t.d[r][1]))):t.e==3?(f=t.a[r]==90?r-1:r,t.a[r]<90?(e+=t.c[r],t.a[r]=90,t.c[r]=t.c[r]*2<<16>>16,t.d[r][1]=180-t.d[r][0]<<16>>16):(x1(),Q=Xu(t,r,f,t.a[f]),cf(t,Q,f,r,t.d[f][0],t.d[r][1]))):(f=0,Q=Xu(t,r,f,t.a[f]+360),Q<=360?cf(t,Q,r,f,t.d[r][0],t.d[f][1]+360):cf(t,Q-360,f,r,t.d[f][0],t.d[r][1]-360))}if(e!=0)for(P=0;P<t.c.length;P++)t.c[P]=vt(w.Math.round(100*t.c[P]/(100+e)))<<16>>16}function up(t,e){var A,n,P,r,i,f,D,Q;if(D=0,t.K){switch(e<t.f&&S3(t.p,e)?D=Y(D,p6):e<t.f&&i0(t.p,e)&&(D=Y(D,2)),Q=(P=t.u[e]&hn,P==0?0:P==re?2:P==I1?3:4),Q!=0&&(D=Y(D,8),Q>2&&(D=Y(D,16)),Q>3&&(D=Y(D,32))),A=t.s[e],A<0?D=Y(D,Mf):A>0&&(D=Y(D,Cf)),i=t.j[e],i){case 0:break;case 1:D=Y(D,I0);break;case 2:D=Y(D,yi);break;case 3:D=Y(D,SP);break;default:D=Y(D,Hf)}switch(n=eh(t,e),n){case 0:break;case 1:D=Y(D,v2);break;case 2:D=Y(D,Ly);break;case 3:D=Y(D,sy);break;default:D=Y(D,tU)}f=t.o[e],f>0&&(D=Y(D,Sn)),f>1&&(D=Y(D,s8))}else{switch(e<t.f&&S3(t.p,e)?D=Y(D,p6):e<t.f&&i0(t.p,e)?D=Y(D,2):D=Y(D,4),(t.u[e]&Tn)!=0?D=Y(D,KQ):D=Y(D,XQ),Q=(P=t.u[e]&hn,P==0?0:P==re?2:P==I1?3:4),Q==0?D=Y(D,112):Q==2?D=Y(D,104):Q==3?D=Y(D,88):D=Y(D,56),A=t.s[e],A==0?D=Y(D,WQ):A<0?D=Y(D,Mf):D=Y(D,Cf),r=t.e[e]-e0(t,e)+xt(t,e),r){case 0:D=Y(D,1792);break;case 1:D=Y(D,1664);break;case 2:D=Y(D,1408);break;default:D=Y(D,896)}switch(i=t.j[e],i){case 0:D=Y(D,3932160);break;case 1:D=Y(D,_Q);break;case 2:D=Y(D,d2);break;case 3:D=Y(D,B2);break;default:D=Y(D,Hf)}switch(n=eh(t,e),n){case 0:D=Y(D,uy);break;case 1:D=Y(D,Qy);break;case 2:D=Y(D,Uy);break;case 3:D=Y(D,oy);break;default:D=Y(D,tU)}switch(f=t.o[e],f){case 0:D=Y(D,98304);break;case 1:D=Y(D,81920);break;default:D=Y(D,49152)}}return D}function Qp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(D=h(F,k,6,t.i.f,15,1),g=h(F,k,6,t.i.f,15,1),l=h(rt,ft,6,t.i.f,16,1),Q=h(rt,ft,6,t.i.f,16,1),m=new Xg(t.i.f),D[0]=e,g[e]=A,g[A]=-2,m.a[e]=!0,m.a[A]=!0,r=0,U=0;r<=U;){if(i=D[r],g[i]==i){for(L=0;L<O(t.i,i);L++)if(n=_(t.i,i,L),!m.a[n]){if(pA(t.i,i,L)==2&&K(t.i,n)<10)D[++U]=n,g[n]=n,Q[n]=Q[i]||a1(t.i,n)==2,l[n]=Q[i]&&!l[i],m.a[n]=!0;else if(Q[i]&&l[i]){if(v=Eb(t,n,g[i],m.a),v==-1)return null;D[++U]=n,g[n]=v,g[v]=-2,Q[n]=!1,m.a[n]=!0,m.a[v]=!0}else if(fA(t.i,Ot(t.i,i,L))&&(D[++U]=n,g[n]=n,Q[n]=!1,m.a[n]=!0,(K(t.i,n)==6&&a1(t.i,n)==0||K(t.i,n)==7&&p1(t.i,n)==1||K(t.i,n)==14||K(t.i,n)==15&&O(t.i,n)>2||K(t.i,n)==16&&O(t.i,n)>2)&&O(t.i,n)>2)){for(f=!1,T=1;T<O(t.i,n);T++)if(R=_(t.i,n,T),!m.a[R])for(c=0;c<T;c++)b=_(t.i,n,c),m.a[b]||Xs(t,R,b)&&(D[++U]=R,g[R]=b,g[b]=-2,Q[R]=!1,m.a[R]=!0,m.a[b]=!0,f=!0);if(!f)return null}}}else{for(P=h(rt,ft,6,O(t.i,i),16,1),s=0;s<O(t.i,i);s++)if(n=_(t.i,i,s),m.a[n])P[s]=g[n]==n;else for(T=0;T<O(t.i,n);T++)if(_(t.i,n,T)==g[i]){P[s]=!0;break}for(y=0;y<O(t.i,i);y++)if(P[y])if(n=_(t.i,i,y),m.a[n]){if(D1(t.i,n,g[i])==-1)return null}else D[++U]=n,g[n]=n,l[n]=!1,Q[n]=!0,m.a[n]=!0;for(L=0;L<O(t.i,i);L++)if(!P[L]&&(n=_(t.i,i,L),!m.a[n])){if(v=Eb(t,n,g[i],m.a),v==-1)return null;D[++U]=n,g[n]=v,g[v]=-2,Q[n]=!1,m.a[n]=!0,m.a[v]=!0}}++r}return m}function va(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T;switch(s=t.X,t.X=0,s){case 1:if(l=ZA(t.V,t.ib,t.lb),l!=-1&&De(t.V,l)==8)return;z1(t),t.e==-1&&(t.e=W0(t.V,t.hb,t.kb,0)),l==-1&&(l=W0(t.V,t.ib,t.lb,0)),t.e!=-1&&l!=-1&&(P=_0(t.V,t.e)||_0(t.V,l)?16:1,t.w==6&&(P=257),t.w==23&&(P=129),wb(t.V,t.e,l,P)),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));break;case 2:if(z1(t),t.q>0&&(t.e==-1&&(t.e=W0(t.V,t.hb,t.kb,0)),t.n[0]==-1&&(t.n[0]=W0(t.V,t.o[0],t.p[0],0)),t.n[0]!=-1&&tL(t.V,t.e,t.n[0])),t.q>1)for(f=1;f<t.q;f++)t.n[f]==-1&&(t.n[f]=W0(t.V,t.o[f],t.p[f],0)),t.n[f]!=-1&&tL(t.V,t.n[f-1],t.n[f]);t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));break;case 3:case 4:case 7:t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));break;case 10:t.eb=w.Math.max(t.eb,3),n1(t.k);break;case 5:case 6:for(y=!1,i=0;i<t.V.q;i++)if(t.P[i]!=r0(t.V,i)){y=!0;break}n1(t.k),y&&N1(t,new q1(t,2,!0));break;case 8:if(L=!1,n=t.t,n!=-1&&t.V.K&&Qe(t.V,n)&&(n=-1),Q=C1(t.V,t.e),n==-1){if(z1(t),Q!=0){for(L=!0,T=!1,e=0;e<t.V.f;e++)C1(t.V,e)==Q&&(T=T|Bn(t.V,e),Ze(t.V,e,0,!1));jU&&!T&&hQ(t)}}else{if(z1(t),L=!0,T=!1,t.e==n)for(D=C1(t.V,t.e),e=0;e<t.V.f;e++)C1(t.V,e)==D&&(T=T|Bn(t.V,e),Ze(t.V,e,0,!1));else{for(U=C1(t.V,n),A=0;A<t.V.f;A++)(C1(t.V,A)==Q||C1(t.V,A)==U)&&Ze(t.V,A,0,!1);for(r=1,e=0;e<t.V.f;e++)C1(t.V,e)==r&&(++r,e=-1);Ze(t.V,t.e,r,!1),Ze(t.V,n,r,!1)}jU&&!T&&hQ(t)}L&&kL(t,w.Math.max(t.eb,1)),n1(t.k)}}function Fa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;if(v=kA(t.hb,t.kb,t.ib,t.lb),g=t.ib-t.hb,m=t.lb-t.kb,L=t.q,s=0,l=0,y=0,T=0,L>0&&(s=zt(E1(w.Math.round(t.o[0]))),l=zt(E1(w.Math.round(t.p[0])))),L>1&&(y=zt(E1(w.Math.round(t.o[1]))),T=zt(E1(w.Math.round(t.p[1])))),D=0,t.e==-1||De(t.V,t.e)==0)D=AA*Jr(E1(w.Math.round(v*3/Q1)));else if(De(t.V,t.e)==1)A=Y0(t.V,_(t.V,t.e,0),t.e),n=A-AA,P=A+AA,D=w.Math.abs(Je(v,n))<w.Math.abs(Je(v,P))?n:P;else{for(r=h(yt,wt,6,De(t.V,t.e),15,1),U=0;U<De(t.V,t.e);U++)r[U]=Y0(t.V,t.e,_(t.V,t.e,U));for(r.sort(Fe(vi.prototype.gd,vi,[])),Q=0;Q<r.length;Q++){if(c=Q==0?r[r.length-1]-F0:r[Q-1],c<v&&v<r[Q]){D=(r[Q]+c)/2;break}if(c<v-F0&&v-F0<r[Q]){D=(r[Q]+c)/2;break}}}if(e=Pn(t.V,24*t.ab),t.q=w.Math.abs(Je(v,D))>AA?0:vt(w.Math.sqrt(g*g+m*m)/e),t.q>0){for((t.o==null||t.o.length<t.q)&&(t.o=h(yt,wt,6,t.q,15,1),t.p=h(yt,wt,6,t.q,15,1)),i=h(yt,wt,6,2,15,1),f=h(yt,wt,6,2,15,1),R=Je(v,D)<0?D-AA:D+AA,i[0]=e*w.Math.sin(D),f[0]=e*w.Math.cos(D),i[1]=e*w.Math.sin(R),f[1]=e*w.Math.cos(R),U=0;U<t.q;U++)t.o[U]=(U==0?t.hb:t.o[U-1])+i[U&1],t.p[U]=(U==0?t.kb:t.p[U-1])+f[U&1];for(t.n=h(F,k,6,t.q,15,1),Q=0;Q<t.q;Q++)t.n[Q]=ZA(t.V,t.o[Q],t.p[Q]),t.n[Q]!=-1&&(t.o[Q]=kt(t.V,t.n[Q]),t.p[Q]=jt(t.V,t.n[Q]))}return L!=t.q||t.q!=0&&(s!=zt(E1(w.Math.round(t.o[0])))||l!=zt(E1(w.Math.round(t.p[0]))))||t.q>1&&(y!=zt(E1(w.Math.round(t.o[1])))||T!=zt(E1(w.Math.round(t.p[1]))))}function ma(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct;for(lt=new f1,g=new Wt(t.g);g.a<g.c.a.length;)if(c=t1(g),c.g!=-1&&(v=D1(t.k,c.a,c.g),!fi(t.k,v)&&!WP(t.k,v)&&(qe(t.k,v)==1||qe(t.k,v)==2))){if($=N(t.g,t.q[c.g]),A=h(F,k,6,O(t.k,c.a)+O(t.k,$.a)-2,15,1),S=0,et=!1,$.g!=-1)A[S++]=$.b;else{for(R=-1,st=-1,b=It,x=0;x<O(t.k,$.a);x++)L=_(t.k,$.a,x),L!=c.a&&(R==-1?(R=x,b=t.q[L]):b<t.q[L]?st=x:(st=R,R=x));st==-1?(X=_(t.k,$.a,R),tt=Ot(t.k,$.a,R),A[S++]=tt|(QQ(t,$.a,X)?cn:0)):(s=_(t.k,$.a,R),l=Ot(t.k,$.a,R),y=_(t.k,$.a,st),T=Ot(t.k,$.a,st),A[S++]=l|(QQ(t,$.a,s)?cn:0),A[S++]=T|(QQ(t,$.a,y)?0:cn))}if(O(t.k,$.a)==3&&$.g!=-1){for(x=0;x<O(t.k,$.a);x++)if(L=_(t.k,$.a,x),L!=$.g&&L!=c.a){n=Ot(t.k,$.a,x),A[S++]=n|(QQ(t,$.a,L)?cn:0),L<$.g&&(et=!et);break}}for(qe(t.k,v)==2&&(et=!et),p=0;p<O(t.k,c.a);p++)if(D=_(t.k,c.a,p),D!=c.g){if(C=et,O(t.k,c.a)==3){for(E=0;E<O(t.k,c.a);E++)if(L=_(t.k,c.a,E),L!=c.g&&L!=D){L<D&&(C=!C);break}}wo(t.k,v)&&(j=Tq(t.d,v),t.n[j]||(t.n[j]=!0,t.o[j]=C),t.o[j]&&(C=!C)),Q=D1(t.k,c.a,D),A[S++]=Q|(C^QQ(t,c.a,D)?0:cn)}lt.a.push(A)}for(t.f=h(F,k,6,t.k.g,15,1),lt.a.length!=0&&Dh(t,LA(lt,0),!1);lt.a.length!=0;){for(ct=lt.a.length,p=lt.a.length-1;p>=0;p--){for(A=(ve(p,lt.a.length),lt.a[p]),W=0,a=!1,U=!1,r=A,i=0,f=r.length;i<f;++i)P=r[i],e=P&1073741823,t.f[e]!=0&&(m=(P&cn)!=0^t.f[e]==2,W==0?a=m:a!=m&&(U=!0),++W);W!=0&&(A=LA(lt,p),U||Dh(t,A,a))}ct==lt.a.length&&Dh(t,LA(lt,0),!1)}}function Up(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;for(this.d=t,p=OQ(e,!1,null),(p.g.a.length!=1||p.f.a.length!=1)&&x1(),p.c||cQ(p)||x1(),this.g=N(p.g,0),this.f=N(p.f,0),ut(this.g,1),ut(this.f,63),Q=new pi,this.c=h(F,k,6,this.g.f+1,15,1),this.c[0]=-1,n=0;n<this.g.f;n++)C1(this.g,n)!=0&&(this.c[C1(this.g,n)]=n);for(_K(this,this.c),j=h(rt,ft,6,this.g.g,16,1),g=0;g<this.f.g;g++)T=z(this.f,0,g),c=z(this.f,1,g),s=C1(this.f,T),y=C1(this.f,c),s!=0&&y!=0&&(P=this.c[s],r=this.c[y],m=Lu(this.f,g),b=D1(this.g,P,r),b==-1?X8(Q,new As(P,r,s,y,m)):((ee(this.g,b)&31)==0&&(C=Lu(this.g,b),C!=m&&X8(Q,new As(P,r,s,y,m))),j[b]=!0));for(D=0;D<this.g.g;D++)j[D]||(P=z(this.g,0,D),r=z(this.g,1,D),!Qe(this.g,P)&&!Qe(this.g,r)&&(s=C1(this.g,P),y=C1(this.g,r),(s!=0||y!=0)&&X8(Q,new As(P,r,s,y,-1))));for(this.k=Gq(Q,h(ltt,{471:1,4:1,5:1,11:1,8:1},148,0,0,1)),U=0,i=0;i<this.g.f;i++)C1(this.g,i)==0&&!Qe(this.g,i)&&++U;for(this.j=h(F,k,6,U,15,1),U=0,f=0;f<this.g.f;f++)C1(this.g,f)==0&&!Qe(this.g,f)&&(this.j[U++]=f);for(this.n=new f1,L=h(rt,ft,6,this.f.f,16,1),A=0;A<this.f.f;A++)C1(this.f,A)==0&&!Qe(this.f,A)&&!L[A]&&mt(this.n,new pb(this.f,A,L));for(this.b=this.j.length==0&&this.n.a.length==0,this.a=h(F,k,6,0,15,1),l=0;l<this.f.f;l++)v=d0(this.f,l),(v==1||v==2)&&(R=this.c[C1(this.f,l)],R!=-1&&(S=d0(this.g,R),OY(this,l,this.c)==(S==v)&&(this.a=bn(this.a,this.a.length+1),this.a[this.a.length-1]=R)));this.e=KY(this)}function e6(){e6=B1,zV=B(d(it,1),Dt,2,6,[\"[N](-*)(-*)-*\",\"[N](-*)=*\",\"[N]#*\",\"[N](-*)(=*)=* as in nitro\",\"[N](=*)#* middle atom of azide\",\"[N]1(-*)-*-*-1 3-membered ring\",\"[NH](-*)-*\",\"[NH]1-*-*-1 3-membered ring\",\"[NH]=*\",\"[NH2]-*\",\"[N+](-*)(-*)(-*)-*\",\"[N+](-*)(-*)=*\",\"[N+](-*)#* N in isocyano\",\"[NH+](-*)(-*)-*\",\"[NH+](-*)=*\",\"[NH2+](-*)-*\",\"[NH2+]=*\",\"[NH3+]-*\",\"[n](:*):*\",\"[n](:*)(:*):*\",\"[n](-*)(:*):*\",\"[n](=*)(:*):* as in pyridine-N-oxid\",\"[nH](:*):*\",\"[n+](:*)(:*):*\",\"[n+](-*)(:*):*\",\"[nH+](:*):*\",\"[O](-*)-*\",\"[O]1-*-*-1 3-membered ring\",\"[O]=*\",\"[OH]-*\",\"[O-]-*\",\"[o](:*):*\",\"[S](-*)-*\",\"[S]=*\",\"[S](-*)(-*)=*\",\"[S](-*)(-*)(=*)=*\",\"[SH]-*\",\"[s](:*):*\",\"[s](=*)(:*):*\",\"[P](-*)(-*)-*\",\"[P](-*)=*\",\"[P](-*)(-*)(-*)=*\",\"[PH](-*)(-*)=*\"]),xP=B(d(Ee,1),PA,6,15,[3.240000009536743,12.359999656677246,23.790000915527344,11.680000305175781,13.600000381469727,tV,12.029999732971191,21.940000534057617,23.850000381469727,26.020000457763672,0,tV,4.360000133514404,4.440000057220459,13.970000267028809,16.610000610351562,25.59000015258789,27.639999389648438,12.890000343322754,4.409999847412109,4.929999828338623,8.390000343322754,15.789999961853027,4.099999904632568,3.880000114440918,14.140000343322754,9.229999542236328,12.529999732971191,17.06999969482422,20.229999542236328,23.059999465942383,13.140000343322754,25.299999237060547,32.09000015258789,19.209999084472656,8.380000114440918,38.79999923706055,28.239999771118164,21.700000762939453,13.59000015258789,34.13999938964844,9.8100004196167,23.469999313354492])}function ka(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;i=h(yt,wt,6,t.q,15,1);t:for(r=0;r<i.length;r++){switch(p=t.a[r],i[r]=0,p){case 32:case 72:for(Q=0;Q<t.e[r];Q++){for(g=t.i[r][Q],R=t.a[g],T=0,c=0,L=0;L<t.e[g];L++)m=t.i[g][L],t.C[m]==7&&t.e[m]+xt(t,m)==2&&!(m<t.f&&i0(t.p,m))&&++T,(t.C[m]==8||t.C[m]==16)&&t.e[m]+xt(t,m)==1&&++c;if(t.C[g]==16&&c==2&&T==1&&(T=0),t.C[g]==6&&c>0){i[r]=c==1?-1:-(c-1)/c;continue t}if(R==45&&c==3){i[r]=-.3333333333333333;continue t}if(R==25&&c>0){i[r]=c==1?0:-(c-1)/c;continue t}if(R==18&&c>0){i[r]=T+c==2?0:-(T+c-2)/c;continue t}if(R==73&&c>0){i[r]=c==1?0:-(c-1)/c;continue t}if(R==77&&c>0){i[r]=-1/c;continue t}}break;case 76:for(C=0,S=(ut(t,7),t.p),j=0;j<S.j.a.length;j++)if(yA(S,j,r)){C=j;break}if(C<S.j.a.length){for(l=0,A=N(S.j,C),n=0,P=A.length;n<P;++n)e=A[n],e>-1&&t.a[e]==76&&++l;if(l>0){i[r]=-1/l;continue t}}break;case 55:case 56:case 81:for(i[r]=t.s[r],y=1,b=0,f=h(rt,ft,6,t.q,16,1),f[r]=!0;y>b;)for(b=y,U=0;U<t.q;U++)if(f[U]){for(L=0;L<t.e[U];L++)if(g=t.i[U][L],R=t.a[g],!(R!=57&&R!=80))for(s=0;s<t.e[g];s++)m=t.i[g][s],v=t.a[m],!(v!=55&&v!=56&&v!=81)&&(f[m]||(f[m]=!0,i[r]+=t.s[m],++y))}i[r]/=y;continue t;case 61:for(D=0;D<t.e[r];D++)if(g=t.i[r][D],t.a[g]==42){i[r]=1;continue t}continue t;case 34:case 49:case 51:case 54:case 58:case 92:case 93:case 94:case 97:i[r]=1;continue t;case 87:case 95:case 96:case 98:case 99:i[r]=2;continue t;case 88:i[r]=3;continue t;case 35:case 62:case 89:case 90:case 91:i[r]=-1;continue t}i[r]=0}return i}function ba(t,e,A){var n,P,r,i;for(t.u=e,t.a=A,n=vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*8))),P=B(d(F,1),k,6,15,[n,-1,-2,-2,n]),i=B(d(F,1),k,6,15,[n,-2,n,-2,-2,-2,-2,-2,-2,-2,n,-2,n,-2,n,-2,n,-2,2*n,-2,n/2|0,-2,n/2|0,-2,2*n]),_o(t.s,P,i),he(t.s,oe(t.s,\"Desired Bond type(s):\"),1,1,3,1),t.k=fn(t.s,\"Single\"),he(t.s,t.k,1,3,3,3),t.c=fn(t.s,\"Double\"),he(t.s,t.c,1,4,3,4),t.n=fn(t.s,\"Triple\"),he(t.s,t.n,1,5,3,5),t.i=fn(t.s,\"Quadruple\"),he(t.s,t.i,1,6,3,6),t.j=fn(t.s,\"Quintuple\"),he(t.s,t.j,1,7,3,7),t.b=fn(t.s,\"Delocalized\"),he(t.s,t.b,1,8,3,8),t.g=fn(t.s,\"Coordinate (0-order)\"),he(t.s,t.g,1,9,3,9),t.q=oA(t.s),Gt(t.q,\"any ring state\"),Gt(t.q,fV),Gt(t.q,\"is any ring bond\"),Gt(t.q,\"is non-aromatic ring bond\"),Gt(t.q,\"is aromatic bond\"),Gt(t.q,\"is any non-aromatic bond\"),JP(t.q,t),he(t.s,t.q,1,11,3,11),t.r=oA(t.s),Gt(t.r,\"any ring size\"),Gt(t.r,\"is in 3-membered ring\"),Gt(t.r,\"is in 4-membered ring\"),Gt(t.r,\"is in 5-membered ring\"),Gt(t.r,\"is in 6-membered ring\"),Gt(t.r,\"is in 7-membered ring\"),Gt(t.r,\"smallest ring 8 to 11\"),Gt(t.r,\"smallest ring >= 12\"),he(t.s,t.r,1,13,3,13),t.e=fn(t.s,\"Match formal bond order\"),uA(t.e,(e.G[A]&Ef)!=0),JP(t.e,t),he(t.s,t.e,1,15,3,15),t.f=fn(t.s,\"Match Stereo Configuration\"),uA(t.f,(e.G[A]&h8)!=0),JP(t.f,t),he(t.s,t.f,1,17,3,17),t.d=fn(t.s,\"Is atom bridge between\"),JP(t.d,t),he(t.s,t.d,1,19,3,19),t.p=oA(t.s),r=0;r<16;r++)Gt(t.p,\"\"+r);f0(t.s,t.p,2,21),f0(t.s,oe(t.s,\" and\"),3,21),JP(t.p,t),t.o=oA(t.s),Ah(t,0),f0(t.s,t.o,2,23),f0(t.s,oe(t.s,\" atoms\"),3,23),ut(t.u,7),Y_(t)}function op(){op=B1,xV=B(d(it,1),Dt,2,6,[\"gkvt@@@@LddTTTrbTRTRTRRRRRRRRRRRRRrVRrIh\\\\IAaQxlY@gRHdJCJcRXlv_CfJx|A\\\\hRHejiLaQjTje^kSjtFcIhvXmVKMjt{lN{Kavy\\\\^wGjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjh@@vo@HBC@PhLN@bPhtFKCcpDbILaRhtzCIbsX\\\\nOO`JDbqDjSKdJeJmQjtz}Ahr[LVkMnpz\\\\nwGj{PBhBdBlBBBjBfBnBaBiBeBmBcBkBgBoB`bhbdblbbbjbfbnbabibebmbcbkbgbob`RhRdRlRbRjRfRnRaRiReRmRcRkRgRoR`rhrdrlrbrjrfrnrarirermrcrkrgror`JhJdJlJbJjJfJnJaJiJeJmJcJkJgJoJ`jhjdjljbjjjfjnjajijej` !BnkjyVwsVr|iQn|Q|goTZWPIJwbudnRkVYBez]siZymNJZUqNFBqZWxS~iCXVU]SeRjwrtSPAjkvXLpBAZauDPzq]PfMlecrMnkv|@\\\\SFD`m|mWiEoCXp`SIe_J[l|[XCbloTV`[Gc@FJGopyyoOlFQfUy^w\\\\Bgz|\",\"gcrt@@@@LdbbbbTRbRbRbRRRRRRRRRRRRVRrVQIA`HtRGAaIxZAHfShTjCIbqylQGKgqdBaXeQJeruBiPitZmFoPZLFSYbvZlVGMnsZ]vWSmr{]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUT@@[G`DAA`HTFG@QHTZCEaqxBQDfPiTZ]AdqYlNWGgpEBQXbUIerEReVhuZ]^`tYMfKUfwX]NW[jkPBhBdBlBbBjBfBnBaBiBeBmBcBkBgBoB`bhbdblbbbjbfbnbabibebmbcbkbgbob`RhRdRlRbRjRfRnRaRiReRmRcRkRgRoR`rhrdrlrbrjrfrnrarirermrcrkrgror`JhJdJlJbJjJfJnJaJiJeJmJcJkJgJoJ`jhjdjljbjjjfjnjajij` !B^cR]`]Fm]QkfljE\\\\p\\x7FUVfgOmFXsQe_gXPyXis_wF|vUUX_XbxpzU]HUFgYViwFo~@uemc@}~T\\x7FIEPioYVwr]JnM~[ZEC\\\\g}~o_pUfdo~irsklTLiyVJshnw^iVAsZ`_~}PYkckURH{FYMImFaRaccUlCZSHMfP\",\"dml@@Dje^VGiyZjjjh@vtHSBinFU@ !BPTCTy[skMzUPF`AJbBixEZHS[Il\",\"dml@@DjYVvGiyZjjjh@vtHSBinFU@ !BwLo~BJ~UquhXBinZ\\\\ykA@F_eMrT\",\"dml@@LdfbbQX^fUZjjj`C[PaLJfxYT !BzxIHVc{OiJVRpprePho~]}y\\x7FwLl\",\"deL@@DjUYkfEijjjj@MeBDpj[ad !B\\x7FaA\\x7FMVr[AvkKzm_jKvVbD{sk\",\"dil@@LddTQRl[NX^Fjjjj@MiBDpj[a@ !BPfL@\\x7Fox@M~T@\\x7Fox@\\x7F`C~@@\",\"daL@@DjYtKJqjynjjjj@MaBDpj[` !B`bL@_gx@@Gy~@Gx@_`@\"])}function Ra(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S;for(m=h(rt,ft,6,t.R.f,16,1),v=h(rt,ft,6,t.R.g,16,1),e=0,b=!1,(t.Q&128)!=0&&(t.Y=h(F,k,6,t.R.f,15,1),t.X=h(F,k,6,t.R.g,15,1)),n=0;n<t.R.f;n++)t.W[n]&&(t.fb[n]||ey(t,n,1)&&(t.fb[n]=!0,m[n]=!0,++e));for(r=0;r<t.R.g;r++)t.V[r]&&(t.p[r]||JQ(t,r,1)&&(t.p[r]=!0,v[r]=!0,++e));if(e==1){for(A=0;A<t.R.f;A++)if(m[A]){t.db[A]=0;break}for(P=0;P<t.R.g;P++)if(v[P]){t.o[P]=0;break}}else if(e>1)for(zW(t),t.T=0,f=new Wt(t.A);f.a<f.c.a.length;){for(i=t1(f),R=0,j=0,U=0,Q=0,L=-1,D=-1,l=0;l<i.a.length;l++)m[i.a[l]]&&(++R,(t.db[i.a[l]]==1||t.db[i.a[l]]==2)&&(++j,b=!0,L<t.f[i.a[l]]&&(L=t.f[i.a[l]],U=i.a[l])));for(T=0;T<i.b.length;T++)v[i.b[T]]&&(++R,C=t.f[z(t.R,0,i.b[T])],S=t.f[z(t.R,1,i.b[T])],s=C>S?(C<<16)+S:(S<<16)+C,(t.o[i.b[T]]==1||t.o[i.b[T]]==2)&&(++j,b=!0,D<s&&(D=s,Q=i.b[T])));if(R!=0)if(R==1){for(c=0;c<i.a.length;c++)m[i.a[c]]&&(t.db[i.a[c]]=0);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.o[i.b[y]]=0)}else if(j==1){for(c=0;c<i.a.length;c++)m[i.a[c]]&&(t.db[i.a[c]]=3);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.o[i.b[y]]=3)}else{if((t.Q&128)!=0){for(++t.T,c=0;c<i.a.length;c++)m[i.a[c]]&&(t.Y[i.a[c]]=t.T);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.X[i.b[y]]=t.T)}if(g=!1,L!=-1?t.db[U]==2&&(g=!0):t.o[Q]==2&&(g=!0),g){for(c=0;c<i.a.length;c++)if(m[i.a[c]])switch(t.db[i.a[c]]){case 1:t.db[i.a[c]]=2;break;case 2:t.db[i.a[c]]=1}for(y=0;y<i.b.length;y++)if(v[i.b[y]])switch(t.o[i.b[y]]){case 1:t.o[i.b[y]]=2;break;case 2:t.o[i.b[y]]=1}}}}return b}function ja(t,e,A,n,P,r,i,f){var D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt;for(tt=N(t.j,e),L=tt,s=0,y=L.length;s<y;++s)if(U=L[s],!rX(t,U))return!0;for(W=N(t.k,e),$=W.length,T=0,Q=0,Pt=!1,C=0;C<$;C++)T<<=1,Q<<=1,dt(t.i,W[C])>1||l1(t.i,W[C])==8?T|=1:f&&ps(t,W[C])?(T|=1,Q|=1):(D=A[e][C],D!=-1&&(n[D]?P[D]&&(T|=1,r[D]||(Q|=1)):Pt=!0));switch(b=!1,$){case 3:for(c=B(d(F,1),k,6,15,[2,1,4]),b=!0,R=0;R<3;R++)(T&c[R])==c[R]&&(K(t.i,tt[R])==6&&p1(t.i,tt[R])==1||K(t.i,tt[R])==5&&p1(t.i,tt[R])==0)&&(P[e]=!0,i[e]=R,(Q&c[R])==0&&(b=!1));break;case 5:for(g=B(d(F,1),k,6,15,[10,5,18,9,20]),b=!0,X=0;X<5;X++)if((T&g[X])==g[X])switch(K(t.i,tt[X])){case 6:p1(t.i,tt[X])==-1&&(P[e]=!0,i[e]=X,(Q&g[X])==0&&(b=!1));break;case 7:p1(t.i,tt[X])<=0&&(P[e]=!0,i[e]=X);break;case 8:P[e]=!0,i[e]=X;break;case 16:case 34:case 52:O(t.i,tt[X])==2&&(P[e]=!0,i[e]=X)}break;case 6:b=!0,(T&21)==21&&(P[e]=!0,(Q&21)==0&&(b=!1)),(T&42)==42&&(P[e]=!0,(Q&42)==0&&(b=!1));break;case 7:for(m=B(d(F,1),k,6,15,[42,21,74,37,82,41,84]),b=!0,v=0;v<7;v++)if((T&m[v])==m[v]){if(K(t.i,tt[v])==6&&(p1(t.i,tt[v])==1||f&&iJ(t,tt[v]))||K(t.i,tt[v])==5&&p1(t.i,tt[v])==0)P[e]=!0,i[e]=v,(Q&m[v])==0&&(b=!1);else for(j=0;j<2;j++)if(lt=(v+6+j)%7,et=W[lt],st=A[e][lt],st!=-1&&!P[st]&&N(t.k,st).length==5){for(ct=N(t.k,st),S=0;ct[S]!=et;)++S;for(p=!1,E=0,x=1;x<=4;x++){if(l=ct[(S+x)%5],a=dt(t.i,l)>1||l1(t.i,l)==8||f&&ps(t,l),a&&p){E=0;break}p=a,p&&++E}if(E==2){P[e]=!0,P[st]=!0,r[e]=!0,r[st]=!0,mt(t.b,k1(et));break}}}}return P[e]&&!b&&(r[e]=!0),P[e]?!0:!Pt}function pa(t){var e,A,n,P,r,i,f,D,Q,U,L;for(ut(t,1),P=h(F,k,6,191,15,1),A=0;A<t.q;A++)switch(t.C[A]){case 171:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=1;break;case 172:P[1]+=12,P[6]+=6,P[7]+=4,P[8]+=1;break;case 173:P[1]+=6,P[6]+=4,P[7]+=2,P[8]+=2;break;case 174:P[1]+=5,P[6]+=4,P[7]+=1,P[8]+=3;break;case 175:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=1,P[16]+=1;break;case 176:P[1]+=8,P[6]+=5,P[7]+=2,P[8]+=2;break;case 177:P[1]+=7,P[6]+=5,P[7]+=1,P[8]+=3;break;case 178:P[1]+=3,P[6]+=2,P[7]+=1,P[8]+=1;break;case 179:P[1]+=7,P[6]+=6,P[7]+=3,P[8]+=1;break;case 181:case 180:P[1]+=11,P[6]+=6,P[7]+=1,P[8]+=1;break;case 182:P[1]+=12,P[6]+=6,P[7]+=2,P[8]+=1;break;case 183:P[1]+=9,P[6]+=5,P[7]+=1,P[8]+=1,P[16]+=1;break;case 184:P[1]+=9,P[6]+=9,P[7]+=1,P[8]+=1;break;case 185:P[1]+=7,P[6]+=5,P[7]+=1,P[8]+=1;break;case 186:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=2;break;case 187:P[1]+=7,P[6]+=4,P[7]+=1,P[8]+=2;break;case 188:P[1]+=10,P[6]+=11,P[7]+=2,P[8]+=1;break;case 189:P[1]+=9,P[6]+=9,P[7]+=1,P[8]+=2;break;case 190:P[1]+=9,P[6]+=5,P[7]+=1,P[8]+=1;break;case 1:switch(t.A[A]){case 0:case 1:++P[1];break;case 2:++P[151];break;case 3:++P[152]}break;default:++P[t.C[A]]}for(n=0;n<t.q;n++)t.C[n]>=171&&t.C[n]<=190?P[1]+=2-G1(t,n):P[1]+=xt(t,n);for(f=0,Q=1;Q<=190;Q++)P[Q]!=0&&++f;for(this.b=h(F,k,6,f,15,1),this.c=h(F,k,6,f,15,1),f=0,D=0;D<S2.length;D++)P[S2[D]]!=0&&(this.b[f]=P[S2[D]],this.c[f]=S2[D],++f,P[S2[D]]=0);for(;;){for(L=\"zzz\",U=-1,i=1;i<=190;i++)P[i]>0&&Kr(L,(Y1(),X0)[i])>0&&(L=(Y1(),X0)[i],U=i);if(U==-1)break;this.b[f]=P[U],this.c[f]=U,++f,P[U]=0}for(this.a=0,this.d=0,e=0;e<t.f;e++)t.C[e]!=1&&t.A[e]!=0&&(i=t.C[e],r=t.A[e],this.a+=xF(i,r)-m4[i],this.d+=xF(i,r)-k4[i])}function Ca(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0;for(y0=A[4],Nt=A[3]==-1?3:4,l=h(F,k,6,e.q,15,1),Ct=h(rt,ft,6,e.r,16,1),g=0;g<Nt;g++)Ct[n[g]]=!0;for(y=Wb(e,l,Ct,!1),T=h(F,k,6,y,15,1),Q=l,U=0,L=Q.length;U<L;++U)s=Q[U],++T[s];for(Ut=0,C=h(rt,ft,6,y,16,1),m=0;m<Nt;m++)s=l[A[m]],C[s]||(C[s]=!0,++Ut);for(Ht=h(F,k,6,Ut,15,1),Qt=h(F,k,6,Ut,15,1),$t=h(F,k,6,Ut,15,1),j=0,D=0;D<y;D++)if(C[D]){for(Ht[j]=D,Qt[j]=T[D],v=0;v<Nt;v++)D==l[A[v]]&&++$t[j];++j}if(S=h(rt,ft,6,e.q,16,1),e1=0,g1=2,Ut==Nt)for(Kt=-1,v=0;v<Nt-2;v++){for(Lt=-1,j1=It,x=0;x<Ut;x++)x!=Kt&&Qt[x]<j1&&(Lt=x,j1=Qt[x]);for(P=0;P<e.q;P++)l[P]==Ht[Lt]&&(S[P]=!0,++e1);Kt=Lt}else for(v=0;v<Ht.length;v++){if($t[v]==1&&Nt==3){for(p=2*Qt[v]<e.q,p||(g1=1),P=0;P<e.q;P++)P!=y0&&l[P]==Ht[v]==p&&(S[P]=!0,++e1);break}if($t[v]==2&&Nt==4){for(p=2*Qt[v]<e.q,P=0;P<e.q;P++)P!=y0&&l[P]==Ht[v]==p&&(S[P]=!0,++e1);break}}if(e1==0){for(v=0;v<Ht.length;v++)if($t[v]==1){for(P=0;P<e.q;P++)l[P]==Ht[v]&&(S[P]=!0,++e1);break}for(b1=Nt-2-(e1==0?0:1),R=0;R<b1;R++)for(x=0;x<Nt;x++)if(!S[A[x]]){S[A[x]]=!0,++e1;break}}for(j=0,t.a=h(F,k,6,e1,15,1),b=0;b<S.length;b++)S[b]&&(t.a[j++]=b);for(St=0,Rt=0,t.c=h(F,k,6,g1,15,1),t.b=h(F,k,6,Nt-g1,15,1),c=0;c<Nt;c++)if(S[A[c]]){if(Rt>=t.b.length){for(x1(),\"\"+new p3(e).a.a,E=A,$=0,ct=E.length;$<ct;++$);for(X=n,et=0,Pt=X.length;et<Pt;++et);for(tt=l,lt=0,Tt=tt.length;lt<Tt;++lt);for(a=C,W=0,st=a.length;W<st;++W);for(r=S,i=0,f=r.length;i<f;++i);}t.b[Rt++]=A[c]}else t.c[St++]=A[c]}function Ma(t,e){var A;switch(t.C[e]){case 7:if(e<t.f&&i0(t.p,e)){if(t.s[e]==0)if(t.e[e]-e0(t,e)+xt(t,e)==0){if(e0(t,e)==2)return 18;for(A=0;A<e0(t,e);A++)if(!_e(t,t.k[e][A]))return 20;return 19}else return 22;else if(t.s[e]==1)if(t.e[e]-e0(t,e)+xt(t,e)==0){for(A=0;A<e0(t,e);A++)if(!_e(t,t.k[e][A]))return p1(t,t.i[e][A])<0?21:24;return 23}else return 25}else if(t.s[e]==0)switch(t.e[e]-e0(t,e)+xt(t,e)){case 0:switch(t.o[e]){case 0:return(t.p&&e<t.f?iA(t.p,e):0)==3?5:0;case 1:return 1;case 2:return 2}break;case 1:switch(t.o[e]){case 0:return(t.p&&e<t.f?iA(t.p,e):0)==3?7:6;case 1:return 8}break;case 2:return 9}else if(t.s[e]==1)switch(t.e[e]-e0(t,e)+xt(t,e)){case 0:switch(t.o[e]){case 0:return 10;case 1:return av(t,e)?3:11;case 2:return t.n[e][0]==2?av(t,e)?4:xP.length+1:12}break;case 1:switch(t.o[e]){case 0:return 13;case 1:return 14}break;case 2:return t.o[e]==0?15:16;case 3:return 17}return xP.length+1;case 8:if(e<t.f&&i0(t.p,e)){if(t.s[e]==0)return 31}else{if(t.s[e]==0)return t.o[e]>0?28:e0(t,e)==1?29:(t.p&&e<t.f?iA(t.p,e):0)==3?27:26;if(t.s[e]==-1)return e0(t,e)==1&&p1(t,t.i[e][0])>0?28:30}return xP.length+1;case 15:if(t.s[e]==0){if(t.e[e]-e0(t,e)+xt(t,e)==0){if(e0(t,e)==3&&t.o[e]==0)return 39;if(e0(t,e)==2&&t.o[e]==1)return 40;if(e0(t,e)==4&&t.o[e]==1)return 41}else if(t.e[e]-e0(t,e)+xt(t,e)==1&&e0(t,e)==3&&t.o[e]==1)return 42}return xP.length+1;case 16:if(t.s[e]==0){if(e<t.f&&i0(t.p,e))return e0(t,e)==2?37:38;if(t.e[e]-e0(t,e)+xt(t,e)==0){if(e0(t,e)==2&&t.o[e]==0)return 32;if(e0(t,e)==1&&t.o[e]==1)return 33;if(e0(t,e)==3&&t.o[e]==1)return 34;if(e0(t,e)==4&&t.o[e]==2)return 35}else if(t.e[e]-e0(t,e)+xt(t,e)==1&&e0(t,e)==1)return 36}return xP.length+1}return xP.length}function Ha(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a;for(T=0,c=(f=ne(e,T),f==-1?e.length:f),n=c1((pt(T,c,e.length),e.substr(T,c-T)),o1,It),T=lA(e,c),c=(D=ne(e,T),D==-1?e.length:D),m=(pt(T,c,e.length),e.substr(T,c-T)),C=null,P=!1,g=OZ(e),g!=0&&(C=WZ(e),g<0&&(P=!0),c=w.Math.abs(g)),T=lA(e,c),c=(Q=ne(e,T),Q==-1?e.length:Q),p=Qn((pt(T,c,e.length),e.substr(T,c-T))),T=lA(e,c),c=(U=ne(e,T),U==-1?e.length:U),x=Qn((pt(T,c,e.length),e.substr(T,c-T))),T=lA(e,c),c=(L=ne(e,T),L==-1?e.length:L),a=Qn((pt(T,c,e.length),e.substr(T,c-T))),T=lA(e,c),c=(s=ne(e,T),s==-1?e.length:s),R=c1((pt(T,c,e.length),e.substr(T,c-T)),o1,It),A=W0(t.j,p,-x,-a),A+1!=n&&(!t.b&&(t.b=new lP),ze(t.b,k1(n),k1(A))),C!=null&&(K0(t.j,A,6),Tf(t.j,A,C,P)),R!=0&&Ze(t.j,A,R,!1),A1(m,\"A\")||A1(m,\"*\")?T1(t.j,A,1,!0):A1(m,\"Q\")?(v=h(F,k,6,1,15,1),v[0]=6,Tf(t.j,A,v,!0)):K0(t.j,A,SA(m,67));(T=lA(e,c))!=-1;)if(c=(i=ne(e,T),i==-1?e.length:i),b=(pt(T,c,e.length),e.substr(T,c-T)),l=b.indexOf(k0(61)),y=(pt(0,l,b.length),b.substr(0,l)),S=c1((Xt(l+1,b.length+1),b.substr(l+1)),o1,It),A1(y,\"CHG\"))E0(t.j,A,S);else if(A1(y,\"RAD\"))switch(S){case 1:Ne(t.j,A,16);break;case 2:Ne(t.j,A,32);break;case 3:Ne(t.j,A,48)}else if(!A1(y,\"CFG\")){if(A1(y,\"MASS\"))jr(t.j,A,S);else if(A1(y,\"VAL\"))XA(t.j,A,S==-1?0:S==0?-1:S);else if(A1(y,\"HCOUNT\"))switch(S){case 0:break;case-1:T1(t.j,A,1792,!0);break;case 1:T1(t.j,A,128,!0);break;case 2:T1(t.j,A,384,!0);break;default:T1(t.j,A,896,!0)}else if(A1(y,\"SUBST\")){if(S==-1)T1(t.j,A,I1,!0);else if(S>0){for(j=0,r=0;r<t.j.r;r++)(z(t.j,0,r)==A||z(t.j,1,r)==A)&&++j;S>j&&T1(t.j,A,C0,!0)}}else if(A1(y,\"RBCNT\"))switch(S){case 3:case-1:T1(t.j,A,112,!0);break;case 1:T1(t.j,A,8,!0);break;case 2:T1(t.j,A,104,!0);break;case 4:T1(t.j,A,56,!0)}}}function Va(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut;for(ut(t.k,1),t.g=h(rt,ft,6,t.k.g,16,1),t.c=0,L=0;L<t.k.g;L++)l1(t.k,L)==8&&(w0(t.k,L,1),t.g[L]=!0,++t.c);for(v=h(rt,ft,6,t.k.f,16,1),Ut=new Qo(t.k,3),m=h(rt,ft,6,Ut.j.a.length,16,1),Tt=0;Tt<Ut.j.a.length;Tt++){for(Ct=N(Ut.j,Tt),m[Tt]=!0,C=Ct,x=0,X=C.length;x<X;++x)if(b=C[x],!z0(t.k,b)){m[Tt]=!1;break}if(m[Tt]){for(S=Ct,a=0,tt=S.length;a<tt;++a)b=S[a],v[b]=!0;for($t=N(Ut.k,Tt),j=$t,p=0,E=j.length;p<E;++p)b=j[p],t.g[b]||(t.g[b]=!0,++t.c)}}for(s=0;s<t.k.g;s++)!t.g[s]&&(Ut.c[s]&w1)!=0&&z0(t.k,z(t.k,0,s))&&z0(t.k,z(t.k,1,s))&&r_(t,s);for(y=0;y<t.k.g;y++)t.g[y]||(r=z(t.k,0,y),i=z(t.k,1,y),!v[r]&&!v[i]&&z0(t.k,r)&&z0(t.k,i)&&(t.g[y]=!0,++t.c));for(ut(t.k,7),(t.q==2||t.q==1&&t.p)&&kX(t),g=h(rt,ft,6,t.k.g,16,1),t.k.g>=0&&sA(t.g,0,g,0,t.k.g),Kt=0;Kt<Ut.j.a.length;Kt++)if(m[Kt]){for(Ct=N(Ut.j,Kt),$=Ct,et=0,lt=$.length;et<lt;++et)if(W=$[et],!dZ(t,W))for(z0(t.k,W)&&(zn(t.k,W,!1),--t.b),b=0;b<O(t.k,W);b++)T=Ot(t.k,W,b),t.g[T]&&(t.g[T]=!1,--t.c)}for(U5(t),Pt=0;Pt<Ut.j.a.length;Pt++)if(m[Pt]&&N(Ut.k,Pt).length==6){for($t=N(Ut.k,Pt),R=!0,D=$t,Q=0,U=D.length;Q<U;++Q)if(f=D[Q],!t.g[f]){R=!1;break}R&&(vQ(t,$t[0]),vQ(t,$t[2]),vQ(t,$t[4]),U5(t))}for(ct=5;ct>=4;ct--)do for(st=!1,f=0;f<t.k.g;f++)if(t.g[f]){for(n=0,c=0;c<2;c++)for(l=z(t.k,c,f),b=0;b<O(t.k,l);b++)t.g[Ot(t.k,l,b)]&&++n;if(n==ct){vQ(t,f),U5(t),st=!0;break}}while(st);for(;t.b>=2&&s_(t,g););if(e){if(t.b!=0)for(P=0;P<t.k.f;P++)z0(t.k,P)&&(zn(t.k,P,!1),T1(t.k,P,2,!0),--t.b,A=!0);if(t.c!=0)for(f=0;f<t.k.g;f++)t.g[f]&&(t.g[f]=!1,w0(t.k,f,8),--t.c,A=!0)}else for(P=0;P<t.k.f;P++)z0(t.k,P)&&xt(t.k,P)!=0&&(zn(t.k,P,!1),Ne(t.k,P,32),--t.b);if(t.q==0||t.q==1&&!A){if(t.b!=0)throw At(new V1(Gp));if(t.c!=0)throw At(new V1(Gp))}}function c2(){c2=B1,IA=B(d(Ee,1),PA,6,15,[1,uU,O6,2.119999885559082,1.9800000190734863,1.909999966621399,1.7699999809265137,My,1.5,G6,1.5800000429153442,2.5,2.509999990463257,2.25,2.190000057220459,J6,1.8899999856948853,eC,1.8300000429153442,2.7300000190734863,2.619999885559082,2.5799999237060547,AC,nC,Hy,Hy,z6,PC,PC,2.380000114440918,2.390000104904175,Y6,K6,1.8799999952316284,eC,rC,2.25,3.2100000381469727,2.8399999141693115,2.75,2.5199999809265137,2.559999942779541,Hy,z6,AC,z6,2.1500000953674316,iC,fC,2.430000066757202,nC,DC,1.9900000095367432,2.0399999618530273,2.059999942779541,3.4800000190734863,3.0299999713897705,2.9800000190734863,uC,QC,2.950000047683716,QC,2.9000000953674316,UC,X6,oC,UC,LC,X6,oC,sC,2.740000009536743,2.630000114440918,iC,2.569999933242798,fC,2.4800000190734863,2.4100000858306885,K6,Y6,Hy,DC,2.5999999046325684,2.5399999618530273,2.5,2.5,2.5,2.5,2.5,sC,2.930000066757202,uC,2.7100000381469727,2.819999933242798,LC,X6,yC,3.4000000953674316,yC,2.700000047683716]),Jf=B(d(Ee,1),PA,6,15,[.25,Z6,.46000000834465027,lC,1.0199999809265137,QU,.75,.7099999785423279,.6299999952316284,.6399999856948853,.9599999785423279,TC,hC,1.2599999904632568,W6,cC,1.0299999713897705,.9900000095367432,wC,gC,dC,1.4800000190734863,_6,BC,vC,1.190000057220459,W6,cC,1.100000023841858,uU,uU,FC,Vy,Vy,W6,1.1399999856948853,Vy,mC,$6,a6,1.5399999618530273,kC,1.3799999952316284,bC,1.25,1.25,uU,hC,RC,G6,fU,fU,_6,lC,1.350000023841858,Y6,gC,py,a6,jC,1.7400000095367432,pC,CC,Ey,MC,Ey,HC,My,t4,1.6399999856948853,UU,VC,1.5199999809265137,G6,EC,1.309999942779541,SC,vC,1.2300000190734863,FC,1.4199999570846558,1.5,RC,1.5099999904632568,qC,kC,qC,2.2300000190734863,2.009999990463257,rC,1.75,MC,UU,dC,CC,My,My,Ey,Ey,t4,HC,pC,jC,1.6100000143051147,IC,1.4900000095367432,O6,1.409999966621399,BC,SC,bC,Vy,EC,_6,O6,VC,1.75,t4,IC])}function Ea(t,e,A){var n,P,r,i,f,D,Q,U;switch(f=A.a.length,0<f?A.a=UA(A.a,0,0):0>f&&(A.a+=q8(h(l9,a0,6,-f,15,1))),D=o0(t.k,e),P=zt(q0(V(D,i9),3)),P){case 20971520:A.a+=\"+0\";break;case 25165824:p1(t.k,e)==0&&(A.a+=\"-\");break;case 12582912:p1(t.k,e)==0&&(A.a+=\"+\")}return n=V(D,Ty),G(n,2)==0?A.a+=\";a\":G(n,4)==0&&(A.a+=\";A\"),r=V(D,rP),G(r,0)!=0&&(G(r,1792)==0?A.a+=\";H0\":G(r,1664)==0?A.a+=\";H1\":G(r,1408)==0?A.a+=\";H2\":G(r,896)==0?A.a+=\";H3\":G(r,128)==0?A.a+=\";!H0\":G(r,384)==0?A.a+=\";!H0;!H1\":G(r,1536)==0?A.a+=\";!H2;!H3\":G(r,re)==0&&(A.a+=\";!H3\")),U=V(D,120),G(U,8)==0?A.a+=\";!R0\":G(U,16)==0?A.a+=\";!R1\":G(U,32)==0?A.a+=\";!R2\":G(U,64)==0?A.a+=\";!R3\":G(U,112)==0?A.a+=\";R0\":G(U,104)==0?A.a+=\";R1\":G(U,88)==0?A.a+=\";R2\":G(U,56)==0&&(A.a+=\";R3\"),Q=V(D,rr),G(Q,L8)==0?A.a+=\";!r\"+Te(Q):G(Q,jp)==0?A.a+=\";r\"+Te(Q):G(Q,0)!=0&&(gt(V(Q,pf),0)?(P0(V(Q,L8),0)&&(A.a+=\";!r0\"+Te(Q)),P0(V(Q,ir),0)&&(A.a+=\";!r3\"+Te(Q)),P0(V(Q,fr),0)&&(A.a+=\";!r4\"+Te(Q)),P0(V(Q,Dr),0)&&(A.a+=\";!r5\"+Te(Q)),P0(V(Q,ur),0)&&(A.a+=\";!r6\"+Te(Q)),P0(V(Q,Qr),0)&&(A.a+=\";!r7\"+Te(Q))):(A.a+=\";\",gt(V(Q,L8),0)&&(A.a+=\"r0,\"+Te(Q)),gt(V(Q,ir),0)&&(A.a+=\"r3,\"+Te(Q)),gt(V(Q,fr),0)&&(A.a+=\"r4,\"+Te(Q)),gt(V(Q,Dr),0)&&(A.a+=\"r5,\"+Te(Q)),gt(V(Q,ur),0)&&(A.a+=\"r6,\"+Te(Q)),gt(V(Q,Qr),0)&&(A.a+=\"r7,\"+Te(Q)),un(A,A.a.length-1))),G(Q,0)==0&&(Q=q0(V(D,f9),22),G(Q,0)!=0&&(A.a+=\";r\"+Te(Q))),i=V(D,si),G(i,_Q)==0&&(A.a+=\";D1\"),G(i,d2)==0&&(A.a+=\";D2\"),G(i,B2)==0&&(A.a+=\";D3\"),G(i,$Q)==0&&(A.a+=\";!D3;!D4\"),G(i,qA)==0&&(A.a+=\";!D4\"),G(i,yi)==0&&(A.a+=\";!D0;!D1\"),G(i,SP)==0&&(A.a+=\";!D0;!D1;!D2\"),G(i,Hf)==0&&(A.a+=\";!D0;!D1;!D2;!D3\"),gt(V(D,I1),0)&&J(A,\";D\"+O(t.k,e)),gt(V(D,C0),0)&&J(A,\";!D\"+O(t.k,e)),A.a.length==0?null:A.a}function Sa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(t.C[e]!=7||t.s[e]!=0||t.j[e]+t.o[e]>3)return!1;if(e<t.f&&i0(t.p,e)){if(t.o[e]!=1||E5(t,e,7)!=1)return!1;for(R=(ut(t,7),t.p),m=0;m<R.j.a.length;m++)if(yA(R,m,e)){if(N(R.k,m).length==5||N(R.k,m).length==6){for(b=N(R.j,m),c=-1,D=0;D<b.length;D++)if(b[D]==e){c=D;break}for(P=0,g=null,T=null,b.length==5&&(g=h(F,k,6,2,15,1),g[0]=b[c-1<0?c+4:c-1],g[1]=b[c-4<0?c+1:c-4],T=h(F,k,6,2,15,1),T[0]=b[c-2<0?c+3:c-2],T[1]=b[c-3<0?c+2:c-3]),b.length==6&&(g=h(F,k,6,3,15,1),g[0]=b[c-1<0?c+5:c-1],g[1]=b[c-3<0?c+3:c-3],g[2]=b[c-5<0?c+1:c-5],T=h(F,k,6,2,15,1),T[0]=b[c-2<0?c+4:c-2],T[1]=b[c-4<0?c+2:c-4]),Q=0;Q<b.length;Q++)e!=b[Q]&&t.C[b[Q]]==7&&t.o[b[Q]]==1&&--P;for(U=0;U<g.length;U++){for(r=-1,i=-1,l=0;l<t.j[g[U]];l++)if(!_e(t,t.k[g[U]][l])){r=t.i[g[U]][l],i=t.k[g[U]][l];break}if(r!=-1){if(t.C[r]==7&&t.o[r]==0&&t.j[r]+t.o[r]<=3&&!e5(t,r,!1)){++P;continue}if(t.C[r]==8&&t.j[r]==1){P+=2;continue}if(i<t.g&&Re(t.p,i)){for(j=0;j<R.j.a.length;j++)if(R.e[j]&&yA(R,j,r)){for(v=N(R.j,j),y=0;y<v.length;y++)if(t.C[v[y]]==7&&t.o[v[y]]==1){--P;break}break}}}}for(L=0;L<T.length;L++){for(r=-1,y=0;y<t.j[T[L]];y++)_e(t,t.k[T[L]][y])||(r=t.i[T[L]][y]);t.C[T[L]]==6?r!=-1&&Df(t,r)!=0&&--P:t.C[T[L]]==7&&t.o[T[L]]==0&&(r==-1||!(r<t.f&&i0(t.p,r))&&Df(t,r)==0)&&++P}return P>0}break}return!1}if(t.o[e]>1)return!1;if(t.o[e]==1){for(s=-1,C=0,D=0;D<t.j[e];D++){if(n=t.i[e][D],t.n[e][D]==2){if(t.C[n]!=6)return!1;s=n;continue}if(t.C[n]==8)return!1;if(t.C[n]==7){--C,e5(t,n,!1)&&--C;continue}n<t.f&&i0(t.p,n)&&--C}if(s==-1)return!1;for(A=0,Q=0;Q<t.j[s];Q++)if(t.n[s][Q]==1){if(n=t.i[s][Q],Df(t,n)!=0)return!1;n<t.f&&i0(t.p,n)&&++A,t.C[n]==7&&!e5(t,n,!0)&&++C,(t.C[n]==8||t.C[n]==16)&&--C}return A==2&&--C,C>=0}for(f=0;f<t.j[e];f++)if(n=t.i[e][f],n<t.f&&i0(t.p,n)||t.C[n]!=6||Df(t,n)!=0||t.o[n]!=0&&zz(t,n))return!1;return!0}function A6(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt;if(K(t.R,A)!=K(t.R,n))return K(t.R,A)>K(t.R,n);if(ye(t.R,A)!=ye(t.R,n))return X=Du(t.R,A)?(Y1(),U9)[K(t.R,A)]:ye(t.R,A),tt=Du(t.R,n)?(Y1(),U9)[K(t.R,n)]:ye(t.R,n),X>tt;for(j=t.R.f,m=h(F,k,6,j,15,1),R=h(F,k,6,j,15,1),b=h(F,k,6,j,15,1),v=h(rt,ft,6,j,16,1),D=h(rt,ft,6,t.R.q,16,1),m[0]=e,m[1]=A,m[2]=n,R[0]=-1,R[1]=0,R[2]=0,D[e]=!0,D[A]=!0,D[n]=!0,s=1,C=2,E=h(F,k,6,64,15,1),E[1]=1,E[2]=3,l=2;s<=C;){for(;s<E[l];){if(y=m[s],!v[s]){for(T=0,c=0,p=0;p<O(t.R,y);p++){if(U=_(t.R,y,p),C+pA(t.R,y,p)+1>=j&&(j+=t.R.f,m=vL(m,j),R=vL(R,j),b=vL(b,j),v=(lt=h(rt,ft,6,j,16,1),sA(v,0,lt,0,v.length),lt)),G8(t.R,Ot(t.R,y,p)))++T,c+=K(t.R,U);else if(U!=e)for(a=1;a<pA(t.R,y,p);a++)++C,m[C]=U,R[C]=s,v[C]=!0;if($=R[s],U!=m[$]){if(f=!1,D[U])for(W=R[$];W!=-1;){if(U==m[W]){f=!0;break}W=R[W]}f?(++C,m[C]=U,R[C]=s,v[C]=!0):(++C,m[C]=U,R[C]=s,D[U]=!0)}}T!=0&&(++C,b[C]=(c<<2)/T|0,R[C]=s,v[C]=!0)}if(++s,s==nP)throw At(new V1(\"Emergency break in while loop.\"))}for(E.length==l+1&&(E=vL(E,E.length+64)),E[l+1]=C+1,S=E[l];S<E[l+1];S++)b[S]==0&&(b[S]=(K(t.R,m[S])==151||K(t.R,m[S])==152?1:K(t.R,m[S]))<<2),b[S]+=b[R[S]]<<16;if(NR(t,v,b,R,m,E,l),b[1]!=b[2])return b[1]>b[2];l>1&&iR(b,R,E,l),++l}for(L=h(F,k,6,t.R.f,15,1),x=!1,r=0;r<t.R.f;r++)if(D[r]&&!Du(t.R,r)){x=!0;break}if(x){for(i=0;i<t.R.f;i++)L[i]=Du(t.R,i)?(Y1(),U9)[K(t.R,i)]:ye(t.R,i);if(Vh(t,v,b,R,m,L,E,l))return b[1]>b[2]}for(V9(L,L.length,0),g=!1,Q=0;Q<t.R.g;Q++)(D[z(t.R,0,Q)]||D[z(t.R,1,Q)])&&(t.i[Q]==1?(L[z(t.R,0,Q)]=1,L[z(t.R,1,Q)]=1,g=!0):t.i[Q]==2&&(L[z(t.R,0,Q)]=2,L[z(t.R,1,Q)]=2,g=!0));if(g&&Vh(t,v,b,R,m,L,E,l))return b[1]>b[2];for(V9(L,L.length,0),et=!1,P=0;P<t.R.f;P++)D[P]&&(t.$[P]==2?(L[P]=1,et=!0):t.$[P]==1&&(L[P]=2,et=!0));if(et&&Vh(t,v,b,R,m,L,E,l))return b[1]>b[2];throw t.d=!0,At(new V1(\"no distinction applying CIP rules\"))}function n6(){n6=B1,Zf=B(d(F,2),D0,7,0,[B(d(F,1),k,6,15,[-1432180054,-1434146134,-1441453406,-1471067516,-1589095916,-2060839854,1420461386,1454022954,1454024874]),B(d(F,1),k,6,15,[-1431677611,-1431764987,-1432092655,-1433403327,-1438646015,-1459616762,-1543499750,-1879031702,1431634346,1073809066,1073814186,1073834666,1431677610]),B(d(F,1),k,6,15,[-1431737686,-1453057622,-1542187926,-1542188954,-1459351471,-1459351487,u4,1094713345,1077936134,-1879048186,-1543503866,-1543503846,-1459617766,Q4,C2,C2]),B(d(F,1),k,6,15,[-1431737686,-1453057622,-1542187926,-1542188954,-1459351471,-1459351487,u4,1094713345,1077952518,-1879031802,-1543154682,-1543487462,-1459601382,Q4,C2,C2]),B(d(F,1),k,6,15,[_y,_y,-1431741782,-1437330070,-1459351462,-1459351482,u4,-1858076671,-1874853882,-1879048186,-1543503866,-1543503846,-1459617766,Q4,C2,C2]),B(d(F,1),k,6,15,[_y,-1432005270,-1454374890,-1543503871,-1879048191,1073741825,1073741846,1073743210,-1795073366,1079421610,1147841194,-1783977302,$y,$y,-1498764630]),B(d(F,1),k,6,15,[_y,-1432005270,-1454374890,-1543438335,-1878982655,1075138561,1073807382,1073808746,-1795073366,1079421610,1147841194,-1783977302,$y,$y,-1498764630]),B(d(F,1),k,6,15,[1431655786,u9,Nf,u9,Nf,u9,Nf,u9,Nf,u9,Nf,u9,1145324650]),B(d(F,1),k,6,15,[1431655786,u9,Nf,u9,Nf,u9,1073758314,1073758250,1074091114,1073758250,1073758314,u9,1145324650]),B(d(F,1),k,6,15,[-1432003926,-1437248086,1767548266,1437248090,1437248086,1433053846,1433037477,-1431672155,-1432004955,1433037477,1433037462,1437248086,1437248090,1767548266,-1437248086,-1432003926]),null]),$V=B(d(F,1),k,6,15,[1,7,7,5,8,7,8,7,8,7,2,14,2,14,0,0,0,0,8,8,0,0]),aV=B(d(F,1),k,6,15,[4,20,10,29,18,18,18,18,18,18,16,11,16,11,4,5,4,5,16,16,16,16,0,0,0,0,12,2]),tE=B(d(it,1),Dt,2,6,[\"chain.png\",\"eraser.png\",\"hand.png\",\"handPlus.png\",\"fist.png\",\"lasso.png\",\"lassoPlus.png\",\"rect.png\",\"rectPlus.png\",\"zoom.png\",\"invisible.png\",null,null,\"pointingHand.png\"])}function qa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(L=!1,t.R.K){for(Q=0;Q<t.R.g;Q++)if(ee(t.R,Q)!=0){L=!0;break}}for(t.O=2,A=0;A<t.R.f;A++)t.O=w.Math.max(t.O,O(t.R,A)+xi(t.R,A));for(D=w.Math.max(2,L?(62+t.c+t.O*(t.c+23))/63|0:(62+t.c+t.O*(t.c+5))/63|0),t.f=h(F,k,6,t.R.q,15,1),t.e=h(B4,k2,100,t.R.f,0,1),n=0;n<t.R.f;n++)t.e[n]=new bo(D);for(f=!1,P=0;P<t.R.f;P++)$e(t.e[P],P),gt(V(o0(t.R,P),1),0)||MA(t.R,P)!=null?_1(t.e[P],8,6):_1(t.e[P],8,K(t.R,P)),_1(t.e[P],8,ye(t.R,P)),_1(t.e[P],2,a1(t.R,P)),_1(t.e[P],4,O(t.R,P)+xi(t.R,P)),gt(V(o0(t.R,P),1),0)?_1(t.e[P],4,8):_1(t.e[P],4,8+p1(t.R,P)),_1(t.e[P],5,w.Math.min(31,M9(t.R,P))),_1(t.e[P],4,TX(t,P)+1),_1(t.e[P],2,FA(t.R,P)>>4),t.R.K&&(_1(t.e[P],51,o0(t.R,P)),MA(t.R,P)!=null&&(f=!0));if(t.U=Wn(t),t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),s=h(F,k,6,O(t.R,e),15,1),l=0;l<O(t.R,e);l++)s[l]=t.f[_(t.R,e,l)]<<5,s[l]|=w.Math.min(31,pr(t.R,Ot(t.R,e,l)));for(s.sort(Fe(u0.prototype.gd,u0,[])),T=t.O;T>s.length;T--)_1(t.e[e],t.c+5,0);for(y=s.length-1;y>=0;y--)_1(t.e[e],t.c+5,s[y])}t.U=Wn(t)}if(f&&t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),i=MA(t.R,e),m=i==null?0:w.Math.min(12,i.length),l=12;l>m;l--)_1(t.e[e],8,0);for(y=m-1;y>=0;y--)_1(t.e[e],8,i[y])}t.U=Wn(t)}if(L&&t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),U=h(NA,a0,6,O(t.R,e)+xi(t.R,e),14,1),c=0,l=0;l<De(t.R,e);l++)(l<O(t.R,e)||l>=Mt(t.R,e))&&(U[c]=t.f[_(t.R,e,l)],U[c]=M1(U[c],23),U[c]=Y(U[c],ee(t.R,Ot(t.R,e,l))),++c);for(U.sort(Fe(Nl.prototype.hd,Nl,[])),T=t.O;T>U.length;T--)_1(t.e[e],t.c+23,0);for(y=U.length-1;y>=0;y--)_1(t.e[e],t.c+23,U[y])}t.U=Wn(t)}if((t.Q&8)!=0&&t.U<t.R.f){for(g=new nu,r=0;r<t.R.f;r++)_n(t.R,r)!=null&&js(g,_n(t.R,r));for(e=0;e<t.R.f;e++)v=_n(t.R,e)==null?0:1+$h(g,_n(t.R,e)),$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],t.c,v);t.U=Wn(t)}if((t.Q&16)!=0&&t.U<t.R.f){for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],1,r0(t.R,e)?1:0);t.U=Wn(t)}(t.Q&512)!=0&&t.R.K&&xX(t)}function Ia(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;if(e.j==1){if(t.t!=-1&&t.i.a.length!=0&&as(t,t.i.a),un(t.i,0),e.e){SR(t);return}if(e.b==1){if(e.c==2)return;t.W=!0,A9(t),$a(t,e)}}if(e.j==2){if(e.e){SR(t);return}e.b==1&&(t.W=!1,A9(t),va(t))}if(e.j==3&&e.b==1&&e.c==2){sa(t,e.g,e.i);return}if(e.j==4&&(Md(t._),A9(t)),e.j==6&&(t.W=!1,g=e.g,m=e.i,Wj(t,g,m,!1)&&n1(t.k),A9(t)),e.j==7){switch(t.W=!0,t.ib=e.g,t.lb=e.i,s=Wj(t,t.ib,t.lb,!0),t.X){case 2:Fa(t)&&(s=!0);break;case 1:(t.ib-t.hb)*(t.ib-t.hb)+(t.lb-t.kb)*(t.lb-t.kb)<100&&z5(t,t.e),s=!0;break;case 3:Be(t.V,t.e,t.gb[t.e]+t.ib-t.hb),Ie(t.V,t.e,t.jb[t.e]+t.lb-t.kb),t.f!=-1&&(Be(t.V,t.f,t.gb[t.f]+t.ib-t.hb),Ie(t.V,t.f,t.jb[t.f]+t.lb-t.kb)),t.eb=w.Math.max(t.eb,2),n1(t.k);break;case 9:h_(t),t.X=4;case 4:if(t.I)for(r=new Wt(t.I);r.a<r.c.a.length;)P=t1(r),P.g&&P.Ob(t.ib,t.lb);for(f=0;f<t.V.q;f++)r0(t.V,f)&&(Be(t.V,f,t.gb[f]+t.ib-t.hb),Ie(t.V,f,t.jb[f]+t.lb-t.kb));t.eb=w.Math.max(t.eb,2),n1(t.k);break;case 11:mt(t.I,t.v.Gb()),t.X=10;case 10:t.v.Ob(t.ib,t.lb),t.eb=w.Math.max(t.eb,2),n1(t.k);break;case 7:for(y=!1,n=0;n<t.V.q&&!y;n++)y=r0(t.V,n);if(l=!1,t.I)for(D=0;D<t.I.a.length&&!l;D++)l=N(t.I,D).g;if(U=w.Math.abs(t.lb-t.kb)<20?1:w.Math.exp((t.lb-t.kb)/100),A=w.Math.abs(t.ib-t.hb)<20?0:(t.ib-t.hb)/50,T=y||l,t.I&&(!T||l)){for(D=0;D<t.I.a.length;D++)(!T||N(t.I,D).g)&&N(t.I,D).Pb(U,A);t.eb=w.Math.max(t.eb,2),n1(t.k)}(!T||y)&&(Rk(t.V,U,A,T),t.eb=w.Math.max(t.eb,2),n1(t.k));break;case 5:case 6:if(c=null,t.X==5){if(w.Math.abs(t.ib-U7(t.R,t.R.a-1))<3&&w.Math.abs(t.lb-o7(t.R,t.R.a-1))<3)break;iq(t.R),Ce(t.R,t.ib,t.lb),Ce(t.R,t.hb,t.kb),c=t.R}else c=new QA(w.Math.min(t.hb,t.ib),w.Math.min(t.kb,t.lb),w.Math.abs(t.ib-t.hb),w.Math.abs(t.lb-t.kb));if(t.I)for(D=0;D<t.I.a.length;D++)L=N(t.I,D),Q=jJ(L,c),(!t.O||!t.Q[D])&&Q!=L.g&&(L.g=Q,t.eb=w.Math.max(t.eb,1));for(i=0;i<t.V.q;i++)Q=c.Hb(vt(kt(t.V,i)),vt(jt(t.V,i))),(!t.O||!t.P[i])&&Q!=r0(t.V,i)&&(dP(t.V,i,Q),t.eb=w.Math.max(t.eb,1));s=!0;break;case 8:s=!0}s&&n1(t.k)}}function xa(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;if(U=B(d(yt,2),h0,15,0,[B(d(yt,1),wt,6,15,[20]),null,null,B(d(yt,1),wt,6,15,[0,10]),null,null,B(d(yt,1),wt,6,15,[-4,12]),B(d(yt,1),wt,6,15,[0,0,-7.5]),null,null,null,null,B(d(yt,1),wt,6,15,[8.571428571428571,-8.571428571428571]),null,null,null,B(d(yt,1),wt,6,15,[-2.4])]),L=B(d(F,2),D0,7,0,[B(d(F,1),k,6,15,[146]),B(d(F,1),k,6,15,[627]),null,B(d(F,1),k,6,15,[2457,1170]),null,B(d(F,1),k,6,15,[2451,8643,2519]),B(d(F,1),k,6,15,[9362,14798]),B(d(F,1),k,6,15,[34377,-2147448999,26214]),null,B(d(F,1),k,6,15,[37449,137313,95703,34371,37815,54891,132867,-2147309741,54857,55129,-2147449005,-2147449065]),null,B(d(F,1),k,6,15,[530697,531819,899169,137289,694617,-2146951863,-2146952797,-2146939175,-2146929547,-2146929564,-2146625111,-2146931799,-2146940503,-2146931935]),B(d(F,1),k,6,15,[1007293,610915]),B(d(F,1),k,6,15,[542985,137283,2122017,530691,2206773,-2144711351,219209,2840841,137555,-2146871031,-2147264167,613705,-2145360543,-2146625271,694611,2454837,-2145356703,-2147345133,-2146928951,-2146931805,-2144641719,-2146951869,-2146625237,-2146624183,2841963,1074905,-2146625117,2799955,-2144723645,138583,859225,-2145264843,-2145216253,-2146624149,-2144700727,-2146928917,-2143905527,-2144045771,-2146789097,2288547,544407,2104323,-2146911977,-2144479405,3633737,-2146870089,-2146952169]),null,B(d(F,1),k,6,15,[8487297,2172633,2116611,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8829813]),B(d(F,1),k,6,15,[14071213])]),m=1<<e.e.length,i=0,D=0,e.e.length>7)for(y=0;y<e.e.length;y++)f=BZ(t,A,n,y),f==1?i+=m:f==2&&(D+=m),i>>>=1,D>>>=1;if(b=e.e.length-9,e.e.length>=9&&e.e.length<=25&&L[b]!=null)for(p=0;p<L[b].length;p++)for(g=(o1&L[b][p])==0,Q=It&L[b][p],T=!1;!T;T=!T){if(T){if(g)break;for(v=0,P=1;P!=m;P<<=1)v<<=1,(Q&P)!=0&&(v|=1);Q=v}for(j=0;j<e.e.length;j++){if((Q&i)==0&&(~Q&D)==0){for(r=0,s=NC*(U[b]==null?0:U[b][p]),R=0,C=Q,c=!0,l=0;l<e.e.length;l++)c&&++R,(C&1)==0&&(c=!c),C>>>=1;for(S=R>(e.e.length/2|0),y=1;y<e.e.length;y++)e.a[y]=e.a[y-1]+w.Math.sin(r),e.b[y]=e.b[y-1]+w.Math.cos(r),(Q&1)==0&&(S=!S),r+=s+(S?AA:oU),Q>>>=1;return}(Q&1)!=0&&(Q|=m),Q>>>=1}}ea(e,i,D)}function Na(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(U=o0(t.A,t.a),gt(V(U,1),0)?(uA(t.b,!0),Go(t.w,n4)):Go(t.w,UV),O8(t.D,MA(t.A,t.a)==null?\"\":Yh(t.A,t.a)),e=V(U,Ty),gt(V(e,ZQ),0)?_t(t.g,2):G(e,2)==0?_t(t.g,1):G(e,4)==0?_t(t.g,3):_t(t.g,0),y=V(U,120),G(y,112)==0?_t(t.s,1):G(y,96)==0?_t(t.s,2):G(y,8)==0?_t(t.s,3):G(y,104)==0?_t(t.s,4):G(y,88)==0?_t(t.s,5):G(y,56)==0?_t(t.s,6):_t(t.s,0),T=zt(q0(V(U,f9),22)),_t(t.t,T==0?0:T-2),s=V(U,rr),f=-1,i=0;i<ci.length;i++)if(P0(s,ci[i])){f=i;break}f!=-1?_t(t.r,f):(n=new Fn(\"Custom:\"),gt(V(s,L8),0)&&(n.a+=\" 0\"),gt(V(s,ir),0)&&(n.a+=\" 3\"),gt(V(s,fr),0)&&(n.a+=\" 4\"),gt(V(s,Dr),0)&&(n.a+=\" 5\"),gt(V(s,ur),0)&&(n.a+=\" 6\"),gt(V(s,Qr),0)&&(n.a+=\" 7\"),gt(V(s,pf),0)&&(n.a+=\" >=8\"),t.C=s,Gt(t.r,n.a),_t(t.r,ci.length)),D=V(U,si),G(D,_Q)==0?_t(t.n,1):G(D,d2)==0?_t(t.n,2):G(D,B2)==0?_t(t.n,3):G(D,$Q)==0?_t(t.n,4):G(D,qA)==0?_t(t.n,5):G(D,I0)==0?_t(t.n,6):G(D,yi)==0?_t(t.n,7):G(D,SP)==0?_t(t.n,8):G(D,Hf)==0?_t(t.n,9):G(D,3276800)==0?_t(t.n,10):G(D,2228224)==0?_t(t.n,11):G(D,2490368)==0?_t(t.n,12):_t(t.n,0),P=V(U,Vf),G(P,uy)==0?_t(t.j,1):G(P,Qy)==0?_t(t.j,2):G(P,Uy)==0?_t(t.j,3):G(P,oy)==0?_t(t.j,4):G(P,T6)==0?_t(t.j,5):G(P,h6)==0?_t(t.j,6):G(P,aQ)==0?_t(t.j,7):G(P,v2)==0?_t(t.j,8):G(P,Ly)==0?_t(t.j,9):G(P,sy)==0?_t(t.j,10):G(P,tU)==0?_t(t.j,11):G(P,c6)==0?_t(t.j,12):G(P,w6)==0?_t(t.j,13):G(P,g6)==0?_t(t.j,14):_t(t.j,0),A=V(U,i9),G(A,WQ)==0?_t(t.i,1):G(A,Mf)==0?_t(t.i,2):G(A,Cf)==0?_t(t.i,3):_t(t.i,0),r=V(U,rP),G(r,1792)==0?_t(t.k,1):G(r,1664)==0?_t(t.k,2):G(r,1408)==0?_t(t.k,3):G(r,128)==0?_t(t.k,4):G(r,384)==0?_t(t.k,5):G(r,896)==0?_t(t.k,6):G(r,1536)==0?_t(t.k,7):G(r,re)==0?_t(t.k,8):G(r,1152)==0?_t(t.k,9):_t(t.k,0),Q=V(U,Li),G(Q,98304)==0?_t(t.p,1):G(Q,81920)==0?_t(t.p,2):G(Q,49152)==0?_t(t.p,3):G(Q,Sn)==0?_t(t.p,4):_t(t.p,0),L=q0(V(U,F2),47),_t(t.o,zt(L)),gt(V(U,I1),0)&&uA(t.c,!0),gt(V(U,C0),0)&&uA(t.f,!0),c=V(U,m6),P0(c,KQ)?_t(t.u,1):P0(c,XQ)?_t(t.u,2):_t(t.u,0),gt(V(U,ge),0)&&uA(t.e,!0),gt(V(U,Pe),0)&&uA(t.d,!0),t.q&&(l=V(U,c8),G(l,cn)==0?_t(t.q,1):G(l,lU)==0?_t(t.q,2):G(l,c8)==0?_t(t.q,3):_t(t.q,0))}function Lp(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;if(v=new L1,A=new L1,i=new L1,c=new c9,T=new c9,P=z(t.L,0,e),r=z(t.L,1,e),t.zb(e,Z1(t.R,kt(t.L,P)),X1(t.R,jt(t.L,P)),Z1(t.R,kt(t.L,r)),X1(t.R,jt(t.L,r))),!r0(t.L,P)&&!r0(t.L,r)&&gt(V(Y(o0(t.L,P),o0(t.L,r)),Pe),0)&&W1(t,-8),t.o[P]?(v.a=t.o[P].a,v.c=t.o[P].b):(v.a=Z1(t.R,kt(t.L,P)),v.c=X1(t.R,jt(t.L,P))),t.o[r]?(v.b=t.o[r].a,v.d=t.o[r].b):(v.b=Z1(t.R,kt(t.L,r)),v.d=X1(t.R,jt(t.L,r))),(ee(t.L,e)&y8)!=0){cA(t,v)&&t.rb(v),W1(t,-9);return}switch(f=l1(t.L,e)==8?0:l1(t.L,e)==16?1:dt(t.L,e),f){case 1:if(D=l1(t.L,e),(t.G&128)!=0&&(D==257||D==129)&&(m=z(t.L,0,e),y=Ae(t.L,m),y!=0)){for(s=VA(t.L,m),L=0,n=0;n<t.L.f;n++)Ae(t.L,n)==y&&VA(t.L,n)==s&&++L;L==1&&(D=1)}switch(D){case 1:cA(t,v)&&Hn(t,v,P,r);break;case 257:b5(t,v,P,r);break;case 129:for(R=v.b-v.a,b=v.d-v.c,vr(t.L,D1(t.L,P,r))?(Q=-3,U=-3):(Q=t.p[P],U=Xh(t,P),Q==ou(t.L,P)&&(Q=U)),l=2;l<17;l+=2)A.a=v.a+l*R/17-l*b/128,A.c=v.c+l*b/17+l*R/128,A.b=v.a+l*R/17+l*b/128,A.d=v.c+l*b/17-l*R/128,cA(t,A)&&(W1(t,l<9?Q:U),t.qb(A),W1(t,t.Q));break;case 16:cA(t,v)&&SZ(t,v,P,r)}break;case 0:case 2:if((t.s[P]||a1(t.L,P)==2)&&(t.s[r]||a1(t.L,r)==2)&&!fA(t.L,e)&&f==2){if(!cA(t,v))break;Qf(t,v.b-v.a,v.d-v.c,c),R=c.a/2,b=c.b/2,A.a=v.a+R,A.c=v.c+b,A.b=v.b+R,A.d=v.d+b,i.a=v.a-R,i.c=v.c-b,i.b=v.b-R,i.d=v.d-b,l1(t.L,e)==386&&iL(A,i),Hn(t,A,P,r),f==2?Hn(t,i,P,r):VQ(t,i,P,r)}else(t.s[r]||a1(t.L,r)==2)&&f==2?ip(t,v,e,!1):(t.s[P]||a1(t.L,P)==2)&&f==2?ip(t,v,e,!0):(g=O5(t.L,e),g==0&&(g=1),A.a=v.a,A.c=v.c,A.b=v.b,A.d=v.d,Qf(t,v.b-v.a,v.d-v.c,c),g>0?(i.a=v.a+c.a,i.c=v.c+c.b,i.b=v.b+c.a,i.d=v.d+c.b,(Di(t,P,r,1,T)||O(t.L,P)>1)&&(i.a+=T.a+c.b,i.c+=T.b-c.a),(Di(t,r,P,-1,T)||O(t.L,r)>1)&&(i.b+=T.a-c.b,i.d+=T.b+c.a)):(i.a=v.a-c.a,i.c=v.c-c.b,i.b=v.b-c.a,i.d=v.d-c.b,(Di(t,P,r,-1,T)||O(t.L,P)>1)&&(i.a+=T.a+c.b,i.c+=T.b-c.a),(Di(t,r,P,1,T)||O(t.L,r)>1)&&(i.b+=T.a-c.b,i.d+=T.b+c.a)),l1(t.L,e)==386&&iL(A,i),cA(t,A)&&Hn(t,A,P,r),f==2?cA(t,i)&&Hn(t,i,P,r):cA(t,i)&&VQ(t,i,P,r));break;case 3:cA(t,v)&&(Hn(t,v,P,r),Qf(t,v.b-v.a,v.d-v.c,c),W8(t,v,P,r,c.a,c.b,A),W8(t,v,P,r,-c.a,-c.b,A));break;case 4:cA(t,v)&&(Qf(t,v.b-v.a,v.d-v.c,c),W8(t,v,P,r,1.5*c.a,1.5*c.b,A),W8(t,v,P,r,.5*c.a,.5*c.b,A),W8(t,v,P,r,-.5*c.a,-.5*c.b,A),W8(t,v,P,r,-1.5*c.a,-1.5*c.b,A));break;case 5:cA(t,v)&&(Hn(t,v,P,r),Qf(t,v.b-v.a,v.d-v.c,c),W8(t,v,P,r,2*c.a,2*c.b,A),W8(t,v,P,r,c.a,c.b,A),W8(t,v,P,r,-c.a,-c.b,A),W8(t,v,P,r,-2*c.a,-2*c.b,A))}t.C==-8&&W1(t,-9)}function Oa(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1;if(E=e.i,X=e.j,C=e.f,S=e.g,!n[E]&&!n[X])for(st=C.c.length>S.c.length?C:S,ct=C.c.length>S.c.length?E:X,n[ct]=!0,x=P==null?0:P[ct],et=0;et<st.d.length;et++)D=st.e[st.d[et]],yD(t,D,J0(st.b[x],st.d[et]));if(n[E]?(a=X,j=S,s=e.b?1:0):(a=E,j=C,s=e.b?0:1),L=e.a,Ht=z(t.o,s,L),Ct=z(t.o,1-s,L),p=P==null?0:P[a],R=j.f[Ht],v=j.f[Ct],tt=J0(j.b[p],j.d[R]),Ut=t.k[Ht],W=ti(z8(tt,J0(j.b[p],j.d[v]))),F1=ti(z8(Ut,t.k[Ct])),i=ob(W,F1),b=h(E2,b2,29,j.d.length,0,1),i<.0010000000474974513)for(et=0;et<j.d.length;et++)D=j.e[j.d[et]],D!=Ht&&D!=Ct&&(b[et]=i>bA?z8(tt,J0(j.b[p],j.d[et])):z8(J0(j.b[p],j.d[et]),tt));else for(i<3.1405926535422957?Qt=new xe(F1.b*W.c-F1.c*W.b,-(F1.a*W.c-F1.c*W.a),F1.a*W.b-F1.b*W.a):w.Math.abs(F1.a)>=w.Math.abs(F1.b)&&w.Math.abs(F1.a)>=w.Math.abs(F1.c)?Qt=new xe(-(F1.b+F1.c)/F1.a,1,1):w.Math.abs(F1.b)>=w.Math.abs(F1.a)&&w.Math.abs(F1.b)>=w.Math.abs(F1.c)?Qt=new xe(1,-(F1.a+F1.c)/F1.b,1):Qt=new xe(1,1,-(F1.a+F1.b)/F1.c),Pt=o2(ti(Qt),i),et=0;et<j.d.length;et++)D=j.e[j.d[et]],D!=Ht&&D!=Ct&&(b[et]=lQ(z8(J0(j.b[p],j.d[et]),tt),Pt));for(n[a]=!0,lt=0;lt<O(t.o,Ht);lt++)T=_(t.o,Ht,lt),T!=Ct&&(m=j.f[T],eq(t,T,new xe(b[m].a+Ut.a,b[m].b+Ut.b,b[m].c+Ut.c)));for(Nt=lL(t,e.p),c=-1,Q=0,U=0,Rt=0;Rt<t.i[A].length;Rt++){for(c=t.i[A][Rt],Pt=o2(F1,Q1*c/180-Nt),et=0;et<j.d.length;et++)D=j.e[j.d[et]],D!=Ht&&D!=Ct&&(yD(t,D,b[et]),Hr(lQ(t.k[D],Pt),Ut));if(y=q5(t,e),y0=y,j1=0,y<N6)$t=y/w4,t.e[A][Rt]=t.d[A][Rt]*(1-$t*$t);else{for(l=t.i[A][Rt],g1=Ve,Tt=0;Tt<2;Tt++)if(c=r[Rt][Tt],c!=l){for(Pt=o2(F1,Q1*c/180-Nt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=Ht&&D!=Ct&&(yD(t,D,b[$]),Hr(lQ(t.k[D],Pt),Ut));Kt=q5(t,e),Kt<y*xf&&Kt<g1&&(t.i[A][Rt]=r[Rt][Tt],$t=Kt/.16000000476837162,t.e[A][Rt]=t.d[A][Rt]*(1-$t*$t),y0=Kt,j1=Tt+1,g1=Kt)}g1==Ve&&y<w4&&($t=y/w4,t.e[A][Rt]=t.d[A][Rt]*(1-$t*$t))}t.e[A][t.a[A]]<t.e[A][Rt]&&(t.a[A]=Rt,Q=j1,U=y0)}for(St=0,Lt=0;Lt<t.i[A].length;Lt++)t.e[A][Lt]>0&&(St+=t.e[A][Lt]);if(t.e[A][t.a[A]]<=0)for(t.e[A][t.a[A]]=1,f=Q==1?-8:Q==2?8:jn(t.f)<.5?-8:8,b1=1;b1<=4;b1++){for(c=t.i[A][t.a[A]]+f*b1<<16>>16,Pt=o2(F1,Q1*c/180-Nt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=Ht&&D!=Ct&&(yD(t,D,b[$]),Hr(lQ(t.k[D],Pt),Ut));if(g=q5(t,e),U-g<.05)break;t.i[A][t.a[A]]=c}else for(e1=0;e1<t.i[A].length;e1++)t.e[A][e1]/=St;if(c!=t.i[A][t.a[A]])for(Pt=o2(F1,Q1*t.i[A][t.a[A]]/180-Nt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=Ht&&D!=Ct&&(yD(t,D,b[$]),Hr(lQ(t.k[D],Pt),Ut));zm(t,L,t.i[A][t.a[A]])}function sp(){sp=B1,k4=B(d(yt,1),wt,6,15,[0,1.00794,4.0026,6.941,9.0122,10.811,12.011,14.007,15.999,18.998,20.18,22.99,24.305,26.982,28.086,30.974,32.066,35.453,39.948,39.098,40.078,44.956,47.867,50.942,51.996,54.938,55.845,58.933,58.693,63.546,65.39,69.723,72.61,74.922,78.96,79.904,83.8,85.468,87.62,88.906,91.224,92.906,95.94,98.906,101.07,102.91,106.42,107.87,112.41,114.82,118.71,121.76,127.6,126.9,131.29,132.91,137.33,138.91,140.12,140.91,144.24,146.92,150.36,151.96,157.25,158.93,162.5,164.93,167.26,168.93,173.04,174.97,178.49,180.95,183.84,186.21,190.23,192.22,195.08,196.97,200.59,204.38,207.2,208.98,209.98,209.99,222.02,223.02,226.03,227.03,232.04,231.04,238.03,237.05,239.05,241.06,244.06,249.08,252.08,252.08,257.1,258.1,259.1,262.11,267.12,268.13,271.13,270.13,277.15,276.15,vy,vy,283.17,285.18,Fy,Fy,293.2,my,my,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.0141,3.016,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71.0787,156.18828,114.10364,115.0877,103.1447,128.13052,129.11458,57.05182,137.14158,113.15934,113.15934,128.17428,131.19846,147.17646,97.11658,87.0777,101.10458,186.2134,163.17546,99.13246]),m4=B(d(yt,1),wt,6,15,[0,1.007825,4.0026,7.016003,9.012182,11.009305,12,14.003074,15.994915,18.998403,19.992435,22.989767,23.985042,26.98153,27.976927,30.973762,31.97207,34.968852,39.962384,38.963707,39.962591,44.95591,47.947947,50.943962,51.940509,54.938047,55.934939,58.933198,57.935346,62.939598,63.929145,68.92558,73.921177,74.921594,79.91652,78.918336,83.911507,84.911794,87.905619,88.905849,89.904703,92.906377,97.905406,89.92381,101.904348,102.9055,105.903478,106.905092,113.903357,114.90388,119.9022,120.903821,129.906229,126.904473,131.904144,132.905429,137.905232,138.906346,139.905433,140.907647,141.907719,135.92398,151.919729,152.921225,157.924099,158.925342,163.929171,164.930319,165.93029,168.934212,173.938859,174.94077,179.946545,180.947992,183.950928,186.955744,191.961467,192.962917,194.964766,196.966543,201.970617,204.974401,207.976627,208.980374,193.98818,195.99573,199.9957,201.00411,206.0038,210.00923,232.038054,216.01896,238.050784,229.03623,232.041169,237.05005,238.05302,242.06194,240.06228,243.06947,243.07446,248.08275,251.08887,253.09515,257.10295,257.10777,271.13,270.13,277.15,276.15,vy,vy,283.17,285.18,Fy,Fy,291.2,my,my,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.014,3.01605,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),S2=B(d(F,1),k,6,15,[6,1,7,8])}function Ga(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA;for(X=0,Q=0,lt=0,Nt=h(rt,ft,6,e.q,16,1),Lt=h(rt,ft,6,e.q,16,1),Rt=h(rt,ft,6,e.q,16,1),r=0;r<e.q;r++)A[r]==n&&(Rt[r]=!0,Nt[r]=!0,++Q,++X);for(i=0;i<e.q;i++)if(Rt[i])for(Ct=0;Ct<e.j[i];Ct++)C=e.i[i][Ct],Nt[C]||(Nt[C]=!0,++Q,++lt);for(f=0;f<e.q;f++)if(Nt[f]&&!Rt[f]&&!Lt[f])for(Ct=0;Ct<e.e[f];Ct++)C=e.i[f][Ct],Nt[C]||(Lt[C]=!0,Nt[C]=!0,++Q);for(y=0,s=0;s<e.r;s++)Nt[e.D[0][s]]&&Nt[e.D[1][s]]&&++y;for(ct=new zA(Q,y),ui(e,ct,Nt,!1,null),je(ct,!0),tt=h(F,k,6,X,15,1),Tt=h(F,k,6,Q,15,1),st=h(F,k,6,X+lt,15,1),T0=h(F,k,6,e.q,15,1),E=0,Pt=0,et=0,D=0;D<e.q;D++)Nt[D]&&(EP(e,D,!0)&&T1(ct,Pt,Ur,!0),Rt[D]||(ct.u[Pt]|=I0),(Rt[D]||!Lt[D])&&(st[et]=Pt,T0[D]=et,++et),Rt[D]&&(tt[E]=Pt,++E),Tt[Pt]=D,ct.C[Pt]==1&&(ct.A[Pt]=2,ct.T&=ct.C[Pt]==1?0:7),++Pt);if(j=null,g1=null,c=null,St=null,e1=!1,fe=!!t.a&&Dx(t.a)&&Q<=32,fe){for(c=new EA(ct,512),P=0;P<ct.f;P++)if(c.db[P]==3){fe=!1;break}for(L=0;L<ct.g;L++)if(c.o[L]==3){fe=!1;break}fe&&Z5(c)}if(t.a&&!fe&&++t.a.d,ct.T|=8,fe&&(e1=uj(c),St=me(c),T=ZB(t.a,St),T)){for(Kt=(Ui(c),c.H),j=new f1,p=T.a,x=0,a=p.length;x<a;++x){for(S=p[x],j1=0;j1<ct.q;j1++)l=S[Kt[j1]],Be(ct,j1,l.a),Ie(ct,j1,l.b),hP(ct,j1,e1?-l.c:l.c);mt(j,new mu(ct))}g1=T.c}if(!j){for(b0=new NQ(ct),$U(b0,t.d),d5(b0,t.c,16),j=new f1,U=BQ(b0),j.a.push(U),b=BQ(b0);b;)j.a.push(b),b=BQ(b0);for(s1=Ve,v=new Wt(j);v.a<v.c.a.length;)g=t1(v),s1=w.Math.min(s1,g.e);for(d1=2*s1,$t=j.a.length-1;$t>=0;$t--)(ve($t,j.a.length),j.a[$t]).e>d1&&LA(j,$t);for(g1=h(yt,wt,6,j.a.length,15,1),y0=0,b1=0,Ut=0;Ut<j.a.length;Ut++)g=(ve(Ut,j.a.length),j.a[Ut]),g1[Ut]=w.Math.pow(10,(s1-g.e)/13.600000000000001),y0+=g1[Ut];for(Ht=0;Ht<j.a.length;Ht++)g1[Ht]/=y0;if(t.b){for(Ke=0,F1=Ve,R=new Wt(j);R.a<R.c.a.length;)g=t1(R),W=xY(es(g,g.o)),g.n=W,isNaN(W)||(F1=w.Math.min(F1,W),++Ke),Zx(g,ct);for($=F1+2.72,m=new Wt(j);m.a<m.c.a.length;)g=t1(m),!isNaN(g.n)&&g.n>$&&(g.n=NaN,--Ke);if(Ke!=0){for(G0=h(yt,wt,6,Ke,15,1),OA=0,b1=0,Qt=j.a.length-1;Qt>=0;Qt--)g=(ve(Qt,j.a.length),j.a[Qt]),isNaN(g.n)?LA(j,Qt):(G0[b1]=w.Math.pow(10,(F1-g.n)/1.36),OA+=G0[b1],++b1);for(g1=h(yt,wt,6,Ke,15,1),Ct=0;Ct<Ke;Ct++)g1[Ct]=G0[Ct]/OA}}if(fe){for(Kt=(Ui(c),c.H),S=R1(E2,[nA,b2],[128,29],0,[j.a.length,Kt.length],2),Ct=0;Ct<S.length;Ct++)for(j1=0;j1<Kt.length;j1++)gA=J0((ve(Ct,j.a.length),j.a[Ct]),j1),S[Ct][Kt[j1]]=new xe(gA.a,gA.b,e1?-gA.c:gA.c);$B(t.a,St,new Qg(S,g1))}}return new Nv(tt,Tt,st,T0,ff(j,h(YE,mV,96,0,0,1)),g1)}function yp(t,e){Ms();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W;switch(C=xt(t,e),tt=t.J[e].a,W=t.J[e].b,C){case 1:{if(p=t.j[e],p==0?(U=HL(t,!0),y=0):(U=tt-kt(t,t.i[e][0]),y=W-jt(t,t.i[e][0])),p==1)v=W0(t,tt+q4*U+O4*y,W-O4*U+q4*y,0);else if(p==2)U=tt-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][1])),y=W-.5*(jt(t,t.i[e][0])+jt(t,t.i[e][1])),v=W0(t,tt+U,W+y,0);else if(p==3){for(a=t.i[e][0],g=1;g<3;g++)f=t.k[e][g],(t.H[f]==129||t.H[f]==257)&&(a=t.i[e][g]);if(A=w.Math.abs(Je(kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][0]),jt(t,t.i[e][0])),kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][1]),jt(t,t.i[e][1])))),n=w.Math.abs(Je(kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][0]),jt(t,t.i[e][0])),kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][2]),jt(t,t.i[e][2])))),P=w.Math.abs(Je(kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][1]),jt(t,t.i[e][1])),kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][2]),jt(t,t.i[e][2])))),x=!0,A>n&&A>P?n+P<Q1&&(x=!1,U=tt-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][1])),y=W-.5*(jt(t,t.i[e][0])+jt(t,t.i[e][1]))):n>A&&n>P?A+P<Q1&&(x=!1,U=tt-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][2])),y=W-.5*(jt(t,t.i[e][0])+jt(t,t.i[e][2]))):A+n<Q1&&(x=!1,U=tt-.5*(kt(t,t.i[e][1])+kt(t,t.i[e][2])),y=W-.5*(jt(t,t.i[e][1])+jt(t,t.i[e][2]))),x){for(E=t.i[e][0],Q=Ve,c=0;c<3;c++)r=t.i[e][c],r!=a&&(D=w.Math.pow(t.J[e].a-t.J[r].a,2)+w.Math.pow(t.J[e].b-t.J[r].b,2),D<Q&&(E=r,Q=D,x1()));v=W0(t,(t.J[a].a+t.J[E].a)/2,(t.J[a].b+t.J[E].b)/2,0)}else v=W0(t,tt+U,W+y,0)}else v=W0(t,tt+U,W+y,0);K0(t,v,1),O0(t,e,v,1)}break;case 2:if(S=t.j[e],S==1)U=tt-kt(t,t.i[e][0]),y=W-jt(t,t.i[e][0]),v=W0(t,tt+(vU*U-FU*y)*.7,W+(FU*U+vU*y)*.7,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt+(E4*U-x4*y)*.7,W+(x4*U+E4*y)*.7,0),K0(t,v,1),O0(t,e,v,1);else if(S==2)L=tt-kt(t,t.i[e][0]),l=W-jt(t,t.i[e][0]),s=tt-kt(t,t.i[e][1]),T=W-jt(t,t.i[e][1]),b=w.Math.sqrt(L*L+l*l)*.7,j=w.Math.sqrt(s*s+T*T)*.7,U=L+s,y=l+T,R=w.Math.sqrt(U*U+y*y),i=(b+j)/2,U=U/R*i,y=y/R*i,X=pQ(t,e),v=W0(t,tt+V4*U-I4*y,W+I4*U+V4*y,0),K0(t,v,1),X>-1?O0(t,e,v,1):O0(t,e,v,257),v=W0(t,tt+S4*U-N4*y,W+N4*U+S4*y,0),K0(t,v,1),O0(t,e,v,1);else for(m=0;m<C;m++)v=W0(t,tt,W,0),K0(t,v,1),O0(t,e,v,1);break;case 3:t.i[e][0]>0?(U=(tt-kt(t,t.i[e][0]))*.7,y=(W-jt(t,t.i[e][0]))*.7,v=W0(t,tt+U,W+y,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt-y,W+U,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt+y,W-U,0),K0(t,v,1),O0(t,e,v,1)):(U=HL(t,!0),y=HL(t,!0),v=W0(t,tt+U,W+y,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt-y*vU,W+U*FU,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt-y*vU,W-U*FU,0),K0(t,v,1),O0(t,e,v,1));break;default:{for(m=0;m<C;m++)v=W0(t,tt,W,0),K0(t,v,1),O0(t,e,v,1);break}}}function Ja(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt;if((t.fb!=VD(t.k)||t.N!=Vr(t.k))&&(t.fb=VD(t.k),t.N=Vr(t.k),t.eb<3&&(t.eb=3)),P=UT(e),f=DB(e),ae(e,P),RT(e,0,0,t.fb,t.N),(t.U&4)!=0&&t.I.a.length==0&&(y=.5*t.fb,l=.5*t.N,r=.03999999910593033*t.fb,A=new KD,mT(A,y-r,l,y+r,l),A.j=!0,mt(t.I,A)),U=!1,t.eb!=0){switch((t.U&1)!=0&&t.eb!=5&&Bm(t),t.G=(t.U&4)!=0?new rR(new Bh(t.L,t.Y),t.I):(t.U&2)!=0?new pB(t.L,t.Y,t.I):(t.U&1)!=0?new Xd(t.L,t.I):new Wv(t.V,t.I),PY(t.G,f,P),CS(t.G,t.T),HS(t.G,(t.U&1)==0?0:(L=Ky,L.startsWith(Xy)||L.startsWith(Zy)||L.startsWith(Wy)?y5(P,QU):(_r(),P&qn|vt(w.Math.round(QU*((P&iP)>>16)))<<16|vt(w.Math.round(QU*((P&PP)>>8)))<<8|vt(w.Math.round(QU*(P&255)))))),YO(t.G,t.$),MS(t.G,t.H|8|(t.w==19?80:0)),t.eb){case 6:case 4:case 5:UJ(t,e);break;case 3:b=j5(t.G,e,new QA(0,0,t.fb,t.N),0),b&&(t.U&1)!=0&&I3(b,t.V);break;case 2:j=Uj(t.G,e,new QA(0,0,t.fb,t.N),0),U=!!j&&!(j.c==1&&j.a==0&&j.b==0)}t.eb=0}switch(t.G&&t_(t.G,e),U||JK(t,e),t.G&&(zY(t.G,e),fG(t.G,e)),t.t!=-1&&t.i.a.length!=0&&(p=vt(kt(t.V,t.t)),W=vt(jt(t.V,t.t)),c=t.i.a,C=NG(t,c),ae(e,C==1?f:C==2?-16776961:Dy),C==1?c=(Y1(),X0)[SA(c,t.c)]:C==2&&(c=UA(t.j,0,c.length)),i=3*(Pt=e.Jc(),Pt.getFontSize())/2|0,eL(e,i,!1,!1),cT(e,p,W,c),C==4&&(ae(e,qP),jT(e,p+GL(e,c).b/2,W+i,\"<unknown>\")),C==2&&(ae(e,Dy),cT(e,p+GL(e,c).b,W,HD(t.j,c.length)))),ae(e,f),t.X){case 1:switch(x=vt(t.hb),$=vt(t.kb),t.t==-1||t.t==t.e?(a=vt(t.ib),et=vt(t.lb)):(a=vt(kt(t.V,t.t)),et=vt(jt(t.V,t.t))),t.w){case 5:xr(e,x,$,a,et);break;case 6:E=($-et)/9|0,lt=(a-x)/9|0,T=new YD(3),Ce(T,x,$),Ce(T,a+E,et+lt),Ce(T,a-E,et-lt),Yo(e,new rD(T));break;case 23:for(E=a-x,lt=et-$,Q=2;Q<17;Q+=2)X=x+(Q*E/17|0)-(Q*lt/128|0),st=$+(Q*lt/17|0)+(Q*E/128|0),tt=x+(Q*E/17|0)+(Q*lt/128|0),ct=$+(Q*lt/17|0)-(Q*E/128|0),xr(e,X,st,tt,ct)}break;case 2:if(t.q>0&&xr(e,vt(t.hb),vt(t.kb),vt(t.o[0]),vt(t.p[0])),t.q>1)for(Q=1;Q<t.q;Q++)xr(e,vt(t.o[Q-1]),vt(t.p[Q-1]),vt(t.o[Q]),vt(t.p[Q]));break;case 5:ae(e,(m=(v=ID(e),v!=0?v:Yy),n5(m,(s=Ky,s.startsWith(Xy)||s.startsWith(Zy)||s.startsWith(Wy)?yV:lV)))),Hx(e,new rD(t.R)),ae(e,f);break;case 6:p=t.hb<t.ib?vt(t.hb):vt(t.ib),W=t.kb<t.lb?vt(t.kb):vt(t.lb),S=vt(w.Math.abs(t.ib-t.hb)),D=vt(w.Math.abs(t.lb-t.kb)),ae(e,(R=(g=ID(e),g!=0?g:Yy),n5(R,(L=Ky,L.startsWith(Xy)||L.startsWith(Zy)||L.startsWith(Wy)?yV:lV)))),Tt=e.Jc(),Tt.drawRectangle(p,W,S,D),ae(e,f);break;case 8:x=vt(t.hb),$=vt(t.kb),t.t==-1||t.t==t.e?(a=vt(t.ib),et=vt(t.lb)):(a=vt(kt(t.V,t.t)),et=vt(jt(t.V,t.t))),ae(e,(n=UT(e),Gs(-8388608,n))),xr(e,x,$,a,et),ae(e,f)}}function lp(t,e,A){var n,P,r,i,f,D;for(r=0,YA(t.b)?(r=Y(r,1),Tf(t.A,e,A,!0)):Tf(t.A,e,A,!1),B0(t.g)==2?gI(t.A,e)||(r=Y(r,p6)):vn(t.A,e)||(B0(t.g)==1?r=Y(r,2):B0(t.g)==3&&(r=Y(r,4))),f=0,P=0;P<O(t.A,e);P++)gt(V(o0(t.A,_(t.A,e,P)),Pe),0)&&fA(t.A,Ot(t.A,e,P))&&++f;switch(B0(t.s)){case 1:f==0&&(r=Y(r,112));break;case 2:f<=2&&(r=Y(r,96));break;case 3:r=Y(r,8);break;case 4:f<3&&(r=Y(r,104));break;case 5:f<4&&(r=Y(r,88));break;case 6:r=Y(r,56)}switch(B0(t.t)!=0&&(r=Y(r,M1(B0(t.t)+2,22))),D=B0(t.r),D==ci.length?r=Y(r,t.C):D!=0&&(r=Y(r,ci[D])),B0(t.i)){case 1:r=Y(r,WQ);break;case 2:r=Y(r,Mf);break;case 3:r=Y(r,Cf)}switch(i=uI(t.A,e),B0(t.n)){case 1:i==1?r=Y(r,I1):i<1&&(r=Y(r,_Q));break;case 2:i==2?r=Y(r,I1):i<2&&(r=Y(r,d2));break;case 3:i==3?r=Y(r,I1):i<3&&(r=Y(r,B2));break;case 4:i==2?r=Y(r,I1):i<2&&(r=Y(r,$Q));break;case 5:i==3?r=Y(r,I1):i<3&&(r=Y(r,qA));break;case 6:i==0&&(r=Y(r,C0));break;case 7:i==1?r=Y(r,C0):i<1&&(r=Y(r,yi));break;case 8:i==2?r=Y(r,C0):i<2&&(r=Y(r,SP));break;case 9:i==3?r=Y(r,C0):i<3&&(r=Y(r,Hf));break;case 10:i==0?r=Y(r,3276800):r=Y(r,$Q);break;case 11:i==0?r=Y(r,2228224):r=Y(r,qA);break;case 12:i<=1?r=Y(r,1099513856e3):i<=3&&(r=Y(r,qA))}switch(n=eh(t.A,e),B0(t.j)){case 1:n==0&&(r=Y(r,uy));break;case 2:n<=1&&(r=Y(r,Qy));break;case 3:n<=2&&(r=Y(r,Uy));break;case 4:n<=3&&(r=Y(r,oy));break;case 5:n<2&&(r=Y(r,T6));break;case 6:n<3&&(r=Y(r,h6));break;case 7:n<4&&(r=Y(r,aQ));break;case 8:n==0&&(r=Y(r,v2));break;case 9:n<2&&(r=Y(r,Ly));break;case 10:n<3&&(r=Y(r,sy));break;case 11:n<4&&(r=Y(r,tU));break;case 12:n<2&&(r=Y(r,c6));break;case 13:n<3&&(r=Y(r,w6));break;case 14:n<3&&(r=Y(r,g6))}switch(B0(t.k)){case 1:r=Y(r,1792);break;case 2:r=Y(r,1664);break;case 3:r=Y(r,1408);break;case 4:r=Y(r,128);break;case 5:r=Y(r,384);break;case 6:r=Y(r,896);break;case 7:r=Y(r,1536);break;case 8:r=Y(r,re);break;case 9:r=Y(r,1152)}switch(B0(t.p)){case 1:r=Y(r,98304);break;case 2:r=Y(r,81920);break;case 3:r=Y(r,49152);break;case 4:r=Y(r,Sn)}switch(B0(t.o)!=0&&(r=Y(r,M1(B0(t.o),47))),YA(t.c)&&(Zi(t.A,e)>0||p1(t.A,e)==0&&(K(t.A,e)==5||yT(t.A,e)||VT(t.A,e)))&&(r=Y(r,I1)),YA(t.f)&&(Zi(t.A,e)>0||p1(t.A,e)==0&&(K(t.A,e)==5||yT(t.A,e)||VT(t.A,e)))&&(r=Y(r,C0)),B0(t.u)){case 1:r=Y(r,KQ);break;case 2:r=Y(r,XQ)}if(YA(t.e)&&(r=Y(r,ge)),YA(t.d)&&(r=Y(r,Pe)),t.q)switch(B0(t.q)){case 1:r=Y(r,cn);break;case 2:r=Y(r,lU);break;case 3:r=Y(r,c8)}T1(t.A,e,-1,!1),T1(t.A,e,r,!0)}function za(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et;for(U=e.a[A],L=e.a[n],s=e.a[P],y=e.a[r],W=CX(t.a,e,A,n,P,r),$=W>10?W/10|0:W,et=W>10?W-$*10:0,S=-1,p=0,C=0,x=0,b=$,X=5;(p<X&&(S==-1||X==4)||p==4&&$==5&&et>0)&&(X==5&&p==4&&(X=4,p=0,b=et),p==1?(C=1,x=3):p==2?(C=3,x=1):(C=p,x=p),g=t.a.g.a[U-1][w.Math.min(C+1,4)],m=L,v=s,R=t.a.g.a[y-1][w.Math.min(x+1,4)],m>v?(v=(E=k1(m),k1(m=v),E).a,R=(a=k1(g),k1(g=R),a).a):m==v&&g>R&&(R=(a=k1(g),k1(g=R),a).a),S=_9(B(d(F,1),k,6,15,[2,3,1,4,0]),B(d(F,1),k,6,15,[m,v,g,R,b]),t),!(S!=-1&&X==4));)++p;if(S>=0)return new qv(t,S);for(c=D1(e,n,P),f=B(d(yt,1),wt,6,15,[0,0]),D=B(d(yt,1),wt,6,15,[0,0]),Q=B(d(yt,1),wt,6,15,[0,0]),l=B(d(F,1),k,6,15,[e.C[n],e.C[P]]),i=(mn(t.a.b,L)-1)*(mn(t.a.b,s)-1),j=0;j<2;j++)switch(l[j]){case 6:f[j]=2,D[j]=2.12;break;case 7:f[j]=2,D[j]=1.5;break;case 8:f[j]=2,D[j]=.2,Q[j]=2;break;case 14:f[j]=1.25,D[j]=1.22;break;case 15:f[j]=1.25,D[j]=2.4;break;case 16:f[j]=1.25,D[j]=.49,Q[j]=8}return zD(t.a.b,L)||zD(t.a.b,s)?new Gn(0,0):rL(t.a.b,L)&&rL(t.a.b,s)&&c<e.g&&Re(e.p,c)?(T=e8(t.a.b,L)==3&&e8(t.a.b,s)==4||e8(t.a.b,L)==4&&e8(t.a.b,s)==3?3:6,tt=Ir(t.a.b,L)==0&&Ir(t.a.b,s)==0?.5:.3,new Gn(T*tt*w.Math.sqrt(f[0]*f[1]),0)):dt(e,c)==2?(tt=HA(t.a.b,L)==2&&HA(t.a.b,s)==2?1:.4,new Gn(6*tt*w.Math.sqrt(f[0]*f[1]),0)):mn(t.a.b,L)==4&&mn(t.a.b,s)==4?new Gn(0,w.Math.sqrt(D[0]*D[1])/i):mn(t.a.b,L)==4&&mn(t.a.b,s)!=4?mn(t.a.b,s)==3&&(e8(t.a.b,s)==4||e8(t.a.b,s)==34||HA(t.a.b,s)>0)||mn(t.a.b,s)==2&&(e8(t.a.b,s)==3||HA(t.a.b,s)>0)?new Ro:new Gn(0,w.Math.sqrt(D[0]*D[1])/i):mn(t.a.b,s)==4&&mn(t.a.b,L)!=4?mn(t.a.b,L)==3&&(e8(t.a.b,L)==4||e8(t.a.b,L)==34||HA(t.a.b,L)>0)||mn(t.a.b,L)==2&&(e8(t.a.b,L)==3||HA(t.a.b,L)>0)?new Ro:new Gn(0,w.Math.sqrt(D[0]*D[1])/i):dt(e,c)==1&&HA(t.a.b,L)>0&&HA(t.a.b,s)>0||HA(t.a.b,L)>0&&Ir(t.a.b,s)>0||Ir(t.a.b,L)>0&&HA(t.a.b,s)>0?Ir(t.a.b,L)>0&&Ir(t.a.b,s)>0?new Ro:Ir(t.a.b,L)>0&&HA(t.a.b,s)>0?(tt=0,HA(t.a.b,L)==1?tt=.5:an(l[0])==2&&an(l[1])==2?tt=.3:(an(l[0])!=2||an(l[1])!=2)&&(tt=.15),new Gn(6*tt*w.Math.sqrt(f[0]*f[1]),0)):Ir(t.a.b,s)>0&&HA(t.a.b,L)>0?(tt=0,HA(t.a.b,s)==1?tt=.5:an(l[0])==2&&an(l[1])==2?tt=.3:(an(l[0])!=2||an(l[1])!=2)&&(tt=.15),new Gn(6*tt*w.Math.sqrt(f[0]*f[1]),0)):(HA(t.a.b,L)==1||HA(t.a.b,s)==1)&&(l[0]!=6||l[1]!=6)?new Gn(2.4000000000000004*w.Math.sqrt(f[0]*f[1]),0):new Gn(.8999999999999999*w.Math.sqrt(f[0]*f[1]),0):(l[0]==8||l[0]==16)&&(l[1]==8||l[1]==16)?new Gn(-w.Math.sqrt(Q[0]*Q[1]),0):new Gn(0,w.Math.sqrt(D[0]*D[1])/i)}function Ya(t,e){var A,n,P,r,i,f,D,Q,U,L;if(!t.W){if(Q=e.b,e.j==1)if(Q==-3)t.Z=!0,A9(t);else if(Q==-2)t.d=!0,A9(t);else if(Q==-1)A9(t);else if(e.a)Q==122?(Dv(t),t.eb=w.Math.max(t.eb,2),n1(t.k),N1(t,new q1(t,1,!0))):Q==99?p5(t,!0):Q==118&&((t.U&4)!=0&&t.r&&wv(),Lv(t));else if(Q==-4)t.w!=19&&(z1(t),oZ(t)||nQ(t.V)&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))));else if(Q==-6||t.t==-1&&Q==63){hT(t._,LV,sV);return}else if(Q==-8)t.i.a.length!=0&&(as(t,t.i.a),un(t.i,0));else if(t.u!=-1)Q==113&&t.V.K?Qv(t,t.u):Q==118?GQ(t.V,t.u,3,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))):Q>=52&&Q<=55?GQ(t.V,t.u,Q-48,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))):Q==97||Q==98?GQ(t.V,t.u,6,!0,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))):(P=Q==48?(z1(t),Q8(t.V,t.u,16)):Q==49?(z1(t),Q8(t.V,t.u,1)):Q==50?(z1(t),Q8(t.V,t.u,2)):Q==51?(z1(t),Q8(t.V,t.u,4)):Q==117?(z1(t),Q8(t.V,t.u,257)):Q==100?(z1(t),Q8(t.V,t.u,129)):Q==99?(z1(t),Q8(t.V,t.u,386)):Q==109&&(z1(t),Q8(t.V,t.u,16)),P&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))));else if(t.t!=-1)if(D=t.i.a.length==0,D?t.K=Q:(t.K==108&&(un(t.i,0),Oe(t.i,76)),t.K=-1),D&&Q==108)J(t.i,\"Cl\"),t.eb=w.Math.max(t.eb,1),n1(t.k);else if(D&&(Q==43||Q==45))z1(t),oh(t.V,t.t,Q==43)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));else if(D&&Q==46)z1(t),L=FA(t.V,t.t)==32?0:32,Ne(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));else if(D&&Q==58)z1(t),L=FA(t.V,t.t)==48?16:FA(t.V,t.t)==16?0:48,Ne(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));else if(D&&Q==113&&t.V.K)nF(t,t.t);else if(D&&t.V.K&&(Q==120||Q==88))U=B(d(F,1),k,6,15,[9,17,35,53]),sh(t.V,t.t,U),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));else if(D&&Q==63)z1(t),Bf(t.V,t.t,0,0,-1,0)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));else if(D&&Q>48&&Q<=57){if(Zi(t.V,t.t)>0){for(z1(t),r=Q-47,A=t.t,i=t.V.q-t.V.f,f=1;f<r&&(z5(t,A),n=W0(t.V,t.ib,t.lb,0),n!=-1);f++)tL(t.V,A,n),A=n-i,ut(t.V,1);t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))}}else!D&&Q==-7?(un(t.i,0),t.eb=w.Math.max(t.eb,1),n1(t.k)):!D&&Q==-5?(un(t.i,t.i.a.length-1),t.eb=w.Math.max(t.eb,1),n1(t.k)):Q>=65&&Q<=90||Q>=97&&Q<=122||Q>=48&&Q<=57||Q==45?(Oe(t.i,Q&w1),t.eb=w.Math.max(t.eb,1),n1(t.k)):(Q==10||Q==13)&&as(t,t.i.a);else Q==104||Q==118?(t.U&7)==0&&v5(t,Q==104):t.db&&Y5(t.db,e);e.j==2&&(Q==-3?(t.Z=!1,A9(t)):Q==-2?(t.d=!1,A9(t)):Q==-1?A9(t):t.db&&Y5(t.db,e))}}function Ka(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt;for(n=0;n<t.f.f;n++)if(Mt(t.f,n)>4){for(s=new MP(t.f,1+Mt(t.f,n),!1),s.a[Mt(t.f,n)]=0,s.b[Mt(t.f,n)]=0,s.k[Mt(t.f,n)]=32,s.e[Mt(t.f,n)]=n,t.b[n]=!0,l=0;l<Mt(t.f,n);l++)Q=_(t.f,n,l),s.a[l]=w.Math.sin(AA*l-p2),s.b[l]=w.Math.cos(AA*l-p2),s.k[l]=32,s.e[l]=Q,t.b[Q]=!0,t.c[Ot(t.f,n,l)]=!0;pP(t.d,s)}for(tt=On(t.f),X=0;X<tt.j.a.length;X++){if(W=N(tt.k,X).length,a=N(tt.j,X),$=!1,(t.e&12)!=0){for($=!0,l=0;l<W;l++)if(!z0(t.f,a[l])){$=!1;break}}if(!$){for(g=!1,T=0;T<W;T++)if(M9(t.f,a[T])==W){g=!0;break}if(g)for(E=N(tt.k,X),Qk(t,a,E),l=0;l<W;l++)t.b[a[l]]=!0,t.c[E[l]]=!0}}for(f=0;f<t.f.g;f++)if(fA(t.f,f)&&!t.c[f])for(lt=L_(t,f),a=lt.a,E=lt.b,Qk(t,a,E),l=0;l<lt.a.length;l++)t.b[a[l]]=!0,t.c[E[l]]=!0;for(D=0;D<t.f.r;D++)if(!t.c[D]&&dt(t.f,D)==3&&(P=z(t.f,0,D),r=z(t.f,1,D),j=Mt(t.f,P)+Mt(t.f,r),j>2)){for(s=new MP(t.f,j,!1),U=0,T=0;T<Mt(t.f,P);T++)Q=_(t.f,P,T),Q!=r&&(s.e[U++]=Q,t.b[Q]=!0,t.c[Ot(t.f,P,T)]=!0);for(s.e[U++]=P,s.e[U++]=r,c=0;c<Mt(t.f,r);c++)Q=_(t.f,r,c),Q!=P&&(s.e[U++]=Q,t.b[Q]=!0,t.c[Ot(t.f,r,c)]=!0);for(l=0;l<j;l++)s.a[l]=l,s.b[l]=0,s.k[l]=1;t.b[P]=!0,t.b[r]=!0,t.c[D]=!0,pP(t.d,s)}for(i=0;i<t.f.r;i++)if(!t.c[i]&&dt(t.f,i)==2){for(e=h(F,k,6,t.f.q,15,1),l=0;l<2;l++)if(e[0]=z(t.f,l,i),e[1]=z(t.f,1-l,i),a1(t.f,e[0])==1&&a1(t.f,e[1])==2&&Mt(t.f,e[1])==2){t.b[e[0]]=!0,t.b[e[1]]=!0,t.c[i]=!0,b=1;do{if(C=_(t.f,e[b],0)==e[b-1]?1:0,e[b+1]=_(t.f,e[b],C),a1(t.f,e[b+1])==2&&Mt(t.f,e[b+1])>2)break;t.b[e[b+1]]=!0,t.c[Ot(t.f,e[b],C)]=!0,++b}while(a1(t.f,e[b])==2&&Mt(t.f,e[b])==2);for(j=Mt(t.f,e[0])+Mt(t.f,e[b])+b-1,s=new MP(t.f,j,!1),v=0;v<=b;v++)s.a[v]=v,s.b[v]=0,s.k[v]=64,s.e[v]=e[v];for(L=b+1,y=!1,R=0;R<Mt(t.f,e[0]);R++)Q=_(t.f,e[0],R),Q!=e[1]&&(s.a[L]=-.5,s.b[L]=y?w.Math.sin(AA):-w.Math.sin(AA),s.k[L]=64,s.e[L]=Q,++L,y=!0);for(y=!1,m=0;m<Mt(t.f,e[b]);m++)Q=_(t.f,e[b],m),Q!=e[b-1]&&(s.a[L]=b+.5,s.b[L]=y?-w.Math.sin(AA):w.Math.sin(AA),s.k[L]=64,s.e[L]=Q,++L,y=!0);pP(t.d,s)}}for(A=0;A<t.f.q;A++)if(Mt(t.f,A)==4){for(S=h(F,k,6,4,15,1),p=h(F,k,6,4,15,1),x=0,T=0;T<4;T++)S[x]=_(t.f,A,T),p[x]=Ot(t.f,A,T),Mt(t.f,S[x])==1&&!t.c[p[x]]&&++x;if(x==2){for(s=new MP(t.f,3,!1),l=0;l<2;l++)t.b[S[l]]=!0,t.c[p[l]]=!0,s.e[l]=S[l],s.k[l]=32;s.a[0]=-.5,s.b[0]=.866,s.a[1]=.5,s.b[1]=.866,s.a[2]=0,s.b[2]=0,s.k[2]=32,s.e[2]=A,pP(t.d,s)}if(x==3){for(c=0;c<2;c++)dt(t.f,p[c])==1&&(et=S[c],S[c]=S[2],S[2]=et,et=p[c],p[c]=p[2],p[2]=et);for(s=new MP(t.f,4,!1),l=0;l<3;l++)t.b[S[l]]=!0,t.c[p[l]]=!0,s.e[l]=S[l],s.k[l]=32;s.a[0]=-1,s.b[0]=0,s.a[1]=1,s.b[1]=0,s.a[2]=0,s.b[2]=1,s.a[3]=0,s.b[3]=0,s.k[3]=32,s.e[3]=A,pP(t.d,s)}}}function Xa(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht;if(ki(t.c),t.d=null,ut(e,63),dt(e,A)!=1||A<e.g&&Re(e.p,A)||K(e,e.D[0][A])==1||K(e,e.D[1][A])==1||(tt=(e.F[A]&128)!=0,tt&&(e.p&&A<e.g?yP(e.p,A):0)<6))return!1;for(P=h(rt,ft,6,e.f,16,1),t.a=0,C=0;C<2;C++){for(t.b[C]=e.D[C][A],t.e[C]=e.D[1-C][A];a1(e,t.b[C])==2&&e0(e,t.b[C])==2&&K(e,t.b[C])<10;)for(W=0;W<O(e,t.b[C]);W++)if(i=_(e,t.b[C],W),i!=t.e[C]&&e.C[i]!=1){if(e.j[i]==1||t.a==16)return!1;P[t.b[C]]=!0,t.e[C]=t.b[C],t.b[C]=i,++t.a;break}if($=e0(e,t.b[C]),$>4||$==1)return!1;P[t.b[C]]=!0}for(S=0;S<2;S++)for(W=0;W<O(e,t.b[S]);W++)i=_(e,t.b[S],W),e.C[i]!=1&&(P[i]=!0);for(t.g=h(F,k,6,e.f,15,1),ui(e,t.c,P,!0,t.g),p=0;p<t.g.length;p++)t.g[p]!=-1&&(t.i[t.g[p]]=p);if(je(t.c,!0),tt&&(r=D1(t.c,t.g[t.b[0]],t.g[t.b[1]]),r!=-1)){for(Ge(t.c,r,256,!0),Kt=(ut(e,7),e.p),Tt=0;Tt<Kt.j.a.length;Tt++)if(Af(Kt,Tt,A)){for(x=0;x<2;x++)for(W=0;W<O(e,t.b[x]);W++)if(i=_(e,t.b[x],W),i!=t.e[x]&&yA(Kt,Tt,i)&&e.C[i]!=1){Ge(t.c,D1(t.c,t.g[t.b[x]],t.g[i]),256,!0);break}}}for(a=0;a<2;a++){for(EP(e,t.b[a],!0)&&T1(t.c,t.g[t.b[a]],Ur,!0),D=!1,W=0;W<O(e,t.b[a]);W++)i=_(e,t.b[a],W),i!=t.e[a]&&e.C[i]!=1&&(g=D1(t.c,t.g[t.b[a]],t.g[i]),l1(t.c,g)==8?D=!0:e.C[i]==6&&!vn(e,t.b[a])&&(c=i<e.f&&i0(e.p,i)?2:4,T1(t.c,t.g[i],c,!0)),f=Ot(e,t.b[a],W),Ct=e.p&&f<e.g?yP(e.p,f):0,(Ct==3||Ct==4)&&Ge(t.c,g,Ct<<17,!0),(f<e.g&&Re(e.p,f)||pA(e,t.b[a],W)==2)&&($=e0(e,i),b=$==3,!b&&$==2&&(e.u[i]&hn)==0&&(b=_R(e,t.b[1-a],f)!=-1),b?T1(t.c,t.g[i],B2,!0):f<e.g&&Re(e.p,f)&&T1(t.c,t.g[i],d2,!0)),pA(e,t.b[a],W)==1&&(e0(e,i)==4?T1(t.c,t.g[i],Hf,!0):e.C[i]==6&&T1(t.c,t.g[i],qA,!0)));D||(vn(e,t.b[a])?T1(t.c,t.g[t.b[a]],2,!0):T1(t.c,t.g[t.b[a]],4,!0))}for(ut(t.c,191),j=0;j<2;j++)if(m=t.g[t.b[j]],d0(t.c,m)==3){if(d0(e,t.b[j])==3)return!1;et=Vv(t.c,m),w0(t.c,et,257),z(t.c,0,et)!=m&&(BD(t.c,1,et,z(t.c,0,et)),BD(t.c,0,et,m)),ut(t.c,191)}if(s=t.g[t.b[0]],y=t.g[t.b[1]],ct=t.g[t.e[0]],Pt=t.g[t.e[1]],Q=Ae(t.c,s),U=Ae(t.c,y),E8(t.c,s)&&E8(t.c,y)&&(Q!=0||U!=0)&&(Q!=U||VA(t.c,s)!=VA(t.c,y)))return!1;if(L=!1,E8(t.c,s)&&Q!=0&&(He(t.c,s,0,-1),L=!0),E8(t.c,y)&&U!=0&&(He(t.c,y,0,-1),L=!0),L&&ut(t.c,191),lt=R0(t.c,s),st=R0(t.c,y),lt<st&&(Ht=t.b[0],t.b[0]=t.b[1],t.b[1]=Ht,Ht=t.e[0],t.e[0]=t.e[1],t.e[1]=Ht,Ht=s,s=y,y=Ht,Ht=ct,ct=Pt,Pt=Ht),X=!1,(E8(t.c,s)||E8(t.c,y))&&(E8(t.c,s)?X=c3(t.c,s)==1:E8(t.c,y)&&(X=c3(t.c,y)==1),X)){for(n=0;n<t.c.q;n++)Be(t.c,n,-kt(t.c,n));ut(t.c,191)}return l=RR(t,s,ct),T=RR(t,y,Pt),t.f[0]=l==-1?-1:t.i[l],t.f[1]=T==-1?-1:t.i[T],E=FF(t.c),E==null?!1:(v=cR(t,s,ct),R=cR(t,y,Pt),v==0&&R==0&&(t.c.I&qP)==I0?Ut=2:Ut=qV[v][R],$t=Ut==0?X?\"<\":\">\":Ut==1?X?\"-\":\"+\":Ut==3?\"=\":\"\",t.d=E+$t,!0)}function Za(t,e){var A,n,P;i8();var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1;for(v=new hj(e),c=new Tp(e,v),e1=h(zE,nA,461,e.q,0,2),ct=1;ct<e.q;ct++)e1[ct]=h(zE,{4:1,5:1,8:1,462:1,461:1},81,ct,0,1);for(T=0;T<e.r;T++)Q=O9(e.D[0][T],e.D[1][T]),MQ(e1,Q,Q,v.a[T],10);for(s=0;s<e.f;s++)for(Pt=1;Pt<e.e[s];Pt++)for(S=e.i[s][Pt],a=e.k[s][Pt],g=v.a[a],Ut=0;Ut<Pt;Ut++)p=e.i[s][Ut],E=e.k[s][Ut],r=Pt<Ut?c.a[s][Ut][Pt]:c.a[s][Pt][Ut],m=v.a[E],tt=w.Math.sqrt(g*g+m*m-2*g*m*w.Math.cos(r)),Qt=h(F,k,6,1,15,1),Qt[0]=s,MQ(e1,O9(S,p),Qt,tt,5);for(l=0;l<e.r;l++)if(!(l<e.g&&Re(e.p,l)||(e.F[l]&64)!=0&&(e.p&&l<e.g?yP(e.p,l):0)<=5)){for(Q=h(F,k,6,2,15,1),Pt=0;Pt<2;Pt++)Q[Pt]=e.D[Pt][l];if(e.e[Q[0]]>1&&e.e[Q[1]]>1){if(dt(e,l)==3){for(tt=v.a[l],b1=h(F,k,6,2,15,1),Tt=0;Tt<2;Tt++)for(Ut=0;Ut<e.e[Q[Tt]];Ut++)if(x=e.k[Q[Tt]][Ut],x!=l){tt+=v.a[x],b1[Tt]=e.i[Q[Tt]][Ut];break}Qt=h(F,k,6,2,15,1),Qt[0]=Q[0],Qt[1]=Q[1],MQ(e1,O9(b1[0],b1[1]),Qt,tt,3)}else if(dt(e,l)==2&&e.o[Q[0]]==1&&e.o[Q[1]]==1&&(e.F[l]&3)!=3){for(C=h(F,D0,7,2,0,2),x=h(F,D0,7,2,0,2),j=h(yt,h0,15,2,0,2),Tt=0;Tt<2;Tt++){for(C[Tt]=h(F,k,6,e.e[Q[Tt]]-1,15,1),x[Tt]=h(F,k,6,e.e[Q[Tt]]-1,15,1),j[Tt]=h(yt,wt,6,e.e[Q[Tt]]-1,15,1),W=-1,Ut=0;Ut<e.e[Q[Tt]];Ut++)if(e.i[Q[Tt]][Ut]==Q[1-Tt]){W=Ut;break}for(X=0,Ht=0;Ht<e.e[Q[Tt]];Ht++)Ht!=W&&(C[Tt][X]=e.i[Q[Tt]][Ht],x[Tt][X]=e.k[Q[Tt]][Ht],j[Tt][X]=Vu(c,Q[Tt],W,Ht),++X)}for(Kt=0;Kt<C[0].length;Kt++)for(Ut=0;Ut<C[1].length;Ut++)Ct=(e.F[l]&3)==1,C[0].length==2&&C[0][Kt]>C[0][1-Kt]&&(Ct=!Ct),C[1].length==2&&C[1][Ut]>C[1][1-Ut]&&(Ct=!Ct),A=v.a[l]-v.a[x[0][Kt]]*w.Math.cos(j[0][Kt])-v.a[x[1][Ut]]*w.Math.cos(j[1][Ut]),n=v.a[x[0][Kt]]*w.Math.sin(j[0][Kt]),Ct?n+=v.a[x[1][Ut]]*w.Math.sin(j[1][Ut]):n-=v.a[x[1][Ut]]*w.Math.sin(j[1][Ut]),P=h(F,k,6,2,15,1),P[0]=e.D[0][l],P[1]=e.D[1][l],MQ(e1,O9(C[0][Kt],C[1][Ut]),P,w.Math.sqrt(A*A+n*n),3)}else if(dt(e,l)!=0){for(Nt=h(F,k,6,2,15,1),Tt=0;Tt<2;Tt++)for(Ut=0;Ut<e.e[Q[Tt]];Ut++)if(e.i[Q[Tt]][Ut]==Q[1-Tt]){Nt[Tt]=Ut;break}for(Kt=0;Kt<e.e[Q[0]];Kt++)if(Kt!=Nt[0])for(Ut=0;Ut<e.e[Q[1]];Ut++)Ut!=Nt[1]&&(e.o[Q[0]]==0&&e.o[Q[1]]==0?G_(e.i[Q[0]][Kt],e.i[Q[1]][Ut],e.k[Q[0]][Kt],e.k[Q[1]][Ut],Vu(c,Q[0],Nt[0],Kt),Vu(c,Q[1],Nt[1],Ut),l,v,e1,e):A_(e.i[Q[0]][Kt],e.i[Q[1]][Ut],e.k[Q[0]][Kt],e.k[Q[1]][Ut],Vu(c,Q[0],Nt[0],Kt),Vu(c,Q[1],Nt[1],Ut),l,v,e1,e))}}}for(y=0;y<e.f;y++)if(e.o[y]==2&&e.j[y]==2&&e.n[y][0]==2&&e.n[y][1]==2){for(U=e.i[y][0],L=e.i[y][1],Pt=0;Pt<e.e[U];Pt++)if(R=e.i[U][Pt],R!=y)for(Ut=0;Ut<e.e[L];Ut++)b=e.i[L][Ut],b!=y&&(i=rk(c,U,y,R),f=rk(c,L,y,b),g=B9(v,e.k[U][Pt]),m=B9(v,e.k[L][Ut]),$=B9(v,e.k[y][0])+B9(v,e.k[y][1])-g*w.Math.cos(i)-m*w.Math.cos(f),et=g*w.Math.sin(i),lt=m*w.Math.sin(f),Qt=h(F,k,6,2,15,1),Qt[0]=U,Qt[1]=L,MQ(e1,O9(R,b),Qt,w.Math.sqrt($*$+et*et+lt*lt),3))}for(D=0;D<e.q;D++)w_(e1,D,e,v);for(BY(e1,e),st=1;st<e.q;st++)for($t=0;$t<st;$t++)e1[st][$t].a!=null&&t.a.push(e1[st][$t])}function Tp(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;for(this.b=e,this.e=t,this.a=h(Ee,nA,464,this.e.f,0,3),P=0;P<this.e.f;P++)for(this.a[P]=h(Ee,{464:1,4:1,9:1,5:1,8:1},46,Mt(this.e,P),0,2),D=1;D<Mt(this.e,P);D++)this.a[P][D]=h(Ee,PA,6,D,15,1);for(this.c=h(F,k,6,this.e.f,15,1),this.d=h(Ee,PA,6,this.e.f,15,1),this.f=h(F,k,6,this.e.g,15,1),j=On(this.e),s=h(rt,ft,6,j.j.a.length,16,1),Zs(j,s,h(rt,ft,6,j.j.a.length,16,1),h(F,k,6,j.j.a.length,15,1),!0),f=3;f<=7;f++)for(g=0;g<j.j.a.length;g++)C=N(j.k,g).length,C==f&&(s[g]?ua(this,g):C<=4&&SX(this,g));for(L=h(rt,ft,6,this.e.f,16,1),c=0;c<j.j.a.length;c++)if(s[c])for(v=N(j.j,c),R=0,b=v.length;R<b;++R)m=v[R],L[m]=!0;for(r=B(d(F,1),k,6,15,[0,0,1,3,6,10,15,21]),n=0;n<this.e.f;n++){if(i=Mt(this.e,n),i>4){for(D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=I6;this.c[n]=r[i];continue}if(this.c[n]!=r[i])if(go(this.e,n)&&(L[n]||M9(this.e,n)<=4&&a1(this.e,n)>0)){if(i>2){if(this.c[n]==1)K(this.e,n)<=14?A=(Kp-this.d[n])/2:A=Xp+(Xp-this.d[n])*.18000000715255737;else if(A=Kp-this.d[n],i>3){if(this.c[n]==2){for(y=h(rt,ft,6,Mt(this.e,n),16,1),Q=1;Q<i;Q++)for(T=0;T<Q;T++)this.a[n][Q][T]!=0&&(y[Q]=!y[Q],y[T]=!y[T]);for(U=0;U<i;U++)if(y[U]){for(T=U+1;T<i;T++)if(y[T]){this.a[n][T][U]=A;break}break}}A=I6}for(D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]==0&&(this.a[n][D][l]=A)}}else if(go(this.e,n)&&M9(this.e,n)<=4)switch(HK(this,n)){case 771:L0(this,n,0,3,2.0653998851776123),L0(this,n,0,0,1.9814722631346626);break;case 1028:L0(this,n,0,4,1.9797999858856201),L0(this,n,0,0,1.94691481878138);break;case 393987:L0(this,n,0,3,Zp),L0(this,n,0,6,Zp),L0(this,n,3,3,1.7229016938441077);break;case 459779:L0(this,n,0,3,x6),L0(this,n,0,4,x6),L0(this,n,0,7,x6),L0(this,n,3,4,1.9322539839360076);break;case 525316:L0(this,n,0,4,Wp),L0(this,n,0,8,Wp),L0(this,n,4,4,1.99944913298566);case 394758:L0(this,n,0,6,2.526099920272827);break;case 460550:L0(this,n,0,6,_p),L0(this,n,0,7,_p);break;case 526087:L0(this,n,0,7,$p),L0(this,n,0,8,$p);break;case 526344:L0(this,n,0,8,2.186300039291382);break;case 50529027:L0(this,n,3,3,2.4189000129699707);break;case 67371779:L0(this,n,3,4,2.2298998832702637);break;case 67372036:L0(this,n,4,4,2.094399929046631);break;case 101057283:L0(this,n,3,6,1.839926051241747),L0(this,n,3,3,2.9061476191098734);break;case 117834755:L0(this,n,3,4,2.812249087174905),L0(this,n,3,7,1.7910569124592968),L0(this,n,4,6,2.1224948975613245);break;case 134677507:L0(this,n,3,4,2.642428360523752),L0(this,n,3,8,2.027723514585844),L0(this,n,4,7,2.251474717631936);break;case 117900035:L0(this,n,3,7,2.109753935530918),L0(this,n,3,3,3.1052897491356646);break;case 117900292:L0(this,n,4,7,2.090729910747413),L0(this,n,4,4,2.551671293386306);break;case 134743044:L0(this,n,4,8,2.139250042271712),L0(this,n,4,4,2.3520055858942612)}else for(A=K(this.e,n)>10?ap:a1(this.e,n)==2?j2:EP(this.e,n,!0)?tC:a1(this.e,n)==0?ap:tC,D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=A}}function Wa(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(t.A=e,t.a=A,L=vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*8))),s=B(d(F,1),k,6,15,[L,L/2|0,L*3/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L*3/2|0,L/4|0,L/2|0,L/2|0,L/4|0]),y=B(d(F,1),k,6,15,[L*3/2|0,L/2|0]),l=B(d(F,1),k,6,15,[L,-2,L,-2,L]),b=h(F,k,6,1+2*s.length+(n?2*y.length:0),15,1),c=0,i=s,D=0,U=i.length;D<U;++D)P=i[D],b[c++]=P,b[c++]=-2;if(n)for(r=y,f=0,Q=r.length;f<Q;++f)P=r[f],b[c++]=P,b[c++]=-2;for(b[c++]=L,_o(t.v,l,b),t.b=fn(t.v,\"Any atomic number\"),JP(t.b,t),he(t.v,t.b,1,1,3,1),t.w=oe(t.v,n4),t.D=Gu(t.v,16,1),f0(t.v,t.w,1,3),f0(t.v,t.D,3,3),t.g=oA(t.v),Gt(t.g,d8),Gt(t.g,\"is aromatic\"),Gt(t.g,\"is hetero-aromatic\"),Gt(t.g,\"is not aromatic\"),f0(t.v,oe(t.v,\"Aromaticity:\"),1,5),f0(t.v,t.g,3,5),t.s=oA(t.v),Gt(t.s,d8),Gt(t.s,\"0 (not in a ring)\"),Gt(t.s,\"0 or 2 (0 or 1 ring)\"),Gt(t.s,\">=2 (any ring count)\"),Gt(t.s,\"2 (in 1 ring)\"),Gt(t.s,\"3 (bridge head; 2 rings)\"),Gt(t.s,\">3 (in more than 2 rings)\"),f0(t.v,oe(t.v,\"Ring bonds:\"),1,7),f0(t.v,t.s,3,7),t.t=oA(t.v),Gt(t.t,d8),Gt(t.t,\"3 members\"),Gt(t.t,\"4 members\"),Gt(t.t,\"5 members\"),Gt(t.t,\"6 members\"),Gt(t.t,\"7 members\"),f0(t.v,oe(t.v,\"Smallest ring size:\"),1,9),f0(t.v,t.t,3,9),t.r=oA(t.v),m=KV,v=0,R=m.length;v<R;++v)g=m[v],Gt(t.r,g);for(f0(t.v,oe(t.v,\"Any ring size:\"),1,11),f0(t.v,t.r,3,11),t.i=oA(t.v),Gt(t.i,d8),Gt(t.i,\"not charged\"),Gt(t.i,\"has negative charge\"),Gt(t.i,\"has positive charge\"),f0(t.v,oe(t.v,\"Charge:\"),1,13),f0(t.v,t.i,3,13),t.n=oA(t.v),Gt(t.n,d8),Gt(t.n,Gy),Gt(t.n,Jy),Gt(t.n,\"exactly 3\"),Gt(t.n,P4),Gt(t.n,DV),Gt(t.n,zy),Gt(t.n,r4),Gt(t.n,i4),Gt(t.n,uV),Gt(t.n,f4),Gt(t.n,\"1,2, or 3\"),Gt(t.n,\"2 or 3\"),f0(t.v,oe(t.v,\"Non-H neighbours:\"),1,15),f0(t.v,t.n,3,15),t.j=oA(t.v),Gt(t.j,d8),Gt(t.j,\"exactly 0\"),Gt(t.j,Gy),Gt(t.j,Jy),Gt(t.j,\"exactly 3\"),Gt(t.j,QV),Gt(t.j,P4),Gt(t.j,DV),Gt(t.j,zy),Gt(t.j,r4),Gt(t.j,i4),Gt(t.j,uV),Gt(t.j,f4),Gt(t.j,\"1,2, or 3\"),Gt(t.j,\"2 or 3\"),f0(t.v,oe(t.v,\"Electroneg. neighbours:\"),1,17),f0(t.v,t.j,3,17),t.k=oA(t.v),Gt(t.k,d8),Gt(t.k,\"none\"),Gt(t.k,Gy),Gt(t.k,Jy),Gt(t.k,zy),Gt(t.k,r4),Gt(t.k,i4),Gt(t.k,QV),Gt(t.k,P4),Gt(t.k,f4),f0(t.v,oe(t.v,\"Hydrogen count:\"),1,19),f0(t.v,t.k,3,19),t.p=oA(t.v),Gt(t.p,d8),Gt(t.p,\"none\"),Gt(t.p,Gy),Gt(t.p,Jy),Gt(t.p,zy),f0(t.v,oe(t.v,\"Pi-electron count:\"),1,21),f0(t.v,t.p,3,21),t.o=oA(t.v),Gt(t.o,d8),T=1;T<15;T++)Gt(t.o,\"\"+(T-7));f0(t.v,oe(t.v,\"Oxidation state:\"),1,23),f0(t.v,t.o,3,23),t.c=fn(t.v,\"prohibit further substitution\"),JP(t.c,t),he(t.v,t.c,1,25,3,25),t.f=fn(t.v,\"require further substitution\"),JP(t.f,t),he(t.v,t.f,1,27,3,27),t.u=oA(t.v),Gt(t.u,d8),Gt(t.u,\"is a stereo center\"),Gt(t.u,\"is not a stereo center\"),f0(t.v,oe(t.v,\"Stereo center:\"),1,29),f0(t.v,t.u,3,29),t.e=fn(t.v,\"match stereo center\"),he(t.v,t.e,1,31,3,31),t.d=fn(t.v,\"is part of exclude group\"),he(t.v,t.d,1,33,3,33),n&&(he(t.v,oe(t.v,\"Stereo center hint for product:\"),1,35,3,35),t.q=oA(t.v),Gt(t.q,\"Copy from generic product\"),Gt(t.q,\"Keep reactant configuration\"),Gt(t.q,\"Invert reactant configuration\"),Gt(t.q,\"Racemise configuration\"),he(t.v,t.q,1,37,3,37)),ut(t.A,31),Na(t)}function hp(){var t,e,A,n;for(this.b=new LP,this.c=new LP,this.d=new LP,R4=B(d(Qtt,1),A0,18,0,[new qt(1,\"Hydrogen\",\"H\",2.2),new qt(2,\"Helium\",\"He\",0),new qt(3,\"Lithium\",\"Li\",.98),new qt(4,\"Beryllium\",\"Be\",1.57),new qt(5,\"Boron\",\"B\",2.04),new qt(6,\"Carbon\",\"C\",2.55),new qt(7,\"Nitrogen\",\"N\",3.04),new qt(8,\"Oxygen\",\"O\",3.44),new qt(9,\"Fluorine\",\"F\",3.98),new qt(10,\"Neon\",\"Ne\",0),new qt(11,\"Sodium\",\"Na\",.93),new qt(12,\"Magnesium\",\"Mg\",1.31),new qt(13,\"Aluminum\",\"Al\",1.61),new qt(14,\"Silicon\",\"Si\",1.9),new qt(15,\"Phosphorus\",\"P\",2.19),new qt(16,\"Sulfur\",\"S\",2.58),new qt(17,\"Chlorine\",\"Cl\",3.16),new qt(18,\"Argon\",\"Ar\",0),new qt(19,\"Potassium\",\"K\",1),new qt(20,\"Calcium\",\"Ca\",1.36),new qt(21,\"Scandium\",\"Sc\",1.54),new qt(22,\"Titanium\",\"Ti\",1.63),new qt(23,\"Vanadium\",\"V\",1.66),new qt(24,\"Chromium\",\"Cr\",1.55),new qt(25,\"Manganese\",\"Mn\",1.83),new qt(26,\"Iron\",\"Fe\",1.88),new qt(27,\"Cobalt\",\"Co\",1.91),new qt(28,\"Nickel\",\"Ni\",1.9),new qt(29,\"Copper\",\"Cu\",1.65),new qt(30,\"Zinc\",\"Zn\",1.81),new qt(31,\"Gallium\",\"Ga\",2.01),new qt(32,\"Germanium\",\"Ge\",0),new qt(33,\"Arsenic\",\"As\",2.18),new qt(34,\"Selenium\",\"Se\",2.55),new qt(35,\"Bromine\",\"Br\",0),new qt(36,\"Krypton\",\"Kr\",2.96),new qt(37,\"Rubidium\",\"Rb\",0),new qt(38,\"Strontium\",\"Sr\",.82),new qt(39,\"Yttrium\",\"Y\",.95),new qt(40,\"Zirconium\",\"Zr\",1.22),new qt(41,\"Niobium\",\"Nb\",1.33),new qt(42,\"Molybdenum\",\"Mo\",1.6),new qt(43,\"Technetium\",\"Tc\",2.16),new qt(44,\"Ruthenium\",\"Ru\",1.9),new qt(45,\"Rhodium\",\"Rh\",2.2),new qt(46,\"Palladium\",\"Pd\",2.28),new qt(47,\"Silver\",\"Ag\",2.2),new qt(48,\"Cadmium\",\"Cd\",1.93),new qt(49,\"Indium\",\"In\",1.69),new qt(50,\"Tin\",\"Sn\",1.78),new qt(51,\"Antimony\",\"Sb\",1.96),new qt(52,\"Tellurium\",\"Te\",0),new qt(53,\"Iodine\",\"I\",2.05),new qt(54,\"Xenon\",\"Xe\",2.1),new qt(55,\"Cesium\",\"Cs\",2.66),new qt(56,\"Barium\",\"Ba\",2.6),new qt(57,\"Lanthanum\",\"La\",.79),new qt(58,\"Cerium\",\"Ce\",.89),new qt(59,\"Praesodymium\",\"Pr\",1.1),new qt(60,\"Neodymium\",\"Nd\",1.12),new qt(61,\"Promethium\",\"Pm\",1.13),new qt(62,\"Samarium\",\"Sm\",1.14),new qt(63,\"Europium\",\"Eu\",0),new qt(64,\"Gadolinium\",\"Gd\",1.17),new qt(65,\"Terbium\",\"Tb\",0),new qt(66,\"Dyprosium\",\"Dy\",1.2),new qt(67,\"Holmium\",\"Ho\",0),new qt(68,\"Erbium\",\"Er\",1.22),new qt(69,\"Thulium\",\"Tm\",1.23),new qt(70,\"Ytterbium\",\"Yb\",1.24),new qt(71,\"Lutetium\",\"Lu\",1.25),new qt(72,\"Hafnium\",\"Hf\",0),new qt(73,\"Tantalium\",\"Ta\",1.27),new qt(74,\"Wolfram\",\"W\",1.3),new qt(75,\"Rhenium\",\"Re\",1.5),new qt(76,\"Osmium\",\"Os\",2.36),new qt(77,\"Iridium\",\"Ir\",1.9),new qt(78,\"Platinum\",\"Pt\",2.2),new qt(79,\"Gold\",\"Au\",2.2),new qt(80,\"Mercury\",\"Hg\",2.28),new qt(81,\"Thallium\",\"Tl\",2.54),new qt(82,\"Lead\",\"Pb\",2),new qt(83,\"Bismuth\",\"Bi\",1.62),new qt(84,\"Polonium\",\"Po\",2.33),new qt(85,\"Astatine\",\"At\",2.02),new qt(86,\"Radon\",\"Rn\",2),new qt(87,\"Francium\",\"Fr\",2.2),new qt(88,\"Radium\",\"Ra\",0),new qt(89,\"Actinium\",\"Ac\",.7),new qt(90,\"Thorium\",\"Th\",.89),new qt(91,\"Protactinium\",\"Pa\",1.1),new qt(92,\"Uranium\",\"U\",1.3),new qt(93,\"Neptunium\",\"Np\",1.5),new qt(94,\"Plutonium\",\"Pu\",1.38),new qt(95,\"Americium\",\"Am\",1.36),new qt(96,\"Curium\",\"Cm\",1.28),new qt(97,\"Berkelium\",\"Bk\",1.3),new qt(98,\"Californium\",\"Cf\",1.3),new qt(99,\"Einsteinium\",\"E\",1.3),new qt(100,\"Fermium\",\"Fm\",1.3),new qt(101,\"Mendelevium\",\"Mv\",1.3)]),e=R4,A=0,n=e.length;A<n;++A)t=e[A],Sr(this.b,k1(t.c),t),SD(this.c,t.b,t),SD(this.d,t.d.toLowerCase(),t);this.a=h(rt,ft,6,R4.length,16,1),this.a[3]=!0,this.a[11]=!0,this.a[19]=!0,this.a[37]=!0,this.a[55]=!0,this.a[87]=!0}function _a(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA,T9,F8,QP,UP,tn,h9,xn,en;for(S=w3(t.c,n),d1=new JA,T=0,c=0,xn=null,st=0;st<t.o.length;st++){for(p=dr(t.c,st),ut(t.o[st],1),F1=N(e[st],A[st]),y0=h(F,k,6,t.o[st].f,15,1),v=h(rt,ft,6,t.o[st].f,16,1),R=h(rt,ft,6,t.o[st].g,16,1),Ut=0;Ut<p.f;Ut++)if(F1[Ut]!=-1)if(w.Math.abs(p.w[Ut])==0){for(b=F1[Ut],v[b]=!0,j1=0;j1<O(t.o[st],b);j1++)R[Ot(t.o[st],b,j1)]=!0;for(Lt=Mt(t.o[st],b);Lt<De(t.o[st],b);Lt++)R[Ot(t.o[st],b,Lt)]=!0}else y0[F1[Ut]]=w.Math.abs(p.w[Ut]);for(Ht=0;Ht<p.g;Ht++)if(L=p.D[0][Ht],s=p.D[1][Ht],w.Math.abs(p.w[L])!=0&&w.Math.abs(p.w[s])!=0&&(f=F1[L],D=F1[s],f!=-1&&D!=-1)){for(Lt=0;Lt<t.o[st].g;Lt++)if(z(t.o[st],0,Lt)==f&&z(t.o[st],1,Lt)==D||z(t.o[st],0,Lt)==D&&z(t.o[st],1,Lt)==f){R[Lt]=!0;break}}for(G0=h(F,k,6,t.o[st].f,15,1),Qt=0;Qt<t.o[st].f;Qt++)if(!v[Qt]&&(G0[Qt]=En(t.o[st],d1,Qt,T,c),t.b&&Ze(d1,G0[Qt],t.p[st][A[st]][Qt],!1),y0[Qt]!=0)){for(Ze(d1,G0[Qt],y0[Qt],!1),Lt=0;Lt<S.f;Lt++)if(w.Math.abs(S.w[Lt])==y0[Qt]){if(E0(d1,G0[Qt],S.s[Lt]),Ne(d1,G0[Qt],S.u[Lt]&48),t.f[n][Lt])if(b0=d0(t.o[st],Qt),Ke=V(S.B[Lt],c8),G(Ke,0)==0)ce(d1,G0[Qt],3,!1);else if(G(Ke,c8)==0)!xn&&(xn=new f1),mt(xn,k1(G0[Qt]));else if(b0==1||b0==2){for(Pt=G(Ke,lU)==0,St=0;St<O(t.o[st],Qt);St++)if(y=_(t.o[st],Qt,St),v[y])for(g1=0;g1<O(t.o[st],Qt);g1++)OA=_(t.o[st],Qt,g1),!v[OA]&&OA>y&&(Pt=!Pt);Pt&&(b0=b0==1?2:1),ce(d1,G0[Qt],b0,!1)}else ce(d1,G0[Qt],0,!1);break}}for(Nt=0;Nt<t.o[st].g;Nt++)R[Nt]||DQ(t.o[st],d1,Nt,T,c,G0,!0);T=$0(d1,1),c=$0(d1,2)}for(T0=h(F,k,6,S.f,15,1),b1=0;b1<S.f;b1++)if(y0=w.Math.abs(S.w[b1]),y0==0)T0[b1]=En(S,d1,b1,T,c);else for(Lt=0;Lt<d1.q;Lt++)if(w.Math.abs(d1.w[Lt])==y0){T0[b1]=Lt;break}if(t.r)for(Ut=0;Ut<S.f;Ut++)zn(d1,T0[Ut],!0),Be(d1,T0[Ut],S.J[Ut].a),Ie(d1,T0[Ut],S.J[Ut].b);for(x=0;x<S.g;x++)if((S.G[x]&y8)==0&&(fe=er(S,d1,x,T,c,T0[S.D[0][x]],T0[S.D[1][x]],!1),gA=S.G[x]&31,gA!=0))for(C=!1,Ge(d1,fe,31,!1),a=C1(S,S.D[0][x]),E=C1(S,S.D[1][x]),lt=0;!C&&lt<t.c.g.a.length;lt++)for(p=dr(t.c,lt),W=0;!C&&W<p.g;W++)X=p.D[0][W],tt=p.D[1][W],$=w.Math.abs(p.w[X]),et=w.Math.abs(p.w[tt]),$!=0&&et!=0&&($==a&&et==E||$==E&&et==a)&&(C=!0,en=p.G[W]&31,en!=0&&(F1=N(e[lt],A[lt]),F8=F1[X],QP=F1[tt],UP=D1(t.o[lt],F8,QP),h9=l1(t.o[lt],UP),tn=dt(t.o[lt],UP),en&=7,gA&=7,en==3&&gA==6?(d1.H[fe]=tn<=1?2:4,d1.T=0):en==6&&gA==3?(d1.H[fe]=tn==3?2:1,d1.T=0):(d1.H[fe]=h9,d1.T=0)));for(ut(d1,1),g=!1,e1=0;e1<S.f;e1++)w.Math.abs(S.w[e1])==0?(b0=H5(S,e1,T0),ce(d1,T0[e1],b0,!1)):t.f[n][e1]&&JZ(t,S,e1,d1,T0[e1])&&(b0=H5(S,e1,T0),ce(d1,T0[e1],b0,!1),(b0==1||b0==2)&&(m=(S.u[e1]&m1)>>18,l=(S.u[e1]&m1)>>18!=1&&(S.u[e1]&m1)>>18!=2?-1:(S.u[e1]&RA)>>20,m==1?l+=T:m==2&&(l+=c),He(d1,T0[e1],m,l),g=!0));for(g&&(T=$0(d1,1),c=$0(d1,2)),T9=h(rt,ft,6,S.q,16,1),Rt=0;Rt<S.f;Rt++)t.f[n][Rt]&&!T9[Rt]&&(S.u[Rt]&4)!=0&&P0(V(S.B[Rt],c8),0)&&S.j[Rt]==d1.j[T0[Rt]]&&oW(S,Rt,d1,T0);for(ct=h(rt,ft,6,d1.q,16,1),Kt=T0,Ct=0,$t=Kt.length;Ct<$t;++Ct)Tt=Kt[Ct],ct[Tt]=!0;for(j=!0;j;)for(j=!1,U=0;U<d1.r;U++)f=d1.D[0][U],D=d1.D[1][U],ct[f]&&!ct[D]?(ct[D]=!0,j=!0):ct[D]&&!ct[f]&&(ct[f]=!0,j=!0);for(i=0;i<d1.q;i++)dP(d1,i,!ct[i]);if(nQ(d1),!t.b)for(Q=0;Q<d1.q;Q++)d1.w[Q]=0;if(Ff(new cr(d1),null,!1),d1.T|=8,s1=2|(t.r?8:0),Ar(new Y8(s1),d1),xn)for(ut(d1,15),r=new Wt(xn);r.a<r.c.a.length;)P=t1(r).a,(d1.u[P]&Tn)!=0&&(ce(d1,P,1,!1),He(d1,P,1,T++));return d1}function $a(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;switch(t.hb=e.g,t.kb=e.i,t.w){case 18:if(y=t.hb,l=t.kb,t.e=ZA(t.V,t.hb,t.kb),t.e!=-1&&(t.hb=kt(t.V,t.e),t.kb=jt(t.V,t.e)),eb(t.V,y,l),t.I)for(f=new Wt(t.I);f.a<f.c.a.length;)i=t1(f),i.Qb(y,l);z1(t),t.X=7;break;case 2:if(t.X=0,t.e=ZA(t.V,t.hb,t.kb),t.e!=-1&&(t.f=-1,t.hb=kt(t.V,t.e),t.kb=jt(t.V,t.e),r0(t.V,t.e)?t.X=t.Z?9:4:t.X=3),t.X==0&&(P=df(t.V,t.hb,t.kb),P!=-1&&(t.e=z(t.V,0,P),t.f=z(t.V,1,P),mP(t.V,P)?t.X=t.Z?9:4:t.X=3)),t.X==0&&t.v&&(t.v.g?t.X=t.Z?9:4:t.X=t.Z&&!Zt(t.v,62)?11:10),t.X!=0){for(t.gb=h(yt,wt,6,t.V.q,15,1),t.jb=h(yt,wt,6,t.V.q,15,1),D=0;D<t.V.q;D++)t.gb[D]=kt(t.V,D),t.jb[D]=jt(t.V,D);if(t.I)for(f=new Wt(t.I);f.a<f.c.a.length;)i=t1(f),nY(i,t.hb,t.kb);z1(t);break}if(e.a?t.X=6:(t.R=new bv,Ce(t.R,t.hb,t.kb),Ce(t.R,t.hb,t.kb),t.X=5),t.P=h(rt,ft,6,t.V.q,16,1),t.I&&(t.Q=h(rt,ft,6,t.I.a.length,16,1)),t.O=e.f,t.O){for(Q=0;Q<t.V.q;Q++)t.P[Q]=r0(t.V,Q);if(t.I)for(D=0;D<t.I.a.length;D++)t.Q[D]=N(t.I,D).g}else{for(L=!1,Q=0;Q<t.V.q;Q++)r0(t.V,Q)&&(dP(t.V,Q,!1),L=!0);if(t.I)for(D=0;D<t.I.a.length;D++)N(t.I,D).g&&(N(t.I,D).g=!1,L=!0);L&&(t.eb=1,n1(t.k))}break;case 4:z1(t),sK(t,t.hb,t.kb);break;case 3:s=ZA(t.V,t.hb,t.kb),s!=-1&&(z1(t),Xo(t.V,s,!Fr(t.V,s)),t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)));break;case 101:case 103:case 102:t.u!=-1&&fN(t,t.u)&&(z1(t),q$(t,t.u,t.w==101?0:t.w==103?1:2),t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)));break;case 5:case 6:case 23:if(t.e=ZA(t.V,t.hb,t.kb),t.e==-1){if(n=df(t.V,t.hb,t.kb),n!=-1){z1(t),r=511,t.w==6?r=257:t.w==23&&(r=129),Q8(t.V,n,r)&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)));break}}else{if(De(t.V,t.e)==8)return;t.hb=kt(t.V,t.e),t.kb=jt(t.V,t.e)}t.X=1,z5(t,t.e),n1(t.k);break;case 22:if(t.e=ZA(t.V,t.hb,t.kb),t.e!=-1){if(De(t.V,t.e)==8)return;t.hb=kt(t.V,t.e),t.kb=jt(t.V,t.e)}t.X=2,t.q=0;break;case 7:z1(t),lf(t.V,t.hb,t.kb,3,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 24:z1(t),lf(t.V,t.hb,t.kb,4,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 8:z1(t),lf(t.V,t.hb,t.kb,5,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 25:z1(t),lf(t.V,t.hb,t.kb,6,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 9:z1(t),lf(t.V,t.hb,t.kb,7,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 26:z1(t),lf(t.V,t.hb,t.kb,6,!0,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 10:z1(t),FB(t.V,t.hb,t.kb,!0)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 27:z1(t),FB(t.V,t.hb,t.kb,!1)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 16:f8(t,1);break;case 11:f8(t,6);break;case 12:f8(t,7);break;case 13:f8(t,8);break;case 28:f8(t,14);break;case 29:f8(t,15);break;case 30:f8(t,16);break;case 14:f8(t,9);break;case 31:f8(t,17);break;case 15:f8(t,35);break;case 32:f8(t,53);break;case 33:e.d||e.a?(A=ZA(t.V,t.hb,t.kb),A!=-1&&XF(t,A,new _c)):(z1(t),Jh(t.V,t.hb,t.kb,t.F,t.B,t.D,t.C,t.A)&&(t.t=-1,t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))));break;case 19:t.e=ZA(t.V,t.hb,t.kb),t.e!=-1&&t.e<t.V.f&&(!t.V.K||!Qe(t.V,t.e))&&(t.hb=kt(t.V,t.e),t.kb=jt(t.V,t.e),t.X=8);break;case 21:U=null,t.v?Zt(t.v,93)&&(U=t.v):(U=new Uo,xg(U,t.hb,t.kb),mt(t.I,U)),sx(t,U,new Mw(t))}}function ry(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt;for(this.c=t.length,this.d=t[0].length,E=w.Math.min(this.c,this.d),this.e=h(yt,wt,6,w.Math.min(this.c+1,this.d),15,1),this.a=R1(yt,[h0,wt],[15,6],15,[this.c,E],2),this.b=R1(yt,[h0,wt],[15,6],15,[this.d,this.d],2),P=h(yt,wt,6,this.d,15,1),Tt=h(yt,wt,6,this.c,15,1),x=w.Math.min(this.c-1,this.d),a=w.Math.max(0,w.Math.min(this.d-2,this.c)),b=0;b<w.Math.max(x,a);b++){if(b<x){for(this.e[b]=0,L=b;L<this.c;L++)this.e[b]=P2(this.e[b],t[L][b]);if(this.e[b]!=0){for(t[b][b]<0&&(this.e[b]=-this.e[b]),U=b;U<this.c;U++)t[U][b]/=this.e[b];t[b][b]+=1}this.e[b]=-this.e[b]}for(c=b+1;c<this.d;c++){if(b<x&this.e[b]!=0){for(Pt=0,L=b;L<this.c;L++)Pt+=t[L][b]*t[L][c];for(Pt=-Pt/t[b][b],U=b;U<this.c;U++)t[U][c]+=Pt*t[U][b]}P[c]=t[b][c]}if(!0&b<x)for(U=b;U<this.c;U++)this.a[U][b]=t[U][b];if(b<a){for(P[b]=0,L=b+1;L<this.d;L++)P[b]=P2(P[b],P[L]);if(P[b]!=0){for(P[b+1]<0&&(P[b]=-P[b]),s=b+1;s<this.d;s++)P[s]/=P[b];P[b+1]+=1}if(P[b]=-P[b],b+1<this.c&P[b]!=0){for(s=b+1;s<this.c;s++)Tt[s]=0;for(g=b+1;g<this.d;g++)for(y=b+1;y<this.c;y++)Tt[y]+=P[g]*t[y][g];for(m=b+1;m<this.d;m++)for(Pt=-P[m]/P[b+1],y=b+1;y<this.c;y++)t[y][m]+=Pt*Tt[y]}for(U=b+1;U<this.d;U++)this.b[U][b]=P[U]}}for(X=w.Math.min(this.d,this.c+1),x<this.d&&(this.e[x]=t[x][x]),this.c<X&&(this.e[X-1]=0),a+1<X&&(P[a]=t[a][X-1]),P[X-1]=0,v=x;v<E;v++){for(U=0;U<this.c;U++)this.a[U][v]=0;this.a[v][v]=1}for(j=x-1;j>=0;j--)if(this.e[j]!=0){for(T=j+1;T<E;T++){for(Pt=0,L=j;L<this.c;L++)Pt+=this.a[L][j]*this.a[L][T];for(Pt=-Pt/this.a[j][j],s=j;s<this.c;s++)this.a[s][T]+=Pt*this.a[s][j]}for(y=j;y<this.c;y++)this.a[y][j]=-this.a[y][j];for(this.a[j][j]=1+this.a[j][j],U=0;U<j-1;U++)this.a[U][j]=0}else{for(U=0;U<this.c;U++)this.a[U][j]=0;this.a[j][j]=1}for(C=this.d-1;C>=0;C--){if(C<a&P[C]!=0)for(T=C+1;T<E;T++){for(Pt=0,L=C+1;L<this.d;L++)Pt+=this.b[L][C]*this.b[L][T];for(Pt=-Pt/this.b[C+1][C],s=C+1;s<this.d;s++)this.b[s][T]+=Pt*this.b[s][C]}for(U=0;U<this.d;U++)this.b[U][C]=0;this.b[C][C]=1}for(tt=X-1,l=0,f=w.Math.pow(2,-52);X>0;){for(R=X-2;R>=-1&&R!=-1;R--)if(w.Math.abs(P[R])<=f*(w.Math.abs(this.e[R])+w.Math.abs(this.e[R+1]))){P[R]=0;break}if(R==X-2)S=4;else{for(p=X-1;p>=R&&p!=R;p--)if(Pt=(p!=X?w.Math.abs(P[p]):0)+(p!=R+1?w.Math.abs(P[p-1]):0),w.Math.abs(this.e[p])<=f*Pt){this.e[p]=0;break}p==R?S=3:p==X-1?S=1:(S=2,R=p)}switch(++R,S){case 1:for(D=P[X-2],P[X-2]=0,T=X-2;T>=R;T--)for(Pt=P2(this.e[T],D),n=this.e[T]/Pt,lt=D/Pt,this.e[T]=Pt,T!=R&&(D=-lt*P[T-1],P[T-1]=n*P[T-1]),U=0;U<this.d;U++)Pt=n*this.b[U][T]+lt*this.b[U][X-1],this.b[U][X-1]=-lt*this.b[U][T]+n*this.b[U][X-1],this.b[U][T]=Pt;break;case 2:for(D=P[R-1],P[R-1]=0,T=R;T<X;T++)for(Pt=P2(this.e[T],D),n=this.e[T]/Pt,lt=D/Pt,this.e[T]=Pt,D=-lt*P[T],P[T]=n*P[T],U=0;U<this.c;U++)Pt=n*this.a[U][T]+lt*this.a[U][R-1],this.a[U][R-1]=-lt*this.a[U][T]+n*this.a[U][R-1],this.a[U][T]=Pt;break;case 3:{for(W=w.Math.max(w.Math.max(w.Math.max(w.Math.max(w.Math.abs(this.e[X-1]),w.Math.abs(this.e[X-2])),w.Math.abs(P[X-2])),w.Math.abs(this.e[R])),w.Math.abs(P[R])),st=this.e[X-1]/W,ct=this.e[X-2]/W,i=P[X-2]/W,et=this.e[R]/W,r=P[R]/W,e=((ct+st)*(ct-st)+i*i)/2,A=st*i*(st*i),$=0,e!=0|A!=0&&($=w.Math.sqrt(e*e+A),e<0&&($=-$),$=A/(e+$)),D=(et+st)*(et-st)+$,Q=et*r,T=R;T<X-1;T++){for(Pt=P2(D,Q),n=D/Pt,lt=Q/Pt,T!=R&&(P[T-1]=Pt),D=n*this.e[T]+lt*P[T],P[T]=n*P[T]-lt*this.e[T],Q=lt*this.e[T+1],this.e[T+1]=n*this.e[T+1],L=0;L<this.d;L++)Pt=n*this.b[L][T]+lt*this.b[L][T+1],this.b[L][T+1]=-lt*this.b[L][T]+n*this.b[L][T+1],this.b[L][T]=Pt;if(Pt=P2(D,Q),n=D/Pt,lt=Q/Pt,this.e[T]=Pt,D=n*P[T]+lt*this.e[T+1],this.e[T+1]=-lt*P[T]+n*this.e[T+1],Q=lt*P[T+1],P[T+1]=n*P[T+1],T<this.c-1)for(U=0;U<this.c;U++)Pt=n*this.a[U][T]+lt*this.a[U][T+1],this.a[U][T+1]=-lt*this.a[U][T]+n*this.a[U][T+1],this.a[U][T]=Pt}P[X-2]=D,l=l+1}break;case 4:{if(this.e[R]<=0)for(this.e[R]=this.e[R]<0?-this.e[R]:0,U=0;U<=tt;U++)this.b[U][R]=-this.b[U][R];for(;R<tt&&!(this.e[R]>=this.e[R+1]);){if(Pt=this.e[R],this.e[R]=this.e[R+1],this.e[R+1]=Pt,R<this.d-1)for(U=0;U<this.d;U++)Pt=this.b[U][R+1],this.b[U][R+1]=this.b[U][R],this.b[U][R]=Pt;if(R<this.c-1)for(U=0;U<this.c;U++)Pt=this.a[U][R+1],this.a[U][R+1]=this.a[U][R],this.a[U][R]=Pt;++R}l=0,--X}}}}function iy(){iy=B1,b4=B(d(it,2),nA,13,0,[B(d(it,1),Dt,2,6,[\"Acyl\",\"gCaHA`AIf`@\"]),B(d(it,1),Dt,2,6,[\"Alloc\",\"gNph@l@ILzuR@@\"]),B(d(it,1),Dt,2,6,[\"Allyl\",\"Al\"]),B(d(it,1),Dt,2,6,[\"Benzyl;Bn\",\"daD@`F@DjUZxHH@@\"]),B(d(it,1),Dt,2,6,[\"Boc\",\"daxD`@S@AIgijj@@\"]),B(d(it,1),Dt,2,6,[\"BOM;BzOM\",\"deTH`@H@Re[TYj`@@@\"]),B(d(it,1),Dt,2,6,[\"Bs\",\"dmtDpAdLS`aPAIe]jf`@e`@@\"]),B(d(it,1),Dt,2,6,[\"Bt\",\"dew@`@aJ@DiY]paej`@@@\"]),B(d(it,1),Dt,2,6,[\"Btm\",\"did@P@BJ@Die_ahH@@@\"]),B(d(it,1),Dt,2,6,[\"Butyl;nButyl\",\"gJPHB@IRuP@\"]),B(d(it,1),Dt,2,6,[\"Benzoyl;Bz\",\"didH`@p@RYm^Eh@@@@\"]),B(d(it,1),Dt,2,6,[\"Bzh\",\"dg|@`N@LdbRbtJUB]aAP@@@@\"]),B(d(it,1),Dt,2,6,[\"Cbz\",\"dmtD`@S@AIgYVUZh@@@@\"]),B(d(it,1),Dt,2,6,[\"cButyl\",\"gKPHL@IThuT@@\"]),B(d(it,1),Dt,2,6,[\"cHeptyl\",\"daD@`L@DjWVzjj`@\"]),B(d(it,1),Dt,2,6,[\"cHexyl\",\"gOpHL@IToWUU@@\"]),B(d(it,1),Dt,2,6,[\"cOctyl\",\"did@`L@DjWWajjj@@\"]),B(d(it,1),Dt,2,6,[\"cPentyl\",\"gFpHL@ITimUP@\"]),B(d(it,1),Dt,2,6,[\"cPropyl\",\"gBPHL@Qxjh@\"]),B(d(it,1),Dt,2,6,[\"COOH\",\"gC`h@l@ILt@@ !Bb@K~@Hc}\"]),B(d(it,1),Dt,2,6,[\"DEAE\",\"daz@`@x@RiUjj`@\"]),B(d(it,1),Dt,2,6,[\"DEIPS\",\"diD@P@\\\\B@DjfVjj`@\"]),B(d(it,1),Dt,2,6,[\"DMIPS\",\"gNpD@xD@RjZjh@\"]),B(d(it,1),Dt,2,6,[\"DMPM\",\"dcLD`@kPCIEMDdcttDDT@@\"]),B(d(it,1),Dt,2,6,[\"DMPS\",\"deT@P@\\\\B@LddTjPsU@@@@\"]),B(d(it,1),Dt,2,6,[\"DMTr\",\"fak@b@@Mt@ISZ{SMjo{NQKfm@AU@@@E@@@@\"]),B(d(it,1),Dt,2,6,[\"DNP\",\"dkmB`hdDt~@HeNfS{HihheCAUhBHX@@\"]),B(d(it,1),Dt,2,6,[\"DNS;Dan\",\"fhi`a@KPP@HH@YIHYheEhYKQgKP@@QP@@@\"]),B(d(it,1),Dt,2,6,[\"DPIPS\",\"fdyAA@H@\\\\B@FRRIQSQIHzp_Qjh@h@@@@@\"]),B(d(it,1),Dt,2,6,[\"DPTBS\",\"fleAA@H@\\\\B@FRRIQSRIIWNbEMU@EP@@@@@\"]),B(d(it,1),Dt,2,6,[\"DTBMS\",\"dmT@P@\\\\B@Djffjjjh@@\"]),B(d(it,1),Dt,2,6,[\"Ethyl\",\"eMBD@ch@\"]),B(d(it,1),Dt,2,6,[\"Fmoc\",\"fde@b@@Hp@IL{LrjxeVCzKUT@@@P@@@\"]),B(d(it,1),Dt,2,6,[\"iAmyl\",\"gGPHJ@YIDZj@@\"]),B(d(it,1),Dt,2,6,[\"iButyl\",\"gJPHB@ITuP@\"]),B(d(it,1),Dt,2,6,[\"Im\",\"gFtHAj@IRnKSP@\"]),B(d(it,1),Dt,2,6,[\"iPropyl\",\"gC`HL@Qz`@\"]),B(d(it,1),Dt,2,6,[\"MDIPS\",\"diD@P@\\\\B@DjfZjj`@\"]),B(d(it,1),Dt,2,6,[\"MDPS\",\"foA@A@@NA@CIIEEBdeeVLzj@@@@@@\"]),B(d(it,1),Dt,2,6,[\"Methyl\",\"eFBH@c@@\"]),B(d(it,1),Dt,2,6,[\"MEM\",\"gNphAR@IRoUT@@\"]),B(d(it,1),Dt,2,6,[\"Mes\",\"deT@`J@DjY{[`bB`@@\"]),B(d(it,1),Dt,2,6,[\"MMTr\",\"ffcAB@@Z@Dim]ifuWYrI\\\\uh@Jh@@@@@@\"]),B(d(it,1),Dt,2,6,[\"MOM\",\"gCaHA`AJZ`@\"]),B(d(it,1),Dt,2,6,[\"MPM;PMB\",\"deTH`@d@Rfuunh@J@@\"]),B(d(it,1),Dt,2,6,[\"Ms\",\"gJPdH`DD@cuh@\"]),B(d(it,1),Dt,2,6,[\"MTM\",\"gC`D@DX@Rfh@\"]),B(d(it,1),Dt,2,6,[\"mTolyl\",\"daD@`N@DjWjXHB@@\"]),B(d(it,1),Dt,2,6,[\"N3\",\"gClHaE`@RnReX@\"]),B(d(it,1),Dt,2,6,[\"nAmyl;Amyl\",\"gGPHJ@IRmU@@\"]),B(d(it,1),Dt,2,6,[\"neoAm\",\"gGPHJ@IUMU@@\"]),B(d(it,1),Dt,2,6,[\"NO2,Nitro\",\"gChhhE`BRnRYh@\"]),B(d(it,1),Dt,2,6,[\"Np\",\"deVDaHAI@HeNR[e_aZ@B@@\"]),B(d(it,1),Dt,2,6,[\"nPropyl;Propyl\",\"gC`HL@IST@@\"]),B(d(it,1),Dt,2,6,[\"oTolyl\",\"daD@`J@DjYvxH`@@\"]),B(d(it,1),Dt,2,6,[\"Phenyl\",\"gOpHL@IToVD@@@\"]),B(d(it,1),Dt,2,6,[\"Pht\",\"dcLL`@RU@Dfyed]ZBA`@@\"]),B(d(it,1),Dt,2,6,[\"Piv;Pv\",\"gNqHA`AIffj`@\"]),B(d(it,1),Dt,2,6,[\"PMBM\",\"dcLD`@T`AJUm]FZh@J@@\"]),B(d(it,1),Dt,2,6,[\"PNB\",\"dcNLaHAEt@bTyInUvxV`@f@@\"]),B(d(it,1),Dt,2,6,[\"Poc\",\"didD`@S@AIgexVjj`@\"]),B(d(it,1),Dt,2,6,[\"PPi\",\"diDFsHSB[`|J|A@Lxn{lddqdZih@@\"]),B(d(it,1),Dt,2,6,[\"pTolyl\",\"daD@`N@DjWzXHB@@\"]),B(d(it,1),Dt,2,6,[\"sAmyl\",\"gGPHL@YIDZj@@\"]),B(d(it,1),Dt,2,6,[\"sButyl\",\"gJPHL@ITuP@\"]),B(d(it,1),Dt,2,6,[\"SEM\",\"diDHPFApD@rRQUJjj`@\"]),B(d(it,1),Dt,2,6,[\"SES\",\"dedDpHP@``AgCIICeHmUT@@\"]),B(d(it,1),Dt,2,6,[\"SO3H\",\"gJQdHl@``D^m@@\"]),B(d(it,1),Dt,2,6,[\"tAmyl\",\"gGPHB@IUMU@@\"]),B(d(it,1),Dt,2,6,[\"TBDMS;TBS\",\"dax@P@\\\\B@Djfjjh@@\"]),B(d(it,1),Dt,2,6,[\"TBDPS\",\"fdy@A@@NA@CIIEEEIde]XOhuPAT@@@@@\"]),B(d(it,1),Dt,2,6,[\"TBMPS\",\"dg\\\\HPHApH@rRQJJPjg]UAT@@@\"]),B(d(it,1),Dt,2,6,[\"tButyl,tBu\",\"gJPHB@Q}T@@\"]),B(d(it,1),Dt,2,6,[\"TDS\",\"ded@P@\\\\B@LddTeeUUP@@\"]),B(d(it,1),Dt,2,6,[\"Tf\",\"daxDhHP@``BiAiCiCIICHmU@@\"]),B(d(it,1),Dt,2,6,[\"TFA\",\"gNqBJIARFdF@YEHYUL@@\"]),B(d(it,1),Dt,2,6,[\"Thexyl\",\"gNpHB@IUMUT@@\"]),B(d(it,1),Dt,2,6,[\"THF\",\"gFqH@PAJYujj@@\"]),B(d(it,1),Dt,2,6,[\"THP\",\"gOqH@PAJYZzjh@\"]),B(d(it,1),Dt,2,6,[\"TIPS\",\"dmT@P@\\\\B@DjfYjjjh@@\"]),B(d(it,1),Dt,2,6,[\"TMS\",\"gJPD@xD@czh@\"]),B(d(it,1),Dt,2,6,[\"Tosyl;Ts\",\"dmtDPHP@``CIICLeaeZ@B@@\"]),B(d(it,1),Dt,2,6,[\"Troc\",\"diDDHJxHaHcH`PCHiBeJjf@@\"]),B(d(it,1),Dt,2,6,[\"Trt\",\"fbm@B@A@FRQIRKQPiIZdoIcdHJ`@@@@@@\"]),B(d(it,1),Dt,2,6,[\"Xyl\",\"did@`J@DjYynBHH@@\"])])}function P6(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j;if(e[A-1]==36){if(t.r=!0,t.q=new f1,A+=WR(t,e,A-1,t.q)-1,e[A++]!=93){if(!r)throw At(new V1(\"SmilesParser: A positive recursive SMARTS followed by another one or by atom query features is not supported. Position:\"+(A-1)));(t.k&128)==0&&(A=GY(e,A))}return A}if(e[A-1]==42)t.d=6,t.c=Y(t.c,1);else if(e[A-1]==63)t.d=0;else if(Q=e[A-1]==33,Q&&(t.r=!0,t.c=Y(t.c,1),++A),e[A-1]==82&&P&&(Zn(e[A]&w1)||t.j&&e[A]==123))t.d=6,t.c=Y(t.c,1),--A,Q&&--A;else{if(U=new Ow,!xj(t,e,A-1,n,U))throw At(new V1(\"SmilesParser: Unexpected character in atom definition:'\"+String.fromCharCode(e[A-1]&w1)+qp+(A-1)));if(t.d=U.a,A+=U.b-1,(t.k&3)!=2&&(t.g=9),P&&(e[A]==44||Q)){for(y=U.d,s=U.c,v=A-U.b;v<n;){if(!xj(t,e,v,n,U)){if(!Q)throw At(new V1(\"SmilesParser: Unexpected character in atom list:'\"+String.fromCharCode(e[v]&w1)+Ip+v));break}if(U.a==1){if(!Q)throw At(new V1(\"SmilesParser: Hydrogen is not supported in positive atom lists:'\"+lN((Io(v<=n,v+\" > \"+n),j=e.length,rm(v,v,j),RP(e,h(q,I,6,n-v,15,1),v,n)))+Ip+v))}else Ux(t,U.a),y=y|U.d,s=s|U.c;if(v+=U.b,Q&&e[v]!=59&&e[v]!=38||!Q&&e[v]!=44||Q&&e[v+1]!=33)break;++v,e[v]==33&&++v}t.b&&t.b.d.a.length>1&&(t.g=-1,s?y||(t.c=Y(t.c,4)):t.c=Y(t.c,2)),A=v}}for(T=new Rw(e),g=h(F,k,6,1,15,1),m=!0;m;){if(e[A]==64){++A,e[A]==64&&(t.i=!0,++A),t.p=!0;continue}if(e[A]==58){for(++A;Zn(e[A]&w1);)t.o=10*t.o+e[A]-48,++A;continue}if(e[A]==91)throw At(new V1(\"SmilesParser: nested square brackets found. Position:\"+A));if(e[A]==93){++A,m=!1;continue}if(t.e=Ek(e,A,g),g[0]!=0){A+=g[0],t.e==0&&(t.c=Y(t.c,WQ));continue}if(D=e[A]==33,D&&++A,e[A]==72){++A,A+=vf(T,A,1),i=0,T.c<=0&&T.b>=0&&(i=Y(i,128)),T.c<=1&&T.b>=1&&(i=Y(i,256)),T.c<=2&&T.b>=2&&(i=Y(i,512)),T.c<=3&&T.b>=3&&(i=Y(i,re)),D?(t.c=Y(t.c,i),t.g=-1):T.b==T.c?t.g=T.c:(t.c=Y(t.c,V(rP,Jn(i))),t.g=-1);continue}if(e[A]==68||e[A]==100){++A,A+=vf(T,A,1),i=0,T.c<=0&&T.b>=0&&(i=Y(i,I0)),T.c<=1&&T.b>=1&&(i=Y(i,T8)),T.c<=2&&T.b>=2&&(i=Y(i,l8)),T.c<=3&&T.b>=3&&(i=Y(i,h8)),T.c<=4&&T.b>=4&&(i=Y(i,qA)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,si),0)?t.c=V(t.c,Jn(i)):(i=Or(i,si),t.c=Y(t.c,i)));continue}if(e[A]==122&&t.j){++A,A+=vf(T,A,4),i=0,T.c<=0&&T.b>=0&&(i=Y(i,v2)),T.c<=1&&T.b>=1&&(i=Y(i,xp)),T.c<=2&&T.b>=2&&(i=Y(i,Np)),T.c<=3&&T.b>=3&&(i=Y(i,Op)),T.c<=4&&T.b>=4&&(i=Y(i,aQ)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,Vf),0)?t.c=V(t.c,Jn(i)):(i=Or(i,Vf),t.c=Y(t.c,i)));continue}if(e[A]==88){if(++A,A+=vf(T,A,1),b=(Y1(),Lr)[t.d],b==null)continue;R=b[0],L=Ek(e,A,g),g[0]!=0&&(ar(t.d)?R+=L:t.d==6?R-=w.Math.abs(L):R-=L),i=0,R-T.c<=0&&R-T.b>=0&&(i=Y(i,Sn)),R-T.c<=1&&R-T.b>=1&&(i=Y(i,s8)),R-T.c<=2&&R-T.b>=2&&(i=Y(i,Q0)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,Li),0)?t.c=V(t.c,Jn(i)):(i=Or(i,Li),t.c=Y(t.c,i)));continue}if(e[A]==65||e[A]==97){t.c=Y(t.c,D^e[A]==65?4:2),++A;continue}if(e[A]==82){++A,A+=vf(T,A,3),i=0,T.c<=0&&T.b>=0&&(i=Y(i,8)),T.c<=1&&T.b>=1&&(i=Y(i,16)),T.c<=2&&T.b>=2&&(i=Y(i,32)),T.c<=3&&T.b>=3&&(i=Y(i,64)),T.b>3&&Ou(t.n,(D?\"!R\":\"R\")+T.b),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,120),0)?t.c=V(t.c,Jn(i)):(i=Or(i,120),t.c=Y(t.c,i)));continue}if(e[A]==114){if(++A,A+=vf(T,A,1),T.a){D?t.c=Y(t.c,384):t.c=Y(t.c,8);continue}c=T.c,T.b>T.c&&Ou(t.n,(D?\"!r\":\"r\")+(\"{\"+T.c+\"-\"+T.b+\"}\")),!D&&c>=3&&c<=7?t.c=Y(t.c,c<<22):T.b>T.c||Ou(t.n,(D?\"!r\":\"r\")+c);continue}if(e[A]==118){++A,A+=vf(T,A,1),R=T.c,T.b>T.c&&Ou(t.n,(D?\"!v\":\"v\")+(\"{\"+T.c+\"-\"+T.b+\"}\")),!D&&R<=14?t.a=R:T.b>T.c||Ou(t.n,(D?\"!v\":\"v\")+R);continue}if(e[A]==94){if(++A,f=e[A++]-48,f<1||f>3)throw At(new V1(\"SmilesParser: Unsupported hybridization. Position:\"+A));l=f==1?Q0:f==2?s8:Sn,D||(l=V(Li,Jn(l))),t.c=Y(t.c,l);continue}if(e[A]==36){if(!D)throw At(new V1(\"SmilesParser: non-negated recursive SMARTS relating to preceding atom are not supported yet. Position:\"+A));!t.f&&(t.f=new f1),t.r=!0,A+=WR(t,e,A,t.f);continue}if(P&&(e[A]==59||e[A]==38)){t.r=!0,++A;continue}if(P&&e[A]==44&&$X(e,A,g)){t.r=!0,A+=g[0]+1;continue}if(P&&e[A]==44&&(t.k&128)!=0){t.r=!0,A+=1;break}throw e[A]==44?At(new V1(\"SmilesParser: alternative atom definitions not supported. (Tip: enumerate SMARTS): '\"+String.fromCharCode(e[A]&w1)+V6+A)):At(new V1(\"SmilesParser: unexpected character inside brackets: '\"+String.fromCharCode(e[A]&w1)+V6+A))}return A}function r6(t,e){var A,n,P,r;A=e[1],n=e[2],P=t.j[A]-1,r=t.j[n]-1,P>3||r>3?(this.b=h(Yt,at,6,4,15,1),this.b[0]=45,this.b[1]=135,this.b[2]=225,this.b[2]=315,this.c=R1(Yt,[te,at],[16,6],15,[4,2],2),this.c[0][0]=30,this.c[0][1]=60,this.c[1][0]=120,this.c[1][1]=150,this.c[2][0]=210,this.c[2][1]=240,this.c[2][0]=300,this.c[2][1]=330,this.a=h(Yt,at,6,4,15,1),this.a[0]=25,this.a[1]=25,this.a[2]=25,this.a[3]=25):(t.o[A]==0||t.C[A]>9)&&(t.o[n]==0||t.C[n]>9)?P==3&&r==3||P==3&&r==2||P==3&&r==1||P==2&&r==3||P==1&&r==3||P==2&&r==2&&(e[0]!=-1||e[3]!=-1)?(this.b=h(Yt,at,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=R1(Yt,[te,at],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=h(Yt,at,6,3,15,1),this.a[0]=33,this.a[1]=33,this.a[2]=33):P==1&&r==2&&e[3]==-1||P==2&&r==1&&e[0]==-1?(this.b=h(Yt,at,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=R1(Yt,[te,at],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=h(Yt,at,6,3,15,1),this.a[0]=40,this.a[1]=20,this.a[2]=40):(P==1&&r==1||P==1&&r==2&&e[3]!=-1||P==2&&r==1&&e[0]!=-1||P==2&&r==2&&e[0]==-1&&e[3]==-1)&&(this.b=h(Yt,at,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=R1(Yt,[te,at],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=h(Yt,at,6,3,15,1),this.a[0]=25,this.a[1]=50,this.a[2]=25):(t.o[A]==0||t.C[A]>9)&&t.o[n]==1||(t.o[n]==0||t.C[n]>9)&&t.o[A]==1?P==3||r==3?(this.b=h(Yt,at,6,6,15,1),this.b[0]=0,this.b[1]=60,this.b[2]=120,this.b[3]=180,this.b[4]=240,this.b[5]=300,this.c=R1(Yt,[te,at],[16,6],15,[6,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=45,this.c[1][1]=75,this.c[2][0]=105,this.c[2][1]=135,this.c[3][0]=165,this.c[3][1]=195,this.c[4][0]=225,this.c[4][1]=255,this.c[5][0]=285,this.c[5][1]=315,this.a=h(Yt,at,6,6,15,1),this.a[0]=16,this.a[1]=16,this.a[2]=16,this.a[3]=16,this.a[4]=16,this.a[5]=16):P==1&&r==1?(this.b=h(Yt,at,6,2,15,1),this.b[0]=120,this.b[1]=240,this.c=R1(Yt,[te,at],[16,6],15,[2,2],2),this.c[0][0]=105,this.c[0][1]=135,this.c[1][0]=225,this.c[1][1]=255,this.a=h(Yt,at,6,2,15,1),this.a[0]=50,this.a[1]=50):t.o[A]==1&&P==2&&r==1||t.o[n]==1&&r==2&&P==1?(this.b=h(Yt,at,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=R1(Yt,[te,at],[16,6],15,[2,2],2),this.c[0][0]=75,this.c[0][1]=105,this.c[1][0]=255,this.c[1][1]=285,this.a=h(Yt,at,6,2,15,1),this.a[0]=50,this.a[1]=50):t.o[A]==1&&P==1&&r==2&&e[3]==-1||t.o[n]==1&&r==1&&P==2&&e[0]==-1?(this.b=h(Yt,at,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=R1(Yt,[te,at],[16,6],15,[3,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=105,this.c[1][1]=135,this.c[2][0]=225,this.c[2][1]=255,this.a=h(Yt,at,6,3,15,1),this.a[0]=60,this.a[1]=20,this.a[2]=20):t.o[A]==1&&P==1&&r==2&&e[3]!=-1||t.o[n]==1&&r==1&&P==2&&e[0]!=-1?(this.b=h(Yt,at,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=R1(Yt,[te,at],[16,6],15,[3,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=105,this.c[1][1]=135,this.c[2][0]=225,this.c[2][1]=255,this.a=h(Yt,at,6,3,15,1),this.a[0]=20,this.a[1]=40,this.a[2]=40):P==2&&r==2&&(e[0]==-1||e[3]==-1?(this.b=h(Yt,at,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=R1(Yt,[te,at],[16,6],15,[2,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=165,this.c[1][1]=195,this.a=h(Yt,at,6,2,15,1),this.a[0]=50,this.a[1]=50):(this.b=h(Yt,at,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=R1(Yt,[te,at],[16,6],15,[2,2],2),this.c[0][0]=75,this.c[0][1]=105,this.c[1][0]=255,this.c[1][1]=285,this.a=h(Yt,at,6,2,15,1),this.a[0]=50,this.a[1]=50)):t.o[A]==1&&t.o[n]==1?P==1&&r==1?(this.b=h(Yt,at,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=R1(Yt,[te,at],[16,6],15,[2,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=165,this.c[1][1]=195,this.a=h(Yt,at,6,2,15,1),this.a[0]=10,this.a[1]=90):(this.b=h(Yt,at,6,6,15,1),this.b[0]=0,this.b[1]=50,this.b[2]=130,this.b[3]=180,this.b[4]=230,this.b[5]=310,this.c=R1(Yt,[te,at],[16,6],15,[6,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=35,this.c[1][1]=65,this.c[2][0]=115,this.c[2][1]=145,this.c[3][0]=165,this.c[3][1]=195,this.c[4][0]=215,this.c[4][1]=245,this.c[5][0]=295,this.c[5][1]=325,this.a=h(Yt,at,6,6,15,1),this.a[0]=40,this.a[1]=5,this.a[2]=5,this.a[3]=40,this.a[4]=5,this.a[5]=5):(this.b=h(Yt,at,6,1,15,1),this.b[0]=180,this.c=R1(Yt,[te,at],[16,6],15,[1,2],2),this.c[0][0]=165,this.c[0][1]=195,this.a=h(Yt,at,6,1,15,1),this.a[0]=100)}function cp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt;for(x=(x1(),$A),J(t.b,\"M  V30 BEGIN CTAB\"+x),J(t.b,pp+e.q+\" \"+e.r+\" 0 0 0\"+x),J(t.b,\"M  V30 BEGIN ATOM\"+x),D=0;D<e.q;D++){if(J(t.b,rU+(D+1)),(e.v==null?null:e.v[D])!=null){for(s=e.v==null?null:e.v[D],a=gt(V(e.B[D],1),0),J(t.b,a?\" NOT[\":\" [\"),j=0;j<s.length;j++)switch(j>0&&J(t.b,\",\"),C=(Y1(),X0)[s[j]],C.length){case 2:case 3:case 1:J(t.b,C);break;default:J(t.b,\"?\")}J(t.b,\"]\")}else gt(V(e.B[D],1),0)?J(t.b,\" A\"):e.C[D]>=129&&e.C[D]<=144||e.C[D]==154?J(t.b,\" R#\"):J(t.b,\" \"+(Y1(),X0)[e.C[D]]);if(A?(J(t.b,\" \"+vt(nP*t.c*e.J[D].a)/nP),J(t.b,\" \"+vt(nP*t.c*-e.J[D].b)/nP),J(t.b,\" \"+vt(nP*t.c*-e.J[D].c)/nP)):J(t.b,\" 0 0 0\"),J(t.b,\" \"+w.Math.abs(e.w[D])),e.s[D]!=0&&J(t.b,\" CHG=\"+e.s[D]),(e.u[D]&48)!=0)switch(J(t.b,\" RAD=\"),e.u[D]&48){case 16:J(t.b,\"1\");break;case 32:J(t.b,\"2\");break;case 48:J(t.b,\"3\")}((e.u[D]&3)==1||(e.u[D]&3)==2)&&(J(t.b,\" CFG=\"),(e.u[D]&3)==1?J(t.b,\"1\"):J(t.b,\"2\")),e.A[D]!=0&&J(t.b,\" MASS=\"+e.A[D]),Tt=((e.u[D]&g8)>>>27)-1,Tt!=-1&&J(t.b,\" VAL=\"+(Tt==0?\"-1\":k1(Tt))),y=e.C[D],(y>=129&&y<=144||y==154)&&J(t.b,\" RGROUPS=(1 \"+(y==154?0:y>=142?y-141:y-125)+\")\"),b=V(rP,e.B[D]),G(b,384)==0?J(t.b,\" HCOUNT=2\"):G(b,128)==0?J(t.b,\" HCOUNT=1\"):G(b,1792)==0?J(t.b,\" HCOUNT=-1\"):G(b,1664)==0&&J(t.b,\" HCOUNT=1\"),st=V(e.B[D],6144),G(st,0)!=0&&(gt(V(st,C0),0)?J(t.b,\" SUBST=\"+(e.e[D]+1)):J(t.b,\" SUBST=-1\")),$=V(e.B[D],120),G($,0)!=0&&(G($,112)==0?J(t.b,\" RBCNT=-1\"):G($,8)==0||G($,104)==0?J(t.b,\" RBCNT=2\"):G($,88)==0?J(t.b,\" RBCNT=3\"):G($,56)==0&&J(t.b,\" RBCNT=4\")),J(t.b,x)}for(J(t.b,\"M  V30 END ATOM\"+x),J(t.b,\"M  V30 BEGIN BOND\"+x),T=0;T<e.r;T++){switch(J(t.b,rU+(T+1)),e.H[T]){case 1:tt=1,lt=0;break;case 2:tt=2,lt=0;break;case 4:tt=3,lt=0;break;case 129:tt=1,lt=3;break;case 257:tt=1,lt=1;break;case 386:tt=2,lt=2;break;case 8:tt=4,lt=0;break;case 16:tt=9,lt=0;break;default:tt=1,lt=0}g=e.G[T]&31,g!=0&&(g==8?tt=4:g==3?tt=5:g==9?tt=6:g==10?tt=7:tt=8),J(t.b,\" \"+tt+\" \"+(e.D[0][T]+1)+\" \"+(e.D[1][T]+1)),lt!=0&&J(t.b,\" CFG=\"+lt),et=e.G[T]&384,ct=et==0?0:et==256?1:2,ct!=0&&J(t.b,\" TOPO=\"+ct),J(t.b,x)}for(J(t.b,\"M  V30 END BOND\"+x),v=!1,Q=0;Q<e.q;Q++)if((e.t==null||e.t[Q]==null?null:rn((S=e.t[Q],c0(),S)))!=null){v=!0;break}if(v){for(J(t.b,\"M  V30 BEGIN SGROUP\"+x),m=0,U=0;U<e.q;U++)(e.t==null||e.t[U]==null?null:rn((p=e.t[U],c0(),p)))!=null&&(++m,J(t.b,rU+m+\" DAT \"+m+\" ATOMS=(1 \"+(U+1)+') FIELDNAME=\"'+by+'\" -'+x),J(t.b,'M  V30 FIELDDISP=\"'),Ov(t,A?t.c*e.J[U].a:0),Ov(t,A?t.c*e.J[U].b:0),J(t.b,'    DA    ALL  1       5\" FIELDDATA=\"'+(e.t==null||e.t[U]==null?null:rn((S=e.t[U],c0(),S)))+'\"'+x));J(t.b,\"M  V30 END SGROUP\"+x)}for(W=!1,n=0,E=h(F,k,6,32,15,1),r=h(F,k,6,32,15,1),L=0;L<e.f;L++)((e.u[L]&3)==1||(e.u[L]&3)==2)&&(W=!0,Pt=(e.u[L]&m1)>>18,Pt==1?++r[(e.u[L]&m1)>>18!=1&&(e.u[L]&m1)>>18!=2?-1:(e.u[L]&RA)>>20]:Pt==2?++E[(e.u[L]&m1)>>18!=1&&(e.u[L]&m1)>>18!=2?-1:(e.u[L]&RA)>>20]:++n);for(P=0,X=h(F,k,6,32,15,1),i=h(F,k,6,32,15,1),c=0;c<e.g;c++)dt(e,c)!=2&&((e.F[c]&3)==1||(e.F[c]&3)==2)&&(W=!0,Pt=(e.F[c]&768)>>8,Pt==1?++i[(e.F[c]&768)>>8!=1&&(e.F[c]&768)>>8!=2?-1:(e.F[c]&ln)>>10]:Pt==2?++X[(e.F[c]&768)>>8!=1&&(e.F[c]&768)>>8!=2?-1:(e.F[c]&ln)>>10]:++P);if(W){if(J(t.b,\"M  V30 BEGIN COLLECTION\"+x),n!=0){for(J(t.b,\"M  V30 MDLV30/STEABS ATOMS=(\"+n),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&m1)>>18==0&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(P!=0){for(J(t.b,\"M  V30 MDLV30/STEABS BONDS=(\"+P),l=0;l<e.g;l++)dt(e,l)!=2&&((e.F[l]&3)==1||(e.F[l]&3)==2)&&(e.F[l]&768)>>8==0&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}for(R=0;R<32;R++){if(E[R]!=0){for(J(t.b,Cp+(R+1)+\" ATOMS=(\"+E[R]),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&m1)>>18==2&&((e.u[f]&m1)>>18!=1&&(e.u[f]&m1)>>18!=2?-1:(e.u[f]&RA)>>20)==R&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(r[R]!=0){for(J(t.b,Mp+(R+1)+\" ATOMS=(\"+r[R]),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&m1)>>18==1&&((e.u[f]&m1)>>18!=1&&(e.u[f]&m1)>>18!=2?-1:(e.u[f]&RA)>>20)==R&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(X[R]!=0){for(J(t.b,Cp+(R+1)+\" BONDS=(\"+X[R]),l=0;l<e.g;l++)dt(e,l)!=2&&((e.F[l]&3)==1||(e.F[l]&3)==2)&&(e.F[l]&768)>>8==2&&((e.F[l]&768)>>8!=1&&(e.F[l]&768)>>8!=2?-1:(e.F[l]&ln)>>10)==R&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}if(i[R]!=0){for(J(t.b,Mp+(R+1)+\" BONDS=(\"+i[R]),l=0;l<e.g;l++)dt(e,l)!=2&&((e.F[l]&3)==1||(e.F[l]&3)==2)&&(e.F[l]&768)>>8==1&&((e.F[l]&768)>>8!=1&&(e.F[l]&768)>>8!=2?-1:(e.F[l]&ln)>>10)==R&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}}J(t.b,\"M  V30 END COLLECTION\"+x)}J(t.b,j6+x)}function aa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1;if(_3(t,!1),Jt(t,9,4),St=w.Math.max(J8(t.R.f),J8(t.R.g)),Jt(t,St,4),St==0){Jt(t,t.R.K?1:0,1),Jt(t,0,1),t.J=ML(t);return}for(g1=F1=y0=X=0,D=0;D<t.R.f;D++)if(P0(V(o0(t.R,D),1),0)){switch(K(t.R,D)){case 6:break;case 7:++g1;break;case 8:++F1;break;default:++y0}p1(t.R,D)!=0&&++X}for(Jt(t,t.R.f,St),Jt(t,t.R.g,St),Jt(t,g1,St),Jt(t,F1,St),Jt(t,y0,St),Jt(t,X,St),Q=0;Q<t.R.f;Q++)K(t.R,t.B[Q])==7&&P0(V(o0(t.R,t.B[Q]),1),0)&&Jt(t,Q,St);for(s=0;s<t.R.f;s++)K(t.R,t.B[s])==8&&P0(V(o0(t.R,t.B[s]),1),0)&&Jt(t,s,St);for(y=0;y<t.R.f;y++)K(t.R,t.B[y])!=6&&K(t.R,t.B[y])!=7&&K(t.R,t.B[y])!=8&&P0(V(o0(t.R,t.B[y]),1),0)&&(Jt(t,y,St),Jt(t,K(t.R,t.B[y]),8));for(l=0;l<t.R.f;l++)p1(t.R,t.B[l])!=0&&P0(V(o0(t.R,t.B[l]),1),0)&&(Jt(t,l,St),Jt(t,8+p1(t.R,t.B[l]),4));for(Lt=0,b=0,T=1;T<t.R.f;T++)t.F[T]==-1?st=0:(st=1+t.F[T]-b,b=t.F[T]),Lt<st&&(Lt=st);for(lt=J8(Lt),Jt(t,lt,4),b=0,c=1;c<t.R.f;c++)t.F[c]==-1?st=0:(st=1+t.F[c]-b,b=t.F[c]),Jt(t,st,lt);for($t=0;$t<2*t.I;$t++)Jt(t,t.D[$t],St);for(C=0;C<t.R.g;C++)E=(ee(t.R,t.C[C])&y8)!=0||l1(t.R,t.C[C])==16?1:G8(t.R,t.C[C])?0:w.Math.min(3,dt(t.R,t.C[C])),Jt(t,E,2);if(A=0,(t.Q&I1)==0)for(g=0;g<t.R.f;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&++A;if(Jt(t,A,St),(t.Q&I1)==0)for(g=0;g<t.R.f;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&(Jt(t,g,St),t.bb[t.B[g]]==0?Jt(t,t._[t.B[g]],3):(s1=t._[t.B[g]]==1?t.bb[t.B[g]]==1?4:6:t.bb[t.B[g]]==1?5:7,Jt(t,s1,3),Jt(t,t.ab[t.B[g]],3)));if(e=0,(t.Q&I1)==0)for(S=0;S<t.R.g;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!WP(t.R,t.C[S])||l1(t.R,t.C[S])==1)&&++e;if(Jt(t,e,St),(t.Q&I1)==0)for(S=0;S<t.R.g;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!WP(t.R,t.C[S])||l1(t.R,t.C[S])==1)&&(Jt(t,S,St),l1(t.R,t.C[S])==1?t.n[t.C[S]]==0?Jt(t,t.j[t.C[S]],3):(s1=t.j[t.C[S]]==1?t.n[t.C[S]]==1?4:6:t.n[t.C[S]]==1?5:7,Jt(t,s1,3),Jt(t,t.k[t.C[S]],3)):Jt(t,t.j[t.C[S]],2));for(Jt(t,t.R.K?1:0,1),$=0,m=0;m<t.R.f;m++)ye(t.R,t.B[m])!=0&&++$;if($!=0)for(eP(t,1),Jt(t,$,St),g=0;g<t.R.f;g++)ye(t.R,t.B[g])!=0&&(Jt(t,g,St),Jt(t,ye(t.R,t.B[g]),8));if(t.w=0,t.R.K){for(TA(t,0,St,I1,1,-1),TA(t,3,St,C0,1,-1),TA(t,4,St,120,4,3),TA(t,5,St,Ty,2,1),TA(t,6,St,1,1,-1),TA(t,7,St,rP,4,7),$=0,g=0;g<t.R.f;g++)MA(t.R,t.B[g])!=null&&++$;if($>0){for(eP(t,8),Jt(t,$,St),v=0;v<t.R.f;v++)if(R=MA(t.R,t.B[v]),R!=null)for(Jt(t,v,St),Jt(t,R.length,4),P=R,r=0,i=P.length;r<i;++r)n=P[r],Jt(t,n,8)}ni(t,9,St,384,2,7),ni(t,10,St,31,5,0),TA(t,11,St,ge,1,-1),ni(t,12,St,y8,8,9),TA(t,13,St,Li,3,14),TA(t,14,St,si,5,17),TA(t,16,St,f9,3,22)}for($=0,U=0;U<t.R.f;U++)t.a!=null&&t.a[t.B[U]]!=-1&&++$;if($!=0)for(eP(t,17),Jt(t,$,St),g=0;g<t.R.f;g++)t.a!=null&&t.a[t.B[g]]!=-1&&(Jt(t,g,St),Jt(t,t.a[t.B[g]],4));if(Tt=0,Pt=0,ct=0,(t.Q&8)!=0||(t.Q&re)!=0){for($=0,Rt=0,g=0;g<t.R.f;g++)if(Qt=_n(t.R,t.B[g]),Qt!=null){if(e1=Em(Qt),Qt.length>15||e1>127){Tt<Qt.length&&(Tt=w.Math.min(63,Qt.length)),Pt<e1&&(Pt=e1),++ct;continue}++$,Rt=w.Math.max(Rt,Qt.length)}if($!=0){for(Nt=J8(Rt),eP(t,18),Jt(t,$,St),Jt(t,Nt,4),v=0;v<t.R.f;v++)if(Qt=_n(t.R,t.B[v]),Qt!=null&&Qt.length<=15&&Em(Qt)<=127)for(Jt(t,v,St),Jt(t,Qt.length,Nt),Ct=0;Ct<Qt.length;Ct++)Jt(t,(Xt(Ct,Qt.length),Qt.charCodeAt(Ct)),7)}}for(t.R.K&&(TA(t,19,St,i9,3,25),ni(t,20,St,SP,3,17)),$=0,L=0;L<t.R.f;L++)FA(t.R,t.B[L])!=0&&++$;if($!=0)for(eP(t,21),Jt(t,$,St),f=0;f<t.R.f;f++)FA(t.R,t.B[f])!=0&&(Jt(t,f,St),Jt(t,FA(t.R,t.B[f])>>4,2));if(t.R.K&&(TA(t,22,St,Ur,1,-1),ni(t,23,St,h8,1,-1),ni(t,24,St,AU,2,21)),(t.Q&16)!=0){for(f=0;f<t.R.f;f++)if(r0(t.R,t.B[f])){for(eP(t,25),n=0;n<t.R.f;n++)Jt(t,r0(t.R,t.B[n])?1:0,1);break}}if(Ut=B_(t),Ut!=null){for($=0,S=0;S<t.R.g;S++)Ut[t.C[S]]&&++$;for(eP(t,26),Jt(t,$,St),p=0;p<t.R.g;p++)Ut[t.C[p]]&&Jt(t,p,St)}for(t.R.K&&TA(t,27,St,Pe,1,-1),$=0,x=0;x<t.R.g;x++)l1(t.R,t.C[x])==16&&++$;if($!=0)for(eP(t,28),Jt(t,$,St),S=0;S<t.R.g;S++)l1(t.R,t.C[S])==16&&Jt(t,S,St);for(t.R.K&&(TA(t,29,St,c8,2,30),TA(t,30,St,rr,7,32),TA(t,32,St,m6,2,44),TA(t,33,St,Vf,5,39),TA(t,34,St,ZQ,1,-1),ni(t,35,St,Ef,1,-1),ni(t,36,St,96,2,5)),$=0,a=0;a<t.R.g;a++)(l1(t.R,t.C[a])==32||l1(t.R,t.C[a])==64)&&++$;if($!=0)for(eP(t,37),Jt(t,$,St),j=0;j<t.R.g;j++)(l1(t.R,t.C[j])==32||l1(t.R,t.C[j])==64)&&(Jt(t,j,St),Jt(t,l1(t.R,t.C[j])==32?0:1,1));if(t.b&&(t.Q&16)!=0){for($=0,tt=0,g=0;g<t.R.f;g++){for(W=0,Ht=O(t.R,t.B[g]);Ht<Mt(t.R,t.B[g]);Ht++)r0(t.R,_(t.R,t.B[g],Ht))&&(Kt=Ht-O(t.R,t.B[g]),W|=1<<Kt,tt=w.Math.max(tt,Kt+1));W!=0&&++$}if($!=0)for(eP(t,38),Jt(t,$,St),Jt(t,tt,3),f=0;f<t.R.f;f++){for(W=0,Ht=O(t.R,t.B[f]);Ht<Mt(t.R,t.B[f]);Ht++)r0(t.R,_(t.R,t.B[f],Ht))&&(Kt=Ht-O(t.R,t.B[f]),W|=1<<Kt);W!=0&&(Jt(t,f,St),Jt(t,W,tt))}}if(t.R.K&&TA(t,39,St,F2,4,47),ct!=0){for(Nt=J8(Tt),j1=J8(Pt),eP(t,40),Jt(t,ct,St),Jt(t,Nt,6),Jt(t,j1,16),f=0;f<t.R.f;f++)if(et=_n(t.R,t.B[f]),et!=null)for(Jt(t,f,St),b1=w.Math.min(63,et.length),Jt(t,b1,Nt),Ct=0;Ct<b1;Ct++)Jt(t,(Xt(Ct,et.length),et.charCodeAt(Ct)),j1)}Jt(t,0,1),t.J=ML(t)}function i6(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1;for(this.b=new y3((Pt=ky,Pt)),Ht=(x1(),$A),ut(t,15),lt=!0,P=0;P<t.f;P++)if((t.u[P]&3)!=0&&(t.u[P]&3)!=3&&(t.u[P]&m1)>>18!=1){lt=!1;break}if(Kt=-1,lt){for(E=h(F,k,6,32,15,1),Ct=0,r=0;r<t.f;r++)if((t.u[r]&3)!=0&&(t.u[r]&3)!=3&&(t.u[r]&m1)>>18==1){tt=(t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20,++E[tt],Ct<E[tt]&&(Ct=E[tt],Kt=tt);break}}for(this.a=A||new V0,Ut=t.P!=null?t.P:\"\",J(this.a,Ut+Ht),J(this.a,\"Actelion Java MolfileCreator 1.0\"+Ht+Ht),g0(this,t.q),g0(this,t.r),J(this.a,\"  0  0\"),g0(this,lt?0:1),J(this.a,\"  0  0  0  0  0999 V2000\"+Ht),W=t.q==1,Q=1;Q<t.q;Q++)if(t.J[Q].a!=t.J[0].a||t.J[Q].b!=t.J[0].b||t.J[Q].c!=t.J[0].c){W=!0;break}if(X=1,W)if(e!=0)X=e;else if(v=wP(t,t.q,t.r,(Y1(),wn)),v!=0)(v<1||v>3)&&(X=1.5/v);else{for($t=Ve,r=1;r<t.q;r++)for(D=0;D<r;D++)p=t.J[D].a-t.J[r].a,x=t.J[D].b-t.J[r].b,a=t.J[D].c-t.J[r].c,S=p*p+x*x+a*a,$t>S&&($t=S);X=3/$t}for(U=0;U<t.q;U++)W?(zu(this,X*t.J[U].a),zu(this,X*-t.J[U].b),zu(this,X*-t.J[U].c)):J(this.a,\"    0.0000    0.0000    0.0000\"),(t.v==null?null:t.v[U])!=null?J(this.a,\" L  \"):gt(V(t.B[U],1),0)?J(this.a,\" A  \"):t.C[U]>=129&&t.C[U]<=144||t.C[U]==154?J(this.a,\" R# \"):(c=(Y1(),X0)[t.C[U]],J(this.a,\" \"+c),c.length==1?J(this.a,\"  \"):c.length==2&&J(this.a,\" \")),J(this.a,\" 0  0  0\"),$=V(rP,t.B[U]),G($,0)==0?J(this.a,\"  0\"):G($,384)==0?J(this.a,\"  3\"):G($,128)==0?J(this.a,\"  2\"):G($,1792)==0?J(this.a,\"  1\"):G($,1664)==0&&J(this.a,\"  2\"),J(this.a,gt(V(t.B[U],ge),0)?\"  1\":\"  0\"),g1=((t.u[U]&g8)>>>27)-1,g1==-1?J(this.a,\"  0\"):g1==0?J(this.a,\" 15\"):g0(this,g1),J(this.a,\"  0  0  0\"),g0(this,w.Math.abs(t.w[U])),J(this.a,\"  0  0\"+Ht);for(R=0;R<t.r;R++){switch(t.H[R]){case 1:Nt=1,Lt=0;break;case 2:Nt=2,Lt=0;break;case 4:Nt=3,Lt=0;break;case 129:Nt=1,Lt=6;break;case 257:Nt=1,Lt=1;break;case 386:Nt=2,Lt=3;break;case 8:Nt=4,Lt=0;break;case 16:Nt=8,Lt=0;break;default:Nt=1,Lt=0}lt&&(Lt==1||Lt==6)&&(r=t.D[0][R],(t.u[r]&m1)>>18==2?Lt=0:(t.u[r]&m1)>>18==1&&((t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20)!=Kt&&(Lt=4)),b=t.G[R]&31,b!=0&&(b==8?Nt=4:b==3?Nt=5:b==9?Nt=6:b==10?Nt=7:Nt=8),e1=t.G[R]&384,St=e1==0?0:e1==256?1:2,g0(this,1+t.D[0][R]),g0(this,1+t.D[1][R]),g0(this,Nt),g0(this,Lt),J(this.a,\"  0\"),g0(this,St),J(this.a,\"  0\"+Ht)}for(Qt=0,L=0;L<t.q;L++)t.s[L]!=0&&++Qt;if(Qt!=0)for(C=0,r=0;r<t.q;r++)t.s[r]!=0&&(C==0&&(J(this.a,\"M  CHG\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,r+1),j=t.s[r],j<0?(J(this.a,\"  -\"),j=-j):J(this.a,\"   \"),Oe(this.a,48+j&w1),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));for(Qt=0,s=0;s<t.q;s++)t.A[s]==0||++Qt;if(Qt!=0)for(C=0,r=0;r<t.q;r++)t.A[r]!=0&&(C==0&&(J(this.a,\"M  ISO\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,r+1),J(this.a,\" \"),g0(this,t.A[r]),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));for(Qt=0,y=0;y<t.q;y++)(t.u[y]&48)!=0&&++Qt;if(Qt!=0){for(C=0,r=0;r<t.q;r++)if((t.u[r]&48)!=0){switch(C==0&&(J(this.a,\"M  RAD\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,r+1),t.u[r]&48){case 16:J(this.a,\"   1\");break;case 32:J(this.a,\"   2\");break;case 48:J(this.a,\"   3\")}--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht))}}for(Qt=0,l=0;l<t.q;l++)(t.C[l]>=129&&t.C[l]<=144||t.C[l]==154)&&++Qt;if(Qt!=0)for(C=0,r=0;r<t.q;r++)m=t.C[r],(m>=129&&m<=144||m==154)&&(C==0&&(J(this.a,\"M  RGP\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,r+1),J(this.a,\" \"),g0(this,m==154?0:m>=142?m-141:m-125),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));if(t.K){for(Qt=0,r=0;r<t.q;r++)gt(V(t.B[r],120),0)&&++Qt;if(Qt!=0)for(C=0,D=0;D<t.q;D++)b1=V(t.B[D],120),G(b1,0)!=0&&(C==0&&(J(this.a,\"M  RBC\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,D+1),G(b1,112)==0?J(this.a,\"  -1\"):G(b1,8)==0?J(this.a,\"   1\"):G(b1,104)==0?J(this.a,\"   2\"):G(b1,88)==0?J(this.a,\"   3\"):G(b1,56)==0&&J(this.a,\"   4\"),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));for(T=0;T<t.q;T++)if(g=t.v==null?null:t.v[T],g!=null){for(J(this.a,\"M  ALS \"),g0(this,T+1),g0(this,g.length),J(this.a,gt(V(t.B[T],1),0)?\" T \":\" F \"),et=0;et<g.length;et++)switch(st=(Y1(),X0)[g[et]],st.length){case 1:J(this.a,st+\"   \");break;case 2:J(this.a,st+\"  \");break;case 3:J(this.a,st+\" \");break;default:J(this.a,\"   ?\")}J(this.a,Ht)}for(Qt=0,i=0;i<t.q;i++)gt(V(t.B[i],6144),0)&&++Qt;if(Qt!=0)for(C=0,D=0;D<t.q;D++)j1=V(t.B[D],6144),G(j1,0)!=0&&(C==0&&(J(this.a,\"M  SUB\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,D+1),gt(V(j1,C0),0)?J(this.a,\"   \"+(t.e[D]+1)):J(this.a,\"  -2\"),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)))}for(Qt=0,f=0;f<t.q;f++)(t.t==null||t.t[f]==null?null:rn((Tt=t.t[f],c0(),Tt)))!=null&&++Qt;if(Qt!=0)for(Rt=0,n=0;n<t.q;n++)st=t.t==null||t.t[n]==null?null:rn((ct=t.t[n],c0(),ct)),st!=null&&(++Rt,J(this.a,\"M  STY  1 \"),g0(this,Rt),J(this.a,\" DAT\"),J(this.a,Ht),J(this.a,\"M  SLB  1 \"),g0(this,Rt),J(this.a,\" \"),g0(this,Rt),J(this.a,Ht),J(this.a,\"M  SAL \"),g0(this,Rt),J(this.a,\"  1 \"),g0(this,n+1),J(this.a,Ht),J(this.a,\"M  SDT \"),g0(this,Rt),J(this.a,\" \"),J(this.a,by),J(this.a,Ht),J(this.a,\"M  SDD \"),g0(this,Rt),J(this.a,\" \"),zu(this,t.J[n].a),zu(this,t.J[n].b),J(this.a,\"    DA    ALL  1       5\"),J(this.a,Ht),J(this.a,\"M  SED \"),g0(this,Rt),J(this.a,\" \"),J(this.a,st),J(this.a,Ht));J(this.a,D9+Ht)}function f6(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St;e1=null,l=null;try{if(t.f=null,t.j&&(ki(t.j),je(t.j,!1)),tt=p=K1(e),tt==null||(p=K1(e))==null||(p=K1(e))==null||(t.k=p.includes(\"From CSD data. Using bond type 'Any'\"),t.e=p.includes(\"From CSD data.\"),(p=K1(e))==null))return!1;t.g=!1,t.d=t.a;try{W=c1(v1((pt(0,3,p.length),p.substr(0,3))),o1,It),$=c1(v1((pt(3,6,p.length),p.substr(3,3))),o1,It),et=H9(v1((pt(6,9,p.length),p.substr(6,3)))),t.d=t.d|H9(v1((pt(12,15,p.length),p.substr(12,3))))==1,t.g=p.length>=39&&p.startsWith(\"V3000\",34)}catch(g1){if(g1=t0(g1),Zt(g1,19))return!1;throw At(g1)}if(t.g)return Pt=B$(t,e),$2(t.j,tt),Pt;if(!t.j&&(t.j=new zA(W,$)),$2(t.j,tt),t.d||(t.j.L=!0),W==0){for(;p!=null&&!(A1(p,D9)||A1(p,PU)||A1((Xt(1,p.length+1),p.substr(1)),\"$\"));)p=K1(e);return!0}for(v=0;v<W;v++){if((p=K1(e))==null)return!1;switch(Lt=Qn(v1((pt(0,10,p.length),p.substr(0,10)))),j1=Qn(v1((pt(10,20,p.length),p.substr(10,10)))),St=Qn(v1((pt(20,30,p.length),p.substr(20,10)))),n=W0(t.j,Lt,-j1,-St),S=v1((pt(31,34,p.length),p.substr(31,3))),A1(S,\"A\")||A1(S,\"*\")?T1(t.j,n,1,!0):A1(S,\"Q\")?(x=h(F,k,6,1,15,1),x[0]=6,Tf(t.j,n,x,!0)):(i=SA(S,67),K0(t.j,n,i)),X=H9(v1((pt(34,36,p.length),p.substr(34,2)))),X!=0&&jr(t.j,n,(Y1(),U9)[K(t.j,n)]+X),L=H9(v1((pt(36,39,p.length),p.substr(36,3)))),L!=0&&(L==4?Ne(t.j,n,32):E0(t.j,n,4-L)),a=p.length<63?0:H9(v1((pt(60,63,p.length),p.substr(60,3)))),Ze(t.j,n,a,!1),g=p.length<45?0:H9(v1((pt(42,45,p.length),p.substr(42,3)))),g){case 0:break;case 1:T1(t.j,n,768,!0);break;case 2:T1(t.j,n,128,!0);break;case 3:T1(t.j,n,384,!0);break;default:T1(t.j,n,896,!0)}p.length>=48&&(Xt(47,p.length),p.charCodeAt(47)==49)&&T1(t.j,n,ge,!0),b1=p.length<51?0:H9(v1((pt(48,51,p.length),p.substr(48,3)))),b1!=0&&(e1==null&&(e1=h(F,k,6,W,15,1)),e1[n]=b1)}for(R=0;R<$;R++){if((p=K1(e))==null)return!1;P=c1(v1((pt(0,3,p.length),p.substr(0,3))),o1,It)-1,r=c1(v1((pt(3,6,p.length),p.substr(3,3))),o1,It)-1,Q=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),$t=p.length<12?0:H9(v1((pt(9,12,p.length),p.substr(9,3)))),Nt=p.length<18?0:H9(v1((pt(15,18,p.length),p.substr(15,3)))),Q==8&&(t.k||_0(t.j,P)||_0(t.j,r))&&(Q=9),GR(t,P,r,Q,$t,Nt)}for(m=0;m<et;m++)if((p=K1(e))==null)return!1;if((p=K1(e))==null)return(t.i&1)!=0&&(t.f=Qu(t.j)),vk(t,e1),t.d||ut(t.j,15),!0;for(;p!=null&&!(A1(p,D9)||A1(p,PU));){if(p.startsWith(\"M  CHG\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,U=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),E0(t.j,n,U);if(p.startsWith(\"M  ISO\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,E=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),jr(t.j,n,E);if(p.startsWith(\"M  RAD\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)switch(n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,ct=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),ct){case 1:Ne(t.j,n,16);break;case 2:Ne(t.j,n,32);break;case 3:Ne(t.j,n,48)}if((p.startsWith(\"M  RBC\")||p.startsWith(\"M  RBD\"))&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)switch(n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,Tt=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),Tt){case 3:case-1:T1(t.j,n,112,!0);break;case 1:T1(t.j,n,8,!0);break;case 2:T1(t.j,n,104,!0);break;case 4:T1(t.j,n,56,!0)}if(p.startsWith(\"M  ALS\")&&(n=c1(v1((pt(7,10,p.length),p.substr(7,3))),o1,It)-1,n>=0)){for(lt=c1(v1((pt(10,13,p.length),p.substr(10,3))),o1,It),f=(Xt(14,p.length),p.charCodeAt(14)==84),b1=h(F,k,6,lt,15,1),A=16,j=0;j<lt;++j,A+=4)Qt=v1((pt(A,A+4,p.length),p.substr(A,A+4-A))),b1[j]=SA(Qt,1);K0(t.j,n,6),Tf(t.j,n,b1,f)}if(p.startsWith(\"M  SUB\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0)){for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)if(n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,Ut=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),Ut==-2)T1(t.j,n,I1,!0);else if(Ut>0){for(Ht=0,D=0;D<t.j.r;D++)(z(t.j,0,D)==n||z(t.j,1,D)==n)&&++Ht;Ut>Ht&&T1(t.j,n,C0,!0)}}if(p.startsWith(\"M  RGP\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,Kt=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),Kt>=1&&Kt<=20&&K0(t.j,n,SA(\"R\"+Kt,2));(p.startsWith(\"M  SAL\")&&p.length>=17||p.startsWith(\"M  SDT\")&&p.length>=12||p.startsWith(\"M  SED\")&&p.length>=12)&&(!l&&(l=new lP),Ct=(pt(7,10,p.length),p.substr(7,3)),s=(C=Ct,XP(G9(l,C))),s||(s=new W2,ze(l,Ct,s)),p.startsWith(\"M  SAL\")&&p.startsWith(\"  1\",10)?s.a=c1(v1((pt(13,17,p.length),p.substr(13,4))),o1,It):p.startsWith(\"M  SDT\")?s.b=(Xt(11,p.length+1),p.substr(11)).startsWith(by):p.startsWith(\"M  SED\")&&(s.c=v1((Xt(11,p.length+1),p.substr(11))))),p=K1(e)}}catch(g1){if(g1=t0(g1),Zt(g1,19))return T=g1,Z9(T,(x1(),gi),\"\"),!1;throw At(g1)}if(l)for(y=(st=new fD(l).a.$c().Tb(),new DD(st));y.a.ad();)s=(c=y.a.bd(),c.ed()),s.b&&s.a!=0&&s.c!=null&&u8(t.j,s.a-1,s.c);return t.e&&(VZ(t),GW(t)),(t.i&1)!=0&&(t.f=Qu(t.j)),vk(t,e1),ut(t.j,15),!0}function D6(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0;for(t.k=e,ki(t.k),t.s=new LP,t.a=new Zg,t.r&&un(t.r,0),t.b=0,t.p=!1,Q=t.q!=0,Ht=null,l=h(F,k,6,32,15,1),l[0]=-1,Qt=h(F,k,6,16,15,1),e1=h(F,k,6,16,15,1),b1=h(F,k,6,16,15,1),Nt=h(F,k,6,16,15,1),W=0;W<16;W++)Qt[W]=-1;for(s=0,p=-1,Rt=!1,st=!1,E=!1,v=0,g=1,c=0;A[n]<=32;)++n;for(;n<P;){if(Lt=A[n++]&w1,BB(Lt)||Lt==42||Lt==63||Lt==33&&Q&&Rt||Lt==35&&Q&&Rt||Lt==36&&Q&&Rt){if(y=new WF(t,t.j|t.q),Rt)if((t.j&128)!=0){if(j=new H7(n-1),n=P6(y,A,n,P,!0,!0),A[n-1]!=93){for(;A[n-1]!=93;)n=P6(y,A,n+1,P,!0,!0),++j.a;t.f.add(j)}}else n=P6(y,A,n,P,Q,!1);else n=n_(y,A,n,P,Q);if(Rt=!1,y.q&&N(y.q,0)){p=l[v],l[v]=e.q,RD(e,y.q?N(y.q,0):null),p!=-1&&g!=512&&(T=O0(t.k,p,p,g),c!=0&&(t.p=!0,Ge(t.k,T,c,!0),Cs(t.k,T))),g=1,c=0;continue}if(y.d==-1&&Lt!=63)throw At(new V1(\"SmilesParser: unknown element label found. Position:\"+(n-1)));y.r&&(t.p=!0),L=L$(y,t.k,Lt,n),z0(t.k,L)&&++t.b,p=l[v],p!=-1&&g!=512&&(T=O0(t.k,p,L,g),c!=0&&(t.p=!0,Ge(t.k,T,c,!0),Cs(t.k,T))),g=1,c=0,l[v]=L,s!=0&&(jr(t.k,L,s),s=0),i&&($t=Ht?le(Ht,k1(p)):null,$t&&Ku($t,L,(ct=n,y.d==1&&ye(t.k,L)==0,ct)),y.p&&(!Ht&&(Ht=new lP),X=y.g==9?0:y.g,ze(Ht,k1(L),new ck(t,L,n-2,p,X,y.i))));continue}if(Lt==46){l[v]=-1,g=512;continue}if(Lt==45||Lt==61||Lt==35||Lt==36||Lt==58||Lt==47||Lt==92||Lt==60||Lt==126||Lt==33||Lt==64){if(Rt)throw At(new V1(\"SmilesParser: unexpected bond symbol inside square brackets: '\"+String.fromCharCode(Lt)+V6+(n-1)));for(C=0;Lt==45||Lt==61||Lt==35||Lt==36||Lt==58||Lt==47||Lt==92||Lt==60||Lt==126||Lt==33||Lt==64;){if(Lt==33)if(Lt=A[n++]&w1,Lt==64)c|=128;else if(Lt==45&&A[n]==62||Lt==60&&A[n]==45)C|=16,++n;else if(Lt==45)C|=1;else if(Lt==61)C|=2;else if(Lt==35)C|=4;else if(Lt==36)C|=32;else if(Lt==58)C|=8;else throw At(new V1(\"SmilesParser: bond symbol '\"+String.fromCharCode(Lt)+\"' not allowed after '!'. Position:\"+(n-1)));else if(Lt==64?c|=256:Lt==61?g=2:Lt==35?g=4:Lt==36?g=32:Lt==58?g=8:Lt==126?c|=15:Lt==47?i&&(g=257):Lt==92?i&&(g=129):(Lt==45&&A[n]==62||Lt==60&&A[n]==45)&&(g=16,++n),A[n]==44)for(c|=(g==16?62:Lt)==61?2:(g==16?62:Lt)==35?4:(g==16?62:Lt)==36?32:(g==16?62:Lt)==58?8:(g==16?62:Lt)==62?16:(g==16?62:Lt)==126?127:1;A[n]==44;)A[n+1]==60&&A[n+2]==45||A[n+1]==45&&A[n+2]==62?(c|=16,n+=3):(c|=(A[n+1]&w1)==61?2:(A[n+1]&w1)==35?4:(A[n+1]&w1)==36?32:(A[n+1]&w1)==58?8:(A[n+1]&w1)==62?16:(A[n+1]&w1)==126?127:1,n+=2);if(A[n]==59){++n,Lt=A[n++]&w1;continue}C!=0&&(c|=127&~C);break}continue}if(Lt<=32){n=P;continue}if(Zn(Lt)){if(Tt=Lt-48,Rt){for(;n<P&&Zn(A[n]&w1);)Tt=10*Tt+A[n]-48,++n;s=Tt}else{if(m=st?n-3:n-2,a=A[m]==45||A[m]==47||A[m]==92||A[m]==61||A[m]==35||A[m]==36||A[m]==58||A[m]==62||A[m]==126,st&&n<P&&Zn(A[n]&w1)&&(Tt=10*Tt+A[n]-48,st=!1,++n),Tt>=Qt.length){if(Tt>=100)throw At(new V1(\"SmilesParser: ringClosureAtom number out of range: \"+Tt));for(Kt=Qt.length,Pt=Qt.length;Pt<=Tt;)Pt=w.Math.min(100,Pt+16);for(Qt=(n8(Pt),RP(Qt,h(F,k,6,Pt,15,1),0,Pt)),e1=(n8(Pt),RP(e1,h(F,k,6,Pt,15,1),0,Pt)),b1=(n8(Pt),RP(b1,h(F,k,6,Pt,15,1),0,Pt)),Nt=(n8(Pt),RP(Nt,h(F,k,6,Pt,15,1),0,Pt)),$=Kt;$<Pt;$++)Qt[$]=-1}if(Qt[Tt]==-1)Qt[Tt]=l[v],e1[Tt]=n-1,b1[Tt]=a?g:-1,Nt[Tt]=a?c:0;else{if(Qt[Tt]==l[v])throw At(new V1(\"SmilesParser: ring closure to same atom\"));i&&Ht&&($t=le(Ht,k1(Qt[Tt])),$t&&Ku($t,l[v],e1[Tt]),$t=le(Ht,k1(l[v])),$t&&Ku($t,Qt[Tt],n-1)),b1[Tt]!=-1?g=b1[Tt]:g==257?g=129:g==129&&(g=257),f=Qt[Tt],D=l[v],T=(T0=O0(t.k,f,D,g),SD(t.s,f+\"_\"+D,B(d(F,1),k,6,15,[e1[Tt],n-1])),SD(t.s,D+\"_\"+f,B(d(F,1),k,6,15,[e1[Tt],n-1])),hv(t.a,f),hv(t.a,D),T0),Nt[Tt]!=0&&(c=Nt[Tt]),c!=0&&(t.p=!0,Ge(t.k,T,Nt[Tt],!0),Cs(t.k,T)),Qt[Tt]=-1}g=1,c=0}continue}if(Lt==43)throw At(new V1(\"SmilesParser: '+' found outside brackets. Position:\"+(n-1)));if(Lt==40){if(l[v]==-1){E=!0;continue}++v,l.length==v&&(l=bn(l,l.length+32)),l[v]=l[v-1];continue}if(Lt==41){if(v==0){if(!E)throw At(new V1(\"SmilesParser: Closing ')' without opening counterpart. Position:\"+(n-1)));l[0]=-1,E=!1;continue}--v;continue}if(Lt==91){Rt=!0;continue}if(Lt==93)throw At(new V1(\"SmilesParser: closing bracket at unexpected position:\"+(n-1)));if(Lt==37){st=!0;continue}throw At(new V1(\"SmilesParser: unexpected character outside brackets: '\"+String.fromCharCode(Lt)+qp+(n-1)))}if(g!=1)throw At(new V1(\"SmilesParser: dangling open bond; position:\"+n));for(et=0;et<Qt.length;et++)if(Qt[et]!=-1)throw At(new V1(\"SmilesParser: dangling ring closure: \"+et+\"; position:\"+n));for(x=Qu(t.k),t.k.S=!0,ut(t.k,1),U=0;U<t.k.q;U++)if(_n(t.k,U)!=null)if(S=X3(t.k,U)[0],t.p||t.q==2){if(S!=9)if(t.i)for(tt=0;tt<S;tt++)O0(t.k,U,W9(t.k,1),1);else S==0&&T1(t.k,U,1792,!0),S==1&&T1(t.k,U,1664,!0),S==2&&T1(t.k,U,1408,!0),S==3&&T1(t.k,U,896,!0)}else{if(S==9&&(S=0),!_0(t.k,U)&&(!z0(t.k,U)||K(t.k,U)==6&&p1(t.k,U)==0)){for(s1=Yu(K(t.k,U)),R=!1,j1=G1(t.k,U),j1-=Fu(t.k,U,j1),j1+=S,z0(t.k,U)&&++j1,g1=s1,y0=0,F1=g1.length;y0<F1;++y0)if(St=g1[y0],j1<=St){R=!0,St==j1+2?Ne(t.k,U,48):St==j1+1?Ne(t.k,U,32):(St!=j1||St!=s1[0])&&XA(t.k,U,j1);break}R||XA(t.k,U,j1)}if(t.i||!aL(t.k,U))for(tt=0;tt<S;tt++)O0(t.k,U,W9(t.k,1),1)}else!t.i&&(t.p||t.q==2)&&(S=R3(t.k,U),S>=1&&T1(t.k,U,128,!0),S>=2&&T1(t.k,U,256,!0),S>=3&&T1(t.k,U,512,!0),S>=4&&T1(t.k,U,re,!0));if(!t.i&&(t.p||t.q==2)&&g5(t.k,!1),ut(t.k,1),JX(t),Va(t,Q,t.p),t.k.t=null,t.k.S=!1,i&&(__(t),Ht)){for(Ut=(Ct=new fD(Ht).a.$c().Tb(),new DD(Ct));Ut.a.ad();)$t=(b=Ut.a.bd(),b.ed()),ce(t.k,x[$t.a],uZ($t,x),!1);sD(t.k,0)}sD(t.k,0),r&&(lt=new Y8(t.d),gt(t.n,0)&&pq(lt,t.n),Ar(lt,t.k),i&&H3(t.k)),(t.p||t.q==2)&&(je(t.k,!0),Bj(t.k),_b(t.k))}function wp(){wp=B1,RU=B(d(it,2),nA,13,0,[B(d(it,1),Dt,2,6,[\"e\",\"daXJ@@PjyITuiX@`!dahJ@@SJYIMMfPB#IaLJfxP IaAhl[`#!BDpAl@AL@[@Be}aL@[@@ !B|Osp?QZR?O_}}zGze`@##\"]),B(d(it,1),Dt,2,6,[\"g\",\"gBa`@lde@XS@!gCA`@mDPOdku`#qbq qJt#!B[G|S_qgq !BjW}q]cga##\"]),B(d(it,1),Dt,2,6,[\"o\",\"gGQHDDqIUjdB!gGQHHDqAeMjhB#qbqk qfQ]#!B@AL@[@@S@Fp@Dp !BFQ{~_q|ZGvUSYp##\"]),B(d(it,1),Dt,2,6,[\"r\",\"gOQdEjHbAFQRBrtAaJ!gNQdEbHbABCTKPFDH#qbMwX qbM~X#!BNDm`ra?UjW~YBYX@ !Ba[zw?_x@?g~H?XO~##\"]),B(d(it,1),Dt,2,6,[\"s\",\"gOp`ATigujj`H!gOp`ATiVKjj`H#qnyS` qY~eP#!BTLtk^sE?BOs|]pc} !BbOvw?_y??g~H?[_}##\"]),B(d(it,1),Dt,2,6,[\"t\",\"gOP`@dcUZdB!gNp`@tiTMjj@`#q{ir` qkLrx#!Be`Bzr_wp?OC}|Osp !B?g~w@k_}m?vw@n[a##\"]),B(d(it,1),Dt,2,6,[\"u\",\"daXB`Hrn@HrPEILt`D!daXB`DJn@HRUMjV@H#IxVaLJ` IylJhPP#!B[G}l@OKyDpAl@AL@[@@ !B@Fp@DpAl@AN]?`Al@AL##\"]),B(d(it,1),Dt,2,6,[\"Sakurai\",\"gOQH@wAINvZ@pdcFe@x@!gOQH@wAIgJi@pdcFe@x@#qreKx qrLkx#!BDpAl@IknDw|S@Fp@ !Bb@JH?_x@b@JH?Ven##\"]),B(d(it,1),Dt,2,6,[\"Mitsunobu\",\"gFP`ATfRhdPp`}KEYg]d@!gFP`ATfRhd`pekL{l`#qrLk qZLn#!B@hc}b@C~@h`YM` !B@hc}b@C~@h`YM`##\"]),B(d(it,1),Dt,2,6,[\"Aldol-Addition\",\"gOQ@AdTAcS@[Q^crJTLES`DJsL?vH!gGQ@@dsuRAcJg@HUaX#qYEbp qYub#!BxOyBzLKg`dG~xG~{ !Bb@K~@Hc}FBIA@@##\"]),B(d(it,1),Dt,2,6,[\"Aldol-Condensation\",\"gOQ@AdTAcS@[Q^crJTLES`DJsL?vH!gFQ@@`rrpdlHHpipBEXf@#qYEbp q^aU#!B{ZRRqA?AQfyA@L_C !B}QFw@h`B_tnH_P##\"]),B(d(it,1),Dt,2,6,[\"Acetal-Aldol-Addition\",\"dmdB@@serQS@sJjfd@p`Xir\\\\@`j\\\\@aUJXK@!daxL@@[df[ZjT@qQdxACdxABjTqf@#qB@`OuX qBtM{#!B_]]}rHKWw?y}uy[~GJbBu{wWqG| !BfJK~TIa]fJJghg{`pP@##\"]),B(d(it,1),Dt,2,6,[\"Acetal-Aldol-Condensation\",\"dmdB@@serQS@sJjfd@p`Xir\\\\@`j\\\\@aUJXK@!gNp`CTjUiV@qQS`DJg@HUVXV@#qB@`OuX qqj{`#!B?[_}b@Jw_?{}m~[~[N@Bm?vwkN| !BfsK~yzPrw}m?rzQM##\"]),B(d(it,1),Dt,2,6,[\"Acetal-Aldol-Condensation-Cyclization\",\"dkLB@@ZURYUvUjljh@paHpr\\\\@`!didD@@yIfUXXHL@CFNS`D@#IXljNPY@@@ IXljIyA#!BbOw~_x`Bm?vH?[_}b@JH?_y?b@Jw?Xc} !BbOvH?Oy??`BH?Xa}?`C~_p##\"]),B(d(it,1),Dt,2,6,[\"Enolester-Cleavage\",\"gOQ`@fdscT`_Qp!gOQ`@cdTASS@P#q}Kr` q}cNP#!B@k]}mpC~@k]}mqdY !Bb@K~@Hc}BfzH@hc}##\"]),B(d(it,1),Dt,2,6,[\"propargylEnone\",\"gCa@@dmXFD@!gCa@@dkHD#qNT qLV#!BbOw~_?y? !B@AL@[@@S##\"]),B(d(it,1),Dt,2,6,[\"Arndt-Eistert\",\"daiDaJYBBHj^{HhAYMpAaA@!daiD`FzLBHPVsZl@p`@#IyHHZ[@ IzDGBi`#!B?`Bw?H`Bn]{~\\\\g?~@Ox !B@rzH?_y?b@JH?_n~bOt##\"]),B(d(it,1),Dt,2,6,[\"Curtius\",\"gO]IcVaDF[s{HhCIe@`!gN]HMWADHJfm`XP@#q~Jk` qytUX#!B@O{|b@Jw\\\\o{~_?x@ !Bj]y??g?~?[^G_hc}##\"]),B(d(it,1),Dt,2,6,[\"diazomethanHomologation\",\"gFU@lQioIIs\\\\AyH!gFU@CPdimXD#qbM^ qbqk#!B?X`BbFZN?`C~_p !B@AL@[@@Su[x@Dp##\"]),B(d(it,1),Dt,2,6,[PV,\"deD@@LdbEdSTu@FqHWSDda`JFChXIa`?tdKi@!deD@@Ldb`\\\\SUM@FqHPsDda`JF@XXIa`?tdHY@#qTEApX qQECf@#!BQzK~}ubbW`BEgcb]?a@gg[zO !BQzK~}ubbW`Ag{VVAQzJ~c?xP##\"]),B(d(it,1),Dt,2,6,[PV,\"deD@@LdbEdSTu@FqHWSDda`JFChXIa`?tdKi@!gC`@DiZDE@#qPDA@p qQf#!BmpK~_x`Bm?tAs[]}?`BH_[_| !B_vp@[G|S##\"]),B(d(it,1),Dt,2,6,[\"yne-Metathesis\",\"daX@@LdPLWWPAlRXwQIHXLa`ZFChXO}IL[`!daX@@LdPLWWPAlRXwQIHXLa`ZFChXO}IL[`#qT@q@ qt@Q@#!BZmoi@Fjo|SFe|IkGiU@ !BZmoi@Fjo|SFe|IkGiU@##\"]),B(d(it,1),Dt,2,6,[\"ene-yne-Metathesis\",\"dcd@@LdPLPLWSSPAlrXwKlVRFCHXFa`zFAXXMa`?udqnWP!dcT@@LdbbplTsTt@[MeMr{Ela`jFAhXNa`VFCXXO}[J[et#qe@N@S@ qeHP@s@#!B?g?~@Oy?^gG}bOvw?H`E@PJw@hc}mp !B?`BH?[_}mpJH@oy??`AuC`Jw@hc}mp##\"]),B(d(it,1),Dt,2,6,[\"Alkyne-Cyclisation\",\"gG`@DcO|CFAFC`@!gFp@DiTt@@CFAFC`@#qi\\\\V qiSt#!B_y[qA`Biu^zV@@ !B?g~w@k_}m?vw@`##\"]),B(d(it,1),Dt,2,6,[\"Elimination-Claisen\",\"gNp`AldTQji@~a`!gGQ@@djmRA@#qtHUX qtSi#!Bm?vH?[\\\\B?g~H@hc} !B@AL@[@@S@Fp@Dp##\"]),B(d(it,1),Dt,2,6,[\"imineFormationAzaCope\",\"daZH@LAIMUjd@pRL@!daZH@HAAn]jd@p`@#IGfaLJ` IFDzfK@#!BDpAl@IkqDpAl@AL@[@@ !BFaFw@h`BbOw~@H`BbOt##\"]),B(d(it,1),Dt,2,6,[\"didehydroCopeWithAromatisation\",\"gNp@Di]ejDcjcr|wK`!gOp@DjWkB@@H#qrLkx q\\\\oQp#!B?g~H?K_}bGvH?H`B !Bm?w~@Hc}mpJw@ox@##\"]),B(d(it,1),Dt,2,6,[\"symAldolNitrogenRing\",\"dovJ@GBfttf\\\\v\\\\qjViPCADGbDodnGp!doNJ@JCSmtefWTCaYjje@H#IlZXi]]yL~C IqMVCzaIim?#!BQtl_riY?Qtl_rfuvNCQ`uZd@NCQ`uVVu}?sA]P !B?`BH@ox@bGvH@k\\\\Bb@JH_Xa}b@K~_rYltUr|W@##\"]),B(d(it,1),Dt,2,6,[\"Diels-Alder\",\"gFP@LdPLjA@!gFp@DiTujhB#qiZf qMSf#!B?_C}}?spIPFV@@ !B?g~w@k_}m?vw@`##\"]),B(d(it,1),Dt,2,6,[\"Claisen-RA\",\"gGQ@@eKtRA@!gGQ@@djqRA@#qMsT qM\\\\V#!B_qL@Dw}l@Fp@Dp !B@AL@[@@S@Fp@Dp##\"]),B(d(it,1),Dt,2,6,[\"Cope\",\"gGQ@DeZmRAbhcApIF@P@!gGQ@HeZmRAbhc@HIFC`@#qkNT qi\\\\V#!B_vp@[@@S@Fp@Dp !B_vp@[@@S@Fp@Dp##\"]),B(d(it,1),Dt,2,6,[\"OxyCope\",\"gNq@@dr}SHFD@!gNq@@djkUHD#qynZ` qykbp#!B?g~w?Xc}mpJH@hc} !B@Fp@DpAl@AL@[@@S##\"]),B(d(it,1),Dt,2,6,[\"Vinylcyclopropane\",\"gKP@DklVj@`!gKP@Di\\\\Vj@`#qaVh qTqh#!Bm?vH?PC~?K\\\\ !B?g|_Fa}eTv\\\\##\"]),B(d(it,1),Dt,2,6,[\"Furan-CH2-OH-Rearrangement\",\"gOp`@tiguif`H!gOp`@tfWMZZ`H#qZna@ qZtM@#!BTLtk^sE?BOs|]pc} !BBOuPtdy?UGm@V]Ho##\"]),B(d(it,1),Dt,2,6,[\"rearrangement1032\",\"gOp`ATieMji`H!gOp`ATeekZj`H#qaSnx qa]~P#!BTLtk^pc|LW?|]pc} !BBOpH?UCRSg}T^tAY##\"]),B(d(it,1),Dt,2,6,[\"Pinacol-Rearrangement\",\"gNp`ATffjj@pPh!gOP`@tfXZhCAA`#qb^ix qb^oH#!B@k^H@k_}@k_~@Hc} !BbOvH@oy??`BH?PFf##\"]),B(d(it,1),Dt,2,6,[\"1,3-WaterEliminationWith12Shift\",\"gJQ@@dmU@_SP!gKa@@`vtA}A@#qiTp qjap#!BbOvH@ox@bOt !BJdE?[@Al@AL##\"]),B(d(it,1),Dt,2,6,[\"Epoxydation\",\"gB``ADcdCB@!gC``AhtUPGtt@#qqb qtQ#!BjW}Y\\\\YX@ !B?g~w?^Va##\"]),B(d(it,1),Dt,2,6,[\"oxydativePropargylAmine13Shift\",\"gKi@HDEZpLHOQP!gJY@BDeVXB#qMr` qNTh#!BqiXTy{U?mW| !B@Fp@DpAl@AL##\"]),B(d(it,1),Dt,2,6,[\"Baeyer-Villiger\",\"gFQ`@[dTAZ`LHP!gFQ`@jdrMPGtl@#qrak qrlK#!B_?{}mwvHs^FVP@ !BbOvH@oy?bOuQzP##\"]),B(d(it,1),Dt,2,6,[rV,\"gGa@@dYs@XHFJIBDQbUeHPbLRl@!gFQ@@eNUPFJIBDQbUeHPbLRls@`#qbq] qfQk#!B@AOIDW}l@tD@Dp !B_qL@Dw}l_qNcDP##\"]),B(d(it,1),Dt,2,6,[rV,\"gBa@@d\\\\`XP@!gJQ@@eOU@XpdHQFIVY`P#qbq qfQ@#!B@AOIDW}l !B_qL@Dw}l_qL##\"]),B(d(it,1),Dt,2,6,[\"Hantzsch Thiazol\",\"daZHPDp@chaIMefh@ppDzTD~hYmC^bhbcPp]dQbUg~pp!gKXHL@aJWFe`H#qNPe@ qNj`#!BvuK[KUxv_yS[k_zhvuH !BTqa`FbpX?`@##\"]),B(d(it,1),Dt,2,6,[\"Oxadiazole\",\"gOX`BEdTASW@XQ@!gOu@HPeKNMKTA@#qrDMX qpULX#!BmpK~@K_}Mlx@?`C~ !BZ?`C}v|m_rYR[z?\\\\##\"]),B(d(it,1),Dt,2,6,[\"Imidazole\",\"dmeHPNg@qJqLbTtATijZ@LLJnuDmhWtSDXUFC`?rIoTAP!gOt@ATieuej`H#qDPpM_@ q~ZM`#!BqvKGg_yOqvKGg_xphrGkLcz@_sD !BTMHkACD@BOw|B@QT##\"]),B(d(it,1),Dt,2,6,[\"1,2,3-Triazole\",\"gB`HAbIGXFDWiM@!gF|@ADeKXmT`P#QIp Q@v#!B_vpU?g}l !BTv]`YRqg?g|XK@##\"]),B(d(it,1),Dt,2,6,[\"1,2,4-Triazole\",\"deFD@NALbbfASUW@FD]YJZLUCAVJ}?nES@!gO|@ABeKNLuRA@#qDB@FM q@LuP#!BY?r~@F_]jDJW`j`}Iaxx[UC] !BTv]@IPqgog|hCBT_##\"])])}function _A(){_A=B1,oE=new nD,DE=B(d(it,1),Dt,2,6,[\"?\",\"H\",\"He\",\"Li\",\"Be\",\"B\",\"C\",\"N\",\"O\",\"F\",\"Ne\",\"Na\",\"Mg\",\"Al\",\"Si\",\"P\",\"S\",\"Cl\",\"Ar\",\"K\",\"Ca\",\"Sc\",\"Ti\",\"V\",\"Cr\",\"Mn\",\"Fe\",\"Co\",\"Ni\",\"Cu\",\"Zn\",\"Ga\",\"Ge\",\"As\",\"Se\",\"Br\",\"Kr\",\"Rb\",\"Sr\",\"Y\",\"Zr\",\"Nb\",\"Mo\",\"Tc\",\"Ru\",\"Rh\",\"Pd\",\"Ag\",\"Cd\",\"In\",\"Sn\",\"Sb\",\"Te\",\"I\",\"Xe\",\"Cs\",\"Ba\",\"La\",\"Ce\",\"Pr\",\"Nd\",\"Pm\",\"Sm\",\"Eu\",\"Gd\",\"Tb\",\"Dy\",\"Ho\",\"Er\",\"Tm\",\"Yb\",\"Lu\",\"Hf\",\"Ta\",\"W\",\"Re\",\"Os\",\"Ir\",\"Pt\",\"Au\",\"Hg\",\"Tl\",\"Pb\",\"Bi\",\"Po\",\"At\",\"Rn\",\"Fr\",\"Ra\",\"Ac\",\"Th\",\"Pa\",\"U\",\"Np\",\"Pu\",\"Am\",\"Cm\",\"Bk\",\"Cf\",\"Es\",\"Fm\",\"Md\",\"No\",\"Lr\",\"Rf\",\"Db\",\"Sg\",\"Bh\",\"Hs\",\"Mt\",\"Ds\",\"Rg\",\"Cn\",\"Nh\",\"Fl\",\"Mc\",\"Lv\",\"Ts\",\"Og\",$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,\"R4\",\"R5\",\"R6\",\"R7\",\"R8\",\"R9\",\"R10\",\"R11\",\"R12\",\"R13\",\"R14\",\"R15\",\"R16\",\"R1\",\"R2\",\"R3\",\"A\",\"A1\",\"A2\",\"A3\",$1,$1,\"D\",\"T\",\"X\",\"R\",\"H2\",\"H+\",\"Nnn\",\"HYD\",\"Pol\",$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,\"Ala\",\"Arg\",\"Asn\",\"Asp\",\"Cys\",\"Gln\",\"Glu\",\"Gly\",\"His\",\"Ile\",\"Leu\",\"Lys\",\"Met\",\"Phe\",\"Pro\",\"Ser\",\"Thr\",\"Trp\",\"Tyr\",\"Val\"]),UE=B(d(Yt,1),at,6,15,[0,1,4,7,9,11,12,14,16,19,20,23,24,27,28,31,32,35,40,39,40,45,48,51,52,55,56,59,58,63,64,69,74,75,80,79,84,85,88,89,90,93,98,0,102,103,106,107,114,115,120,121,130,127,132,133,138,139,140,141,142,0,152,153,158,159,164,165,166,169,174,175,180,181,184,187,192,193,195,197,202,205,208,209,209,210,222,223,226,227,232,231,238,237,244,243,247,247,251,252,257,258,259,262,267,268,271,270,277,276,281,281,283,285,289,289,293,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,156,114,115,103,128,129,57,137,113,113,128,131,147,97,87,101,186,163,99]),uE=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[1,2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2,4,6]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2])]),QE=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3,4]),B(d(q,1),I,6,15,[2,3,4,5]),B(d(q,1),I,6,15,[2,3,6]),B(d(q,1),I,6,15,[2,3,4,7]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2,4,6]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[-2,2,4]),B(d(q,1),I,6,15,[-1,1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[4,5]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3])]),fE=B(d(it,1),Dt,2,6,[E6,S6,q6])}function Y1(){Y1=B1,X0=B(d(it,1),Dt,2,6,[\"?\",\"H\",\"He\",\"Li\",\"Be\",\"B\",\"C\",\"N\",\"O\",\"F\",\"Ne\",\"Na\",\"Mg\",\"Al\",\"Si\",\"P\",\"S\",\"Cl\",\"Ar\",\"K\",\"Ca\",\"Sc\",\"Ti\",\"V\",\"Cr\",\"Mn\",\"Fe\",\"Co\",\"Ni\",\"Cu\",\"Zn\",\"Ga\",\"Ge\",\"As\",\"Se\",\"Br\",\"Kr\",\"Rb\",\"Sr\",\"Y\",\"Zr\",\"Nb\",\"Mo\",\"Tc\",\"Ru\",\"Rh\",\"Pd\",\"Ag\",\"Cd\",\"In\",\"Sn\",\"Sb\",\"Te\",\"I\",\"Xe\",\"Cs\",\"Ba\",\"La\",\"Ce\",\"Pr\",\"Nd\",\"Pm\",\"Sm\",\"Eu\",\"Gd\",\"Tb\",\"Dy\",\"Ho\",\"Er\",\"Tm\",\"Yb\",\"Lu\",\"Hf\",\"Ta\",\"W\",\"Re\",\"Os\",\"Ir\",\"Pt\",\"Au\",\"Hg\",\"Tl\",\"Pb\",\"Bi\",\"Po\",\"At\",\"Rn\",\"Fr\",\"Ra\",\"Ac\",\"Th\",\"Pa\",\"U\",\"Np\",\"Pu\",\"Am\",\"Cm\",\"Bk\",\"Cf\",\"Es\",\"Fm\",\"Md\",\"No\",\"Lr\",\"Rf\",\"Db\",\"Sg\",\"Bh\",\"Hs\",\"Mt\",\"Ds\",\"Rg\",\"Cn\",\"Nh\",\"Fl\",\"Mc\",\"Lv\",\"Ts\",\"Og\",$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,\"R4\",\"R5\",\"R6\",\"R7\",\"R8\",\"R9\",\"R10\",\"R11\",\"R12\",\"R13\",\"R14\",\"R15\",\"R16\",\"R1\",\"R2\",\"R3\",\"A\",\"A1\",\"A2\",\"A3\",$1,$1,\"D\",\"T\",\"X\",\"R\",\"H2\",\"H+\",\"Nnn\",\"HYD\",\"Pol\",$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,$1,\"Ala\",\"Arg\",\"Asn\",\"Asp\",\"Cys\",\"Gln\",\"Glu\",\"Gly\",\"His\",\"Ile\",\"Leu\",\"Lys\",\"Met\",\"Phe\",\"Pro\",\"Ser\",\"Thr\",\"Trp\",\"Tyr\",\"Val\"]),U9=B(d(Yt,1),at,6,15,[0,1,4,7,9,11,12,14,16,19,20,23,24,27,28,31,32,35,40,39,40,45,48,51,52,55,56,59,58,63,64,69,74,75,80,79,84,85,88,89,90,93,98,0,102,103,106,107,114,115,120,121,130,127,132,133,138,139,140,141,142,0,152,153,158,159,164,165,166,169,174,175,180,181,184,187,192,193,195,197,202,205,208,209,209,210,222,223,226,227,232,231,238,237,244,243,247,247,251,252,257,258,259,262,267,268,271,270,277,276,281,281,283,285,289,289,293,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,156,114,115,103,128,129,57,137,113,113,128,131,147,97,87,101,186,163,99]),VV=B(d(q,1),I,6,15,[6]),HV=B(d(q,1),I,6,15,[2]),Lr=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[1,2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2,4,6]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2])]),F4=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3,4]),B(d(q,1),I,6,15,[2,3,4,5]),B(d(q,1),I,6,15,[2,3,6]),B(d(q,1),I,6,15,[2,3,4,7]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2,4,6]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[-2,2,4]),B(d(q,1),I,6,15,[-1,1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[4,5]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3])])}function zQ(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt;if(t.K||t.yb(e,Ci(t.L,e),Z1(t.R,kt(t.L,e)),X1(t.R,jt(t.L,e))),st=null,p1(t.L,e)!=0&&($t=w.Math.abs(p1(t.L,e))==1?\"\":\"\"+w.Math.abs(p1(t.L,e)),st=p1(t.L,e)<0?$t+\"-\":$t+\"+\"),E=null,ct=o0(t.L,e),G(ct,0)!=0&&(gt(V(ct,KQ),0)&&(E=E==null?\"*\":E+\",*\"),gt(V(ct,XQ),0)&&(E=E==null?\"!*\":E+\",!*\"),gt(V(ct,ZQ),0)?E=E==null?\"ha\":E+\",ha\":gt(V(ct,2),0)?E=E==null?\"a\":E+\",a\":gt(V(ct,4),0)&&(E=E==null?\"!a\":E+\",!a\"),gt(V(ct,C0),0)&&(E=E==null?\"s\":E+\",s\"),gt(V(ct,rP),0)&&(j=V(ct,rP),G(j,1792)==0?E=E==null?\"h0\":E+\",h0\":G(j,1664)==0?E=E==null?\"h1\":E+\",h1\":G(j,1408)==0?E=E==null?\"h2\":E+\",h2\":G(j,128)==0?E=E==null?\"h>0\":E+\",h>0\":G(j,384)==0?E=E==null?\"h>1\":E+\",h>1\":G(j,896)==0?E=E==null?\"h>2\":E+\",h>2\":G(j,re)==0?E=E==null?\"h<3\":E+\",h<3\":G(j,1536)==0?E=E==null?\"h<2\":E+\",h<2\":G(j,1152)==0&&(E=E==null?\"h1-2\":E+\",h1-2\")),gt(V(ct,i9),0)&&(D=V(ct,i9),G(D,WQ)==0?E=E==null?\"c0\":E+\",c0\":G(D,Cf)==0?E=E==null?\"c+\":E+\",c+\":G(D,Mf)==0&&(E=E==null?\"c-\":E+\",c-\")),gt(V(ct,Li),0)&&(lt=V(ct,Li),G(lt,98304)==0?E=E==null?\"pi0\":E+\",pi0\":G(lt,81920)==0?E=E==null?\"pi1\":E+\",pi1\":G(lt,49152)==0?E=E==null?\"pi2\":E+\",pi2\":G(lt,Sn)==0&&(E=E==null?\"pi>0\":E+\",pi>0\")),gt(V(ct,si),0)&&(et=V(ct,si),G(et,_Q)==0?E=E==null?\"n1\":E+\",n1\":G(et,d2)==0?E=E==null?\"n2\":E+\",n2\":G(et,B2)==0?E=E==null?\"n3\":E+\",n3\":G(et,$Q)==0?E=E==null?\"n<3\":E+\",n<3\":G(et,qA)==0?E=E==null?\"n<4\":E+\",n<4\":G(et,yi)==0?E=E==null?\"n>1\":E+\",n>1\":G(et,SP)==0?E=E==null?\"n>2\":E+\",n>2\":G(et,Hf)==0?E=E==null?\"n>3\":E+\",n>3\":G(et,3276800)==0?E=E==null?\"n1-2\":E+\",n1-2\":G(et,2228224)==0?E=E==null?\"n1-3\":E+\",n1-3\":G(et,2490368)==0&&(E=E==null?\"n2-3\":E+\",n2-3\")),gt(V(ct,Vf),0)&&(l=V(ct,Vf),G(l,uy)==0?E=E==null?\"e0\":E+\",e0\":G(l,Qy)==0?E=E==null?\"e1\":E+\",e1\":G(l,Uy)==0?E=E==null?\"e2\":E+\",e2\":G(l,oy)==0?E=E==null?\"e3\":E+\",e3\":G(l,T6)==0?E=E==null?\"e<2\":E+\",e<2\":G(l,h6)==0?E=E==null?\"e<3\":E+\",e<3\":G(l,aQ)==0?E=E==null?\"e<4\":E+\",e<4\":G(l,v2)==0?E=E==null?\"e>0\":E+\",e>0\":G(l,Ly)==0?E=E==null?\"e>1\":E+\",e>1\":G(l,sy)==0?E=E==null?\"e>2\":E+\",e>2\":G(l,tU)==0?E=E==null?\"e>3\":E+\",e>3\":G(l,c6)==0?E=E==null?\"e1-2\":E+\",e1-2\":G(l,w6)==0?E=E==null?\"e1-3\":E+\",e1-3\":G(l,g6)==0&&(E=E==null?\"e2-3\":E+\",e2-3\")),gt(V(ct,120),0)&&(Pt=V(ct,120),G(Pt,112)==0?E=E==null?\"!r\":E+\",!r\":G(Pt,8)==0?E=E==null?\"r\":E+\",r\":G(Pt,96)==0?E=E==null?\"rb<3\":E+\",rb<3\":G(Pt,104)==0?E=E==null?\"rb2\":E+\",rb2\":G(Pt,88)==0?E=E==null?\"rb3\":E+\",rb3\":G(Pt,56)==0&&(E=E==null?\"rb4\":E+\",rb4\")),gt(V(ct,f9),0)&&(E=E==null?\"r\"+Te(q0(V(ct,f9),22)):E+\",\"+(\"r\"+Te(q0(V(ct,f9),22)))),gt(V(ct,rr),0)&&(E=zo(E,jZ(ct))),gt(V(ct,F2),0)&&(E=E==null?\"ox\"+Te(l0(q0(V(ct,F2),47),7)):E+\",\"+(\"ox\"+Te(l0(q0(V(ct,F2),47),7)))),gt(V(ct,Ur),0)&&(E=E==null?\"f\":E+\",f\")),ye(t.L,e)!=0&&(E=zo(E,\"\"+ye(t.L,e))),Ct=0,FA(t.L,e)!=0)switch(FA(t.L,e)){case 16:st=st==null?\"|\":st+\",|\";break;case 32:Ct=1;break;case 48:Ct=2}if(L=null,(t.G&64)==0){if(Fr(t.L,e))L=\"?\";else if(jo(t.L,e)!=0&&(Ae(t.L,e)==0||A==null||A[Ae(t.L,e)][VA(t.L,e)]>1))if(O(t.L,e)==2)switch(jo(t.L,e)){case 2:L=Ei(t.L,e)?\"p\":\"P\";break;case 1:L=Ei(t.L,e)?\"m\":\"M\";break;default:L=\"*\"}else switch(jo(t.L,e)){case 1:L=Ei(t.L,e)?\"r\":\"R\";break;case 2:L=Ei(t.L,e)?\"s\":\"S\";break;default:L=\"*\"}}if((t.G&768)!=0&&(L=zo(L,\"\"+R0(t.L,e))),W=null,(t.G&16)!=0&&C1(t.L,e)!=0&&(W=\"\"+C1(t.L,e)),c=null,pQ(t.L,e)!=-1&&(T=Hh(t,e),T!=-1&&(c=T==0?\"abs\":((T&255)==1?\"&\":\"or\")+(1+(T>>8)))),C=0,(t.G&ge)==0&&(t.L.K?gt(V(o0(t.L,e),I1),0)&&(C=xt(t.L,e)):(K(t.L,e)!=6||ye(t.L,e)!=0||!t.q[e]||FA(t.L,e)!=0)&&(C=xt(t.L,e))),a=!1,x=!1,r=(t.G&Q0)!=0?null:_n(t.L,e),r!=null&&r.startsWith(\"]\")&&(a=E==null,x=!0,E=zo((Xt(1,r.length+1),r.substr(1)),E),r=null),r!=null?C=0:MA(t.L,e)!=null?(P=gt(V(o0(t.L,e),1),0)?\"[!\":\"[\",r=P+Yh(t.L,e)+\"]\",r.length>5&&(r=P+MA(t.L,e).length+\"]\"),gt(V(o0(t.L,e),I1),0)&&(C=-1)):gt(V(o0(t.L,e),1),0)?(r=\"?\",gt(V(o0(t.L,e),I1),0)&&(C=-1)):(K(t.L,e)!=6||st!=null||E!=null&&(!a||(t.G&s8)==0)||C>0||!t.q[e])&&(r=Ci(t.L,e)),tt=0,!r0(t.L,e)&Qe(t.L,e)&&W1(t,-8),r!=null?(tt=t.vb(r),HP(t,Z1(t.R,kt(t.L,e)),X1(t.R,jt(t.L,e)),r,!0),t.s[e]=!0):_G(t,e)&&HG(t,Z1(t.R,kt(t.L,e)),X1(t.R,jt(t.L,e)),e),st!=null&&(t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))+((tt+t.vb(st))/2+1),Qt=X1(t.R,jt(t.L,e))-((t.wb()*4-4)/8|0),HP(t,Ut,Qt,st,!0),t.Cb(t.X)),(t.G&2)!=0&&(E=\"\"+e),E!=null&&(x?t.Cb((t.X*5+1)/6|0):t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))-(tt+t.vb(E))/2,Qt=X1(t.R,jt(t.L,e))-((t.wb()*4-4)/8|0),HP(t,Ut,Qt,E,!0),t.Cb(t.X)),L!=null&&(t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))-(tt+t.vb(L))/2,Qt=X1(t.R,jt(t.L,e))+((t.wb()*4+4)/8|0),Kt=t.C,t.L.O!=1&&(t.G&C0)==0&&W1(t,448),HP(t,Ut,Qt,L,!1),W1(t,Kt),t.Cb(t.X)),W!=null&&(t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))+((tt+t.vb(W))/2+1),Qt=X1(t.R,jt(t.L,e))+((t.wb()*4+4)/8|0),Kt=t.C,W1(t,Bn(t.L,e)?384:448),HP(t,Ut,Qt,W,!0),W1(t,Kt),t.Cb(t.X)),c!=null&&(n=aK(t,e),t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))+.7*t.wb()*w.Math.sin(n),Qt=X1(t.R,jt(t.L,e))+.7*t.wb()*w.Math.cos(n),Kt=t.C,!t.K&&t.L.O!=1&&W1(t,Xh(t,e)),HP(t,Ut,Qt,c,!1),W1(t,Kt),t.Cb(t.X)),C==0&&Ct==0){t.C==-8&&W1(t,-9);return}for(R=h(yt,wt,6,4,15,1),p=0;p<De(t.L,e);p++)for(f=Ot(t.L,e,p),X=0;X<2;X++)z(t.L,X,f)==e&&(Tt=Y0(t.L,z(t.L,X,f),z(t.L,1-X,f)),Tt<eU?(R[0]-=Tt+bA,R[3]+=Tt+Q1):Tt<0?(R[2]+=Tt+bA,R[3]-=Tt):Tt<bA?(R[1]+=Tt,R[2]+=bA-Tt):(R[0]+=Tt-bA,R[1]+=Q1-Tt));if(O(t.L,e)==0?tA(t.L,e)?R[3]-=.2:R[1]-=.2:R[1]-=.1,(st!=null||W!=null)&&(R[1]+=10),(E!=null||L!=null)&&(R[3]+=10),m=\"\",C!=0&&(b=t.vb(\"H\"),v=0,g=t.wb(),C==-1?(m=\"n\",t.Cb((t.X*2+1)/3|0),v=t.vb(m)):C>1&&(m=\"\"+C,t.Cb((t.X*2+1)/3|0),v=t.vb(m)),R[1]<.6||R[3]<.6?(U=X1(t.R,jt(t.L,e)),R[1]<=R[3]?(R[1]+=10,Q=Z1(t.R,kt(t.L,e))+(tt+b)/2):(R[3]+=10,Q=Z1(t.R,kt(t.L,e))-(tt+b)/2-v)):(Q=Z1(t.R,kt(t.L,e)),R[0]<R[2]?(R[0]+=10,U=X1(t.R,jt(t.L,e))-g):(R[2]+=10,U=X1(t.R,jt(t.L,e))+g)),v>0&&(Ut=Q+(b+v)/2,Qt=U+((t.wb()*4+4)/8|0),HP(t,Ut,Qt,m,!0),t.Cb(t.X)),HP(t,Q,U,\"H\",!0)),i=0,Ct!=0){for($=50,s=0,S=0;S<4;S++)y=S>1?S-2:S+2,R[S]<$?(i=S,$=R[S],s=R[y]):R[S]==$&&R[y]>s&&(i=S,s=R[y]);switch(i){case 0:Q=Z1(t.R,kt(t.L,e)),U=X1(t.R,jt(t.L,e))-t.V-tt/2;break;case 1:Q=Z1(t.R,kt(t.L,e))+t.V+tt/2,U=X1(t.R,jt(t.L,e));break;case 2:Q=Z1(t.R,kt(t.L,e)),U=X1(t.R,jt(t.L,e))+t.V+tt/2;break;default:Q=Z1(t.R,kt(t.L,e))-t.V-tt/2,U=X1(t.R,jt(t.L,e))}if(Ct==1)mt(t.$,new QA(Q-t.V,U-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new bu(Q,U,UQ(t,e)?-3:t.p[e]));else{switch(i){case 2:case 0:Ht=2*t.V,Nt=0,Q-=t.V;break;case 1:Ht=0,Nt=2*t.V,U-=t.V;break;default:Ht=0,Nt=2*t.V,U-=t.V}mt(t.$,new QA(Q-t.V,U-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new bu(Q,U,UQ(t,e)?-3:t.p[e])),mt(t.$,new QA(Q+Ht-t.V,U+Nt-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new bu(Q+Ht,U+Nt,UQ(t,e)?-3:t.p[e]))}}t.C==-8&&W1(t,-9)}function u6(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA,T9,F8,QP,UP,tn,h9,xn,en,lr,_f,ht,P1,m8,$f,af,tD;if(e<t.f&&i0(t.p,e)){if(of(t,e,5)){if(T=new wL(t.q),m=new wL(t.q),l=!1,x=!1,a=!1,t.C[e]==6||t.C[e]==7){for(C=0;C<t.e[e];C++)if(ht=t.i[e][C],!!of(t,ht,5))for(ws(t,e,ht)&&(t.C[ht]==8||t.C[ht]==16||t.C[ht]==7&&t.e[ht]+xt(t,ht)==3&&!e2(t,ht))&&mt(T,k1(ht)),T0=0;T0<t.e[ht];T0++)P1=t.i[ht][T0],P1!=e&&of(t,P1,5)&&ws(t,e,P1)&&(t.C[P1]==8||t.C[P1]==16||t.C[P1]==7&&t.e[P1]+xt(t,P1)==3&&!e2(t,P1))&&mt(m,k1(P1));for(y=new Wt(T);y.a<y.c.a.length;)if(s=t1(y).a,t.C[s]==8||t.C[s]==16){x=!0;break}for(g=new Wt(m);g.a<g.c.a.length;)if(c=t1(g).a,t.C[c]==8||t.C[c]==16){a=!0;break}for(j=0;j<T.a.length;j++)for(s1=j;s1<m.a.length;s1++)if(ws(t,(ve(j,T.a.length),T.a[j]).a,(ve(s1,m.a.length),m.a[s1]).a)){l=!0;break}}switch(t.C[e]){case 6:if(m.a.length==0){for(Ke=0,OA=0,d1=0,fe=0,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==7&&t.e[ht]+xt(t,ht)==3&&(++Ke,t.s[ht]>0&&!e2(t,ht)&&++OA,of(t,ht,5)&&++d1,of(t,ht,6)&&++fe);if((Ke==2&&d1>0||Ke==3&&d1==2)&&OA>0&&fe==0)return 80}if(!(T.a.length==0^m.a.length==0)){for(tD=!0,af=!0,j=0;j<t.e[e];j++)ht=t.i[e][j],(t.C[ht]!=6||!dz(t,ht))&&(tD=!1),ws(t,e,ht)&&!(ht<t.f&&i0(t.p,ht))&&(af=!1);if(T.a.length==0&&m.a.length==0&&!tD&&af||T.a.length!=0&&T.a.length!=0&&(!l||!x&&!a))return 78}if(T.a.length!=0&&(m.a.length==0||x))return 63;if(m.a.length!=0&&(T.a.length==0||a))return 64;break;case 7:if(e2(t,e))return 82;if(T.a.length==0&&m.a.length==0)return t.e[e]+xt(t,e)==3?39:76;if(t.e[e]+xt(t,e)==3&&T.a.length==0^m.a.length==0)return 81;if(T.a.length!=0&&(m.a.length==0||x))return 65;if(m.a.length!=0&&(T.a.length==0||a))return 66;if(T.a.length!=0&&m.a.length!=0)return 79;break;case 8:return 59;case 16:return 44}}if(of(t,e,6))switch(t.C[e]){case 6:return 37;case 7:return e2(t,e)?69:t.e[e]+xt(t,e)==3?58:38}}switch(t.C[e]){case 3:if(t.j[e]==0)return 92;break;case 6:if(t.e[e]+xt(t,e)==4)return(t.p&&e<t.f?iA(t.p,e):0)==3?22:(t.p&&e<t.f?iA(t.p,e):0)==4?20:1;if(t.e[e]+xt(t,e)==3){for(gA=0,T9=0,QP=0,xn=0,R=0,C=0;C<t.e[e];C++)ht=t.i[e][C],dt(t,D1(t,e,ht))==2&&(R=t.C[ht]),t.e[ht]+xt(t,ht)==1?(t.C[ht]==8&&++QP,t.C[ht]==16&&++xn):t.C[ht]==7&&(t.e[ht]+xt(t,ht)==3?++T9:t.e[ht]+xt(t,ht)==2&&dt(t,D1(t,e,ht))==2&&++gA);return T9>=2&&gA==0&&R==7?57:QP==2||xn==2?41:(t.p&&e<t.f?iA(t.p,e):0)==4&&R==6?30:R==7||R==8||R==15||R==16?3:2}if(t.e[e]+xt(t,e)==2)return 4;if(t.e[e]+xt(t,e)==1)return 60;break;case 7:for(lr=0,g1=!1,S=0;S<t.e[e];S++)if(ht=t.i[e][S],t.C[ht]==8&&t.e[ht]+xt(t,ht)==1&&++lr,G1(t,e)+xt(t,e)>=3&&(t.C[ht]==15||t.C[ht]==16)){for(h9=0,s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==8&&t.e[P1]+xt(t,P1)==1&&++h9;g1||(g1=h9>=2)}if(t.e[e]+xt(t,e)==4)return e2(t,e)?68:34;if(t.e[e]+xt(t,e)==3){if(G1(t,e)+xt(t,e)>=4){for(b=!1,j=0;j<t.e[e];j++)if(ht=t.i[e][j],dt(t,D1(t,e,ht))==2&&(b=t.C[ht]==7||t.C[ht]==6,t.C[ht]==6))for(s1=0;b&&s1<t.e[ht];s1++)P1=t.i[ht][s1],P1!=e&&(b=!(t.C[P1]==7&&t.e[P1]+xt(t,P1)==3));if(lr==1)return 67;if(lr>=2)return 45;if(b)return 54}if(G1(t,e)+xt(t,e)>=3){for(st=!1,lt=!1,ct=!1,Pt=!1,Ut=!1,$t=!1,A=0,n=0,P=0,r=0,f=0,U=0,j=0;j<t.e[e];j++)if(ht=t.i[e][j],t.C[ht]==6){for(Ut=!0,ht<t.f&&i0(t.p,ht)&&(t.p&&ht<t.f?iA(t.p,ht):0)==6&&($t=!0),P=0,r=0,f=0,U=0,OA=0,p=0,s1=0;s1<t.e[ht];s1++){if(P1=t.i[ht][s1],v=D1(t,ht,P1),dt(t,v)==2&&(t.C[P1]==8||t.C[P1]==16)&&(st=!0),(dt(t,v)==2||v<t.g&&Re(t.p,v)&&(t.C[P1]==6||t.C[P1]==7&&BG(t,P1)==1))&&(A=t.C[P1]),dt(t,v)==3&&(n=t.C[P1]),t.C[P1]==7&&t.e[P1]+xt(t,P1)==3){for(t.s[P1]==1&&++OA,of(t,ht,6)&&++p,Q=0,G0=0;G0<t.e[P1];G0++)m8=t.i[P1][G0],t.C[m8]==8&&++Q;Q<2&&++r}t.C[P1]==7&&t.e[P1]+xt(t,P1)==2&&(dt(t,v)==2||v<t.g&&Re(t.p,v))&&++P,P1<t.f&&i0(t.p,P1)&&(t.C[P1]==8&&++f,t.C[P1]==16&&++U)}A==7&&(r==2&&P==0&&OA>0&&p==0&&t.e[ht]+xt(t,ht)<4&&(lt=!0),r==3&&(ct=!0))}else if(t.C[ht]==7){for(i=0,D=0,L=0,s1=0;s1<t.e[ht];s1++)if(P1=t.i[ht][s1],v=D1(t,ht,P1),dt(t,v)==2){if(t.C[P1]==6){for(G0=0;G0<t.e[P1];G0++)m8=t.i[P1][G0],m8!=e&&(t.C[m8]==7?++i:t.C[m8]==8?++D:t.C[m8]==16&&++L);i==0&&D==0&&L==0&&!$t&&(Pt=!0)}t.C[P1]==7&&!$t&&(Pt=!0)}}if(Ut){if(n==7&&(g1=!0),lt)return 55;if(ct)return 56;if(!st&&!g1&&(f==0&&U==0&&$t||A==6||A==7||A==15||n==6))return 40}if(!g1&&(st||Pt))return 10}}if(t.e[e]+xt(t,e)==2){if(G1(t,e)+xt(t,e)==4){for($=!1,j=0;!$&&j<t.e[e];j++)ht=t.i[e][j],$=dt(t,D1(t,e,ht))==3;return $?61:53}if(G1(t,e)+xt(t,e)==3){for(Qt=!1,W=!1,j=0;j<t.e[e];j++)ht=t.i[e][j],dt(t,D1(t,e,ht))==2&&(Qt=t.C[ht]==8&&lr==1,W=t.C[ht]==6||t.C[ht]==7);if(Qt&&!W)return 46;if(W)return 9}if(G1(t,e)+xt(t,e)>=2){for(Kt=!1,j=0;j<t.e[e];j++)if(ht=t.i[e][j],t.C[ht]==16){for(_f=0,s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==8&&t.e[P1]+xt(t,P1)==1&&++_f;Kt=_f==1}if(Kt)return 48;if(!g1)return 62}}if(g1)return 43;if(t.e[e]+xt(t,e)==1){for(Ct=!1,et=!1,j=0;!Ct&&!et&&j<t.e[e];j++)if(ht=t.i[e][j],Ct=dt(t,D1(t,e,ht))==3,t.C[ht]==7&&t.e[ht]+xt(t,ht)==2)for(s1=0;!et&&s1<t.e[ht];s1++)P1=t.i[ht][s1],et=t.C[P1]==7&&t.e[P1]+xt(t,P1)==2||t.C[P1]==6&&t.e[P1]+xt(t,P1)==3;if(Ct)return 42;if(et)return 47}return 8;case 8:if(t.e[e]+xt(t,e)==3)return 49;if(t.e[e]+xt(t,e)==2){if(G1(t,e)+xt(t,e)==3)return 51;for(b0=0,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==1&&++b0;return b0+xt(t,e)==2?70:6}if(t.j[e]<=1){for(F8=0,tn=0,en=0,Rt=t.e[e]-t.j[e]+xt(t,e)>0,X=!1,E=!1,e1=!1,Nt=!1,Lt=!1,Tt=!1,Ht=!1,F1=!1,St=!1,y0=!1,j1=!1,j=0;j<t.e[e]&&!(Rt||X||E||e1||Nt||Lt||Tt||Ht||F1||St||y0||j1);j++){if(ht=t.i[e][j],t.C[ht]==6||t.C[ht]==7||t.C[ht]==16)for(s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==7&&t.e[P1]+xt(t,P1)==2&&++F8,t.C[P1]==8&&t.e[P1]+xt(t,P1)==1&&++tn,t.C[P1]==16&&t.e[P1]+xt(t,P1)==1&&++en;Rt=t.C[ht]==1,t.C[ht]==6&&(X=tn==2,E=dt(t,D1(t,e,ht))==2,e1=dt(t,D1(t,e,ht))==1&&tn==1),t.C[ht]==7&&(Nt=dt(t,D1(t,e,ht))==2,dt(t,D1(t,e,ht))==1&&tn==1&&(Lt=t.e[ht]+xt(t,ht)==2||G1(t,ht)+xt(t,ht)==3,Tt=G1(t,ht)+xt(t,ht)==4),Ht=tn>=2),t.C[ht]==16&&(F1=en==1,St=dt(t,D1(t,e,ht))==1||dt(t,D1(t,e,ht))==2&&tn+F8>1,y0=dt(t,D1(t,e,ht))==2&&tn+F8==1),j1=t.C[ht]==15||t.C[ht]==17}if(e1||Lt||Rt)return 35;if(X||Ht||Tt||F1||St||j1)return 32;if(E||Nt||y0)return 7}break;case 9:if(t.j[e]==1)return 11;if(t.j[e]==0)return 89;break;case 11:if(t.j[e]==0)return 93;break;case 12:if(t.j[e]==0)return 99;break;case 14:return 19;case 15:if(t.e[e]+xt(t,e)==4)return 25;if(t.e[e]+xt(t,e)==3)return 26;if(t.e[e]+xt(t,e)==2)return 75;break;case 16:if(t.e[e]+xt(t,e)==3||t.e[e]+xt(t,e)==4){for(UP=0,en=0,tt=!1,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==6&&dt(t,D1(t,e,ht))==2&&(tt=!0),(t.j[ht]==1&&t.C[ht]==8||t.e[ht]+xt(t,ht)==2&&t.C[ht]==7)&&++UP,t.j[ht]==1&&t.C[ht]==16&&++en;return t.e[e]+xt(t,e)==3&&UP==2&&tt||t.e[e]+xt(t,e)==4?18:UP>0&&en>0||UP==2&&!tt?73:17}if(t.e[e]+xt(t,e)==2){for(b1=!1,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==8&&dt(t,D1(t,e,ht))==2&&(b1=!0);return b1?74:15}if(t.e[e]+xt(t,e)==1){for($f=0,tt=!1,j=0;j<t.e[e];j++){for(ht=t.i[e][j],s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==16&&t.e[P1]+xt(t,P1)==1&&++$f;t.C[ht]==6&&dt(t,D1(t,e,ht))==2&&(tt=!0)}return tt&&$f!=2?16:72}break;case 17:if(t.j[e]==4){for(QP=0,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==8&&++QP;if(QP==4)return 77}if(t.j[e]==1)return 12;if(t.j[e]==0)return 90;break;case 19:if(t.j[e]==0)return 94;break;case 20:if(t.j[e]==0)return 96;break;case 26:if(t.j[e]==0){if(t.s[e]==2)return 87;if(t.s[e]==3)return 88}break;case 29:if(t.j[e]==0){if(t.s[e]==1)return 97;if(t.s[e]==2)return 98}break;case 30:if(t.j[e]==0)return 95;break;case 35:if(t.j[e]==1)return 13;if(t.j[e]==0)return 91;break;case 53:if(t.j[e]==1)return 14}return 0}function Q6(){Q6=B1,Ul=B(d(NA,1),a0,6,14,[524290,524292,524297,524301,589826,589827,589828,589829,589832,589833,589837,589838,688130,688131,688132,688137,688141,819202,819203,819204,819205,819208,819209,1114114,1114115,1114116,1114120,1212420,1343492,1343496,1638402,1638403,17367042,17367043,17367044,17367045,17367048,17367049,17367053,17367054,17465346,1074266116,1208483842,1208483844,1208549378,1208549379,1208549380,1208549384,1208549388,1409810434,1409875970,1409875971,1409875972,1409875976,1409974274,1409974280,1409974284,1678311426,1678311427,1678311428,1678311432,1678311436,1678409730,1678409731,1678409732,1678540802,1678540803,1678540804,1678540808,2282291202,2282291203,2282389506,2282389507,2282520578,2282520579,2483617794,2483617795,2483716098,2483716099,2752675842,3356033026,3557359618,3557457922,3557588994,34510798850,34510798851,34510798852,34510798856,34712125442,34712125443,34712125444,34712125448,34712223746,34712223747,34712223748,34980560898,34980560899,34980659202,35568287746,35568287747,35568287748,35568287752,35568386050,35568386051,35568386052,35568517122,35568517123,35568517124,35568517128,35568812034,35568812035,35568910338,35568910339,35568910350,35569336322,35585064962,35585064963,35585064964,35585064968,35769548802,35769614338,35769712642,35769843714,35786391554,uM,QM,UM,oM,LM,sM,yM,lM,TM,hM,cM,wM,gM,3437652377603,dM,BM,4674334294019,vM,FM,4674602827778,mM,kM,bM,RM,5086651154435,jM,5086651252739,pM,5086651252744,CM,5086919589896,MM,5086919819266,HM,VM,EM,5636675633154,{l:589826,m:73760,h:4},{l:589827,m:73760,h:4},{l:688130,m:73760,h:4},{l:819202,m:73760,h:4},{l:65538,m:73764,h:4},{l:65539,m:73764,h:4},{l:589826,m:172064,h:4},{l:589827,m:172064,h:4},{l:688130,m:172064,h:4},{l:819202,m:172064,h:4},{l:819203,m:172064,h:4},{l:65538,m:172068,h:4},{l:65539,m:172068,h:4},{l:589826,m:172112,h:4},{l:589827,m:172112,h:4},{l:688130,m:172112,h:4},{l:819202,m:172112,h:4},{l:65538,m:172116,h:4},{l:163842,m:172116,h:4},{l:589826,m:303136,h:4},{l:688130,m:303136,h:4},{l:819202,m:303136,h:4},{l:65538,m:303140,h:4},{l:589826,m:303184,h:4},{l:688130,m:303184,h:4},{l:819202,m:303184,h:4},{l:65538,m:303188,h:4},SM,qM,IM,xM,NM,OM,GM,{l:688130,m:590224,h:4},{l:819202,m:590224,h:4},JM,zM,YM,KM,XM,ZM,WM,_M,{l:688135,m:590416,h:4},$M,{l:1212430,m:590416,h:4},{l:65538,m:598052,h:4},{l:65538,m:598100,h:4},{l:65539,m:598100,h:4},{l:163842,m:598100,h:4},{l:163843,m:598100,h:4},aM,tH,eH,{l:688131,m:598304,h:4},AH,nH,PH,rH,iH,{l:589826,m:688672,h:4},fH,DH,uH,QH,{l:589827,m:590112,h:336},UH,oH,LH,sH,yH,lH,TH,hH,cH,{l:688130,m:819536,h:400},wH,gH,dH,{l:589831,m:590112,h:592},BH,vH,FH,mH,kH,bH,{l:819207,m:819600,h:592},RH,jH,pH,{l:589832,m:1212816,h:592},{l:688136,m:1212816,h:592},CH,MH,HH,VH,EH,{l:589826,m:819488,h:8480},SH,qH,IH,xH,{l:819208,m:1213008,h:8480},NH,OH,{l:688130,m:590160,h:8484},{l:589826,m:598304,h:8484},GH,{l:819202,m:598304,h:8484}]),Kf=B(d(Ee,1),PA,6,15,[-.1899999976158142,1.2699999809265137,-.7009999752044678,2.690999984741211,-.22699999809265137,Yp,.10599999874830246,-.47600001096725464,-.44699999690055847,-.19099999964237213,-.3330000042915344,.0860000029206276,.24699999392032623,-.06199999898672104,.01600000075995922,.3869999945163727,.23499999940395355,-.4320000112056732,-.902999997138977,.38999998569488525,.5809999704360962,4.52400016784668,-.6349999904632568,-.2800000011920929,.7699999809265137,-.05000000074505806,1.0870000123977661,.19200000166893005,.19599999487400055,-.5199999809265137,.5419999957084656,.3630000054836273,.7919999957084656,.5920000076293945,.9639999866485596,KH,-.6850000023841858,-.3149999976158142,-.4129999876022339,-.5950000286102295,.2199999988079071,-1.4320000410079956,-2.253999948501587,.4399999976158142,-.27000001072883606,-.13300000131130219,-.26899999380111694,.2669999897480011,.5720000267028809,-.5680000185966492,.17399999499320984,-.1850000023841858,-.23499999940395355,eV,AV,-.34200000762939453,-.3479999899864197,-.43700000643730164,-.8040000200271606,-.41200000047683716,-.2150000035762787,-.625,-.8309999704360962,.4970000088214874,-.4309999942779541,-1.3309999704360962,.5070000290870667,-.6320000290870667,-.5989999771118164,-.15600000321865082,-.3529999852180481,-.164000004529953,-.4410000145435333,-.4970000088214874,-1.059999942779541,.11500000208616257,-.22499999403953552,-.15399999916553497,-.03099999949336052,-1.5740000009536743,-1.093000054359436,_H,-.44999998807907104,-.5559999942779541,AV,2.384000062942505,1.75,-1.6660000085830688,-1.065999984741211,1.3270000219345093,.8029999732971191,-1.5049999952316284,-2.5369999408721924,eV,.14900000393390656,.5210000276565552,2.9049999713897705,-.25200000405311584,.8600000143051147,.3610000014305115,.40299999713897705,.004999999888241291,1.1460000276565552,.9359999895095825,-.30000001192092896,.20900000631809235,-.5830000042915344,-.024000000208616257,-.009999999776482582,.6110000014305115,.4860000014305115,.8619999885559082,-.03500000014901161,-.5960000157356262,1.1610000133514404,1.6469999551773071,.843999981880188,.125,.1420000046491623,-.17100000381469727,.44200000166893005,.08799999952316284,3.065999984741211,1.6519999504089355,nV,-.017999999225139618,.023000000044703484,.0729999989271164,.2540000081062317,.5540000200271606,.5950000286102295,-.4059999883174896,-.6370000243186951,-.17399999499320984,-.10100000351667404,-.5429999828338623,-2.4059998989105225,-3.2920000553131104,-.05299999937415123,-.19300000369548798,$6,-1.2610000371932983,-.656000018119812,-.7300000190734863,-.9380000233650208,.12800000607967377,1.1540000438690186,.24199999868869781,-.5289999842643738,-.27799999713897705,-.8019999861717224,.9120000004768372,-1.38100004196167,.46299999952316284,1.0740000009536743,-.628000020980835,-.9620000123977661,-1.8320000171661377,-1.4989999532699585,-2.115999937057495,-2.2070000171661377,-1.3170000314712524,2.500999927520752,-.8489999771118164,ZH,-.621999979019165,2.121999979019165,-2.2260000705718994,.9129999876022339,-2.259000062942505,-1.25,1.3940000534057617,-1.4019999504089355,2.072999954223633,-2.9570000171661377,.29100000858306885,-3.4760000705718994,-2.7269999980926514,-3.131999969482422,-2.119999885559082,-.7250000238418579,-.296999990940094,.08299999684095383,.34700000286102295,-1.4249999523162842,-1.659999966621399,-1.281999945640564,-1.2649999856948853,.718999981880188,.1379999965429306,1.3020000457763672,.859000027179718,1.3589999675750732,.6589999794960022,-.9399999976158142,.8999999761581421,.3190000057220459,-2.571000099182129,1.1089999675750732,.972000002861023,1.652999997138977,2.6019999980926514,.7289999723434448,1.065999984741211,1.0670000314712524,-.3109999895095825,.03099999949336052,nV,-.6809999942779541,-1.2580000162124634,wC,-3.0959999561309814,-.2280000001192093,1.9329999685287476,.11900000274181366,2.1080000400543213,.11299999803304672,1.628000020980835,1.3079999685287476,3.3359999656677246,.7540000081062317,-.4650000035762787,-.3970000147819519,.07699999958276749,-.4790000021457672,-.15299999713897705,.14100000262260437,2.134999990463257,.23399999737739563,.460999995470047,.6700000166893005,-.3610000014305115,-1.0390000343322754,-.4830000102519989,.13699999451637268,-.7680000066757202,-.5109999775886536,3.4240000247955322,-.8550000190734863,-.5849999785423279,-1.5670000314712524,3.3429999351501465,1.840000033378601,.3889999985694885,1.121999979019165,a6,1.3350000381469727,.3659999966621399,-.5569999814033508,.4320000112056732,.20399999618530273,.8820000290870667,.4659999907016754,-.4580000042915344,.40400001406669617,.6570000052452087,1.1150000095367432,1.9759999513626099,1.7860000133514404,-.035999998450279236,-1.0499999523162842,1.0449999570846558,.04399999976158142,1.0329999923706055,-1.0800000429153442,2.5390000343322754,2.234999895095825,K6,3.121000051498413,3.931999921798706,2.75])}function gp(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA,T9,F8,QP,UP,tn,h9,xn,en,lr,_f,ht,P1,m8,$f,af,tD,lc,Tc,hc,cc,wc,gc,dc,Bc,kl,bl,vc,Fc,mc,kc,bc,Rc,An,jc,pc,Cc,Mc,Hc,Vc,Ec,Sc,qc,Ic,xc,NP,Nc,k8,O2,G2,ZE,Rl,WE,_E,$E,aE,r1,Oc,tS,eS,AS,Tr,nS,OP,J2,jl,xU,PS,oP,pl,rS,NU,iS,OU,fS,GU;if(SL(e),e.d=null,!(A==null||0>=A.length)){if(t.g=e,pl=8,n!=null&&(P<0||P>=n.length)&&(n=null),$o(t,A,0),f=nt(t,4),C=nt(t,4),f>8&&(pl=f,f=C),f==0){je(t.g,nt(t,1)==1);return}for(D=nt(t,f),Q=nt(t,C),aE=nt(t,f),AS=nt(t,f),tS=nt(t,f),st=nt(t,f),y=0;y<D;y++)W9(t.g,6);for(Ke=0;Ke<aE;Ke++)K0(t.g,nt(t,f),7);for(gA=0;gA<AS;gA++)K0(t.g,nt(t,f),8);for(ht=0;ht<tS;ht++)K0(t.g,nt(t,f),nt(t,8));for(gc=0;gc<st;gc++)E0(t.g,nt(t,f),nt(t,4)-8);for(ct=1+Q-D,Qt=nt(t,4),j=0,Be(t.g,0,0),Ie(t.g,0,0),hP(t.g,0,0),Nt=n!=null&&n[P]>=39,oP=0,NU=0,OU=0,GU=0,Ct=!1,$t=!1,Nt&&(n.length>2*D-2&&n[2*D-2]==39||n.length>3*D-3&&n[3*D-3]==39?($t=!0,Ct=n.length==3*D-3+9,NP=Ct?3*D-3:2*D-2,b=86*(n[NP+1]-40)+n[NP+2]-40,oP=w.Math.pow(10,b/2e3-1),NP+=2,rS=86*(n[NP+1]-40)+n[NP+2]-40,NU=w.Math.pow(10,rS/1500-1),NP+=2,iS=86*(n[NP+1]-40)+n[NP+2]-40,OU=w.Math.pow(10,iS/1500-1),Ct&&(NP+=2,fS=86*(n[NP+1]-40)+n[NP+2]-40,GU=w.Math.pow(10,fS/1500-1))):Ct=n.length==3*D-3),t._b()&&Ct&&(n=null,Nt=!1),An=1;An<D;An++){if(Rt=nt(t,Qt),Rt==0){Nt&&(Be(t.g,An,t.g.J[0].a+8*(n[An*2-2]-83)),Ie(t.g,An,t.g.J[0].b+8*(n[An*2-1]-83)),Ct&&hP(t.g,An,t.g.J[0].c+8*(n[2*D-3+An]-83))),++ct;continue}j+=Rt-1,Nt&&(Be(t.g,An,kt(t.g,j)+n[An*2-2]-83),Ie(t.g,An,jt(t.g,j)+n[An*2-1]-83),Ct&&hP(t.g,An,vA(t.g,j)+(n[2*D-3+An]-83))),O0(t.g,j,An,1)}for(Ec=0;Ec<ct;Ec++)O0(t.g,nt(t,f),nt(t,f),1);for(Nc=h(rt,ft,6,Q,16,1),X=0;X<Q;X++)switch(tt=nt(t,2),tt){case 0:Nc[X]=!0;break;case 2:w0(t.g,X,2);break;case 3:w0(t.g,X,4)}for(i=nt(t,f),Sc=0;Sc<i;Sc++)if(s=nt(t,f),pl==8)Tr=nt(t,2),Tr==3?(He(t.g,s,1,0),ce(t.g,s,1,!1)):ce(t.g,s,Tr,!1);else switch(Tr=nt(t,3),Tr){case 4:ce(t.g,s,1,!1),He(t.g,s,1,nt(t,3));break;case 5:ce(t.g,s,2,!1),He(t.g,s,1,nt(t,3));break;case 6:ce(t.g,s,1,!1),He(t.g,s,2,nt(t,3));break;case 7:ce(t.g,s,2,!1),He(t.g,s,2,nt(t,3));break;default:ce(t.g,s,Tr,!1)}for(pl==8&&nt(t,1)==0&&(t.g.L=!0),r=nt(t,C),qc=0;qc<r;qc++)if(p=nt(t,C),l1(t.g,p)==1)switch(Tr=nt(t,3),Tr){case 4:A8(t.g,p,1,!1),U8(t.g,p,1,nt(t,3));break;case 5:A8(t.g,p,2,!1),U8(t.g,p,1,nt(t,3));break;case 6:A8(t.g,p,1,!1),U8(t.g,p,2,nt(t,3));break;case 7:A8(t.g,p,2,!1),U8(t.g,p,2,nt(t,3));break;default:A8(t.g,p,Tr,!1)}else A8(t.g,p,nt(t,2),!1);for(je(t.g,nt(t,1)==1),L=null,xU=null,Oc=0;nt(t,1)==1;)switch(Ht=Oc+nt(t,4),Ht){case 0:for(r1=nt(t,f),Ic=0;Ic<r1;Ic++)s=nt(t,f),T1(t.g,s,I1,!0);break;case 1:for(r1=nt(t,f),xc=0;xc<r1;xc++)s=nt(t,f),WE=nt(t,8),jr(t.g,s,WE);break;case 2:for(r1=nt(t,C),T9=0;T9<r1;T9++)nt(t,C);break;case 3:for(r1=nt(t,f),F8=0;F8<r1;F8++)s=nt(t,f),T1(t.g,s,C0,!0);break;case 4:for(r1=nt(t,f),QP=0;QP<r1;QP++)s=nt(t,f),jl=M1(nt(t,4),3),T1(t.g,s,jl,!0);break;case 5:for(r1=nt(t,f),UP=0;UP<r1;UP++)s=nt(t,f),U=M1(nt(t,2),1),T1(t.g,s,U,!0);break;case 6:for(r1=nt(t,f),tn=0;tn<r1;tn++)s=nt(t,f),T1(t.g,s,1,!0);break;case 7:for(r1=nt(t,f),h9=0;h9<r1;h9++)s=nt(t,f),b0=M1(nt(t,4),7),T1(t.g,s,b0,!0);break;case 8:for(r1=nt(t,f),xn=0;xn<r1;xn++){for(s=nt(t,f),m=nt(t,4),c=h(F,k,6,m,15,1),k8=0;k8<m;k8++)g=nt(t,8),c[k8]=g;sh(t.g,s,c)}break;case 9:for(r1=nt(t,C),en=0;en<r1;en++)p=nt(t,C),jl=nt(t,2)<<7,Ge(t.g,p,jl,!0);break;case 10:for(r1=nt(t,C),lr=0;lr<r1;lr++)p=nt(t,C),$=nt(t,5),Ge(t.g,p,$,!0);break;case 11:for(r1=nt(t,f),_f=0;_f<r1;_f++)s=nt(t,f),T1(t.g,s,ge,!0);break;case 12:for(r1=nt(t,C),P1=0;P1<r1;P1++)p=nt(t,C),et=nt(t,8)<<9,Ge(t.g,p,et,!0);break;case 13:for(r1=nt(t,f),m8=0;m8<r1;m8++)s=nt(t,f),nS=M1(nt(t,3),14),T1(t.g,s,nS,!0);break;case 14:for(r1=nt(t,f),$f=0;$f<r1;$f++)s=nt(t,f),$E=M1(nt(t,5),17),T1(t.g,s,$E,!0);break;case 15:case 31:Oc+=16;break;case 16:for(r1=nt(t,f),af=0;af<r1;af++)s=nt(t,f),J2=M1(nt(t,3),22),T1(t.g,s,J2,!0);break;case 17:for(r1=nt(t,f),tD=0;tD<r1;tD++)s=nt(t,f),XA(t.g,s,nt(t,4));break;case 18:for(r1=nt(t,f),Rl=nt(t,4),lc=0;lc<r1;lc++){for(s=nt(t,f),Ut=nt(t,Rl),O2=h(q,I,6,Ut,15,1),k8=0;k8<Ut;k8++)O2[k8]=nt(t,7)<<24>>24;u8(t.g,s,rn((G2=O2,c0(),G2)))}break;case 19:for(r1=nt(t,f),Tc=0;Tc<r1;Tc++)s=nt(t,f),lt=M1(nt(t,3),25),T1(t.g,s,lt,!0);break;case 20:for(r1=nt(t,C),hc=0;hc<r1;hc++)p=nt(t,C),J2=nt(t,3)<<17,Ge(t.g,p,J2,!0);break;case 21:for(r1=nt(t,f),cc=0;cc<r1;cc++)s=nt(t,f),Ne(t.g,s,nt(t,2)<<4);break;case 22:for(r1=nt(t,f),wc=0;wc<r1;wc++)s=nt(t,f),T1(t.g,s,Ur,!0);break;case 23:for(r1=nt(t,C),dc=0;dc<r1;dc++)p=nt(t,C),Ge(t.g,p,h8,!0);break;case 24:for(r1=nt(t,C),Bc=0;Bc<r1;Bc++)p=nt(t,C),U=nt(t,2)<<21,Ge(t.g,p,U,!0);break;case 25:for(kl=0;kl<D;kl++)nt(t,1)==1&&dP(t.g,kl,!0);break;case 26:for(r1=nt(t,C),L=h(F,k,6,r1,15,1),bl=0;bl<r1;bl++)L[bl]=nt(t,C);break;case 27:for(r1=nt(t,f),vc=0;vc<r1;vc++)s=nt(t,f),T1(t.g,s,Pe,!0);break;case 28:for(r1=nt(t,C),Fc=0;Fc<r1;Fc++)w0(t.g,nt(t,C),16);break;case 29:for(r1=nt(t,f),mc=0;mc<r1;mc++)s=nt(t,f),OA=M1(nt(t,2),30),T1(t.g,s,OA,!0);break;case 30:for(r1=nt(t,f),kc=0;kc<r1;kc++)s=nt(t,f),J2=M1(nt(t,7),32),T1(t.g,s,J2,!0);break;case 32:for(r1=nt(t,f),bc=0;bc<r1;bc++)s=nt(t,f),PS=M1(nt(t,2),44),T1(t.g,s,PS,!0);break;case 33:for(r1=nt(t,f),Rc=0;Rc<r1;Rc++)s=nt(t,f),y0=M1(nt(t,5),39),T1(t.g,s,y0,!0);break;case 34:for(r1=nt(t,f),jc=0;jc<r1;jc++)s=nt(t,f),T1(t.g,s,ZQ,!0);break;case 35:for(r1=nt(t,C),pc=0;pc<r1;pc++)p=nt(t,C),Ge(t.g,p,Ef,!0);break;case 36:for(r1=nt(t,C),Cc=0;Cc<r1;Cc++)p=nt(t,C),W=nt(t,2)<<5,Ge(t.g,p,W,!0);break;case 37:for(r1=nt(t,C),Mc=0;Mc<r1;Mc++)p=nt(t,C),W=nt(t,1)==0?32:64,w0(t.g,p,W);break;case 38:for(r1=nt(t,f),Pt=nt(t,3),xU=h(F,k,6,D,15,1),Hc=0;Hc<r1;Hc++)s=nt(t,f),Tt=nt(t,Pt),xU[s]=Tt;break;case 39:for(r1=nt(t,f),Vc=0;Vc<r1;Vc++)s=nt(t,f),eS=M1(nt(t,4),47),T1(t.g,s,eS,!0);break;case 40:for(r1=nt(t,f),Rl=nt(t,6),_E=nt(t,16),fe=0;fe<r1;fe++){for(s=nt(t,f),Ut=nt(t,Rl),O2=new V0,k8=0;k8<Ut;k8++)Oe(O2,nt(t,_E)&w1);u8(t.g,s,O2.a)}}if(Ff(new cr(t.g),Nc,!1),L!=null)for(x=L,a=0,E=x.length;a<E;++a)p=x[a],w0(t.g,p,l1(t.g,p)==2?4:2);if(n==null&&!t.i&&A.length>t.e+1&&(A[t.e+1]==32||A[t.e+1]==9)&&(n=A,P=t.e+2),n!=null)try{if(n[P]==33||n[P]==35){for($o(t,n,P+1),Ct=nt(t,1)==1,$t=nt(t,1)==1,OP=2*nt(t,4),S=1<<OP,T0=0,p=0,l=1;l<D;l++)p<Q&&z(t.g,1,p)==l?(T0=z(t.g,0,p++),s1=1):(T0=0,s1=8),b1=s1*(nt(t,OP)+1-(S>>1)),e1=s1*(nt(t,OP)+1-(S>>1)),Be(t.g,l,kt(t.g,T0)+b1),Ie(t.g,l,jt(t.g,T0)+e1),Ct&&hP(t.g,l,vA(t.g,T0)+s1*(nt(t,OP)+1-(S>>1)));if(n[P]==35){for(d1=0,G0=h(F,k,6,D,15,1),T=0;T<D;T++)d1+=G0[T]=xt(t.g,T);for(s=0;s<D;s++)for(fe=0;fe<G0[s];fe++)b0=W9(t.g,1),O0(t.g,s,b0,1),Be(t.g,b0,kt(t.g,s)+(nt(t,OP)+1-(S>>1))),Ie(t.g,b0,jt(t.g,s)+(nt(t,OP)+1-(S>>1))),Ct&&hP(t.g,b0,vA(t.g,s)+(nt(t,OP)+1-(S>>1))),xU!=null&&(xU[s]&1<<fe)!=0&&dP(t.g,b0,!0);D+=d1,Q+=d1}if(R=Ct?1.5:(Y1(),Y1(),wn),v=wP(t.g,D,Q,R),$t)for(oP=XN(nt(t,OP),S),NU=oP*_T(nt(t,OP),S),OU=oP*_T(nt(t,OP),S),Ct&&(GU=oP*_T(nt(t,OP),S)),s1=oP/v,s=0;s<D;s++)Be(t.g,s,NU+s1*kt(t.g,s)),Ie(t.g,s,OU+s1*jt(t.g,s)),Ct&&hP(t.g,s,GU+s1*vA(t.g,s));else for(oP=1.5,s1=oP/v,s=0;s<D;s++)Be(t.g,s,s1*kt(t.g,s)),Ie(t.g,s,s1*jt(t.g,s)),Ct&&hP(t.g,s,s1*vA(t.g,s))}else if(Ct&&!$t&&oP==0&&(oP=1.5),oP!=0&&t.g.r!=0){for(v=0,p=0;p<t.g.r;p++)Lt=kt(t.g,z(t.g,0,p))-kt(t.g,z(t.g,1,p)),j1=jt(t.g,z(t.g,0,p))-jt(t.g,z(t.g,1,p)),St=Ct?vA(t.g,z(t.g,0,p))-vA(t.g,z(t.g,1,p)):0,v+=w.Math.sqrt(Lt*Lt+j1*j1+St*St);for(v/=t.g.r,F1=oP/v,s=0;s<t.g.q;s++)Be(t.g,s,kt(t.g,s)*F1+NU),Ie(t.g,s,jt(t.g,s)*F1+OU),Ct&&hP(t.g,s,vA(t.g,s)*F1+GU)}}catch(b8){if(b8=t0(b8),Zt(b8,19))g1=b8,Z9(g1,(x1(),gi),\"\"),\"\"+g1+rn((ZE=A,c0(),ZE))+rn((G2=n,G2)),n=null,Ct=!1;else throw At(b8)}if(Kt=n!=null&&!Ct,iZ(t),Kt||t._b())for(ut(t.g,7),p=0;p<t.g.g;p++)dt(t.g,p)==2&&!WP(t.g,p)&&qe(t.g,p)==0&&n3(t.g,p);if(sD(t.g,0),!Kt&&t._b())try{t.ac(t.g),Kt=!0}catch(b8){if(b8=t0(b8),Zt(b8,19))g1=b8,Z9(g1,(x1(),gi),\"\"),\"\"+g1+rn((G2=A,c0(),G2));else throw At(b8)}Kt?(Lf(t.g),H3(t.g)):Ct||sD(t.g,0)}}function kf(){kf=B1,sr=B(d(it,1),Dt,2,6,[\"QM@HzAmdqjF@\",\"RF@Q``\",\"qC`@ISTAlQE`\",\"`J@H\",\"QM@HzAmdqbF@\",\"qC`@ISTAlQEhqPp@\",\"sJP@DiZhAmQEb\",\"RF@QPvR@\",\"QM@HzA@\",\"qC`@ISTAlQEhpPp@\",\"qC`@Qz`MbHl\",\"sJP@DiZhAmQEcFZF@\",\"RFPDXH\",\"qC`@IVtAlQE`\",\"QM@HvAmdqfF@\",\"sGP@DiVj`FsDVM@\",\"`L@H\",\"sJP@DizhAmQEcFBF@\",\"sJP@DjvhAmQEb\",\"sFp@DiTt@@AlqEcP\",\"sGP@LdbMU@MfHlZ\",\"QMHAIhD\",\"QM@HzAy@\",\"sJP@DkVhAmQEb\",\"sNp@DiUjj@[\\\\QXu`\",\"sJP@DiZhAmQEcFBF@\",\"sGP@DjVj`FsDVM@\",\"RFPDTH\",\"RG@DXOH@\",\"sGP@Divj`FsDVMcAC@\",\"sGP@Dj}j`FsDVM@\",\"qC`@Qz`MbHmFRF@\",\"sNp@LdbJjj@[\\\\QXu`\",\"QMHAIhGe@\",\"QM@HzAyd`\",\"QM`AIhD\",\"qC`@ISTA@\",\"sGP@DkUj`FsDVM@\",\"qC`@IVtAlQEhqPp@\",\"sNp@DiUjj@[\\\\QXuqea`@\",\"KAx@@IRjuUPAlHPfES\\\\\",\"QM`BN`P\",\"sJP@DjZhAmQEcFJF@\",\"Hid@@DjU^nBBH@FtaBXUMp`\",\"sNp@Diujj@[\\\\QXuq`a`@\",\"sJP@DjvhAmQEcFZF@\",\"sJP@DjZhAmQEcFFF@\",\"sOp@DjWkB@@FwDVM\\\\YhX@\",\"sNp@Dj}Zj@[\\\\QXu`\",\"sNp@DiWjj@[\\\\QXuq`a`@\",\"sOp@DjWkB@@D\",\"KAx@@ITouUPAlHPfES\\\\\",\"KAx@@YIDTjjh@vDHSBin@\",\"sNp@DkUZj@[\\\\QXu`\",\"RFPDXOH@\",\"QM`BN`^L`\",\"qC`@ISTAy@\",\"sGP@LdbMU@MfHl[FVF@\",\"qCb@AIZ`H\",\"KAx@@IRjuUPAlHPfES]FFa`@\",\"KAx@@ITnuUPAlHPfES\\\\\",\"HiD@@DiUVjj`AmHPfES\\\\H\",\"sNp@DjUjj@[\\\\QXu`\",\"sJP@DkVhAmQEcFJF@\",\"sGP@DjVj`FsDVMcCC@\",\"qC`@Qz`MbHmFBF@\",\"sJP@DkfhAmQEb\",\"qC`@IVtAlQEhsPp@\",\"sGP@Djuj`FsDVM@\",\"sGP@Dj}j`FsDVMcMC@\",\"sJP@DiZhA@\",\"KAx@@ISjuUPAlHPfES]F@a`@\",\"sJP@DjZhAmQEcFRF@\",\"KAx@@IRnuUPAlHPfES]F@a`@\",\"HiD@@DjWvjj`AmHPfES\\\\H\",\"QMHAIhGd@\",\"sNp@DiUjj@[\\\\QXuq`a`@\",\"KAx@@IVjmUPAlHPfES\\\\\",\"sGP@DjVj`FsDVMcMC@\",\"QM`AIhGe@\",\"HiD@@LdbJRjjh@[RDIaTwB\",\"qCp@AIZ`H\",\"sGP@LdbMU@MfHl[FFF@\",\"QMDARVA@\",\"sNp@LdbJjj@[\\\\QXuqba`@\",\"sNp@LdbJjj@[\\\\QXuqca`@\",\"sGP@Dkej`FsDVM@\",\"qCb@AIZ`OI@\",\"HaD@@DjUZxHH@AlHPfES]FLa`@\",\"sGP@DkYj`FsDVM@\",\"qCb@AIV`H\",\"sNp@LdbJjj@[\\\\QXuqea`@\",\"sGP@DkUj`FsDVMcEC@\",\"sFp@DiTt@@Axa@\",\"Hmt@@DjU_ZxHHj@AmhPfES\\\\Lj\",\"QM`BN`^P\",\"qCb@AIZ`OH`\",\"sFp@DiTt@@AxaP\",\"sGP@Djuj`FsDVMcEC@\",\"sGP@Djuj`FsDVMcIC@\",\"sGP@DkUj`FsDVMcKC@\",\"sJP@DkfhAmQEcFRF@\",\"sGP@DjVj`FsDVMcIC@\",\"HaD@@DjUZxHH@AlHPfES]FFa`@\",\"qC`@IRtDVqDV@\",\"sNp@Dj}Zj@[\\\\QXuqfa`@\",\"KAx@@ITnuUPAlHPfES]FFa`@\",\"HiD@@DkUUjj`AmHPfES\\\\H\",\"sJQ@@dkU@H\",\"qC`@Qz`H\",\"KAx@@IUkmUPAlHPfES\\\\\",\"KAx@@ITouUPAlHPfES]FJa`@\",\"sJP@H~j@[TQX`\",\"sGP@DjZj`FsDVM@\",\"sJP@DkVhAmQEcFFF@\",\"sJX@@eKU@H\",\"sJP@DizhAy@\",\"QMHAIhGbP\",\"KAx@@ITouUPAlHPfES]FNa`@\",\"HaD@@DjUZxHD@AlHPfES\\\\\",\"HaD@@DjUZxHH@A@\",\"sNp@LdbJjj@[\\\\QXuqaa`@\",\"Hed@@LdbRQUUUP@vTHSBinFP\",\"KAx@@ITouUPAlHPfES]FLa`@\",\"sNp@DkUZj@[\\\\QXuqba`@\",\"KAx@@ITjuUPAlHPfES]FNa`@\",\"KAx@@YIDTjjh@vDHSBincGPp@\",\"HaD@@DjYvxH`@AlHPfES]FLa`@\",\"RF@QP`\",\"qCb@AIj`H\",\"sNp@DjUjj@[\\\\QXuqaa`@\",\"sNp@DkVZj@[\\\\QXu`\",\"KAx@@YIDUJjh@vDHSBin@\",\"sGP@DkYj`FsDVMcIC@\",\"sGP@DjVj`FsDVMcAC@\",\"sGP@DiVj`D\",\"sJP@DkVhAmQEcFZF@\",\"sNp@LdbLjj@[\\\\QXu`\",\"QM@HvAmdqbF@\",\"HaD@@DjWjXHB@AlHPfES\\\\\",\"sNp@DjwZj@[\\\\QXuqba`@\",\"sNp@LdbJjj@[\\\\QXuqda`@\",\"sFp@DiTt@@Axa`\",\"HiD@@Djuujj`AmHPfES\\\\H\",\"sNp@DkUZj@[\\\\QXuqca`@\",\"sJP@DiZhAy@\",\"KAx@@YIDTjjh@vDHSBincCPp@\",\"KAx@@IWNmUPAlHPfES\\\\\",\"KAx@@IVkMUPAlHPfES\\\\\",\"sJQ@@dju@H\",\"qCb@AIZ`OH@\",\"qC`@ISTAxa@\",\"sNp@DjyZj@[\\\\QXu`\",\"Hid@@DjUfaBB`@FtaBXUMp`\",\"HiD@@DiUVjj`AmHPfES\\\\LXBF@\",\"KAx@@IUjmUPAlHPfES\\\\\",\"HiD@@DjWvjj`AmHPfES\\\\LXjF@\",\"sJP@DjVhAmQEb\",\"qCb@AIV`OH`\",\"HiD@@LdbJRjjh@[RDIaTwCFDa`@\",\"KAx@@YIDTjjh@vDHSBinc@Pp@\",\"sNp@DjUjj@[\\\\QXuqda`@\",\"qC`@Qz`OED\",\"sJP@DkfhAmQEcFZF@\",\"KAx@@YIDbjjh@vDHSBincDPp@\",\"sGP@Djyj`FsDVMcMC@\",\"KAx@@IVrmUPAlHPfES\\\\\",\"qCp@AIZ`OI@\",\"sJX@@dkU@H\",\"sJQ@@dkU@OH`\",\"sNp@Di]ZjBBvxbqk@\",\"Hkl@@DjU_Uk``bj`@[VDIaTwCJzX\",\"sGP@DjZj`FsDVMcEC@\",\"Hid@@DjU^nBBH@FtaBXUMpqcHX@\",\"sNp@DkeZj@[\\\\QXu`\",\"sNp@DjYjj@[\\\\QXuqca`@\",\"sGQ@@djuT@`\",\"HiD@@LdbJTjjh@[RDIaTwB\",\"sOp@DjWkB@@Gd`\",\"HeT@@LdbbRKBDQD@CYPaLJfxY@\",\"qCr@XIKTA@\",\"HiD@@DjW^jj`AmHPfES\\\\LXJF@\",\"HeT@@DjU]k``b`@[JDIaTwCH\",\"sGP@Djuj`FsDVMcCC@\",\"`IH`B\",\"sOp@DjWkB@@GdX\",\"sJQ@@eKU@H\",\"KAx@@YIDUJjh@vDHSBincBPp@\",\"sJX@@eKU@OH@\",\"KAx@@YIDTjjh@vDHSBincAPp@\",\"sOq@@drm\\\\@@@`\",\"KAx@@IUkMUPAlHPfES\\\\\",\"qCp@AIj`H\",\"Hed@@DjUUjjj@FraBXUMpr\",\"sGX@@eJuT@`\",\"sGP@DkUj`FsDVMcCC@\",\"HiD@@Dj}Ujj`AmHPfES\\\\LXrF@\",\"KAx@@ITouUPAlHPfES]FHa`@\",\"Hed@@DjWujjj@FraBXUMpsFIa`@\",\"sGP@DiUj``mfHlZ\",\"sFp@DiTvjhAlqEcP\",\"Hid@@DjU^nBBH@FtaBXUMpq`XX@\",\"sJP@DkVdAmQEb\",\"qCp@AIZ`OH`\",\"QMhDRVA@\",\"qC`@ISJAlQE`\",\"qCp@BOTAyhl\",\"sJX@@eOU@ODB\",\"sFp@DiTt@@AyaB\",\"sGP@DkUj`FsDVMcMC@\",\"Hid@@DjYUaBH`@FtaBXUMpqcHX@\",\"qC`@Qz`OH@\",\"HiD@@DjUVjj`AmHPfES\\\\LXZF@\",\"sJP@H~j@[TQXqda`@\",\"sJX@@eKU@OI@\",\"sNp@Djejj@[\\\\QXu`\",\"sJQ@@dsU@H\",\"sJQ@@dkU@OI`\",\"KAx@@YIMDVjh@vDHSBin@\",\"Hid@@DjU^nBBD@FtaBXUMp`\",\"sNp@DkgZj@[\\\\QXuqca`@\",\"qC`@IRtDVqDVcEC@\",\"Hed@@LdbRQeUUP@vTHSBinFP\",\"sNp@DiUjj@P\",\"qC`@IRtDT\",\"sNp@DkYZj@[\\\\QXuqca`@\",\"KAx@@IUkmUPAlHPfES]FDa`@\",\"KAx@@IVjmUPAlHPfES]FNa`@\",\"sOx@@drm\\\\@@@`\",\"KAx@@ITjuUPAlHPfES]FBa`@\",\"QMDARVAyH\",\"sJP`@dfvhA@\",\"HeT@@DjU_k``b`@[JDIaTwCLXfF@\",\"KAx@@IToUUPAlHPfES]FJa`@\",\"sGP@DkYj`FsDVMcEC@\",\"qCb@AIZ`ODH\",\"`I@`B\",\"KAx@@IUzmUPAlHPfES]FFa`@\",\"sNp@DkfZj@[\\\\QXu`\",\"KAx@@ITnuUPAlHPfES]F@a`@\",\"HiD@@LddURjjh@[RDIaTwB\",\"sNp@Dj~Zj@[\\\\QXuqfa`@\",\"Hed@@Dj{uZjj@FraBXUMpr\",\"KAx@@ITsUUPAlHPfES\\\\\",\"Hid@@LdbRQk``b@AmHPfES\\\\LXrF@\",\"sOp@DjWkB@@GdH\",\"sJQ@@dkU@OH@\",\"Hid@@DjU^nBBH@FtaBXUMpqahX@\",\"sGP@DiYj``mfHlZ\",\"KAx@@IToUUPAlHPfES]FLa`@\",\"qCp@AJZ`ODH\",\"Hmt@@DjU]ZxHHj@AmhPfES\\\\Lj\",\"sGP@DkUjPFsDVM@\",\"qC`@IVtA@\",\"Hed@@LdbJReUUP@vTHSBinFP\",\"sNp@DjuZj@[\\\\QXuqea`@\",\"KAx@@IUkmUPAlHPfES]FNa`@\",\"HiD@@DkVUjj`AmHPfES\\\\H\",\"Hed@@DkUeZjj@FraBXUMpr\",\"sNp@DkVZj@[\\\\QXuqea`@\",\"sJP@DiVhHKZbKFLLL@\",\"HiD@@Djuyjj`AmHPfES\\\\H\",\"sNp@DjUjj@[\\\\QXuq`a`@\",\"HeT@@DjYUXPbH`@[JDIaTwCH\",\"HiD@@DjwUjj`AmHPfES\\\\LXRF@\",\"sNq@@djmUPB\",\"KAx@@YIEEZjh@vDHSBincCPp@\",\"sGP@Di^V`dmfHlZ\",\"Hid@@DjYUaBHP@FtaBXUMp`\",\"sNp@DjYjj@[\\\\QXuqba`@\",\"sGP@Dkej`FsDVMcKC@\",\"HeT@@DjU^k``b`@[JDIaTwCH\",\"qC`@Qv`MbHmFBF@\",\"sGQ@@djmT@`\",\"qCr@XIKTAyH\",\"qC`@IVtAlQEhpPp@\",\"Hid@@LdbbQxXF@@AmHPfES\\\\LXjF@\",\"sGP@DkYj`FsDVMcCC@\",\"KAx@@IVsMUPAlHPfES\\\\\",\"qCp@AIj`ODl\",\"HiD@@DkeUjj`AmHPfES\\\\H\",\"deT@@DjU[k``b`@vTHSBinFP\",\"sJP@DkVdAmQEcFRF@\",\"HiD@@LdbJTjjh@[RDIaTwCFDa`@\",\"HiD@@DkYyjj`AmHPfES\\\\H\",\"sJP@DjZhAyH\",\"KAx@@IVkMUPAlHPfES]FDa`@\",\"sJX@@dkU@OI@\",\"Hed@@LdbRQUUUP@vTHSBinFXpLL@\",\"Hed@@DjuUZjj@FraBXUMpr\",\"sGP@Djfj`FsDVMcKC@\",\"sNp@DkVZj@[\\\\QXuqba`@\",\"sNp@DjyZj@[\\\\QXuqfa`@\",\"qCb@AIj`OH@\",\"sNp@DjUZj@[\\\\QXu`\",\"KAx@@IWOMUPAlHPfES\\\\\",\"Hid@@DjU^nBBH@D\",\"Hed@@DjuvZjj@FraBXUMpr\",\"sJP@DiVhHKZbKFLtL@\",\"dmt@@DjU_ZxHHj@C[PaLJfxYVLKC@\",\"sNp@DjuZj@[\\\\QXuqca`@\",\"sJP@DkfhAmQEcFJF@\",\"sNp@LdbJZj@[\\\\QXu`\",\"HeT@@DjU_k``b`@[JDIaTwCLXFF@\",\"KAx@@IVlmUPAlHPfES]FNa`@\",\"HeT@@LdbbRKBDQD@CYPaLJfxYcEPp@\",\"Hid@@DjUZnBBH@FtaBXUMpqcHX@\",\"qCa@CIKTA@\",\"HiD@@Dj~]jj`AmHPfES\\\\LXFF@\",\"sKP@Di\\\\Zj@[TQX`\",\"sGP@Djfj`FsDVMcEC@\",\"HiD@@DkgYjj`AmHPfES\\\\H\",\"sNp@DjuZj@[\\\\QXuqaa`@\",\"KAx@@YIMDVjh@vDHSBincDPp@\",\"sJP@DjVhHKZbKFLTL@\",\"Hid@@LdbRQk``b@AmHPfES\\\\LXZF@\",\"HiD@@Dj}Ujj`AmHPfES\\\\LXzF@\",\"HeT@@DjU_k``bP@[JDIaTwCH\",\"sNp@DkUZi@[\\\\QXu`\",\"HiD@@DjYfjj`AmHPfES\\\\H\",\"sGP@DjZj`FsDVMcAC@\",\"Hmt@@DjU_jxHHj@AmhPfES\\\\Lj\",\"Hid@@LdbRQk``R@AmHPfES\\\\H\",\"KAx@@YIDUJjh@vDHSBincDPp@\",\"qCr@XIKTAyD\",\"sOq@@drm\\\\@@@|`@\",\"Hed@@DjW^jjj@FraBXUMpsFBa`@\",\"HeT@@DjY]zXFB@@[JDIaTwCH\",\"Hkl@@DjU_Vk``bj`@[VDIaTwCJzX\",\"Hid@@DjY}nBHH@FtaBXUMpqcHX@\",\"sGX@@eKuT@|d@\",\"sGP@Dj^Y`FsDVM@\",\"HcL@@DjU_ZnBBJh@FqaBXUMprn`\",\"sJP@DkVdAmQEcFJF@\",\"sOq@@drm\\\\@@@|b@\",\"sNp@DjyZj@[\\\\QXuqaa`@\",\"HaD@@DjUZxHH@AyD@\",\"qC`@Qv`H\",\"dmt@@DjU_ZxHHj@C[PaLJfxYVLYC@\",\"sGP@Dkej`FsDVMcMC@\",\"Hed@@DjUUjjj@FraBXUMpsFHa`@\",\"HeT@@LdbbRkBDQD@CYPaLJfxY@\",\"KAx@@IU{MUPAlHPfES]FLa`@\",\"RG@DTH\",\"sJY@DDeVhA@\",\"KAx@@YIDUJjh@vDHSBinc@Pp@\",\"sJX@@dkU@OI`\",\"sJQ@@dju@OI`\",\"HeT@@LdbbRKBDQD@CYPaLJfxYcFPp@\",\"sFp@DiTvjhAlqEcXpPp@\",\"HaD@@DjUZxHH@AyG@\",\"sNx@@eJ}UPB\",\"sNp@LddUjj@[\\\\QXuqca`@\",\"HaDH@@RVU[j@@@D\",\"sNp@DkgZi@[\\\\QXu`\",\"sGY@LDeVj`D\",\"sNp@LdbJfZBZvxbqk@\",\"sJP`@dfvhAyL\",\"sGX@AddQjhAxe`\",\"Hmt@@DjU_ZxHHj@AmhPfES\\\\LkFIa`@\",\"qCh@CIKTA@\",\"sNp@LdbLjj@[\\\\QXuq`a`@\",\"sOq@@drm\\\\@@@|a@\",\"KAx@@IUzmUPAlHPfES]FJa`@\",\"sNx@AddQUUPB\",\"sGP@Di]jP`mfHlZ\",\"sJP`@TeZhA@\",\"KAx@@IRjmUPHKXPaLJfx\",\"HeT@@LdbRTM\\\\DDT@CYPaLJfxY@\",\"HaF@@@Rfu[j@@@D\",\"Hid@@DjYUaBH`@FtaBXUMpqchX@\",\"KAx@@IUjmTpAlHPfES\\\\\",\"Hid@@DjU^nBBD@FtaBXUMpqcHX@\",\"sGP@DiUj``mfHl[FFF@\",\"KAx@@IUvmUPAlHPfES]FLa`@\",\"Hed@@LdbQTUUUP@vTHSBinFXqDL@\",\"sJP@DkVhA@\",\"sOx@@drm\\\\@@@|b@\",\"KAx@@IUkMUPAlHPfES]FDa`@\",\"HeT@@LdbRQU\\\\DDT@CYPaLJfxY@\",\"HiD@@Dj}Yjj`AmHPfES\\\\LXrF@\",\"HiD@@Dj{ujj`AmHPfES\\\\LXFF@\",\"KAx@@IWNmUPAlHPfES]FFa`@\",\"KAx@@IRkMUPHKXPaLJfx\",\"sJP@DjYdAmQEcFZF@\",\"sJY@LDeZhAyL\",\"HaDH@@RVU[f@@@D\",\"sJP`@deVhAyB\",\"HaD@@DjWjZjj`AlHPfES\\\\\",\"sGP@DkYj`FsDVMcMC@\",\"sNp@DkgZj@[\\\\QXuqea`@\",\"sJQ@@dlu@H\",\"HeT@@DjU]k``b`@[JDIaTwCLXrF@\",\"sJX@@dkU@OH`\",\"RFDDQFCr`\",\"sJP@DiYXIKZbKFLLL@\",\"KAx@@YIHjjjh@vDHSBincGPp@\",\"Hk\\\\@@DjU^ukmLHH@@@AmXPfES\\\\Lki`\",\"sGQ@@djmT@|b@\",\"Hid@@DjUfaBB`@FtaBXUMpqahX@\",\"sNx@@eRmUPB\",\"Hmt@@LdbRVak``ah@FvaBXUMprh\",\"qCr@XIJtA@\",\"KAx@@IWMmUPAlHPfES]FNa`@\",\"HeT@@DjYYZPbJ@@[JDIaTwCH\",\"sNp@DkfZj@[\\\\QXuqea`@\",\"Hid@@DjU^nBAHAEVtaBXUMp`\",\"dmt@@DjUgZDHJJ@C[PaLJfxYT\",\"sGP@DkejPFsDVM@\",\"sNx@@eJmUPB\",\"qCb@AIf`H\",\"HcL@@DjU_VnBBJh@FqaBXUMprnqcXX@\",\"Hid@@DjUZnBBH@FtaBXUMpqahX@\",\"sNp@LdbQZjBBvxbqkcGC@\",\"sOx@@drm\\\\@@@|c@\",\"sJP@H~j@^R@\",\"KAx@@YIDcFjhDElHPfES\\\\\",\"Hid@@DjUZnBAH@FtaBXUMp`\",\"sNp@LddUji@[\\\\QXu`\",\"sGP@DjfjPFsDVM@\",\"HeT@@DjYUXPbD`@[JDIaTwCH\",\"KAx@@IUoMUPAlHPfES]FDa`@\",\"sFp@DiTt@@AyaD\",\"Hed@@DjuuZjj@FraBXUMpsFIa`@\",\"HeT@@DjUghP`h`@[JDIaTwCLXfF@\",\"sOp@DjWkjj`FwDVM\\\\YhX@\",\"sGP@Djfj`FsDVMcIC@\",\"KAx@@IRkmUPHKXPaLJfzL]C@\",\"sNx@@djmUPB\",\"QM`AIdD\",\"sOp@DjWkB@@Gbe@\",\"sNp@DjyZj@[\\\\QXuqca`@\",\"QM@HuAmd`\",\"sNp@LddUjj@[\\\\QXuqea`@\",\"daD@@DjUZxHD@CXPaLJfzLYC@\",\"qCb@AIZPH\",\"HiD@@LdbJTjjh@[RDIaTwCF@a`@\",\"Hmt@@DjU_ZxHHi@AmhPfES\\\\Lj\",\"HaDH@@RYWih@H@D\",\"HiD@@LdbJTjjh@[RDIaTwCFHa`@\",\"sGX@@djuT@|a@\",\"sNp@DkfZj@[\\\\QXuqaa`@\",\"Hid@@DjU^nBBH@GdL\",\"KAx@@IVkMUPAlHPfES]FJa`@\",\"qCr@XIKTAy@\",\"HmT@@Dj{uVjjh@[ZDIaTwCJqaXX@\",\"dmt@@DjYWVDHbJ@C[PaLJfxYT\",\"Hif@@@RUe^Fh@@@P\",\"HaDH@@Rfu[j@@@GdH\",\"KAx@@IVsMUPAlHPfES]FDa`@\",\"sKP@Di\\\\Zj@[TQXq`a`@\",\"sJX@@eMU@OH@\",\"HeT@@DjU^k``b`@[JDIaTwCLXFF@\",\"Hmt@@LdbbRJXPbHh@FvaBXUMprh\",\"sJP@DjvhAmQEcFBF@\",\"dmt@@LdbbRNXPbHh@MmBDpj[aeXplL@\",\"sJP`@dfvhAyD\",\"sGP@Di^V`dmfHl[FVF@\",\"KAx@@IVsmUPAlHPfES]FBa`@\",\"sOq@@drm\\\\@@@|PP\",\"sJY@BDeZhA@\",\"HeT@@LdbRbmBDED@CYPaLJfxY@\",\"Hed@@Djy[Zjj@FraBXUMpr\",\"HeT@@DjU]k``b`@[JDIaTwCLXFF@\",\"Hid@@DjUfaBB`@D\",\"qCa@CIJtA@\",\"QMPARVA@\",\"Hid@@DjUfaBB`@FtaBXUMpqcHX@\",\"sJY@BDfZhA@\",\"HeT@@DjUghP`hP@[JDIaTwCH\",\"Hed@@Dj{uZjj@FraBXUMpsFIa`@\",\"dmt@@DjYUvDHbJ@C[PaLJfxYVLUC@\",\"sNp`@dfuZj@P\",\"sJQ@@dmU@OH@\",\"sJX@@dmU@H\",\"HeT@@DjU]k``b`@[JDIaTwCLXZF@\",\"HiD@@LdfbJZjh@[RDIaTwCFAa`@\",\"sOx@@drm\\\\@@@|a@\",\"deT@@DjUfhP`h`@vTHSBinFP\",\"dmt@@DjU]ZxHHj@C[PaLJfxYVLKC@\",\"sOp@DjWkjj`FwDVM\\\\XHX@\",\"HcL@@LdbbRNSBDQEP@McBDpj[ae]cFpp@\",\"HiD@@Dj}Yji`AmHPfES\\\\H\",\"HaDH@@RYe[hB@@D\",\"Hid@@DjU^njjj@FtaBXUMpq`XX@\",\"deT@@LdbbRKBDQB@FraBXUMpr\",\"QMPARZA@\",\"sOq@@drm\\\\@@@|QX\",\"HaD@@DjYvxH`@A@\",\"HcL@@LdbbRNcBDQEP@McBDpj[ae]@\",\"QMhDRZA@\",\"RG@DXLHmP\",\"QM`BN`XQYd\",\"RG@DTLHmP\",\"QMHAIXFEVd\",\"QMDARVAaH\",\"RFPDXLHmP\",\"RF@Q`vRbdLEC@\",\"RF@QpvR@\",\"QO@HyjAmd`\",\"`II@B\",\"`II@CFspqJp\",\"`II@CF[@hM@prB`\",\"`H@[T[|B`XN@PdM@p|@bHrBcDk@\",\"RG@DXMj}F@\",\"QM`BN`[L~b@\",\"RG@DTMj}D@\",\"QMHAIXFt~j@\",\"QMDARVA}L@\",\"RFPDXMj}D@\",\"sKP@Di\\\\YZ@[TQXqaa`@\",\"eF`BHD\"])}function dp(){dp=B1,JV=B(d(NA,1),a0,6,14,[524290,524292,589826,589827,589828,589829,589832,589833,589837,589838,598019,598020,598024,606211,688130,688131,688132,688137,688142,696324,819202,819203,819204,819205,819214,827396,1048580,1114114,1114115,1114116,1114120,1212420,1220611,1343492,1343496,1638402,1638403,17367042,17367043,17367044,17367045,17367048,17367049,17367053,17367054,17375236,17465346,17465348,17465353,17473540,1208483842,1208483848,1208483912,1208549378,1208549379,1208549380,1208549384,1208549388,1208549442,1208549443,1208549444,1208549448,1208557571,1208565763,1208565827,1409875970,1409875971,1409875972,1409875976,1409876034,1409876035,1409876036,1409876040,1409884163,1409974274,1409974280,1409974338,1678245892,1678311426,1678311427,1678311428,1678311432,1678311490,1678311491,1678311492,1678311496,1678409730,1678409731,1678409732,1678409794,1678540802,1678540808,1678540810,1678540866,2282291202,2282291203,2282291266,2282291267,2282389506,2282389507,2282389570,2282389571,2282389572,2282520578,2282520579,2282520642,2282520643,2282537027,2483617794,2483617795,2483617858,2483617859,2483617860,2483617864,2483716098,2483716099,2483716162,2483716163,2484150275,2484248579,2752675842,3356033026,3356139523,3557359618,3557457922,3557588994,34510798914,34510798915,34510798916,34510798920,34510807107,34510815299,34712125506,34712125507,34712125508,34712125512,34712223810,34712223811,34712223812,34712223816,34980560962,34980560963,34980659266,34980659267,34980659268,35568287746,35568287747,35568287748,35568287752,35568287756,35568287810,35568287811,35568287812,35568287816,35568287820,35568386050,35568386051,35568386052,35568386114,35568386120,35568517122,35568517123,35568517124,35568517128,35568517186,35568517187,35568517188,35568517192,35568812034,35568812035,35568812098,35568812099,35568910338,35568910339,35568910403,35569336322,35569434626,35585064962,35585064963,35585064964,35585064968,35585065026,35585065027,35585065028,35585065032,35769614338,35769614340,35769614402,35769712642,35770138626,35770236930,35786391554,35786391555,2475109646403,uM,QM,2475109711938,2475109711939,2475109720067,2475109720131,2475109728259,2475109728323,UM,oM,2887426572354,2887426572355,LM,sM,2887627898946,yM,2887627997250,lM,TM,3437182386242,3437182386243,hM,3437383712771,3437383712834,cM,wM,gM,dM,4674132967490,4674132967491,4674132975619,BM,4674334294082,4674334294083,4674334302211,4674334302275,vM,4674334392386,FM,4674602729538,4674602827842,mM,4674602958914,kM,bM,5086449827906,5086449827907,5086449827912,RM,5086651154498,5086651162627,jM,pM,5086651252802,5086651252808,5086651260931,CM,5086919589954,MM,5086919688258,5086919819330,5636205641794,HM,5636406968386,VM,5636407066690,5636675403842,EM,5636675502146,{l:589890,m:73760,h:4},{l:589891,m:73760,h:4},{l:598083,m:73760,h:4},{l:688194,m:73760,h:4},{l:688195,m:73760,h:4},{l:696387,m:73760,h:4},{l:819266,m:73760,h:4},{l:65602,m:73764,h:4},{l:65603,m:73764,h:4},{l:589890,m:172064,h:4},{l:589891,m:172064,h:4},{l:598083,m:172064,h:4},{l:688194,m:172064,h:4},{l:688195,m:172064,h:4},{l:696387,m:172064,h:4},{l:819266,m:172064,h:4},{l:65602,m:172068,h:4},{l:65603,m:172068,h:4},{l:589890,m:172112,h:4},{l:589891,m:172112,h:4},{l:688194,m:172112,h:4},{l:819266,m:172112,h:4},{l:65602,m:172116,h:4},{l:65608,m:172116,h:4},{l:163906,m:172116,h:4},{l:589890,m:303136,h:4},{l:688194,m:303136,h:4},{l:819266,m:303136,h:4},{l:65602,m:303140,h:4},{l:589890,m:303184,h:4},{l:688194,m:303184,h:4},{l:819266,m:303184,h:4},{l:65602,m:303188,h:4},{l:65602,m:303252,h:4},SM,qM,{l:589890,m:590112,h:4},{l:589891,m:590112,h:4},IM,xM,{l:589890,m:590160,h:4},{l:589891,m:590160,h:4},NM,{l:688194,m:590160,h:4},OM,GM,{l:589890,m:590224,h:4},{l:589891,m:590224,h:4},{l:688131,m:590224,h:4},{l:688194,m:590224,h:4},JM,zM,{l:589890,m:590368,h:4},YM,{l:688194,m:590368,h:4},{l:696323,m:590368,h:4},KM,XM,{l:819266,m:590368,h:4},ZM,WM,{l:589890,m:590416,h:4},{l:589891,m:590416,h:4},{l:589896,m:590416,h:4},_M,{l:688136,m:590416,h:4},{l:688194,m:590416,h:4},{l:696323,m:590416,h:4},$M,{l:819266,m:590416,h:4},{l:688130,m:590480,h:4},{l:688194,m:590480,h:4},{l:65602,m:598052,h:4},{l:65603,m:598052,h:4},{l:65602,m:598100,h:4},{l:65603,m:598100,h:4},{l:73795,m:598100,h:4},{l:163906,m:598100,h:4},{l:163907,m:598100,h:4},{l:65602,m:598164,h:4},{l:163906,m:598164,h:4},aM,tH,{l:589890,m:598304,h:4},{l:589891,m:598304,h:4},eH,{l:688194,m:598304,h:4},AH,{l:1114178,m:598304,h:4},nH,{l:1212424,m:598304,h:4},{l:1212482,m:598304,h:4},PH,rH,{l:589890,m:688416,h:4},iH,{l:589890,m:688464,h:4},{l:589890,m:688528,h:4},fH,DH,{l:688130,m:688784,h:4},{l:65602,m:696356,h:4},{l:65602,m:696404,h:4},{l:163906,m:696404,h:4},{l:589826,m:696608,h:4},{l:1114178,m:696608,h:4},{l:1212418,m:696608,h:4},{l:589826,m:696612,h:4},{l:524355,m:590112,h:288},{l:589825,m:590112,h:288},uH,{l:589890,m:590112,h:288},{l:598019,m:590112,h:288},{l:598083,m:590112,h:288},QH,{l:589890,m:590112,h:336},{l:598019,m:590112,h:336},{l:598083,m:590112,h:336},UH,{l:589890,m:688416,h:336},oH,{l:589890,m:688464,h:336},LH,sH,{l:589827,m:590112,h:400},{l:589890,m:590112,h:400},{l:589891,m:590112,h:400},yH,lH,TH,hH,{l:589890,m:819488,h:400},cH,wH,gH,dH,{l:589827,m:819488,h:544},BH,vH,FH,{l:688199,m:688464,h:592},mH,kH,bH,{l:688202,m:819600,h:592},RH,{l:589896,m:1212704,h:592},jH,pH,{l:688200,m:1212752,h:592},CH,{l:688135,m:688464,h:656},{l:688135,m:819536,h:656},{l:589891,m:65936,h:8228},MH,{l:589890,m:590112,h:8480},{l:598019,m:590112,h:8480},HH,{l:589890,m:688416,h:8480},VH,{l:589890,m:688464,h:8480},EH,SH,qH,IH,{l:589896,m:1213008,h:8480},xH,{l:688200,m:1213008,h:8480},{l:688135,m:1343824,h:8480},NH,{l:589890,m:590112,h:8484},OH,{l:589890,m:590160,h:8484},{l:1212424,m:590416,h:8484},{l:1212488,m:590416,h:8484},GH,{l:688194,m:598304,h:8484},{l:589826,m:590112,h:8528},{l:589890,m:590112,h:8528}]),K4=B(d(Ee,1),PA,6,15,[.6966999769210815,0,.4885999858379364,-.47269999980926514,-.07490000128746033,JH,.273499995470047,.5699999928474426,.7009999752044678,.9534000158309937,-3.6435000896453857,-2.150899887084961,.4975000023841858,-2.19950008392334,-.2809000015258789,-.8259999752044678,-.1784999966621399,-1.620300054550171,-1.0959999561309814,-.3619999885559082,.13950000703334808,-.29750001430511475,-1.2907999753952026,1.0161999464035034,zH,-2.5383999347686768,Iy,.4291999936103821,-.5824000239372253,-.1834000051021576,.1306000053882599,-.5015000104904175,JH,-.5257999897003174,.4244000017642975,-.16099999845027924,-.2777999937534332,.5110999941825867,-.435699999332428,-.10409999638795853,.3424000144004822,-.061500001698732376,.6035000085830688,.7226999998092651,.43459999561309814,-1.6821000576019287,-.3310000002384186,-.49799999594688416,YH,-.3650999963283539,.45969998836517334,.3384000062942505,.6632999777793884,.4544000029563904,.15970000624656677,.633899986743927,.35040000081062317,.04490000009536743,.34200000762939453,.26109999418258667,.40459999442100525,.5218999981880188,-1.065000057220459,-1.2314000129699707,-1.802299976348877,-.36320000886917114,-.4108000099658966,.30570000410079956,-.14560000598430634,-.27129998803138733,-.5192999839782715,.45260000228881836,.5539000034332275,.8374000191688538,-.7070000171661377,-.48809999227523804,-.4099999964237213,0,.14790000021457672,.3447999954223633,.42980000376701355,.5579000115394592,-.1264999955892563,-.042500000447034836,.07670000195503235,.6635000109672546,-.38119998574256897,-.8367999792098999,1.0286999940872192,-.10209999978542328,.3587000072002411,-.5945000052452087,.16920000314712524,-.121799997985363,.32829999923706055,.22390000522136688,.20430000126361847,.05900000035762787,-.48350000381469727,.6165000200271606,-.4011000096797943,.5577999949455261,-.21639999747276306,-.017500000074505806,.29809999465942383,.10999999940395355,.27149999141693115,-.2994999885559082,-.46700000762939453,.1565999984741211,.046799998730421066,-.13210000097751617,1.3686000108718872,0,-.4115999937057495,1.0185999870300293,-.3935000002384186,.5223000049591064,.3684999942779541,.25769999623298645,1.5192999839782715,.2705000042915344,.3790999948978424,.012000000104308128,-.33970001339912415,.14830000698566437,.2766000032424927,.35929998755455017,.7714999914169312,.3149999976158142,-1.618499994277954,.18889999389648438,-.2651999890804291,-.09650000184774399,.420199990272522,.18709999322891235,-.3684000074863434,-.07779999822378159,.8942999839782715,.3693999946117401,.28790000081062317,.4489000141620636,-.26010000705718994,.4771000146865845,.1923000067472458,.43810001015663147,.16949999332427979,.45249998569488525,.3352000117301941,.1582999974489212,.4036000072956085,-.04800000041723251,.5023000240325928,-.26489999890327454,.76910001039505,-.35519999265670776,1.0300999879837036,-.11410000175237656,-.5932000279426575,.17489999532699585,.13130000233650208,-.18039999902248383,.399399995803833,.22910000383853912,.31690001487731934,.35989999771118164,-.0038999998942017555,-.2955999970436096,.4408999979496002,-.16089999675750732,.3774999976158142,-.13459999859333038,.2838999927043915,.5128999948501587,.1265999972820282,.4293999969959259,.28060001134872437,.49070000648498535,KH,.219200000166893,.15649999678134918,.6934999823570251,.3617999851703644,.6735000014305115,.5777999758720398,-.5636000037193298,.5569000244140625,.30379998683929443,-.32760000228881836,-.6991999745368958,.010300000198185444,-.4659000039100647,XH,Iy,.18410000205039978,.707099974155426,.12269999831914902,.7949000000953674,-.6592000126838684,-1.3148000240325928,-.4066999852657318,-.1316000074148178,-.4925000071525574,-.09290000051259995,-.4352000057697296,-.2206999957561493,-.9959999918937683,-.723800003528595,-.5468999743461609,-1.2939000129699707,-.01360000018030405,.065700002014637,.7189000248908997,.05700000002980232,.661899983882904,-.6381000280380249,-.8072999715805054,.23549999296665192,.30480000376701355,-.019899999722838402,-.07519999891519547,.44609999656677246,.1559000015258789,1.1167999505996704,-1.8039000034332275,.23649999499320984,-.22059999406337738,.4480000138282776,-1.1339999437332153,-.5652999877929688,-.40529999136924744,-.13609999418258667,.2198999971151352,.053599998354911804,-.020999999716877937,.6984999775886536,.9642999768257141,-.41519999504089355,-1.0369000434875488,-.18299999833106995,.5882999897003174,-.29179999232292175,-.5293999910354614,-.6541000008583069,.9473000168800354,-.19059999287128448,-.8483999967575073,-.3456999957561493,.9541000127792358,1.4230999946594238,-.7924000024795532,ZH,WH,-.2596000134944916,.8381999731063843,-.4415999948978424,-.37040001153945923,-.7487000226974487,-.10790000110864639,-.29919999837875366,-.3276999890804291,.025100000202655792,-.9187999963760376,.10939999669790268,.8230999708175659,-3.233299970626831,.03500000014901161,XH,_H,.2791000008583069,.3206000030040741,.5662000179290771,-.3783999979496002,.4032000005245209,-1.794800043106079,-.15539999306201935,.3785000145435333,.05339999869465828,-.16529999673366547,-.09870000183582306,-.10050000250339508,-.6460999846458435,.8034999966621399,-.24050000309944153,-.12380000203847885,-.35760000348091125,.09610000252723694,-.6401000022888184,.2029000073671341,.23589999973773956,.4950999915599823,.19210000336170197,-.37450000643730164,.34630000591278076,.289900004863739,-.15330000221729279,-.4169999957084656,.37700000405311584,.6998000144958496,.593999981880188,.5911999940872192,-.5570999979972839,.023800000548362732,-.2475000023841858,.030700000002980232,-.38749998807907104,-.7437000274658203,.5144000053405762,.00570000009611249,.765500009059906,.1720000058412552,-2.5624001026153564,-.30660000443458557,.36469998955726624,.17270000278949738,-.03290000185370445,-.18930000066757202,.07020000368356705,-1.2453999519348145,.14959999918937683,zH,.4146000146865845,-.2667999863624573,-.11060000211000443,.03620000183582306,-.3188999891281128,-.7278000116348267,-.08940000087022781,-.22769999504089355,-.2393999993801117,1.011199951171875,-.2962000072002411,.7775999903678894,.2944999933242798,-.22339999675750732,.27639999985694885,.8011000156402588,-.17440000176429749,.15809999406337738,-1.7552000284194946,-.384799987077713,.5993000268936157,.5267999768257141,-.04170000180602074,.4733000099658966,-.3400999903678894,-.14499999582767487,.7088000178337097,-.13179999589920044,.04259999841451645,-.5027999877929688,.3831999897956848,-.011800000444054604,-.4357999861240387,.3749000132083893,-.12030000239610672,-.5648000240325928,-.1972000002861023,-.8769000172615051,-.3675000071525574,-.2003999948501587,-.6069999933242798,-.18569999933242798,.3467999994754791,-.36239999532699585,.5357999801635742,-.3700999915599823,.13359999656677246,.9545000195503235,.11389999836683273,-.16990000009536743,Iy,.2890999913215637,.2612999975681305,-.03440000116825104,-1.9498000144958496,-2.024899959564209,-.6004999876022339,-.6258000135421753,-1.2348999977111816,.328000009059906,-.54339998960495,-.7712000012397766,-.9057000279426575,-.16680000722408295,-.9904999732971191,-.03720000013709068,-1.1638000011444092,.12620000541210175,-.5248000025749207,-.15379999577999115,-.36820000410079956,.3249000012874603,.06499999761581421,.051100000739097595,-.46070000529289246,.22310000658035278,.28220000863075256,.1396999955177307,-.49380001425743103,.39480000734329224,-.4074999988079071,-.6410999894142151,-.009100000374019146,-.13330000638961792,-.5192000269889832,-.16609999537467957,Iy,-.07069999724626541,.4805999994277954,.38280001282691956,.22290000319480896,.6159999966621399,.33709999918937683,.188400000333786,.13809999823570251,YH,.2833000123500824,-.1225999966263771,-3.9189000129699707,-.459199994802475,-.3434999883174896,-.6654000282287598,-.5055999755859375,-.863099992275238,.15360000729560852,-.6427000164985657,-.08839999884366989,-.0471000000834465,.11060000211000443,.382099986076355,-.23919999599456787,-.4050999879837036,.08910000324249268,-.6972000002861023,-.4699000120162964,.09220000356435776,.08060000091791153,-.6773999929428101,-.062199998646974564,-.9300000071525574,.13369999825954437])}function Bp(){Bp=B1,rl=B(d(Vt,2),nA,17,0,[null,B(d(Vt,1),Et,3,0,[new u(0,1.007825032),new u(1,2.014101778),new u(2,3.016049268),new u(3,4.027834627),new u(4,5.039542911),new u(5,6.044942608)]),B(d(Vt,1),Et,3,0,[new u(1,3.01602931),new u(2,4.00260325),new u(3,5.012223628),new u(4,6.018888072),new u(5,7.028030527),new u(6,8.033921838),new u(7,9.043820323),new u(8,10.052399713)]),B(d(Vt,1),Et,3,0,[new u(1,4.027182329),new u(2,5.012537796),new u(3,6.015122281),new u(4,7.016004049),new u(5,8.02248667),new u(6,9.026789122),new u(7,10.035480884),new u(8,11.043796166),new u(9,12.05378)]),B(d(Vt,1),Et,3,0,[new u(1,5.04079),new u(2,6.019725804),new u(3,7.016929246),new u(4,8.005305094),new u(5,9.012182135),new u(6,10.01353372),new u(7,11.021657653),new u(8,12.026920631),new u(9,13.036133834),new u(10,14.042815522)]),B(d(Vt,1),Et,3,0,[new u(2,7.029917389),new u(3,8.024606713),new u(4,9.013328806),new u(5,10.012937027),new u(6,11.009305466),new u(7,12.014352109),new u(8,13.017780267),new u(9,14.025404064),new u(10,15.031097291),new u(11,16.039808836),new u(12,17.046931399),new u(13,18.05617),new u(14,19.06373)]),B(d(Vt,1),Et,3,0,[new u(2,8.037675026),new u(3,9.031040087),new u(4,10.01685311),new u(5,11.011433818),new u(6,12),new u(7,13.003354838),new u(8,14.003241988),new u(9,15.010599258),new u(10,16.014701243),new u(11,17.022583712),new u(12,18.026757058),new u(13,19.035248094),new u(14,20.040322395),new u(15,21.04934),new u(16,22.05645)]),B(d(Vt,1),Et,3,0,[new u(3,10.042618),new u(4,11.026796226),new u(5,12.018613202),new u(6,13.005738584),new u(7,14.003074005),new u(8,15.000108898),new u(9,16.006101417),new u(10,17.008449673),new u(11,18.014081827),new u(12,19.017026896),new u(13,20.023367295),new u(14,21.027087574),new u(15,22.034440259),new u(16,23.04051),new u(17,24.0505)]),B(d(Vt,1),Et,3,0,[new u(4,12.034404776),new u(5,13.0248104),new u(6,14.008595285),new u(7,15.003065386),new u(8,15.994914622),new u(9,16.999131501),new u(10,17.999160419),new u(11,19.00357873),new u(12,20.00407615),new u(13,21.008654631),new u(14,22.009967157),new u(15,23.015691325),new u(16,24.020369922),new u(17,25.02914),new u(18,26.03775)]),B(d(Vt,1),Et,3,0,[new u(5,14.03608),new u(6,15.018010856),new u(7,16.01146573),new u(8,17.002095238),new u(9,18.000937667),new u(10,18.998403205),new u(11,19.999981324),new u(12,20.999948921),new u(13,22.00299925),new u(14,23.003574385),new u(15,24.008099371),new u(16,25.012094963),new u(17,26.019633157),new u(18,27.026892316),new u(19,28.03567),new u(20,29.04326)]),B(d(Vt,1),Et,3,0,[new u(6,16.025756907),new u(7,17.017697565),new u(8,18.005697066),new u(9,19.001879839),new u(10,19.992440176),new u(11,20.993846744),new u(12,21.99138551),new u(13,22.994467337),new u(14,23.993615074),new u(15,24.997789899),new u(16,26.000461498),new u(17,27.0076152),new u(18,28.012108072),new u(19,29.019345902),new u(20,30.023872),new u(21,31.03311),new u(22,32.03991)]),B(d(Vt,1),Et,3,0,[new u(7,18.02718),new u(8,19.01387945),new u(9,20.00734826),new u(10,20.997655099),new u(11,21.994436782),new u(12,22.989769675),new u(13,23.990963332),new u(14,24.989954352),new u(15,25.992589898),new u(16,26.994008702),new u(17,27.99889041),new u(18,29.002811301),new u(19,30.009226487),new u(20,31.013595108),new u(21,32.019649792),new u(22,33.027386),new u(23,34.0349),new u(24,35.04418)]),B(d(Vt,1),Et,3,0,[new u(8,20.018862744),new u(9,21.011714174),new u(10,21.999574055),new u(11,22.99412485),new u(12,23.985041898),new u(13,24.985837023),new u(14,25.98259304),new u(15,26.984340742),new u(16,27.983876703),new u(17,28.988554743),new u(18,29.990464529),new u(19,30.996548459),new u(20,31.999145889),new u(21,33.005586975),new u(22,34.00907244),new u(23,35.018669),new u(24,36.02245),new u(25,37.03124)]),B(d(Vt,1),Et,3,0,[new u(8,21.02804),new u(9,22.01952),new u(10,23.0072649),new u(11,23.999940911),new u(12,24.990428555),new u(13,25.986891659),new u(14,26.981538441),new u(15,27.981910184),new u(16,28.980444848),new u(17,29.982960304),new u(18,30.983946023),new u(19,31.988124379),new u(20,32.990869587),new u(21,33.996927255),new u(22,34.99993765),new u(23,36.006351501),new u(24,37.01031),new u(25,38.0169),new u(26,39.0219)]),B(d(Vt,1),Et,3,0,[new u(8,22.03453),new u(9,23.02552),new u(10,24.011545711),new u(11,25.00410664),new u(12,25.992329935),new u(13,26.986704764),new u(14,27.976926533),new u(15,28.976494719),new u(16,29.973770218),new u(17,30.975363275),new u(18,31.974148129),new u(19,32.97800052),new u(20,33.978575745),new u(21,34.984584158),new u(22,35.986687363),new u(23,36.99299599),new u(24,37.99598),new u(25,39.0023),new u(26,40.0058),new u(27,41.0127),new u(28,42.0161)]),B(d(Vt,1),Et,3,0,[new u(9,24.03435),new u(10,25.02026),new u(11,26.01178),new u(12,26.999191645),new u(13,27.99231233),new u(14,28.981801376),new u(15,29.978313807),new u(16,30.973761512),new u(17,31.973907163),new u(18,32.971725281),new u(19,33.973636381),new u(20,34.973314249),new u(21,35.978259824),new u(22,36.979608338),new u(23,37.98447),new u(24,38.98642),new u(25,39.99105),new u(26,40.9948),new u(27,42.00009),new u(28,43.00331),new u(29,44.00988),new u(30,45.01514),new u(31,46.02383)]),B(d(Vt,1),Et,3,0,[new u(10,26.02788),new u(11,27.018795),new u(12,28.004372661),new u(13,28.996608805),new u(14,29.984902954),new u(15,30.979554421),new u(16,31.97207069),new u(17,32.971458497),new u(18,33.967866831),new u(19,34.96903214),new u(20,35.96708088),new u(21,36.971125716),new u(22,37.971163443),new u(23,38.975135275),new u(24,39.97547),new u(25,40.98003),new u(26,41.98149),new u(27,42.9866),new u(28,43.98832),new u(29,44.99482),new u(30,45.99957),new u(31,47.00762),new u(32,48.01299),new u(33,49.02201)]),B(d(Vt,1),Et,3,0,[new u(11,28.02851),new u(12,29.01411),new u(13,30.00477),new u(14,30.992416014),new u(15,31.985688908),new u(16,32.977451798),new u(17,33.973761967),new u(18,34.968852707),new u(19,35.968306945),new u(20,36.9659026),new u(21,37.96801055),new u(22,38.968007677),new u(23,39.970415555),new u(24,40.970650212),new u(25,41.973174994),new u(26,42.974203385),new u(27,43.978538712),new u(28,44.9797),new u(29,45.98412),new u(30,46.98795),new u(31,47.99485),new u(32,48.99989),new u(33,50.00773),new u(34,51.01353)]),B(d(Vt,1),Et,3,0,[new u(12,30.02156),new u(13,31.012126),new u(14,31.99766066),new u(15,32.989928719),new u(16,33.980270118),new u(17,34.975256726),new u(18,35.967546282),new u(19,36.966775912),new u(20,37.962732161),new u(21,38.964313413),new u(22,39.962383123),new u(23,40.964500828),new u(24,41.963046386),new u(25,42.965670701),new u(26,43.965365269),new u(27,44.968094979),new u(28,45.968093467),new u(29,46.972186238),new u(30,47.97507),new u(31,48.98218),new u(32,49.98594),new u(33,50.99324),new u(34,51.99817),new u(35,53.006227)]),B(d(Vt,1),Et,3,0,[new u(13,32.02192),new u(14,33.00726),new u(15,33.99841),new u(16,34.988011615),new u(17,35.981293405),new u(18,36.973376915),new u(19,37.969080107),new u(20,38.963706861),new u(21,39.963998672),new u(22,40.961825972),new u(23,41.962403059),new u(24,42.960715746),new u(25,43.961556146),new u(26,44.960699658),new u(27,45.961976203),new u(28,46.961677807),new u(29,47.965512946),new u(30,48.967450084),new u(31,49.972782832),new u(32,50.97638),new u(33,51.98261),new u(34,52.98712),new u(35,53.99399),new u(36,54.999388)]),B(d(Vt,1),Et,3,0,[new u(14,34.01412),new u(15,35.004765),new u(16,35.993087234),new u(17,36.985871505),new u(18,37.976318637),new u(19,38.970717729),new u(20,39.962591155),new u(21,40.962278349),new u(22,41.958618337),new u(23,42.958766833),new u(24,43.955481094),new u(25,44.956185938),new u(26,45.953692759),new u(27,46.954546459),new u(28,47.952533512),new u(29,48.955673302),new u(30,49.957518286),new u(31,50.961474238),new u(32,51.9651),new u(33,52.97005),new u(34,53.97468),new u(35,54.98055),new u(36,55.98579),new u(37,56.992356)]),B(d(Vt,1),Et,3,0,[new u(15,36.01492),new u(16,37.00305),new u(17,37.9947),new u(18,38.984790009),new u(19,39.977964014),new u(20,40.969251316),new u(21,41.965516761),new u(22,42.96115098),new u(23,43.959403048),new u(24,44.955910243),new u(25,45.95517025),new u(26,46.952408027),new u(27,47.952234991),new u(28,48.950024065),new u(29,49.952187008),new u(30,50.9536027),new u(31,51.95665),new u(32,52.95817),new u(33,53.963),new u(34,54.9694),new u(35,55.97266),new u(36,56.97704),new u(37,57.98307),new u(38,58.988041)]),B(d(Vt,1),Et,3,0,[new u(16,38.00977),new u(17,39.001323),new u(18,39.990498907),new u(19,40.983131),new u(20,41.973031622),new u(21,42.968523342),new u(22,43.959690235),new u(23,44.958124349),new u(24,45.952629491),new u(25,46.951763792),new u(26,47.947947053),new u(27,48.947870789),new u(28,49.944792069),new u(29,50.946616017),new u(30,51.946898175),new u(31,52.949731709),new u(32,53.95087),new u(33,54.95512),new u(34,55.95799),new u(35,56.9643),new u(36,57.96611),new u(37,58.97196),new u(38,59.97564),new u(39,60.982018)]),B(d(Vt,1),Et,3,0,[new u(17,40.01109),new u(18,40.99974),new u(19,41.99123),new u(20,42.98065),new u(21,43.9744),new u(22,44.965782286),new u(23,45.960199491),new u(24,46.954906918),new u(25,47.95225448),new u(26,48.948516914),new u(27,49.947162792),new u(28,50.943963675),new u(29,51.944779658),new u(30,52.944342517),new u(31,53.946444381),new u(32,54.947238194),new u(33,55.95036),new u(34,56.95236),new u(35,57.95665),new u(36,58.9593),new u(37,59.9645),new u(38,60.96741),new u(39,61.97314),new u(40,62.97675)]),B(d(Vt,1),Et,3,0,[new u(18,42.00643),new u(19,42.997707),new u(20,43.98547),new u(21,44.97916),new u(22,45.968361649),new u(23,46.962906512),new u(24,47.954035861),new u(25,48.951341135),new u(26,49.946049607),new u(27,50.944771767),new u(28,51.940511904),new u(29,52.940653781),new u(30,53.938884921),new u(31,54.940844164),new u(32,55.940645238),new u(33,56.9437538),new u(34,57.94425),new u(35,58.94863),new u(36,59.94973),new u(37,60.95409),new u(38,61.9558),new u(39,62.96186),new u(40,63.9642),new u(41,64.97037)]),B(d(Vt,1),Et,3,0,[new u(19,44.00687),new u(20,44.99451),new u(21,45.98672),new u(22,46.9761),new u(23,47.96887),new u(24,48.959623415),new u(25,49.95424396),new u(26,50.948215487),new u(27,51.945570079),new u(28,52.941294702),new u(29,53.940363247),new u(30,54.938049636),new u(31,55.938909366),new u(32,56.938287458),new u(33,57.939986451),new u(34,58.940447166),new u(35,59.943193998),new u(36,60.94446),new u(37,61.94797),new u(38,62.94981),new u(39,63.95373),new u(40,64.9561),new u(41,65.96082),new u(42,66.96382)]),B(d(Vt,1),Et,3,0,[new u(19,45.01456),new u(20,46.00081),new u(21,46.99289),new u(22,47.98056),new u(23,48.97361),new u(24,49.962993316),new u(25,50.956824936),new u(26,51.948116526),new u(27,52.945312282),new u(28,53.939614836),new u(29,54.938298029),new u(30,55.934942133),new u(31,56.935398707),new u(32,57.933280458),new u(33,58.934880493),new u(34,59.934076943),new u(35,60.936749461),new u(36,61.936770495),new u(37,62.940118442),new u(38,63.94087),new u(39,64.94494),new u(40,65.94598),new u(41,66.95),new u(42,67.95251),new u(43,68.9577)]),B(d(Vt,1),Et,3,0,[new u(21,48.00176),new u(22,48.98972),new u(23,49.98154),new u(24,50.97072),new u(25,51.96359),new u(26,52.954224985),new u(27,53.948464147),new u(28,54.942003149),new u(29,55.939843937),new u(30,56.936296235),new u(31,57.935757571),new u(32,58.933200194),new u(33,59.933822196),new u(34,60.932479381),new u(35,61.934054212),new u(36,62.933615218),new u(37,63.935813523),new u(38,64.936484581),new u(39,65.939825412),new u(40,66.94061),new u(41,67.94436),new u(42,68.9452),new u(43,69.94981),new u(44,70.95173),new u(45,71.95641)]),B(d(Vt,1),Et,3,0,[new u(22,49.99593),new u(23,50.98772),new u(24,51.97568),new u(25,52.96846),new u(26,53.957910508),new u(27,54.951336329),new u(28,55.942136339),new u(29,56.939800489),new u(30,57.935347922),new u(31,58.934351553),new u(32,59.930790633),new u(33,60.931060442),new u(34,61.928348763),new u(35,62.929672948),new u(36,63.927969574),new u(37,64.930088013),new u(38,65.929115232),new u(39,66.931569638),new u(40,67.931844932),new u(41,68.935181837),new u(42,69.93614),new u(43,70.94),new u(44,71.9413),new u(45,72.94608),new u(46,73.94791),new u(47,74.95297),new u(48,75.95533),new u(49,76.96083),new u(50,77.9638)]),B(d(Vt,1),Et,3,0,[new u(23,51.99718),new u(24,52.98555),new u(25,53.97671),new u(26,54.96605),new u(27,55.95856),new u(28,56.949215695),new u(29,57.944540734),new u(30,58.939504114),new u(31,59.937368123),new u(32,60.933462181),new u(33,61.932587299),new u(34,62.929601079),new u(35,63.929767865),new u(36,64.927793707),new u(37,65.928873041),new u(38,66.927750294),new u(39,67.929637875),new u(40,68.929425281),new u(41,69.932409287),new u(42,70.932619818),new u(43,71.93552),new u(44,72.93649),new u(45,73.9402),new u(46,74.9417),new u(47,75.94599),new u(48,76.94795),new u(49,77.95281),new u(50,78.95528),new u(51,79.96189)]),B(d(Vt,1),Et,3,0,[new u(24,53.99295),new u(25,54.98398),new u(26,55.97238),new u(27,56.96491),new u(28,57.954596465),new u(29,58.949267074),new u(30,59.941832031),new u(31,60.939513907),new u(32,61.934334132),new u(33,62.933215563),new u(34,63.929146578),new u(35,64.929245079),new u(36,65.926036763),new u(37,66.927130859),new u(38,67.924847566),new u(39,68.926553538),new u(40,69.92532487),new u(41,70.927727195),new u(42,71.926861122),new u(43,72.929779469),new u(44,73.929458261),new u(45,74.932937379),new u(46,75.933394207),new u(47,76.937085857),new u(48,77.938569576),new u(49,78.942095175),new u(50,79.944414722),new u(51,80.95048),new u(52,81.95484)]),B(d(Vt,1),Et,3,0,[new u(25,55.99491),new u(26,56.98293),new u(27,57.97425),new u(28,58.96337),new u(29,59.95706),new u(30,60.94917),new u(31,61.944179608),new u(32,62.939141527),new u(33,63.936838307),new u(34,64.932739322),new u(35,65.931592355),new u(36,66.928204915),new u(37,67.927983497),new u(38,68.925580912),new u(39,69.926027741),new u(40,70.92470501),new u(41,71.92636935),new u(42,72.925169832),new u(43,73.926940999),new u(44,74.926500645),new u(45,75.928928262),new u(46,76.929281189),new u(47,77.93165595),new u(48,78.932916371),new u(49,79.936588154),new u(50,80.937752955),new u(51,81.94316),new u(52,82.94687),new u(53,83.95234)]),B(d(Vt,1),Et,3,0,[new u(26,57.99101),new u(27,58.98175),new u(28,59.97019),new u(29,60.96379),new u(30,61.95465),new u(31,62.94964),new u(32,63.941572638),new u(33,64.939440762),new u(34,65.933846798),new u(35,66.932738415),new u(36,67.928097266),new u(37,68.927972002),new u(38,69.924250365),new u(39,70.924953991),new u(40,71.922076184),new u(41,72.923459361),new u(42,73.921178213),new u(43,74.922859494),new u(44,75.921402716),new u(45,76.923548462),new u(46,77.922852886),new u(47,78.92540156),new u(48,79.925444764),new u(49,80.928821065),new u(50,81.929550326),new u(51,82.93451),new u(52,83.93731),new u(53,84.94269),new u(54,85.94627)]),B(d(Vt,1),Et,3,0,[new u(27,59.99313),new u(28,60.98062),new u(29,61.9732),new u(30,62.96369),new u(31,63.957572),new u(32,64.949484),new u(33,65.944099147),new u(34,66.939190417),new u(35,67.936792976),new u(36,68.932280154),new u(37,69.930927811),new u(38,70.927114724),new u(39,71.926752647),new u(40,72.923825288),new u(41,73.923929076),new u(42,74.921596417),new u(43,75.922393933),new u(44,76.920647703),new u(45,77.921828577),new u(46,78.920948498),new u(47,79.922578162),new u(48,80.922132884),new u(49,81.924504668),new u(50,82.924980625),new u(51,83.92906),new u(52,84.93181),new u(53,85.93623),new u(54,86.93958),new u(55,87.94456),new u(56,88.94923)]),B(d(Vt,1),Et,3,0,[new u(31,64.96466),new u(32,65.95521),new u(33,66.95009),new u(34,67.94187),new u(35,68.939562155),new u(36,69.933504),new u(37,70.931868378),new u(38,71.927112313),new u(39,72.9267668),new u(40,73.922476561),new u(41,74.922523571),new u(42,75.919214107),new u(43,76.91991461),new u(44,77.917309522),new u(45,78.918499802),new u(46,79.916521828),new u(47,80.917992931),new u(48,81.9167),new u(49,82.919119072),new u(50,83.918464523),new u(51,84.922244678),new u(52,85.924271165),new u(53,86.928520749),new u(54,87.931423982),new u(55,88.93602),new u(56,89.93942),new u(57,90.94537),new u(58,91.94933)]),B(d(Vt,1),Et,3,0,[new u(32,66.96479),new u(33,67.958248),new u(34,68.950178),new u(35,69.944208),new u(36,70.939246),new u(37,71.936496876),new u(38,72.931794889),new u(39,73.929891152),new u(40,74.92577641),new u(41,75.924541974),new u(42,76.921380123),new u(43,77.92114613),new u(44,78.918337647),new u(45,79.918529952),new u(46,80.91629106),new u(47,81.916804666),new u(48,82.915180219),new u(49,83.916503685),new u(50,84.915608027),new u(51,85.918797162),new u(52,86.920710713),new u(53,87.924065908),new u(54,88.92638726),new u(55,89.930634988),new u(56,90.9339653),new u(57,91.939255258),new u(58,92.9431),new u(59,93.94868)]),B(d(Vt,1),Et,3,0,[new u(33,68.96532),new u(34,69.95601),new u(35,70.95051),new u(36,71.94190754),new u(37,72.938931115),new u(38,73.933258225),new u(39,74.931033794),new u(40,75.925948304),new u(41,76.92466788),new u(42,77.920386271),new u(43,78.920082992),new u(44,79.91637804),new u(45,80.916592419),new u(46,81.913484601),new u(47,82.914135952),new u(48,83.911506627),new u(49,84.912526954),new u(50,85.910610313),new u(51,86.913354251),new u(52,87.914446951),new u(53,88.917632505),new u(54,89.919523803),new u(55,90.923442418),new u(56,91.926152752),new u(57,92.931265246),new u(58,93.934362),new u(59,94.93984),new u(60,95.94307),new u(61,96.94856)]),B(d(Vt,1),Et,3,0,[new u(34,70.96532),new u(35,71.95908),new u(36,72.950366),new u(37,73.944470376),new u(38,74.938569199),new u(39,75.935071448),new u(40,76.930406599),new u(41,77.928141485),new u(42,78.923996719),new u(43,79.922519322),new u(44,80.918994165),new u(45,81.918207691),new u(46,82.915111951),new u(47,83.914384676),new u(48,84.911789341),new u(49,85.91116708),new u(50,86.909183465),new u(51,87.911318556),new u(52,88.912279939),new u(53,89.914808941),new u(54,90.91653416),new u(55,91.919725442),new u(56,92.922032765),new u(57,93.926407326),new u(58,94.92931926),new u(59,95.934283962),new u(60,96.937342863),new u(61,97.941703557),new u(62,98.945420616),new u(63,99.94987),new u(64,100.953195994),new u(65,101.95921)]),B(d(Vt,1),Et,3,0,[new u(35,72.96597),new u(36,73.95631),new u(37,74.94992),new u(38,75.94161),new u(39,76.937761511),new u(40,77.932179362),new u(41,78.929707076),new u(42,79.924524588),new u(43,80.923213095),new u(44,81.918401258),new u(45,82.917555029),new u(46,83.913424778),new u(47,84.912932689),new u(48,85.909262351),new u(49,86.908879316),new u(50,87.905614339),new u(51,88.907452906),new u(52,89.907737596),new u(53,90.910209845),new u(54,91.911029895),new u(55,92.91402241),new u(56,93.915359856),new u(57,94.919358213),new u(58,95.921680473),new u(59,96.926148757),new u(60,97.928471177),new u(61,98.933315038),new u(62,99.935351729),new u(63,100.940517434),new u(64,101.943018795),new u(65,102.94895),new u(66,103.95233)]),B(d(Vt,1),Et,3,0,[new u(38,76.94962),new u(39,77.9435),new u(40,78.937350712),new u(41,79.931982402),new u(42,80.929128719),new u(43,81.926792071),new u(44,82.922352572),new u(45,83.920387768),new u(46,84.916427076),new u(47,85.914887724),new u(48,86.910877833),new u(49,87.909503361),new u(50,88.905847902),new u(51,89.907151443),new u(52,90.907303415),new u(53,91.908946832),new u(54,92.909581582),new u(55,93.911594008),new u(56,94.912823709),new u(57,95.915897787),new u(58,96.918131017),new u(59,97.922219525),new u(60,98.924634736),new u(61,99.927756402),new u(62,100.930313395),new u(63,101.933555501),new u(64,102.93694),new u(65,103.94145),new u(66,104.94509),new u(67,105.95022)]),B(d(Vt,1),Et,3,0,[new u(39,78.94916),new u(40,79.94055),new u(41,80.936815296),new u(42,81.931086249),new u(43,82.92865213),new u(44,83.92325),new u(45,84.92146522),new u(46,85.916472851),new u(47,86.914816578),new u(48,87.910226179),new u(49,88.908888916),new u(50,89.904703679),new u(51,90.905644968),new u(52,91.905040106),new u(53,92.906475627),new u(54,93.906315765),new u(55,94.908042739),new u(56,95.908275675),new u(57,96.910950716),new u(58,97.912746366),new u(59,98.916511084),new u(60,99.917761704),new u(61,100.921139958),new u(62,101.922981089),new u(63,102.926597062),new u(64,103.92878),new u(65,104.93305),new u(66,105.93591),new u(67,106.94086),new u(68,107.94428)]),B(d(Vt,1),Et,3,0,[new u(40,80.94905),new u(41,81.94313),new u(42,82.936703713),new u(43,83.93357),new u(44,84.927906486),new u(45,85.925037588),new u(46,86.920361435),new u(47,87.91833144),new u(48,88.913495503),new u(49,89.911264109),new u(50,90.906990538),new u(51,91.907193214),new u(52,92.906377543),new u(53,93.907283457),new u(54,94.906835178),new u(55,95.908100076),new u(56,96.908097144),new u(57,97.91033069),new u(58,98.911617864),new u(59,99.914181434),new u(60,100.915251567),new u(61,101.918037417),new u(62,102.919141297),new u(63,103.922459464),new u(64,104.923934023),new u(65,105.92819),new u(66,106.93031),new u(67,107.93501),new u(68,108.93763),new u(69,109.94268)]),B(d(Vt,1),Et,3,0,[new u(41,82.94874),new u(42,83.94009),new u(43,84.93659),new u(44,85.930695167),new u(45,86.92732683),new u(46,87.921952728),new u(47,88.919480562),new u(48,89.913936161),new u(49,90.911750754),new u(50,91.90681048),new u(51,92.906812213),new u(52,93.905087578),new u(53,94.905841487),new u(54,95.904678904),new u(55,96.906021033),new u(56,97.905407846),new u(57,98.907711598),new u(58,99.907477149),new u(59,100.910346543),new u(60,101.910297162),new u(61,102.913204596),new u(62,103.913758387),new u(63,104.916972087),new u(64,105.918134284),new u(65,106.921694724),new u(66,107.923973837),new u(67,108.92781),new u(68,109.92973),new u(69,110.93451),new u(70,111.93684),new u(71,112.94203)]),B(d(Vt,1),Et,3,0,[new u(42,84.94894),new u(43,85.94288),new u(44,86.93653),new u(45,87.93283),new u(46,88.92754288),new u(47,89.92355583),new u(48,90.9184282),new u(49,91.915259655),new u(50,92.910248473),new u(51,93.909656309),new u(52,94.907656454),new u(53,95.907870803),new u(54,96.906364843),new u(55,97.907215692),new u(56,98.906254554),new u(57,99.907657594),new u(58,100.90731438),new u(59,101.909212938),new u(60,102.909178805),new u(61,103.911444898),new u(62,104.911658043),new u(63,105.914355408),new u(64,106.915081691),new u(65,107.918479973),new u(66,108.919980998),new u(67,109.92339),new u(68,110.92505),new u(69,111.92924),new u(70,112.93133),new u(71,113.93588),new u(72,114.93828)]),B(d(Vt,1),Et,3,0,[new u(43,86.94918),new u(44,87.94042),new u(45,88.93611),new u(46,89.92978),new u(47,90.926377434),new u(48,91.92012),new u(49,92.917051523),new u(50,93.911359569),new u(51,94.910412729),new u(52,95.907597681),new u(53,96.907554546),new u(54,97.905287111),new u(55,98.905939307),new u(56,99.904219664),new u(57,100.905582219),new u(58,101.904349503),new u(59,102.906323677),new u(60,103.905430145),new u(61,104.907750341),new u(62,105.907326913),new u(63,106.909907207),new u(64,107.910192211),new u(65,108.913201565),new u(66,109.913966185),new u(67,110.91756),new u(68,111.918821673),new u(69,112.92254),new u(70,113.923891981),new u(71,114.92831),new u(72,115.93016),new u(73,116.93479),new u(74,117.93703)]),B(d(Vt,1),Et,3,0,[new u(44,88.94938),new u(45,89.94287),new u(46,90.93655),new u(47,91.93198),new u(48,92.92574),new u(49,93.921698),new u(50,94.915898541),new u(51,95.914518212),new u(52,96.911336643),new u(53,97.910716431),new u(54,98.908132101),new u(55,99.90811663),new u(56,100.906163526),new u(57,101.906842845),new u(58,102.905504182),new u(59,103.906655315),new u(60,104.905692444),new u(61,105.907284615),new u(62,106.90675054),new u(63,107.908730768),new u(64,108.908735621),new u(65,109.910949525),new u(66,110.91166),new u(67,111.913969253),new u(68,112.91542),new u(69,113.91734336),new u(70,114.920124676),new u(71,115.922746643),new u(72,116.92535),new u(73,117.92943),new u(74,118.93136),new u(75,119.93578),new u(76,120.93808)]),B(d(Vt,1),Et,3,0,[new u(45,90.94948),new u(46,91.94042),new u(47,92.93591),new u(48,93.92877),new u(49,94.92469),new u(50,95.91822194),new u(51,96.916478921),new u(52,97.912720751),new u(53,98.911767757),new u(54,99.908504596),new u(55,100.908289144),new u(56,101.905607716),new u(57,102.906087204),new u(58,103.904034912),new u(59,104.905084046),new u(60,105.903483087),new u(61,106.905128453),new u(62,107.903894451),new u(63,108.905953535),new u(64,109.905152385),new u(65,110.907643952),new u(66,111.907313277),new u(67,112.910151346),new u(68,113.910365322),new u(69,114.91368341),new u(70,115.914158288),new u(71,116.91784),new u(72,117.918983915),new u(73,118.92268),new u(74,119.92403),new u(75,120.92818),new u(76,121.9298),new u(77,122.93426)]),B(d(Vt,1),Et,3,0,[new u(47,93.94278),new u(48,94.93548),new u(49,95.93068),new u(50,96.924),new u(51,97.921759995),new u(52,98.917597103),new u(53,99.916069387),new u(54,100.912802135),new u(55,101.911999996),new u(56,102.908972453),new u(57,103.908628228),new u(58,104.906528234),new u(59,105.906666431),new u(60,106.90509302),new u(61,107.905953705),new u(62,108.904755514),new u(63,109.90611046),new u(64,110.905294679),new u(65,111.907004132),new u(66,112.906565708),new u(67,113.908807907),new u(68,114.908762282),new u(69,115.911359558),new u(70,116.911684187),new u(71,117.914582383),new u(72,118.915666045),new u(73,119.918788609),new u(74,120.919851074),new u(75,121.92332),new u(76,122.9249),new u(77,123.92853),new u(78,124.93054),new u(79,125.9345),new u(80,126.93688)]),B(d(Vt,1),Et,3,0,[new u(48,95.93977),new u(49,96.93494),new u(50,97.927579),new u(51,98.92501),new u(52,99.920230232),new u(53,100.918681442),new u(54,101.914777255),new u(55,102.913418952),new u(56,103.909848091),new u(57,104.909467818),new u(58,105.906458007),new u(59,106.906614232),new u(60,107.904183403),new u(61,108.904985569),new u(62,109.903005578),new u(63,110.904181628),new u(64,111.902757226),new u(65,112.904400947),new u(66,113.903358121),new u(67,114.905430553),new u(68,115.904755434),new u(69,116.907218242),new u(70,117.906914144),new u(71,118.909922582),new u(72,119.909851352),new u(73,120.91298039),new u(74,121.9135),new u(75,122.917003675),new u(76,123.917648302),new u(77,124.92124717),new u(78,125.922353996),new u(79,126.926434822),new u(80,127.927760617),new u(81,128.93226),new u(82,129.93398)]),B(d(Vt,1),Et,3,0,[new u(49,97.94224),new u(50,98.93461),new u(51,99.931149033),new u(52,100.92656),new u(53,101.924707541),new u(54,102.919913896),new u(55,103.918338416),new u(56,104.914673434),new u(57,105.913461134),new u(58,106.910292195),new u(59,107.909719683),new u(60,108.907154078),new u(61,109.907168783),new u(62,110.905110677),new u(63,111.905533338),new u(64,112.904061223),new u(65,113.904916758),new u(66,114.903878328),new u(67,115.905259995),new u(68,116.904515731),new u(69,117.906354623),new u(70,118.905846334),new u(71,119.907961505),new u(72,120.907848847),new u(73,121.910277103),new u(74,122.910438951),new u(75,123.913175916),new u(76,124.913601387),new u(77,125.916464532),new u(78,126.917344048),new u(79,127.920170658),new u(80,128.921657958),new u(81,129.924854941),new u(82,130.926767408),new u(83,131.932919005),new u(84,132.93834),new u(85,133.94466)]),B(d(Vt,1),Et,3,0,[new u(50,99.938954),new u(51,100.93606),new u(52,101.93049),new u(53,102.92813),new u(54,103.923185469),new u(55,104.921390409),new u(56,105.916880472),new u(57,106.915666702),new u(58,107.911965339),new u(59,108.911286879),new u(60,109.907852688),new u(61,110.907735404),new u(62,111.90482081),new u(63,112.905173373),new u(64,113.902781816),new u(65,114.903345973),new u(66,115.901744149),new u(67,116.902953765),new u(68,117.901606328),new u(69,118.90330888),new u(70,119.902196571),new u(71,120.904236867),new u(72,121.903440138),new u(73,122.905721901),new u(74,123.90527463),new u(75,124.907784924),new u(76,125.907653953),new u(77,126.91035098),new u(78,127.910534953),new u(79,128.913439976),new u(80,129.913852185),new u(81,130.916919144),new u(82,131.917744455),new u(83,132.923814085),new u(84,133.928463576),new u(85,134.93473),new u(86,135.93934),new u(87,136.94579)]),B(d(Vt,1),Et,3,0,[new u(52,102.94012),new u(53,103.936287),new u(54,104.931528593),new u(55,105.928183134),new u(56,106.92415),new u(57,107.92216),new u(58,108.918136092),new u(59,109.917533911),new u(60,110.912534147),new u(61,111.91239464),new u(62,112.909377941),new u(63,113.909095876),new u(64,114.906598812),new u(65,115.906797235),new u(66,116.90483959),new u(67,117.905531885),new u(68,118.90394646),new u(69,119.905074315),new u(70,120.903818044),new u(71,121.905175415),new u(72,122.904215696),new u(73,123.905937525),new u(74,124.905247804),new u(75,125.907248153),new u(76,126.906914564),new u(77,127.90916733),new u(78,128.909150092),new u(79,129.911546459),new u(80,130.911946487),new u(81,131.914413247),new u(82,132.915236466),new u(83,133.920551554),new u(84,134.925167962),new u(85,135.93066),new u(86,136.93531),new u(87,137.94096),new u(88,138.94571)]),B(d(Vt,1),Et,3,0,[new u(54,105.937702),new u(55,106.935036),new u(56,107.929486838),new u(57,108.927456483),new u(58,109.922407164),new u(59,110.921120589),new u(60,111.917061617),new u(61,112.915452551),new u(62,113.912498025),new u(63,114.911578627),new u(64,115.908420253),new u(65,116.90863418),new u(66,117.905825187),new u(67,118.90640811),new u(68,119.904019891),new u(69,120.904929815),new u(70,121.903047064),new u(71,122.904272951),new u(72,123.902819466),new u(73,124.904424718),new u(74,125.903305543),new u(75,126.90521729),new u(76,127.904461383),new u(77,128.906595593),new u(78,129.906222753),new u(79,130.90852188),new u(80,131.908523782),new u(81,132.910939068),new u(82,133.911540546),new u(83,134.916450782),new u(84,135.920103155),new u(85,136.925324769),new u(86,137.92922),new u(87,138.93473),new u(88,139.9387),new u(89,140.94439),new u(90,141.9485)]),B(d(Vt,1),Et,3,0,[new u(55,107.943291),new u(56,108.938191658),new u(57,109.934634181),new u(58,110.930276),new u(59,111.92797),new u(60,112.923644245),new u(61,113.92185),new u(62,114.918272),new u(63,115.916735014),new u(64,116.913647692),new u(65,117.91337523),new u(66,118.910180837),new u(67,119.910047843),new u(68,120.907366063),new u(69,121.907592451),new u(70,122.905597944),new u(71,123.906211423),new u(72,124.90462415),new u(73,125.905619387),new u(74,126.90446842),new u(75,127.905805254),new u(76,128.904987487),new u(77,129.906674018),new u(78,130.906124168),new u(79,131.907994525),new u(80,132.907806465),new u(81,133.909876552),new u(82,134.91005031),new u(83,135.914655105),new u(84,136.917872653),new u(85,137.922383666),new u(86,138.926093402),new u(87,139.93121),new u(88,140.93483),new u(89,141.94018),new u(90,142.94407),new u(91,143.94961)]),B(d(Vt,1),Et,3,0,[new u(56,109.944476),new u(57,110.941632),new u(58,111.93566535),new u(59,112.933382836),new u(60,113.928145),new u(61,114.926979032),new u(62,115.921394197),new u(63,116.920564355),new u(64,117.91657092),new u(65,118.915554295),new u(66,119.91215199),new u(67,120.911386497),new u(68,121.908548396),new u(69,122.908470748),new u(70,123.905895774),new u(71,124.906398236),new u(72,125.904268868),new u(73,126.905179581),new u(74,127.903530436),new u(75,128.904779458),new u(76,129.903507903),new u(77,130.90508192),new u(78,131.904154457),new u(79,132.90590566),new u(80,133.905394504),new u(81,134.907207499),new u(82,135.907219526),new u(83,136.911562939),new u(84,137.913988549),new u(85,138.918786859),new u(86,139.921635665),new u(87,140.926646282),new u(88,141.929702981),new u(89,142.93489),new u(90,143.93823),new u(91,144.94367),new u(92,145.9473),new u(93,146.95301)]),B(d(Vt,1),Et,3,0,[new u(57,111.950331),new u(58,112.944535512),new u(59,113.940841319),new u(60,114.935939),new u(61,115.932914152),new u(62,116.928639484),new u(63,117.926554883),new u(64,118.922370879),new u(65,119.920678219),new u(66,120.917183637),new u(67,121.916121946),new u(68,122.912990168),new u(69,123.912245731),new u(70,124.909724871),new u(71,125.909447953),new u(72,126.9074176),new u(73,127.907747919),new u(74,128.906063369),new u(75,129.906706163),new u(76,130.905460232),new u(77,131.906429799),new u(78,132.90544687),new u(79,133.906713419),new u(80,134.905971903),new u(81,135.907305741),new u(82,136.907083505),new u(83,137.911010537),new u(84,138.913357921),new u(85,139.917277075),new u(86,140.920043984),new u(87,141.924292317),new u(88,142.927330292),new u(89,143.932027373),new u(90,144.935388226),new u(91,145.940162028),new u(92,146.943864435),new u(93,147.948899539),new u(94,148.95272),new u(95,149.95797),new u(96,150.962)]),B(d(Vt,1),Et,3,0,[new u(58,113.950941),new u(59,114.94771),new u(60,115.94168),new u(61,116.937700229),new u(62,117.93344),new u(63,118.931051927),new u(64,119.926045941),new u(65,120.924485908),new u(66,121.92026),new u(67,122.91885),new u(68,123.915088437),new u(69,124.914620234),new u(70,125.911244146),new u(71,126.911121328),new u(72,127.90830887),new u(73,128.908673749),new u(74,129.906310478),new u(75,130.906930798),new u(76,131.905056152),new u(77,132.906002368),new u(78,133.904503347),new u(79,134.905682749),new u(80,135.904570109),new u(81,136.905821414),new u(82,137.905241273),new u(83,138.908835384),new u(84,139.910599485),new u(85,140.914406439),new u(86,141.916448175),new u(87,142.920617184),new u(88,143.922940468),new u(89,144.926923807),new u(90,145.930106645),new u(91,146.933992519),new u(92,147.937682377),new u(93,148.94246),new u(94,149.94562),new u(95,150.9507),new u(96,151.95416),new u(97,152.95961)]),B(d(Vt,1),Et,3,0,[new u(60,116.95001),new u(61,117.94657),new u(62,118.94099),new u(63,119.93807),new u(64,120.93301),new u(65,121.93071),new u(66,122.92624),new u(67,123.92453),new u(68,124.92067),new u(69,125.91937),new u(70,126.91616),new u(71,127.91544794),new u(72,128.912667334),new u(73,129.91232),new u(74,130.910108489),new u(75,131.910110399),new u(76,132.908396372),new u(77,133.908489607),new u(78,134.906971003),new u(79,135.907651181),new u(80,136.906465656),new u(81,137.907106826),new u(82,138.90634816),new u(83,139.909472552),new u(84,140.910957016),new u(85,141.914074489),new u(86,142.916058646),new u(87,143.919591666),new u(88,144.92163837),new u(89,145.925700146),new u(90,146.927819639),new u(91,147.932191197),new u(92,148.93437),new u(93,149.93857),new u(94,150.94156),new u(95,151.94611),new u(96,152.94945),new u(97,153.9544),new u(98,154.95813)]),B(d(Vt,1),Et,3,0,[new u(61,118.95276),new u(62,119.94664),new u(63,120.94367),new u(64,121.93801),new u(65,122.93551),new u(66,123.93052),new u(67,124.92854),new u(68,125.9241),new u(69,126.92275),new u(70,127.91887),new u(71,128.918679183),new u(72,129.914339361),new u(73,130.914424137),new u(74,131.91149),new u(75,132.91155),new u(76,133.909026379),new u(77,134.909145555),new u(78,135.907143574),new u(79,136.907777634),new u(80,137.905985574),new u(81,138.906646605),new u(82,139.905434035),new u(83,140.908271103),new u(84,141.909239733),new u(85,142.912381158),new u(86,143.913642686),new u(87,144.917227871),new u(88,145.918689722),new u(89,146.922510962),new u(90,147.924394738),new u(91,148.928289207),new u(92,149.930226399),new u(93,150.93404),new u(94,151.93638),new u(95,152.94058),new u(96,153.94332),new u(97,154.94804),new u(98,155.95126),new u(99,156.95634)]),B(d(Vt,1),Et,3,0,[new u(62,120.955364),new u(63,121.95165),new u(64,122.94596),new u(65,123.94296),new u(66,124.93783),new u(67,125.93531),new u(68,126.93083),new u(69,127.9288),new u(70,128.92486),new u(71,129.92338),new u(72,130.920060245),new u(73,131.91912),new u(74,132.9162),new u(75,133.915672),new u(76,134.91313914),new u(77,135.912646935),new u(78,136.910678351),new u(79,137.910748891),new u(80,138.908932181),new u(81,139.909071204),new u(82,140.907647726),new u(83,141.910039865),new u(84,142.910812233),new u(85,143.913300595),new u(86,144.914506897),new u(87,145.917588016),new u(88,146.918979001),new u(89,147.922183237),new u(90,148.923791056),new u(91,149.926995031),new u(92,150.928227869),new u(93,151.9316),new u(94,152.93365),new u(95,153.93739),new u(96,154.93999),new u(97,155.94412),new u(98,156.94717),new u(99,157.95178),new u(100,158.95523)]),B(d(Vt,1),Et,3,0,[new u(66,125.94307),new u(67,126.9405),new u(68,127.93539),new u(69,128.932385),new u(70,129.92878),new u(71,130.927102697),new u(72,131.92312),new u(73,132.92221),new u(74,133.918645),new u(75,134.91824),new u(76,135.915020542),new u(77,136.91463973),new u(78,137.91291745),new u(79,138.91192415),new u(80,139.909309824),new u(81,140.9096048),new u(82,141.907718643),new u(83,142.909809626),new u(84,143.910082629),new u(85,144.912568847),new u(86,145.913112139),new u(87,146.916095794),new u(88,147.916888516),new u(89,148.92014419),new u(90,149.920886563),new u(91,150.923824739),new u(92,151.924682428),new u(93,152.927694534),new u(94,153.929483295),new u(95,154.932629551),new u(96,155.9352),new u(97,156.93927),new u(98,157.94187),new u(99,158.94639),new u(100,159.94939),new u(101,160.95433)]),B(d(Vt,1),Et,3,0,[new u(67,127.94826),new u(68,128.94316),new u(69,129.94045),new u(70,130.9358),new u(71,131.93375),new u(72,132.92972),new u(73,133.92849),new u(74,134.924617),new u(75,135.923447865),new u(76,136.920713),new u(77,137.920432261),new u(78,138.916759814),new u(79,139.915801649),new u(80,140.913606636),new u(81,141.912950738),new u(82,142.910927571),new u(83,143.912585768),new u(84,144.912743879),new u(85,145.914692165),new u(86,146.915133898),new u(87,147.917467786),new u(88,148.918329195),new u(89,149.920979477),new u(90,150.921202693),new u(91,151.923490557),new u(92,152.924113189),new u(93,153.926547019),new u(94,154.928097047),new u(95,155.931060357),new u(96,156.9332),new u(97,157.93669),new u(98,158.93913),new u(99,159.94299),new u(100,160.94586),new u(101,161.95029),new u(102,162.95352)]),B(d(Vt,1),Et,3,0,[new u(68,129.94863),new u(69,130.94589),new u(70,131.94082),new u(71,132.93873),new u(72,133.93402),new u(73,134.93235),new u(74,135.9283),new u(75,136.927046709),new u(76,137.92354),new u(77,138.922302),new u(78,139.918991),new u(79,140.918468512),new u(80,141.915193274),new u(81,142.914623555),new u(82,143.91199473),new u(83,144.913405611),new u(84,145.91303676),new u(85,146.914893275),new u(86,147.914817914),new u(87,148.917179521),new u(88,149.917271454),new u(89,150.919928351),new u(90,151.919728244),new u(91,152.922093907),new u(92,153.922205303),new u(93,154.92463594),new u(94,155.925526236),new u(95,156.928354506),new u(96,157.929987938),new u(97,158.9332),new u(98,159.93514),new u(99,160.93883),new u(100,161.94122),new u(101,162.94536),new u(102,163.94828),new u(103,164.95298)]),B(d(Vt,1),Et,3,0,[new u(69,131.95416),new u(70,132.9489),new u(71,133.94632),new u(72,134.94172),new u(73,135.9395),new u(74,136.93521),new u(75,137.93345),new u(76,138.92882915),new u(77,139.928083921),new u(78,140.924885867),new u(79,141.923400033),new u(80,142.920286634),new u(81,143.918774116),new u(82,144.916261285),new u(83,145.917199714),new u(84,146.916741206),new u(85,147.918153775),new u(86,148.917925922),new u(87,149.919698294),new u(88,150.919846022),new u(89,151.921740399),new u(90,152.921226219),new u(91,153.922975386),new u(92,154.922889429),new u(93,155.924750855),new u(94,156.925419435),new u(95,157.927841923),new u(96,158.9290845),new u(97,159.931460406),new u(98,160.93368),new u(99,161.93704),new u(100,162.93921),new u(101,163.94299),new u(102,164.94572),new u(103,165.94997),new u(104,166.95305)]),B(d(Vt,1),Et,3,0,[new u(72,135.94707),new u(73,136.94465),new u(74,137.93997),new u(75,138.93808),new u(76,139.933236934),new u(77,140.93221),new u(78,141.927908919),new u(79,142.926738636),new u(80,143.923390357),new u(81,144.921687498),new u(82,145.918305344),new u(83,146.919089446),new u(84,147.918109771),new u(85,148.919336427),new u(86,149.918655455),new u(87,150.920344273),new u(88,151.919787882),new u(89,152.921746283),new u(90,153.920862271),new u(91,154.922618801),new u(92,155.922119552),new u(93,156.923956686),new u(94,157.924100533),new u(95,158.926385075),new u(96,159.927050616),new u(97,160.929665688),new u(98,161.930981211),new u(99,162.93399),new u(100,163.93586),new u(101,164.93938),new u(102,165.9416),new u(103,166.94557),new u(104,167.94836),new u(105,168.95287)]),B(d(Vt,1),Et,3,0,[new u(73,137.95287),new u(74,138.94803),new u(75,139.945367985),new u(76,140.94116),new u(77,141.939073781),new u(78,142.93475),new u(79,143.93253),new u(80,144.92888),new u(81,145.927180629),new u(82,146.924037176),new u(83,147.924298636),new u(84,148.92324163),new u(85,149.923654158),new u(86,150.923098169),new u(87,151.924071324),new u(88,152.923430858),new u(89,153.924686236),new u(90,154.923500411),new u(91,155.924743749),new u(92,156.924021155),new u(93,157.92541026),new u(94,158.925343135),new u(95,159.927164021),new u(96,160.927566289),new u(97,161.929484803),new u(98,162.930643942),new u(99,163.933347253),new u(100,164.93488),new u(101,165.93805),new u(102,166.94005),new u(103,167.94364),new u(104,168.94622),new u(105,169.95025),new u(106,170.9533)]),B(d(Vt,1),Et,3,0,[new u(74,139.95379),new u(75,140.95119),new u(76,141.946695946),new u(77,142.94383),new u(78,143.93907),new u(79,144.936717),new u(80,145.932720118),new u(81,146.930878496),new u(82,147.927177882),new u(83,148.927333981),new u(84,149.925579728),new u(85,150.92617963),new u(86,151.924713874),new u(87,152.925760865),new u(88,153.924422046),new u(89,154.92574895),new u(90,155.924278273),new u(91,156.925461256),new u(92,157.924404637),new u(93,158.92573566),new u(94,159.925193718),new u(95,160.926929595),new u(96,161.926794731),new u(97,162.928727532),new u(98,163.929171165),new u(99,164.931699828),new u(100,165.932803241),new u(101,166.935649025),new u(102,167.93723),new u(103,168.940303648),new u(104,169.94267),new u(105,170.94648),new u(106,171.94911),new u(107,172.95344)]),B(d(Vt,1),Et,3,0,[new u(75,141.95986),new u(76,142.95469),new u(77,143.95164),new u(78,144.94688),new u(79,145.9441),new u(80,146.93984),new u(81,147.937269),new u(82,148.933789944),new u(83,149.932760914),new u(84,150.931680791),new u(85,151.931740598),new u(86,152.930194506),new u(87,153.930596268),new u(88,154.929079084),new u(89,155.929001869),new u(90,156.928188059),new u(91,157.92894573),new u(92,158.927708537),new u(93,159.928725679),new u(94,160.927851662),new u(95,161.92909242),new u(96,162.928730286),new u(97,163.930230577),new u(98,164.930319169),new u(99,165.932281267),new u(100,166.933126195),new u(101,167.935496424),new u(102,168.936868306),new u(103,169.939614951),new u(104,170.941461227),new u(105,171.94482),new u(106,172.94729),new u(107,173.95115),new u(108,174.95405)]),B(d(Vt,1),Et,3,0,[new u(76,143.96059),new u(77,144.95746),new u(78,145.95212),new u(79,146.94931),new u(80,147.94444),new u(81,148.942780527),new u(82,149.937171034),new u(83,150.93746),new u(84,151.935078452),new u(85,152.935093125),new u(86,153.932777294),new u(87,154.933204273),new u(88,155.931015001),new u(89,156.931945517),new u(90,157.929912),new u(91,158.930680718),new u(92,159.929078924),new u(93,160.930001348),new u(94,161.928774923),new u(95,162.930029273),new u(96,163.929196996),new u(97,164.9307228),new u(98,165.93028997),new u(99,166.932045448),new u(100,167.932367781),new u(101,168.934588082),new u(102,169.935460334),new u(103,170.938025885),new u(104,171.939352149),new u(105,172.9424),new u(106,173.94434),new u(107,174.94793),new u(108,175.95029),new u(109,176.95437)]),B(d(Vt,1),Et,3,0,[new u(77,145.966495),new u(78,146.961081),new u(79,147.95755),new u(80,148.95265),new u(81,149.94967),new u(82,150.944842),new u(83,151.9443),new u(84,152.942027631),new u(85,153.940832325),new u(86,154.939191562),new u(87,155.939006895),new u(88,156.936756069),new u(89,157.936996),new u(90,158.934808966),new u(91,159.935090772),new u(92,160.933398042),new u(93,161.933970147),new u(94,162.932647648),new u(95,163.933450972),new u(96,164.932432463),new u(97,165.933553133),new u(98,166.932848844),new u(99,167.934170375),new u(100,168.934211117),new u(101,169.935797877),new u(102,170.936425817),new u(103,171.938396118),new u(104,172.939600336),new u(105,173.942164618),new u(106,174.943832897),new u(107,175.946991412),new u(108,176.94904),new u(109,177.95264),new u(110,178.95534)]),B(d(Vt,1),Et,3,0,[new u(78,147.96676),new u(79,148.96348),new u(80,149.95799),new u(81,150.954657965),new u(82,151.950167),new u(83,152.94921),new u(84,153.945651145),new u(85,154.945792),new u(86,155.942847109),new u(87,156.94265865),new u(88,157.939857897),new u(89,158.940153735),new u(90,159.93756),new u(91,160.937357719),new u(92,161.93575),new u(93,162.936265492),new u(94,163.93452),new u(95,164.935397592),new u(96,165.933879623),new u(97,166.934946862),new u(98,167.933894465),new u(99,168.93518712),new u(100,169.934758652),new u(101,170.936322297),new u(102,171.936377696),new u(103,172.938206756),new u(104,173.938858101),new u(105,174.941272494),new u(106,175.942568409),new u(107,176.945257126),new u(108,177.946643396),new u(109,178.95017),new u(110,179.95233),new u(111,180.95615)]),B(d(Vt,1),Et,3,0,[new u(79,149.972668),new u(80,150.967147),new u(81,151.96361),new u(82,152.95869),new u(83,153.9571),new u(84,154.953641324),new u(85,155.952907),new u(86,156.950101536),new u(87,157.948577981),new u(88,158.946615113),new u(89,159.945383),new u(90,160.943047504),new u(91,161.943222),new u(92,162.941203796),new u(93,163.941215),new u(94,164.939605886),new u(95,165.939762646),new u(96,166.938307056),new u(97,167.938698576),new u(98,168.937648757),new u(99,169.93847219),new u(100,170.937909903),new u(101,171.939082239),new u(102,172.938926901),new u(103,173.940333522),new u(104,174.940767904),new u(105,175.942682399),new u(106,176.943754987),new u(107,177.945951366),new u(108,178.947324216),new u(109,179.949879968),new u(110,180.95197),new u(111,181.95521),new u(112,182.95757),new u(113,183.96117)]),B(d(Vt,1),Et,3,0,[new u(82,153.96425),new u(83,154.96276),new u(84,155.959247),new u(85,156.958127),new u(86,157.95405528),new u(87,158.954003),new u(88,159.950713588),new u(89,160.950330852),new u(90,161.947202977),new u(91,162.947057),new u(92,163.944422),new u(93,164.94454),new u(94,165.94225),new u(95,166.9426),new u(96,167.94063),new u(97,168.941158567),new u(98,169.93965),new u(99,170.94049),new u(100,171.93945798),new u(101,172.94065),new u(102,173.940040159),new u(103,174.941502991),new u(104,175.941401828),new u(105,176.943220013),new u(106,177.943697732),new u(107,178.945815073),new u(108,179.94654876),new u(109,180.949099124),new u(110,181.950552893),new u(111,182.953531012),new u(112,183.95544788),new u(113,184.95878),new u(114,185.96092)]),B(d(Vt,1),Et,3,0,[new u(83,155.971689),new u(84,156.968145),new u(85,157.966368),new u(86,158.96232309),new u(87,159.961358),new u(88,160.958372992),new u(89,161.956556553),new u(90,162.95431665),new u(91,163.95357),new u(92,164.950817),new u(93,165.95047),new u(94,166.948639),new u(95,167.947787),new u(96,168.94592),new u(97,169.94609),new u(98,170.94446),new u(99,171.944739818),new u(100,172.94459),new u(101,173.944167937),new u(102,174.94365),new u(103,175.944740551),new u(104,176.944471766),new u(105,177.945750349),new u(106,178.945934113),new u(107,179.947465655),new u(108,180.947996346),new u(109,181.950152414),new u(110,182.951373188),new u(111,183.954009331),new u(112,184.955559086),new u(113,185.9585501),new u(114,186.96041),new u(115,187.96371)]),B(d(Vt,1),Et,3,0,[new u(84,157.973939),new u(85,158.97228),new u(86,159.968369),new u(87,160.967089),new u(88,161.962750303),new u(89,162.962532),new u(90,163.95898381),new u(91,164.958335962),new u(92,165.955019896),new u(93,166.954672),new u(94,167.951863),new u(95,168.951759),new u(96,169.948473988),new u(97,170.94946),new u(98,171.948228837),new u(99,172.948884),new u(100,173.94616),new u(101,174.94677),new u(102,175.94559),new u(103,176.94662),new u(104,177.945848364),new u(105,178.947071733),new u(106,179.946705734),new u(107,180.948198054),new u(108,181.948205519),new u(109,182.950224458),new u(110,183.950932553),new u(111,184.953420586),new u(112,185.954362204),new u(113,186.957158365),new u(114,187.958486954),new u(115,188.96191222),new u(116,189.963179541)]),B(d(Vt,1),Et,3,0,[new u(85,159.981485),new u(86,160.977661),new u(87,161.975707),new u(88,162.971375872),new u(89,163.970319),new u(90,164.967050268),new u(91,165.965211372),new u(92,166.962564),new u(93,167.961609),new u(94,168.95883),new u(95,169.958163),new u(96,170.955547),new u(97,171.955285),new u(98,172.953062),new u(99,173.952114),new u(100,174.951393),new u(101,175.95157),new u(102,176.95027),new u(103,177.950851081),new u(104,178.949981038),new u(105,179.95078768),new u(106,180.950064596),new u(107,181.951211444),new u(108,182.950821349),new u(109,183.952524289),new u(110,184.952955747),new u(111,185.954986529),new u(112,186.955750787),new u(113,187.958112287),new u(114,188.959228359),new u(115,189.961816139),new u(116,190.963123592),new u(117,191.96596)]),B(d(Vt,1),Et,3,0,[new u(86,161.983819),new u(87,162.982048),new u(88,163.977927),new u(89,164.976475),new u(90,165.971934911),new u(91,166.971554),new u(92,167.967832911),new u(93,168.967076205),new u(94,169.963569716),new u(95,170.96304),new u(96,171.960078),new u(97,172.959791),new u(98,173.956307704),new u(99,174.95708),new u(100,175.953757941),new u(101,176.955045),new u(102,177.953348225),new u(103,178.953951),new u(104,179.952308241),new u(105,180.953274494),new u(106,181.952186222),new u(107,182.95311),new u(108,183.952490808),new u(109,184.954043023),new u(110,185.953838355),new u(111,186.955747928),new u(112,187.955835993),new u(113,188.958144866),new u(114,189.95844521),new u(115,190.960927951),new u(116,191.961479047),new u(117,192.964148083),new u(118,193.965179314),new u(119,194.968123889),new u(120,195.96962255)]),B(d(Vt,1),Et,3,0,[new u(88,164.98758),new u(89,165.985506),new u(90,166.980951577),new u(91,167.979966),new u(92,168.976390868),new u(93,169.974441697),new u(94,170.971779),new u(95,171.970643),new u(96,172.967707),new u(97,173.966804),new u(98,174.964279),new u(99,175.963511),new u(100,176.96117),new u(101,177.960084944),new u(102,178.95915),new u(103,179.958555615),new u(104,180.957642156),new u(105,181.958127689),new u(106,182.956814),new u(107,183.957388318),new u(108,184.95659),new u(109,185.957951104),new u(110,186.95736083),new u(111,187.958851962),new u(112,188.958716473),new u(113,189.960592299),new u(114,190.960591191),new u(115,191.962602198),new u(116,192.9629237),new u(117,193.96507561),new u(118,194.9659768),new u(119,195.968379906),new u(120,196.969636496),new u(121,197.97228),new u(122,198.973787159)]),B(d(Vt,1),Et,3,0,[new u(90,167.988035),new u(91,168.986421),new u(92,169.981734918),new u(93,170.981251),new u(94,171.977376138),new u(95,172.976499642),new u(96,173.972811276),new u(97,174.972276),new u(98,175.969),new u(99,176.968453),new u(100,177.964894223),new u(101,178.965475),new u(102,179.962023729),new u(103,180.963177),new u(104,181.961267637),new u(105,182.961729),new u(106,183.959851685),new u(107,184.960753782),new u(108,185.959432346),new u(109,186.960697),new u(110,187.959395697),new u(111,188.9608319),new u(112,189.959930073),new u(113,190.961684653),new u(114,191.961035158),new u(115,192.962984504),new u(116,193.962663581),new u(117,194.964774449),new u(118,195.964934884),new u(119,196.967323401),new u(120,197.967876009),new u(121,198.970576213),new u(122,199.971423885),new u(123,200.974496467),new u(124,201.97574)]),B(d(Vt,1),Et,3,0,[new u(92,170.991183),new u(93,171.990109),new u(94,172.986398138),new u(95,173.984325861),new u(96,174.981552),new u(97,175.980269),new u(98,176.977215),new u(99,177.975975),new u(100,178.973412),new u(101,179.972396),new u(102,180.969948),new u(103,181.968621416),new u(104,182.96762),new u(105,183.966776046),new u(106,184.965806956),new u(107,185.965997671),new u(108,186.964562),new u(109,187.965321662),new u(110,188.9642243),new u(111,189.964698757),new u(112,190.963649239),new u(113,191.964810107),new u(114,192.964131745),new u(115,193.96533889),new u(116,194.965017928),new u(117,195.966551315),new u(118,196.966551609),new u(119,197.968225244),new u(120,198.968748016),new u(121,199.970717886),new u(122,200.971640839),new u(123,201.973788431),new u(124,202.975137256),new u(125,203.977705),new u(126,204.97961)]),B(d(Vt,1),Et,3,0,[new u(95,174.991411),new u(96,175.987413248),new u(97,176.986336874),new u(98,177.982476325),new u(99,178.981783),new u(100,179.978322),new u(101,180.977806),new u(102,181.97393546),new u(103,182.974561),new u(104,183.970705219),new u(105,184.971983),new u(106,185.969460021),new u(107,186.969785),new u(108,187.967511693),new u(109,188.968733187),new u(110,189.966958568),new u(111,190.96706311),new u(112,191.965921572),new u(113,192.966644169),new u(114,193.965381832),new u(115,194.966638981),new u(116,195.965814846),new u(117,196.967195333),new u(118,197.96675183),new u(119,198.968262489),new u(120,199.968308726),new u(121,200.970285275),new u(122,201.970625604),new u(123,202.972857096),new u(124,203.97347564),new u(125,204.976056104),new u(126,205.977498672),new u(127,206.982577025),new u(128,207.98594)]),B(d(Vt,1),Et,3,0,[new u(96,176.996881),new u(97,177.994637),new u(98,178.991466),new u(99,179.990194),new u(100,180.986904),new u(101,181.98561),new u(102,182.982697),new u(103,183.98176),new u(104,184.9791),new u(105,185.977549881),new u(106,186.97617),new u(107,187.97592),new u(108,188.974290451),new u(109,189.974473379),new u(110,190.972261952),new u(111,191.972770785),new u(112,192.970548),new u(113,193.971053),new u(114,194.96965),new u(115,195.970515),new u(116,196.9695362),new u(117,197.970466294),new u(118,198.969813837),new u(119,199.970945394),new u(120,200.97080377),new u(121,201.972090569),new u(122,202.972329088),new u(123,203.973848646),new u(124,204.97441227),new u(125,205.976095321),new u(126,206.977407908),new u(127,207.982004653),new u(128,208.985349125),new u(129,209.990065574)]),B(d(Vt,1),Et,3,0,[new u(99,180.996714),new u(100,181.992676101),new u(101,182.99193),new u(102,183.988198),new u(103,184.98758),new u(104,185.983485388),new u(105,186.98403),new u(106,187.979869108),new u(107,188.98088),new u(108,189.978180008),new u(109,190.9782),new u(110,191.975719811),new u(111,192.97608),new u(112,193.974648056),new u(113,194.975920279),new u(114,195.97271),new u(115,196.97338),new u(116,197.97198),new u(117,198.972909384),new u(118,199.97181556),new u(119,200.972846589),new u(120,201.972143786),new u(121,202.973375491),new u(122,203.973028761),new u(123,204.974467112),new u(124,205.974449002),new u(125,206.975880605),new u(126,207.97663585),new u(127,208.981074801),new u(128,209.984173129),new u(129,210.988731474),new u(130,211.991887495),new u(131,212.9965),new u(132,213.999798147)]),B(d(Vt,1),Et,3,0,[new u(102,184.997708),new u(103,185.99648),new u(104,186.993458),new u(105,187.992173),new u(106,188.989505),new u(107,189.987520007),new u(108,190.986053),new u(109,191.985368),new u(110,192.983662229),new u(111,193.983430186),new u(112,194.98112697),new u(113,195.981236107),new u(114,196.978934287),new u(115,197.979024396),new u(116,198.977576953),new u(117,199.978141983),new u(118,200.976970721),new u(119,201.977674504),new u(120,202.976868118),new u(121,203.977805161),new u(122,204.977374688),new u(123,205.978482854),new u(124,206.978455217),new u(125,207.979726699),new u(126,208.980383241),new u(127,209.984104944),new u(128,210.987258139),new u(129,211.991271542),new u(130,212.994374836),new u(131,213.998698664),new u(132,215.001832349),new u(133,216.006199)]),B(d(Vt,1),Et,3,0,[new u(106,189.994293888),new u(107,190.994653),new u(108,191.99033039),new u(109,192.991102),new u(110,193.988284107),new u(111,194.988045),new u(112,195.985469432),new u(113,196.985567),new u(114,197.984024384),new u(115,198.985044507),new u(116,199.981735),new u(117,200.982209),new u(118,201.980704),new u(119,202.981412863),new u(120,203.980307113),new u(121,204.981165396),new u(122,205.980465241),new u(123,206.981578228),new u(124,207.981231059),new u(125,208.982415788),new u(126,209.982857396),new u(127,210.986636869),new u(128,211.988851755),new u(129,212.992842522),new u(130,213.995185949),new u(131,214.999414609),new u(132,216.001905198),new u(133,217.006253),new u(134,218.008965773)]),B(d(Vt,1),Et,3,0,[new u(108,193.000188),new u(109,193.997973),new u(110,194.996554),new u(111,195.995702),new u(112,196.993891293),new u(113,197.99343368),new u(114,198.991008569),new u(115,199.990920883),new u(116,200.988486908),new u(117,201.988448629),new u(118,202.986847216),new u(119,203.987261559),new u(120,204.986036352),new u(121,205.986599242),new u(122,206.985775861),new u(123,207.986582508),new u(124,208.986158678),new u(125,209.987131308),new u(126,210.987480806),new u(127,211.990734657),new u(128,212.99292115),new u(129,213.996356412),new u(130,214.998641245),new u(131,216.002408839),new u(132,217.004709619),new u(133,218.008681458),new u(134,219.011296478),new u(135,220.015301),new u(136,221.01814),new u(137,222.02233),new u(138,223.02534)]),B(d(Vt,1),Et,3,0,[new u(110,196.001117268),new u(111,197.001661),new u(112,197.998779978),new u(113,198.998309),new u(114,199.995634148),new u(115,200.995535),new u(116,201.993899382),new u(117,202.994765192),new u(118,203.991365),new u(119,204.991668),new u(120,205.99016),new u(121,206.990726826),new u(122,207.989631237),new u(123,208.990376634),new u(124,209.989679862),new u(125,210.99058541),new u(126,211.990688899),new u(127,212.993868354),new u(128,213.995346275),new u(129,214.998729195),new u(130,216.000258153),new u(131,217.003914555),new u(132,218.005586315),new u(133,219.009474831),new u(134,220.011384149),new u(135,221.015455),new u(136,222.017570472),new u(137,223.02179),new u(138,224.02409),new u(139,225.02844),new u(140,226.03089),new u(141,227.035407),new u(142,228.038084)]),B(d(Vt,1),Et,3,0,[new u(113,200.006499),new u(114,201.00458692),new u(115,202.00396885),new u(116,203.001423829),new u(117,204.001221209),new u(118,204.998663961),new u(119,205.998486886),new u(120,206.996859385),new u(121,207.997133849),new u(122,208.995915421),new u(123,209.996398327),new u(124,210.995529332),new u(125,211.996194988),new u(126,212.996174845),new u(127,213.99895474),new u(128,215.000326029),new u(129,216.003187873),new u(130,217.004616452),new u(131,218.007563326),new u(132,219.009240843),new u(133,220.012312978),new u(134,221.014245654),new u(135,222.017543957),new u(136,223.019730712),new u(137,224.023235513),new u(138,225.025606914),new u(139,226.029343423),new u(140,227.031833167),new u(141,228.034776087),new u(142,229.038426),new u(143,230.04251),new u(144,231.045407),new u(145,232.049654)]),B(d(Vt,1),Et,3,0,[new u(115,203.00921),new u(116,204.006434513),new u(117,205.006187),new u(118,206.004463814),new u(119,207.005176607),new u(120,208.001776),new u(121,209.001944),new u(122,210.000446),new u(123,211.000893996),new u(124,211.999783492),new u(125,213.000345847),new u(126,214.000091141),new u(127,215.002704195),new u(128,216.003518402),new u(129,217.00630601),new u(130,218.007123948),new u(131,219.010068787),new u(132,220.011014669),new u(133,221.013907762),new u(134,222.01536182),new u(135,223.01849714),new u(136,224.020202004),new u(137,225.023604463),new u(138,226.025402555),new u(139,227.029170677),new u(140,228.031064101),new u(141,229.034820309),new u(142,230.037084774),new u(143,231.04122),new u(144,232.043693),new u(145,233.047995),new u(146,234.050547)]),B(d(Vt,1),Et,3,0,[new u(118,207.012469754),new u(119,208.012112949),new u(120,209.009568736),new u(121,210.009256802),new u(122,211.007648196),new u(123,212.007811441),new u(124,213.006573689),new u(125,214.006893072),new u(126,215.006450832),new u(127,216.008721268),new u(128,217.009332676),new u(129,218.011625045),new u(130,219.012404918),new u(131,220.014752105),new u(132,221.015575746),new u(133,222.017828852),new u(134,223.01912603),new u(135,224.021708435),new u(136,225.023220576),new u(137,226.026089848),new u(138,227.027746979),new u(139,228.031014825),new u(140,229.032930871),new u(141,230.036025144),new u(142,231.038551503),new u(143,232.042022474),new u(144,233.04455),new u(145,234.04842),new u(146,235.051102),new u(147,236.055178)]),B(d(Vt,1),Et,3,0,[new u(120,210.015711883),new u(121,211.016306912),new u(122,212.012916),new u(123,213.012962),new u(124,214.011451),new u(125,215.011726597),new u(126,216.011050963),new u(127,217.013066169),new u(128,218.013267744),new u(129,219.015521253),new u(130,220.015733126),new u(131,221.018171499),new u(132,222.018454131),new u(133,223.020795153),new u(134,224.02145925),new u(135,225.023941441),new u(136,226.024890681),new u(137,227.027698859),new u(138,228.028731348),new u(139,229.03175534),new u(140,230.033126574),new u(141,231.03629706),new u(142,232.03805036),new u(143,233.041576923),new u(144,234.043595497),new u(145,235.04750442),new u(146,236.04971),new u(147,237.053894),new u(148,238.056243)]),B(d(Vt,1),Et,3,0,[new u(122,213.021183209),new u(123,214.02073923),new u(124,215.019097612),new u(125,216.019109649),new u(126,217.018288571),new u(127,218.020007906),new u(128,219.019880348),new u(129,220.021876493),new u(130,221.021863742),new u(131,222.023726),new u(132,223.023963748),new u(133,224.025614854),new u(134,225.026115172),new u(135,226.02793275),new u(136,227.028793151),new u(137,228.031036942),new u(138,229.032088601),new u(139,230.034532562),new u(140,231.035878898),new u(141,232.03858172),new u(142,233.040240235),new u(143,234.043302325),new u(144,235.045436759),new u(145,236.048675176),new u(146,237.05113943),new u(147,238.054497046),new u(148,239.05713),new u(149,240.06098)]),B(d(Vt,1),Et,3,0,[new u(126,218.023487),new u(127,219.024915423),new u(128,220.024712),new u(129,221.026351),new u(130,222.02607),new u(131,223.027722956),new u(132,224.027590139),new u(133,225.029384369),new u(134,226.02933975),new u(135,227.031140069),new u(136,228.031366357),new u(137,229.033496137),new u(138,230.033927392),new u(139,231.036289158),new u(140,232.03714628),new u(141,233.039628196),new u(142,234.040945606),new u(143,235.043923062),new u(144,236.045561897),new u(145,237.048723955),new u(146,238.050782583),new u(147,239.054287777),new u(148,240.056585734),new u(149,241.06033),new u(150,242.062925)]),B(d(Vt,1),Et,3,0,[new u(132,225.033899689),new u(133,226.035129),new u(134,227.034958261),new u(135,228.03618),new u(136,229.036246866),new u(137,230.037812591),new u(138,231.038233161),new u(139,232.040099),new u(140,233.04073235),new u(141,234.042888556),new u(142,235.044055876),new u(143,236.046559724),new u(144,237.048167253),new u(145,238.050940464),new u(146,239.052931399),new u(147,240.056168828),new u(148,241.058246266),new u(149,242.061635),new u(150,243.064273),new u(151,244.06785)]),B(d(Vt,1),Et,3,0,[new u(134,228.038727686),new u(135,229.040138934),new u(136,230.039645603),new u(137,231.041258),new u(138,232.041179445),new u(139,233.04298757),new u(140,234.043304681),new u(141,235.0452815),new u(142,236.046048088),new u(143,237.048403774),new u(144,238.0495534),new u(145,239.052156519),new u(146,240.05380746),new u(147,241.056845291),new u(148,242.058736847),new u(149,243.061997013),new u(150,244.06419765),new u(151,245.067738657),new u(152,246.070198429),new u(153,247.07407)]),B(d(Vt,1),Et,3,0,[new u(136,231.04556),new u(137,232.04659),new u(138,233.046472),new u(139,234.047794),new u(140,235.048029),new u(141,236.049569),new u(142,237.049970748),new u(143,238.051977839),new u(144,239.053018481),new u(145,240.055287826),new u(146,241.056822944),new u(147,242.059543039),new u(148,243.061372686),new u(149,244.064279429),new u(150,245.066445398),new u(151,246.069768438),new u(152,247.072086),new u(153,248.075745),new u(154,249.07848)]),B(d(Vt,1),Et,3,0,[new u(137,233.0508),new u(138,234.05024),new u(139,235.051591),new u(140,236.051405),new u(141,237.052891),new u(142,238.053016298),new u(143,239.054951),new u(144,240.055519046),new u(145,241.057646736),new u(146,242.058829326),new u(147,243.061382249),new u(148,244.062746349),new u(149,245.065485586),new u(150,246.067217551),new u(151,247.070346811),new u(152,248.072342247),new u(153,249.075947062),new u(154,250.078350687),new u(155,251.082277873),new u(156,252.08487)]),B(d(Vt,1),Et,3,0,[new u(138,235.05658),new u(139,236.05733),new u(140,237.057127),new u(141,238.058266),new u(142,239.058362),new u(143,240.059749),new u(144,241.060223),new u(145,242.06205),new u(146,243.06300157),new u(147,244.065167882),new u(148,245.066355386),new u(149,246.068666836),new u(150,247.070298533),new u(151,248.07308),new u(152,249.074979937),new u(153,250.078310529),new u(154,251.08075344),new u(155,252.084303),new u(156,253.08688),new u(157,254.0906)]),B(d(Vt,1),Et,3,0,[new u(139,237.06207),new u(140,238.06141),new u(141,239.062579),new u(142,240.062295),new u(143,241.063716),new u(144,242.063688713),new u(145,243.065421),new u(146,244.06599039),new u(147,245.068039),new u(148,246.068798807),new u(149,247.070992043),new u(150,248.07217808),new u(151,249.074846818),new u(152,250.076399951),new u(153,251.079580056),new u(154,252.081619582),new u(155,253.085126791),new u(156,254.087316198),new u(157,255.091039),new u(158,256.09344)]),B(d(Vt,1),Et,3,0,[new u(141,240.06892),new u(142,241.068662),new u(143,242.069699),new u(144,243.069631),new u(145,244.070969),new u(146,245.071317),new u(147,246.072965),new u(148,247.07365),new u(149,248.075458),new u(150,249.076405),new u(151,250.078654),new u(152,251.079983592),new u(153,252.082972247),new u(154,253.084817974),new u(155,254.088016026),new u(156,255.090266386),new u(157,256.093592),new u(158,257.095979)]),B(d(Vt,1),Et,3,0,[new u(142,242.07343),new u(143,243.07451),new u(144,244.074077),new u(145,245.075375),new u(146,246.075281634),new u(147,247.076819),new u(148,248.077184411),new u(149,249.079024),new u(150,250.079514759),new u(151,251.081566467),new u(152,252.082460071),new u(153,253.085176259),new u(154,254.086847795),new u(155,255.089955466),new u(156,256.091766522),new u(157,257.095098635),new u(158,258.097069),new u(159,259.100588)]),B(d(Vt,1),Et,3,0,[new u(144,245.081017),new u(145,246.081933),new u(146,247.081804),new u(147,248.082909),new u(148,249.083002),new u(149,250.084488),new u(150,251.084919),new u(151,252.08663),new u(152,253.08728),new u(153,254.089725),new u(154,255.091075196),new u(155,256.094052757),new u(156,257.095534643),new u(157,258.098425321),new u(158,259.100503),new u(159,260.103645)]),B(d(Vt,1),Et,3,0,[new u(147,249.087823),new u(148,250.087493),new u(149,251.08896),new u(150,252.088965909),new u(151,253.090649),new u(152,254.090948746),new u(153,255.093232449),new u(154,256.094275879),new u(155,257.096852778),new u(156,258.0982),new u(157,259.101024),new u(158,260.102636),new u(159,261.105743),new u(160,262.10752)]),B(d(Vt,1),Et,3,0,[new u(148,251.09436),new u(149,252.09533),new u(150,253.095258),new u(151,254.096587),new u(152,255.096769),new u(153,256.098763),new u(154,257.099606),new u(155,258.101883),new u(156,259.10299),new u(157,260.105572),new u(158,261.106941),new u(159,262.109692),new u(160,263.111394)]),B(d(Vt,1),Et,3,0,[new u(149,253.100679),new u(150,254.100166),new u(151,255.101492),new u(152,256.101179573),new u(153,257.103072),new u(154,258.103568),new u(155,259.105628),new u(156,260.106434),new u(157,261.108752),new u(158,262.109918),new u(159,263.11254),new u(160,264.113978)]),B(d(Vt,1),Et,3,0,[new u(150,255.107398),new u(151,256.10811),new u(152,257.107858),new u(153,258.109438),new u(154,259.109721),new u(155,260.111427),new u(156,261.112106),new u(157,262.114153),new u(158,263.115078),new u(159,264.117473),new u(160,265.118659)]),B(d(Vt,1),Et,3,0,[new u(152,258.113151),new u(153,259.114652),new u(154,260.114435447),new u(155,261.116199),new u(156,262.116477),new u(157,263.118313),new u(158,264.118924),new u(159,265.121066),new u(160,266.121928)]),B(d(Vt,1),Et,3,0,[new u(153,260.121803),new u(154,261.1218),new u(155,262.123009),new u(156,263.123146),new u(157,264.12473),new u(158,265.125198),new u(159,266.127009),new u(160,267.12774)]),B(d(Vt,1),Et,3,0,[new u(155,263.12871),new u(156,264.128408258),new u(157,265.130001),new u(158,266.130042),new u(159,267.131774),new u(160,268.132156),new u(161,269.134114)]),B(d(Vt,1),Et,3,0,[new u(156,265.136567),new u(157,266.13794),new u(158,267.137526),new u(159,268.138816),new u(160,269.139106),new u(161,270.140723),new u(162,271.141229)])])}function U6(t,e){return A1(e,D4)?new WU(ev(t,168,1428,\"%5968%UDy0ClA8tJ9QPLT6UDy08FA8tJVQPLQK%858%BQPLQdUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLSW%362%D4BwYC+AYGAvgHBgE%303%D/AAAB/wAAAQ%159%FA8tC1QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTl%330%D5BgcB+AcGBPkHBhX5BwdN+QYHefgHB2/5Bwc8+AYGFfgGBgj5BgcF+AYGAvkHBgE%245%/wAAAf8AAAL/AAAG/wAAEP8AACP/AAA7/wAAP/8AAD3/AAAg/wAABw%154%UDy0RFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%325%PkFCAT4BgZE+QcHo/gHB+X5Bwb/+QcH//kHB//4Bwf9+QYH1vgHB5X5BwZD+QcGDvkHBwb5BgYD+QcGAQ%228%D/AAAS/wAARP8AAIL/AAC4/wAA2/8AAPf/AAD//wAA//8AAPj/AAB+/wAADw%148%BQPLRnUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%314%D5BwYC+AYHK/kHBrb4Bwf4+AcH//gHB//5Bwf/+AcG//kHBv/5Bwf/+AYH//gHB/75Bwf3+AYHs/kHBkH5BgcR+QYGB/kFBgL6BgYB%197%P8AAAH/AAAI/wAAKP8AAIj/AADh/wAA9/8AAP3/AAD//wAA//8AAP//AAD6/wAAzv8AAGH/AAAq/wAAEw%143%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QYHAfoIBwX4BgZu+QcH6fkGB//5Bgf/+QYH//kHB//5Bwf/+QcG//kHBv/4Bwb/+AcH//gHB//5Bgf/+AcH//kHBvT5Bwas+QYGO/kGBgr5BgUG+gUFAQ%175%P8AAAE%5%/wAACv8AAFX/AACy/wAA8P8AAP//AAD//wAA//8AAP//AAD//wAA//8AANP/AACD/wAARf8AACz/AAAZ/wAACQ%132%BQPLQJUDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QcGBPkGB374Bwf5+AcH//kHB//5Bwf/+QcH//kHBv/4Bwf/+AcH//gHB//5Bwf/+QcG//gHB//5Bwf/+QcG//gGB//4Bwb/+QYG8PkGBoD5BgYg+gYFCvoFBQQ%165%/wAAAf8AAA7/AABV/wAAzf8AAPv/AAD//wAA//8AAP//AAD//wAA//8AAPz/AADo/wAAkf8AAEr/AAAz/wAAH/8AAA//AAAG/wAAAQ%127%FA8tBNQPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QYGUvgHBvn4Bwf/+AcH//kHB//5Bwf/+QcH//kHB//4Bgf/+QcH//gHB//4Bwb/+AcH//gHB//4Bgf/+QcG//gGB//5Bwf/+QYG//kGBv76BgbL+gYFTfoFBQ76BQUH+gUEAQ%148%D/AAAG/wAAWf8AAMb/AAD9/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA7P8AAJ3/AABW/wAANP8AACL/AAAS/wAAB/8AAAI%133%UDy0I1A8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PkHBwH4BwYD+AYHwfgHB//4Bwb/+QYH//gGBv/4Bwf/+QYH//kGB//5Bwf/+AcH//gHB//5Bwb/+AcH//kGB//4Bwf/+AYG//kHB//4Bwb/+AYG//kHB//5BQb/+QYF8/oFBX76BQUd+wQFCfsEBAI%133%/wAABv8AADj/AAC5/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPP/AAC6/wAAXv8AADn/AAAm/wAAE/8AAAj/AAAC/wAAAQ%132%BQPLQ7UDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PgGBgH4BggD+QcGqPgHB//4Bwf/+AcH//gHB//4Bwf/+AcG//gHB//4Bgf/+QYG//gGBv/5Bgb/+AcH//kHB//4Bgb/+QcH//gHB//5Bwf/+QcH//kHBv/5Bgb/+gYG//oFBfz6BQW++wQFMfoFBAz7BAQE%112%/wAAAQ%4%D/AAAf/wAAo/8AAPD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0P8AAHL/AABB/wAAKf8AABb/AAAJ/wAAA/8AAAE%138%FA8tFNQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PgGBwH4BwcE+AcHJ/gHB8j4Bgf/+AcH//kHBv/4Bwf/+QcH//gHB//5Bgb/+AcG//gHB//4Bwf/+AYH//gHB//4Bwb/+QcH//kGB//5Bwf/+AYH//kHBv/5Bgb/+QYG//oFBv/6BQX/+gQF3foEBVL7BAQR+wMEBvwDAwE%101%/wAAEP8AAGj/AADm/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOj/AACX/wAASP8AADD/AAAb/wAADP8AAAT/AAAB%144%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0LlA8tAI%287%D5BgcC+QcGC/gGBir5Bwea+QcH9vkHB//4Bwb/+QYG//gHB//4Bwf/+QYG//gGB//4Bwf/+AcH//gGBv/4Bwf/+QYH//kGB//4Bgf/+QcH//gHBv/5Bgb/+QUG//kGBf/6BQX/+gUF//oEBfD7BAR0/AQEFPsDAwj8BAMC%80%/wAAAf8AAAL/AAA1/wAAyv8AAPr/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8/wAAwv8AAGD/AAA5/wAAI/8AABD/AAAG/wAAAg%143%FA8tAFQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0yFA8tJpQPLR4UDy0UFA8tCI%261%+AYHA/gGBw35BwYa+AYHWPkHBr75Bwf4+AcH//kHB//4Bwf/+AYH//gHB//5Bwf/+QcH//gHB//4Bwb/+QcG//kHBv/4Bwf/+QcG//gHBv/5Bgb/+QYG//oGBv/6BQX/+gUF//sEBf/7BAT+/AQEkvwDAx38AwMK/QMDAg%74%/wAAFP8AAIP/AADy/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAO7/AACX/wAAR/8AAC7/AAAX/wAACf8AAAI%149%UDy0B1A8tKpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0v1A8tI1QPLRSUDy0Fw%239%PkHBwL4BwcI+AYGFPgHByf5Bgdh+AYHzPkHB/v5Bwf/+QcG//kHBv/4Bwb/+QcG//kHB//5Bwf/+QYG//gHBv/4Bwf/+QcH//gGB//5Bwb/+QYG//oGBv/6BgX/+gQF//oFBP/7BAT/+wQE/fwEBK/8BAMk/AMDDPwCAgM%53%/wAAAf8AAAP/AAA5/wAA0v8AAP3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+/wAA3P8AAGz/AAA8/wAAIv8AAA//AAAF/wAAAQ%148%BQPLQTUDy0xlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLSTUDy0TlA8tAw%223%D4BgYB+QcHBPkHBgv4BwcV+AYGK/gHB3H4BwfM+AcH/vgHB//4Bgf/+QYG//gHB//4Bwb/+AYH//gHBv/5Bwf/+QcH//gHB//4Bwb/+QYG//kGBv/6Bgb/+gUF//sEBf/7BAT/+wQE//wEBP78AwS7/AMDLP0DAgz9AgID%37%P8AAAE%5%/wAAEP8AAIL/AADx/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAC5/wAAVv8AADH/AAAa/wAACf8AAAI%154%FA8tCBQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLS3UDy0aVA8tBg%218%PkHBwH5BwcF+QYHDPgHBxn5Bwct+QYHd/kHBt/5Bwb8+AcG//gHB//4Bwf/+QcG//gGBv/4Bwf/+AcG//gHB//5Bgb/+QcH//kGBv/6BgX/+gYF//oFBf/7BAX/+wUE//sEBP/7AwT//AMDy/0DAzP8AwIO/QIDB%32%P8AAAP/AAAr/wAAx/8AAP3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA9v8AAJz/AABG/wAAK/8AABP/AAAG/wAAAQ%154%UDy0NVA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS2UDy0XlA8tAg%213%+QYGAfgHBgX4BwcN+QcHGPgHBzf4BgeF+QcH4/gGBv/4Bwb/+AcH//gHB//5Bwf/+QcG//gHB//5Bwb/+QYG//kGBv/5Bgb/+QYF//oFBf/7BQX/+gUE//sEBP/8BAP//AMD//wDAtD9AgI3/QICDv0CAgQ%21%/wAAAv8AAG7/AADo/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq/wAAgf8AAD7/AAAk/wAADv8AAAQ%159%BQPLRJUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLSSUDy0L%213%D5BwcB+QYHBfgGBg/5Bgcb+AcGOfgHB6D5Bwfv+QcH//kGBv/5Bwb/+AcH//gGB//5Bwf/+QYG//kGBv/5Bgb/+gUG//oGBf/6BAX/+gQF//sEBP/7BAP/+wMD//wDA//9AwPW/QMCOf0CAg/9AQIE%5%P4BAQH/AQEd/wEApv8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANz/AABo/wAAOP8AAB7/AAAL/wAAAw%159%FA8tGZQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLxQPLRB%213%PgHBwL5BgcH+AcHEPkHBh/5BgZN+AYHsfgGB/v4Bwf/+AYG//gHBv/4Bgf/+QYH//kGBv/5Bgb/+gYG//oFBf/6BQX/+gQF//sEBP/7BAP//AQE//wDA//8AwP//QID0/0CAjP9AgEP/QEBAv4BAUf+AQDX/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAx/8AAFz/AAAz/wAAGP8AAAj/AAAB%160%UDy0elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zFA8tEQ%207%D5BgcB+QcHAvgHBwj4BwYT+AYGIfgHB2j5BgfW+QcH/PkHBv/5Bwf/+AYH//gHBv/5Bgb/+QUF//oFBv/7BQX/+gUF//sFBP/7BAT//AME//wDA//8AwL//AMD//wCAsv+AgI8/QEBfP4BAfb+AQH//wEA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPv/AAC6/wAAUP8AAC7/AAAV/wAABv8AAAE%159%BQPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0Mw%207%PkHBwH4BwcD+QcHCvgHBhb5Bwcy+QYHh/kHB/H4Bwf/+AcH//kGBv/5Bgb/+QYG//oFBv/6BQX/+gUF//oFBP/7BAT/+wQD//sDA//8AwP//QMD//0DAv79AgLp/gIC+/4CAf/+AQH//wAB//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AAKL/AABJ/wAAKf8AABH/AAAF%165%FA8tJdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJZQPLQO%208%+AYGAfkHBwT4BgYO+QYGGfgHB0n5Bwe7+QcH+vkHBv/5Bgb/+gYF//kGBv/6BgX/+wUF//oEBf/7BAT/+wME//wDA//8AwP//AMD//wCAv/9AgL//QIC//4BAf/+AQH//gAA//8AAf//AAD//wAA//8AAP//AAD1/wAAmf8AAEP/AAAm/wAADv8AAAQ%170%FA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0VQ%212%D4BwcC+AcHB/kHBxL5BgYm+QcHb/kGB+n5Bwf++QYG//kFBv/5BgX/+wUF//sFBf/7BAT/+wME//wDA//8AwT//AMD//0DAv/9AgL//QIC//4CAf/+AgH//gAB//4AAP//AAD//wAA//8AAPT/AACF/wAAQP8AACL/AAAN/wAAAw%175%FA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK1QPLQP%208%+AcHAfkHBwT4BwcL+QcHF/gHBj/5Bgau+QYG+/oFBv/6BQX/+gUF//sFBf/7BQT/+wQE//sEBP/8AwP//AMD//wCA//9AgL//gEC//4CAf/+AQH//gEA//4BAf//AAD//wAA6/8AAHz/AAA7/wAAH/8AAAv/AAAC%181%FA8tHVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Mw%212%D5BwYB+QcHBvgHBhH5Bwci+QYHbPoGBuX5Bgb++gUG//oFBf/7BAT/+wUE//sEBP/8AwT//AMD//0CAv/9AgL//QIC//4BAf/+AgL//gEB//8AAP/+AADs/wAAcv8AADr/AAAd/wAACv8AAAI%191%BQPLSNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tFs%213%+AcHAfgHBwP4BwcK+QYGFfkGBkD5BQWz+gUF/PoFBf/7BAT/+wQE//sEBP/7BAP//AME//wDA//8AgL//QIC//0CAv/9AgL//gEB//8BAPf/AAB5/wAAPP8AABz/AAAI/wAAAQ%202%UDy0f1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRt%218%D5BwYB+AYGBfkGBhH6BQYk+gUFqfsEBf77BAX/+wUF//sEBP/7BAP//AMD//wDA//9AwL//QMD//0BAv/+AQL//gEB//4BAf/+AAG//wAANP8AABH/AAAD%213%FA8tGhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0iw%218%+AcGAfkGBgn6BgaD+QUF8foFBf/7BQX/+wUE//sEBP/7BAT//AMD//wDBP/9AwP//QMC//4CAv/+AQL//gIB//4BAf//AAD8/wAAjf8AABr/AAAI/wAAAQ%212%BQPLRSUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHM%213%+AcHEfkGB5X6BgX7+gYF//oFBf/6BAX/+wUE//sEBP/7AwT//AMD//wDA//8AwL//AMD//0CAv/+AgL//gIB//4BAf/+AQD//wAA9/8AAGH/AAAU/wAABg%218%UDy0OlA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRf%202%D5BwcZ+AYHvfkGB/75Bgb/+gYG//oFBf/6BQX/+gQE//sEBP/7BAT//AQE//wDA//9AwP//AMD//0CAv/9AgL//gIB//4BAf/+AAD//wAA//8AAOT/AABE/wAAEf8AAAQ%218%FA8tCJQPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0O%187%9wcIAfkHByz5BgfN+QcH//kGBv/5Bgb/+QYG//oFBf/6BQX/+gUE//sEBP/7BAT//AQE//wEA//9AwP//QID//0CAv/9AgL//QIC//4BAf//AQH//gAB//8AAf//AADB/wAAKP8AAAz/AAAC%218%BQPLQXUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tAw%175%D4BwcB+AcGPPgHB9/4Bwb/+AcH//kHBv/5Bgb/+gYG//kGBf/6BQX/+gUE//oFBP/7BAX/+wQE//wDA/38AwP//AMD//0CA//9AgL//QIB//4CAv/+AQH//wEB//8AAP//AAD+/wAAn/8AAB3/AAAI/wAAAQ%218%UDy0ClA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKM%165%+AcGAfgGBwP5BwdU+AcH7fgGB//5Bgf/+AcH//kHB//5Bgb/+QYG//kFBv/6BQX/+wUF//oFBP/7BAT/+wQE5fwDBIr8AwPM/AMD//0DA//9AgL//QIC//0BAv/+AQH//gEA//8BAP//AAD//wAA9f8AAGb/AAAV/wAABQ%223%FA8tAFQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ7%160%+QcGAvkHB2D5Bgfx+AYH//kGBv/4Bwf/+QYH//kHBv/4Bgb/+QYG//oGBv/6Bgb/+gUF//sEBP/7BATp+wQEbPwDBD78AwM6/AMDuP0DA/79AgL//gIC//0CAf/+AQL//gEB//8AAP//AAD//wAA//8AAOX/AAA8/wAAEP8AAAQ%229%UDy0cVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%10%BQPLQRUDy0MVA8tFJQPLRvUDy0lVA8tMdQPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTI%149%PgGBgH4BwYE+AYGcvgHB/r4Bwb/+QcG//kHB//5Bwb/+AcG//gHB//4Bwb/+QYG//kGBv/6BgX/+gUF//oEBev7BARy+wQENvsEBBz8AwQU/AMDKP0DA6b8AgL//QIC//4CAv/+AgH//gAB//4AAP//AAD//wAA//8AAP//AAC8/wAAJv8AAAz/AAAB%229%FA8tFNQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%48%UDy0LFA8tGFQPLSgUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%138%+QcHAfkGBgT4Bgd5+QcG/PkHB//5Bwb/+AYH//gGB//5Bwf/+AcH//kGBv/5Bwf/+QYG//oGBv/5Bgb/+gUF8/oFBX/6BQU6+wQEGvwEBAj7AwQD/AMDDP0DAx39AgKV/QIC+f4CAv/9AQH//gEB//8AAf//AAD//wAA//8AAP//AAD7/wAAe/8AABj/AAAH/wAAAQ%228%BQPLQ7UDy051A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%69%FA8tClQPLSAUDy0z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rg%132%D4BgcB+QcGA/gGB3/5Bgf8+QcH//kHB//4Bwf/+QYH//gGBv/5Bgf/+AcG//gHBv/5Bwb/+AYG//kGBv/5Bgb8+gYGlfoFBT37BQQe+wUECfsEBAE%5%/AMDAvwCAwr8AwIb/QICi/4CAvn+AgH//gEB//4BAP/+AAD//wAA//8AAP//AAD//wAA7v8AAEz/AAAS/wAAAw%234%UDy0IlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%85%FA8tCdQPLSEUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tBU%122%PkHBgH5BQcG+QcHfPgHB/75Bgb/+AYH//kGB//4Bwf/+QcG//gHB//5Bwf/+QcH//gHBv/5Bgf/+AcG//kGB/75Bgax+gUGRPkFBSL6BQQK+wQFAg%15%PwDAwL8AgIJ/QMCGP4CAYD+AQL2/gEB//4BAP//AQH//wAB//8AAP//AAD//wAA//8AAML/AAAp/wAADP8AAAI%234%FA8tBRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0CFA8tFpQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tF4%117%+QcGAfkHBwP5Bwd8+QcG+/gHB//4Bwf/+QcH//kGB//5Bwf/+AcH//kHBv/5Bwf/+AcH//kHB//5Bwf/+QcH//kGBtD6BgZR+gYGKPoFBg36BQUC%26%D9AwMB/QIDCP0CAhf9AgJ5/gIB9/4BAf//AQH//wAA//8AAP//AAD//wAA//8AAPv/AAB7/wAAF/8AAAc%239%BQPLQJUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%112%UDy0UVA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ8%117%+QcGBPkHBm34Bwf7+QYH//gGB//4Bwf/+AcH//kHB//5Bwf/+AcH//kHB//4Bwb/+AcH//gHB//4Bgf/+AcG5/gGB2D5BgYv+gUFEvoFBgM%37%/QICAf0CAgj+AgEW/gEBgP4BAfn+AQH//wAB//8AAP//AAD//wAA//8AAP//AADt/wAARP8AABH/AAAD%245%FA8tI5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLRoUDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMw%111%D5BwcB+QcHXPgHB/T4Bwb/+QcG//kHB//5Bwf/+AcH//kHBv/5Bwf/+QcG//kHBv/4Bgb/+QcH//kHBv/5Bgf7+AcHhPkGBjj5BgYX+QYGBQ%47%P0DAgH9AgII/QECGP4BAYP+AQD7/wEA//4AAP//AAD//wAA//8AAP//AAD//wAAsv8AACP/AAAK/wAAAQ%244%BQPLRmUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%128%UDy0HFA8tMBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO4%106%PkJBQH5BgdD+AcG7/gHBv/5Bgf/+QcG//gHB//4Bgf/+AcG//kHB//5Bwf/+AcH//gHB//4Bwf/+QcG//gGB/75Bwen+QcHPvkHBh75BgYI+QYGAQ%52%D+AgIB/QEBCf4BARj+AQGX/gEB/v8AAf//AAD//wAA//8AAP//AAD//wAA9/8AAGL/AAAV/wAABg%250%UDy0RFA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2%133%FA8tARQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%101%+QcGAfkHByv4Bgfg+QcG//kHB//4Bwb/+QYG//kHB//4Bgb/+QcG//gHBv/5Bwf/+AcH//gGBv/5Bwf/+QcG//kHB9D4BwZP+QcGJ/gHBgv5BwcC%64%/QICAf0BAgn+AQEc/gEBo/8AAP//AAD//wAA//8AAP//AAD//wAA//8AANv/AAAx/wAADv8AAAI%250%FA8tCtQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTd%144%UDy0i1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%95%D6BwcB+AcHFPgGB8j4Bwf/+AcG//gHB//4Bgf/+QcG//kHB//4Bwb/+QcG//kHB//4Bwf/+AYH//gHB//4Bgf/+QcH7vgHBmr5BwYw+AYHEfgHBgM%74%P4CAQH+AQEK/gEBJP8BALz/AAD//wAA//8AAP//AAD//wAA//8AAP3/AACQ/wAAHP8AAAc%255%BQPLQRUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLSb%149%FA8tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%90%PkHBwH4BgcJ+AYHp/kHBv/4Bgf/+QYG//gHB//4Bgb/+AcH//kHBv/4Bwf/+QYH//kHB//4Bwf/+QYH//kHB//4Bgf7+QcHjPkGBzn5BwcY+QYGBQ%84%D9AQEC/gEBC/4AASv/AQDT/wAA//8AAP//AAD//wAA//8AAP//AADq/wAAQ/8AABL/AAAD%256%UDy0B1A8tIlQPLT8UDy0+1A8tKFQPLQK%154%BQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPs%95%D5Bwdk+QcH+fgGB//4Bwf/+QcH//kHBv/4Bgf/+QcG//kHBv/4Bwf/+QcH//gHB//4Bwf/+AcH//kGB//5BwbA+QcHR/gHByL5BgcJ+AcHAQ%90%/gEBA/8BAAz/AABD/wAA5v8AAP//AAD//wAA//8AAP//AAD//wAAt/8AACP/AAAK/wAAAQ%436%BQPLQLUDy03lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN0%85%+AcGAfkGBy35Bgbw+QcH//kHB//5Bwf/+QYH//gGB//5Bgf/+AcG//kHB//4Bwb/+AcH//gGB//4Bgf/+QcH//kHBuf5Bwdb+AcGK/gHBg75BwcC%101%P4AAAT/AQEO/wAAZP8AAPn/AAD//wAA//8AAP//AAD//wAA9v8AAGP/AAAW/wAAB%443%UDy0UFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL%80%D4BwYB+AcHC/gHBrb4Bwf/+QcH//gHB//5Bwf/+QcG//gGB//4Bgf/+QcH//gHB//4Bwf/+AYH//kHB//4Bwb/+AYH9/kHB4H4Bwc2+QcHFfgHBgU%111%D+AQEF/wAAEv8AAIb/AAD7/wAA//8AAP//AAD//wAA//8AAMb/AAAp/wAADf8AAAE%442%FA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHk%85%+AcGWfkHBvz5Bwb/+QYG//kHBv/4Bwb/+QYG//gHBv/4Bgf/+AcH//gHB//5Bgf/+QcH//gHB//4Bwf/+AcHu/gHBkT5BwYf+AYHB/gGBwE%111%D/AAAB/wEAB/8AAB3/AAC8/wAA//8AAP//AAD//wAA//8AAP//AABu/wAAFv8AAAU%442%FA8tHZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCo%74%PgHBwH5BwcV+AcH4PgHB//4Bgf/+QcH//kGB//5Bwb/+QcH//kHB//5Bwb/+QcH//gHB//5Bwb/+QYH//gHB//5Bwfh+QcHV/gHByn4BwcN+AcHAg%122%/wEAAf8AAAn/AAAu/wAA2/8AAP//AAD//wAA//8AAP//AADW/wAAMP8AAA3/AAAC%437%FA8tDFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01%80%PgHBwL5BgZ2+AYG/fgGB//5Bwf/+AYH//gHB//4Bwf/+AcG//gHB//4Bwf/+AcG//kHB//4Bwf/+AcH//gHB/j4BwaB+QcHNfkGBxT5BwcD%133%P8AAAP/AAAN/wAAWf8AAPT/AAD//wAA//8AAP//AAD4/wAAcf8AABn/AAAF%442%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ag%79%PgHBw/4BwbO+QYH//kHBv/5Bwb/+AYH//kHBv/5Bwf/+QcG//gGB//4Bgb/+QYH//gHB//5Bgf/+QYH//gHB7r5BwdD+QcGHvkHBgf5BwcB%138%D/AAAE/wAAEf8AAJP/AAD//wAA//8AAP//AAD//wAAyP8AACn/AAAN/wAAAQ%436%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Cg%79%PkHBkb4Bgf9+QcH//gGBv/5Bwb/+AYH//gHB//4Bwb/+AcG//kHB//4Bwf/+AcG//kHBv/4Bwb/+QcG4/kHB1j4BwYp+AcGDfkGBwE%143%D/AAAB/wAAB/8AAB7/AADO/wAA//8AAP//AAD//wAA/v8AAGT/AAAX/wAABQ%436%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRs%85%PkHB6H4Bgb/+QYH//kHBv/4Bwf/+QYH//kHBv/4Bwb/+AYH//kHBv/4Bgb/+QYH//gHBv/4Bwf5+QYGifkGBzj5BwYV+QcHB%155%/wAAAf8AAAv/AABW/wAA9v8AAP//AAD//wAA//8AAMH/AAAp/wAACv8AAAE%426%FA8tBdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNRQPLQE%80%+QcHGPgGB+j4Bgb/+AcH//gHB//4Bgf/+AcG//kGBv/5Bwb/+QYH//kGBv/5Bwf/+AcH//gGB//5Bwbw+AcHWPgGByT5BwYJ%165%P8AAAT/AAAP/wAAnv8AAP//AAD//wAA//8AAO7/AABN/wAAFP8AAAM%426%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tDU%79%D5BgcB+AcHQ/gGBvj4Bwf/+AcH//gHB//5Bwb/+QcH//kHB//5Bwf/+QcH//kHB//4Bwf/+QcH//kHBv/5Bwfs+QcGS/kHBhn5BwcE%170%D/AAAH/wAAJf8AANj/AAD//wAA//8AAP7/AACL/wAAHv8AAAc%426%FA8tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0dw%84%D4BwcC+QcHZ/kHB/v5Bwf/+AcH//gGBv/4Bwb/+AcH//kHBv/5Bwf/+AYH//kHB//4Bgf/+QcG//gHB//5Bwfs+AYHR/gGBhb5BgYD%170%D/AAAC/wAADP8AAGf/AAD8/wAA//8AAP//AADR/wAALf8AAA7/AAAC%416%UDy0FlA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSq%90%D4BgYC+AcHe/gHB/35Bwf/+QYH//kHBv/4Bgb/+QcH//kHBv/5Bgf/+AcG//kGB//4Bwb/+AcH//gGB//4Bwfs+AcGR/kHBhb5BwcD%176%/wAABP8AABL/AACz/wAA//8AAP//AAD8/wAAVP8AABX/AAAD%416%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQJ%90%D5BwcD+AcHgPkGB/35Bwf/+QcH//gHB//4Bgb/+QcG//gGB//5Bwf/+QcH//gGBv/5Bwb/+QYH//kHB//4Bwbs+QcHR/kHBxX4BwcD%176%/wAAAf8AAAj/AAAy/wAA4/8AAP//AAD//wAAjf8AAB//AAAG%410%BQPLQ0UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00lA8tAs%95%D5BgcE+AYHePkGBvz5Bwf/+AcH//kGB//5Bwb/+QcH//gHB//4Bgf/+QcH//kGBv/4Bwf/+QYH//gGB//5Bwbm+QYHQPgGBxX4BwYD%181%P8AAAP/AAAO/wAAfP8AAP3/AAD//wAAvP8AACr/AAAL%405%FA8tBBQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0EQ%100%D4BwcD+AcHXfgGB/r4Bwb/+QcH//kGB//4Bwf/+QcH//kHB//5Bwf/+AYH//gHB//4Bwb/+AcH//kHB//4BwfQ+QYHOPkHBhL5BwYC%186%D/AAAF/wAAF/8AALz/AAD//wAA1v8AADb/AAAP/wAAAQ%394%UDy0ClA8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLVQPLQK%106%D4BgcC+QYGNfkGB/b4Bwf/+QcH//gHBv/4Bwb/+QcH//gGB//5Bwf/+QcH//gGB//4Bwf/+AYG//kGB//4Bwem+AcGLfgHBw75BgYB%186%D/AAAB/wAACf8AADr/AADp/wAA3v8AADz/AAAS/wAAAg%388%BQPLQKUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0hVA8tAI%111%D4BwcC+AYGEPgHB9P5Bgf/+AcG//gHBv/4Bwf/+AcG//gHB//5Bgf/+AcH//gGB//5Bwb/+QcH//kHB/34BwZt+AcHJvkHBgn4BwcB%192%/wAAA/8AAA7/AAB2/wAA0v8AADH/AAAR/wAAAg%383%FA8tBxQPLTKUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRL%128%9wgHA/kGB275Bwf/+QYG//kHBv/4Bgf/+AcH//kHB//5Bwf/+QcH//gHB//4Bwb/+AcH//kHB9H5BwdF+QcHG/gHBgU%202%P8AAAb/AAAT/wAAOv8AABz/AAAK/wAAAQ%378%UDy0PlA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0s1A8tBc%133%+QYHBPkGBxv5BwfO+AYG//gHB//5Bwf/+QcH//kGB//4Bwf/+QcG//kHB//5Bwf/+AcH+fkHB4T5Bwcx+AcHD/kHBwI%202%P8AAAH/AAAG/wAACv8AAAr/AAAE%373%FA8tA9QPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLRS%144%+QcGAfgHBgr5BwZS+QYH8/kHBv/5Bwf/+QcH//gHBv/5Bwb/+QYH//gGB//4Bwf/+AcHs/gHB0H4Bwcd+QYHBw%212%D/AAAB/wAAAf8AAAH/AAAB%368%UDy0W1A8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0ilA8tAs%154%PkHBgT5BgYO+QYHYvgHB+n5Bgb/+AYH//gHBv/4Bgb/+AYG//kHB/n5Bwa5+AcHSvkHBif5BgcN+QcHAQ%591%FA8tFFQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tJZQPLQb%165%PkHBwH5BwcG+QcGEvkHBkj5Bweq+QcG5fgHB/v4Bwbx+AYHzfgGB4b5BwdE+AcHJ/gGBxD4BgcD%592%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLSNUDy0Gw%186%+AcHBfkGBxH4Bwce+QcGOPgHBkz5BwdL+AcHPPkHBy/5Bwce+QYHDfgGBwM%597%UDy0mFA8tP9QPLT/UDy0/1A8tP9QPLTeUDy0clA8tA4%202%PkHBwP5BwcJ+QYHEPgGBxb4BgcY+AcGFfgHBg75BwYH+QcHAg%602%UDy0PlA8tOtQPLTtUDy0nlA8tERQPLQB%10133%FA8tEFQPLTPUDy0/1A8tOhQPLR3%128%UDy0Z1A8tOhQPLT/UDy01lA8tEQ%709%UDy0LFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0ag%116%BQPLRiUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQ0%704%UDy0kFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA9tAM%106%FI+tQFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSY%704%UDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFg%106%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSe%704%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL0%106%FA8tLNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR3%704%UDy0D1A8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQo%96%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLQZ%709%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSU%96%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKg%714%FA8tDRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0D%85%BQPLQHUDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tE%720%BQPLTIUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0a%85%BQPLRbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00Q%724%BQPLRjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00g%84%BQPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0aw%724%BQPLQIUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDg%74%FA8tDFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0Dg%730%UDy0ilA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%74%FA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSa%736%UDy0JFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLQV%64%UDy0DVA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQt%741%FA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR9%64%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%746%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUj+1AQ%58%UDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFs%746%FE+tAFQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0U%53%BQPLRAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA8tAc%751%BQPLR6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tQ%52%BQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0h%757%BQPLQTUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBk%42%FA8tApQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Hg%762%UDy0olA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDI%42%FA8tCpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSv%768%UDy0O1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07lA8tAk%42%FJAtQFQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%506%BRPrQBUDy0IVE9tAM%111%BQPLQsUDy0kFA8tJ5QPLR/UDy0GQ%111%FA8tJhQPLT/UDy0/1A8tP9QPLT+UDy0Xw%52%BQPLRVUDy0/lA8tP9QPLT/UDy0/1A8tJs%111%BQPLQUUDy0eFA8tJ5QPLSYUDy0N%357%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tJ1QPLQD%101%FA8tEFQPLT4UDy0/1A8tP9QPLT/UDy0/FA8tKhQPLRB%106%BQPLRQUDy0mFA8tI9QPLQ2%64%UDy0MFA8tI9QPLSYUDy0Ww%106%UDy0PVA8tKdQPLT4UDy0/1A8tP9QPLT/UDy0+FA8tEQ%335%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%95%FA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01lA8tGtQPLQR%288%UDy0DlA8tGpQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%319%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVE9tAM%90%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0mlA8tC8%266%FA8tCxQPLSTUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%303%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%85%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0XFA8tAc%234%FA8tAdQPLRUUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOg%287%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUDy0Aw%79%FA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLSIUDy0Hg%212%BQPLQYUDy0glA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGc%271%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVE9tAM%79%BQPLRZUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tK9QPLRH%192%UDy0PVA8tK9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Yg%260%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%80%Uj61AVA8tEVQPLSzUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qw%74%UDy0EFA8tEBQPLRkUDy0ZFA8tEJQPLQT%74%BQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tVA8tE9SP7UB%250%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%90%UDy0HFA8tIZQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGI%58%FA8tEpQPLS6UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xFA8tFY%58%FA8tFtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tI5QPLQk%250%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVA8tAM%95%BQPLQHUDy0W1A8tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKE%47%BQPLQYUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0Hw%47%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMlQPLReUDy0CQ%244%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%106%BQPLQwUDy0mlA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%42%FA8tCFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tD%43%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSdUDy0Mg%244%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%111%FA8tA1QPLRuUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tDY%37%UDy0EVA8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLQf%37%FA8tDBQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTaUDy0cFA8tBQ%245%UDy0HVA8tGxQPLTHUDy091A8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0mFI+tQE%122%FA8tD9QPLSrUDy0/FA8tP9QPLTuUDy0Xw%42%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/%42%BQPLRVUDy051A8tP9QPLT9UDy0rVA8tEc%261%UT20A1A8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tDhQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLRiUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BQ%138%UDy0ClA8tC1RPrUB%42%BQPLRAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0V%43%UkC1AVA8tCpQPLQO%352%UDy0UlA8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI8%287%BQPLStUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0x%400%FA8tANQPLRwUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rVE9tAM%282%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBM%389%UDy0BFA8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTNUDy0Ew%287%FA8tDVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tEo%383%BQPLQTUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLQj%293%FA8tF9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%378%FA8tDJQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tDQ%298%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%373%UDy0UlA8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0Yg%303%FA8tFRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%362%FA8tANQPLRwUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR/%309%FA8tClQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDo%357%UDy0BFA8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ5RPbQD%309%FJAtQFQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tAo%351%BQPLQUUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zVA8tBE%261%UDy0E1A8tDJQPLQJ%42%BQPLSPUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0og%42%UDy0CFA8tDJQPLQZ%293%FA8tDJQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0F%251%Uj+1AVA8tEdQPLS0UDy0/VA8tP9QPLTyUDy0Yw%36%BQPLQfUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Kw%36%BQPLRfUDy07lA8tP9QPLT/UDy0tFA8tFBSP7UB%272%UDy0YVA8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLQy%245%FA8tBRQPLR0UDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tD0%37%UDy0fVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSO%37%FA8tDBQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0d1A8tBU%250%FA8tANQPLR/UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tGE%239%BQPLQ3UDy0oFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%37%UT60AVA8tLdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMFQPLQJ%37%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSkUDy0O%235%UDy0EVA8tJ5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0fw%228%BQPLQMUDy0Y1A8tMpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKE%42%FA8tAlQPLSyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%42%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNJQPLRmUDy0D%213%BQPLQ0UDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUDy0Aw%218%UDy0JFA8tI5QPLTtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFs%53%UDy0dlA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLR7UT20Aw%47%FA8tFBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tJNQPLQo%85%FA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tGJQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLQJUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVRPrUB%96%UD20A1A8tE9QPLS7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0mw%63%FA8tA9QPLRyUDy0vlA8tPlQPLT/UDy0/1A8tPxQPLTFUDy0fVA8tBQ%63%BQPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vVA8tFhQPbQD%64%UT60AVA8tJhQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT0UDy0q1A8tFpQPLQP%90%BQPLRiUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tKpQPLQ9%90%BRPbQBUDy0Bg%90%UDy0O1A8tKdQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ag%63%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%101%FA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLSCUDy0G%213%BQPLQTUDy0elA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHs%63%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%117%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0VFE+tQE%234%FE+tAFQPLRMUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOo%69%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%133%FA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0klA8tCw%266%FA8tCRQPLSMUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%74%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%149%FA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00FA8tGRQPLQM%288%UDy0CFA8tGNQPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%79%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%165%FA8tDlQPLT1UDy0/1A8tP9QPLT/UDy0+FA8tKJQPLQ5%106%BQPLRbUDy0oVA8tJ1QPLQ9%64%UDy0NlA8tJNQPLShUDy0Yg%106%UDy0NVA8tKBQPLT4UDy0/1A8tP9QPLT/UDy0+FA8tEQ%85%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%186%BQPLQkUDy0jlA8tJ5QPLR4UDy0FQ%111%FA8tJtQPLT/UDy0/1A8tP9QPLT/UDy0Yw%52%BQPLRVUDy0/lA8tP9QPLT/UDy0/1A8tKs%111%BQPLQPUDy0c1A8tJ1QPLSQUDy0L%96%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%336%UDy0PFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tAk%42%FJAtQFQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRH%234%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%352%UDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDI%42%FA8tCpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS3%240%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%362%BQPLQWUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBk%42%FA8tApQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Hg%239%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%378%BQPLR5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0t%53%BQPLSoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ig%244%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%389%FE+tAFQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0T%53%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tAc%245%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%405%FA8tFBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTfUj+1AQ%58%UDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFw%250%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%421%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR0%64%UDy0bFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%255%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%432%UDy0JlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLQV%64%UDy0DVA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQv%256%UT20A1A8tJ1QPLT6UDy0sVA8tGBQPLQU%448%UDy0jFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKQ%74%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSb%261%FE9tANQPLQT%458%BQPLQIUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDg%74%FA8tC9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0EQ%724%BQPLRjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00Q%84%BQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bQ%724%BQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%84%BQPLRbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%719%FA8tDVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTtUDy0D%85%BQPLQHUDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tEE%714%FA8tKFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%96%UDy0hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK0%709%UDy0EFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQo%96%UDy0HFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLQZ%704%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%106%FA8tLJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSB%704%UDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFQ%106%FA8tEVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSe%704%UDy0jlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA9tAM%106%FI+tQFQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSY%704%UDy0JFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0Yw%116%BQPLRZUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQ0%709%FA8tDlQPLTIUDy0/lA8tOhQPLRn%128%UDy0YVA8tOVQPLT/UDy0z1A8tEE%7914%FA8tAJQPLQNUDy0RVA8tG9QPLSFUDy0vFA8tMFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tMFQPLS3UDy0g1A8tG1QPLRFUDy0DVA8tAI%762%FA8tBlQPLRaUDy0nFA8tNdQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tNZQPLSdUDy0W1A8tBk%730%FA8tBpQPLRtUDy0vFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLS8UDy0bVA8tBo%485%UDy0P1A8tJZQPLTWUDy0+VA8tPlQPLTWUDy0llA8tD8%170%FA8tAJQPLREUDy0rFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLSrUDy0Q1A8tAI%458%FA8tBpQPLSTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSTUDy0Gg%148%BQPLQCUDy0SlA8tMdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMdQPLRKUDy0Ag%442%UDy0GlA8tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tBo%138%FA8tD9QPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8tLFQPLSUUDy0XVA8tFlQPLQjUDy0HFA8tBxQPLQcUDy0HFA8tBxQPLQcUDy0JFA8tFhQPLRdUDy0lFA8tLBQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tD4%437%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJM%127%BQPLQWUDy0plA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0nFA8tFVQPLQXUDy0Ag%84%BQPLQCUDy0FlA8tFRQPLScUDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSlUDy0Fw%420%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%117%FA8tExQPLTmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0j1A8tDFQPLQE%128%UDy0BFA8tDFQPLSPUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tEw%415%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSW%106%BQPLQEUDy0j1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z1A8tFpQPLQJ%160%UDy0CVA8tFlQPLTPUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLSPUDy0Aw%404%BQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%101%FA8tA1QPLTBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLRRUDy0Ag%180%BQPLQCUDy0UVA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tA0%399%BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%96%UDy0EFA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0a1A8tAQ%202%FA8tAVQPLRsUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQQ%394%BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%90%BQPLQOUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLlQPLQf%224%UDy0HVA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTHUDy0Dg%388%BQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%85%FA8tA9QPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0ew%244%BQPLR7UDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xVA8tA8%383%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSW%80%UDy0AlA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRN%256%UDy0TVA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKtQPLQC%378%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%80%UDy0cVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEs%266%FA8tEtQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRx%384%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJM%79%BQPLQsUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Sg%276%BQPLRKUDy091A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0LQ%378%UDy0GlA8tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tBo%74%FA8tANQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRc%288%UDy0XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wlA8tAM%378%FA8tBpQPLSTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSTUDy0Gg%79%FA8tE9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJpQPLUB%288%UDy1AVA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tE8%389%UDy0P1A8tJZQPLTWUDy0+VA8tPlQPLTWUDy0llA8tD8%85%UDy0A1A8tNFQPLT/UDy0/1A8tP9QPLT/UDy03VA8tA0%298%FA8tA1QPLTdUDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQD%277%FE9tAJQPLSlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%149%UDy0SlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0W%309%BQPLRYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRK%282%BQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%149%UDy0qVA8tP9QPLT/UDy0/1A8tP9QPLTSUDy0BQ%308%BQPLQFUDy00lA8tP9QPLT/UDy0/1A8tP9QPLSp%288%UDy0BVA8tKZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLQLUDy081A8tP9QPLT/UDy0/1A8tP9QPLRe%320%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Cw%287%FA8tAVQPLSmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLRNUDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQM%320%UDy0DFA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0Tg%292%BQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLSHUDy0/1A8tP9QPLT/UDy0/1A8tLM%330%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0hw%298%UDy0BVA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tH%331%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0vg%298%UDy0fFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tEQ%330%FA8tEVQPLT/UDy0/1A8tP9QPLT/UDy01w%292%BQPLQIUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLQOUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLQEUDy06FA8tP9QPLT/UDy0/1A8tP5QPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%271%FNAtQJQPLRlUDy01VA8tNVQPLRlUDy0N1A8tOhQPLT+UDy0+FA8tHxQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP8%143%BQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tCU%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/g%271%FA8tGVQPLT+UDy0/1A8tP9QPLT+UDy0ZVA8tARQPLQOUDy0C%11%UDy0BVA8tKZQPLT/UDy0/1A8tP8%143%BQPLTGUDy0/1A8tP9QPLT/UDy0/1A8tFs%330%FA8tFRQPLT/UDy0/1A8tP9QPLT/UDy0y%272%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy01Q%31%FA8tAVQPLSmUDy0/1A8tP8%143%BQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tI0%213%UDy0BQ%111%FA8tIBQPLT/UDy0/1A8tP9QPLT/UDy0sw%271%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy01Q%36%BQPLQFUDy0plA8tP8%143%BQPLRvUDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQC%208%UDy0n1A8tFNQPLQB%101%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0f%256%FA9tAhQPLQOUT20BFA8tGVQPLT+UDy0/1A8tP9QPLT+UDy0ZQ%42%UD20BVA8tKU%143%BQPLQtUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLQ9%208%UDy0sFA8tP9QPLSTUDy0Cg%90%UDy0HFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0P%251%UDy0fFA8tPhQPLT+UDy06FA8tDdQPLRlUDy01VA8tNVQPLRlUDy0Ag%47%FE9tAI%143%BQPLQDUDy01lA8tP9QPLT/UDy0/1A8tP9QPLSx%208%UDy0sFA8tP9QPLT/UDy0y1A8tCM%85%UDy0d1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0B%245%BQPLQ1UDy0/lA8tP9QPLT/UDy0/1A8tOhRPbQE%224%UDy0b1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0T%203%UDy0sFA8tP9QPLT/UDy0/1A8tPNQPLRY%74%BQPLQLUDy06FA8tP9QPLT/UDy0/1A8tP9QPLSb%250%BQPLSGUDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQO%224%UDy0CVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy02FA8tAw%197%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0mFA8tAo%63%BQPLR1UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQv%250%BQPLRaUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQI%229%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQD%192%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNBQPLQk%53%FA8tCBQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tLI%239%BQPLQ1UDy0hlA8tFpQPLQIUDy0zFA8tP9QPLT/UDy0/lA8tHw%234%FA8tAVQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRz%192%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0XFA8tQE%37%UDy0BlA8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tD%235%FA8tHxQPLT+UDy0/1A8tP9QPLTMUDy0CFA8tFpQPLSGUDy0NQ%244%BQPLQyUDy081A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0d%187%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJxQPLQJ%32%UDy0ilA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0n%235%UDy0CFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0Wg%266%UDy0a1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHU%181%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTUUDy0Jw%20%BQPLQqUDy09lA8tP9QPLT/UDy0/1A8tP9QPLTlUDy0FQ%234%UDy0DlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0hg%266%UDy0BFA8tKBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR3%176%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tGFQPLQB%16%UDy0LlA8tNRQPLT/UDy0/1A8tPxQPLRJ%240%UDy0BFA8tOhQPLT/UDy0/1A8tP9QPLT+UDy0NQ%271%FA8tANQPLSuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kFA8tAc%165%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLShUDy0EQ%15%FA8tBBQPLShUDy0/1A8tHw%170%FE9tAI%47%BTQLUCUDy0ZVA8tNVQPLTVUDy0ZVA8tDdQPLToUDy0/lA8tPhQPLR8%282%BQPLQRUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLJQPLQV%160%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDs%15%BQPLQDUDy0PFA8tAM%170%FA8tKVQPLQF%42%BQPLRlUDy0/lA8tP9QPLT/UDy0/lA8tGVQPLQEUDy0DlA8tAg%293%UDy0ElA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0Lw%4%BQPLQRUDy0M1A8tGpQPLRzUDy0qVA8tKpQPLSqUDy0qlA8tJBQPLRsUDy0UlA8tCk%85%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLR1%197%FA8tP9QPLSmUDy0BQ%36%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tNU%314%FA8tARQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tMlQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTnUDy0oVA8tFJQPLQF%64%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0tVA8tAk%186%FA8tP9QPLT/UDy0plA8tAU%31%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tNU%319%BQPLQCUDy0ilA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0eFA8tAY%53%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQi%181%FA8tP9QPLT/UDy0/1A8tKZQPLQF%10%BQPLQIUDy0DlA8tARQPLRlUDy0/lA8tP9QPLT/UDy0/lA8tGU%330%FA8tGZQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNlQPLQ2%48%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Qg%175%FA8tP9QPLT/UDy0/1A8tP9QPLSmUDy0BVA8tHxQPLT4UDy0/lA8tOhQPLQ3UDy0ZVA8tNVQPLTVUDy0ZVA8tAI%325%UDy0E1A8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0ZQ%42%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0ig%175%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ulA8tP5QPLT/UDy0/1A8tP9QPLToUDy0B%341%BQPLQDUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tHlQPLRyUDy0clA8tHtQPLSwUDy01FA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tDo%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tMZQPLQs%181%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Dg%340%BQPLRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLQc%21%FA8tBhQPLRTUDy0vFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLRVUDy0alA8tJNQPLSZUDy0T%11%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Ug%191%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0C%341%BQPLTLUDy0/1A8tP9QPLT/UDy0/1A8tPlQPLSIUDy0SVA8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Qw%31%FA8tDxQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tIJQPLQI%197%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR8%341%FA8tAZQPLTxUDy0/1A8tP9QPLT/UDy0/lA8tFw%10%FA8tBdQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tHI%31%BQPLQTUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0YQ%207%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLpQPLQF%341%FA8tBJQPLT2UDy0/1A8tP9QPLT/UDy0+lA8tB8%15%BQPLQCUDy0g1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSKUDy0Bw%26%UDy0qVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tAw%202%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSmUDy0BQ%340%BQPLToUDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQh%21%FA8tExQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0slA8tAc%15%BQPLRzUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIM%202%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0plA8tAU%335%BQPLSUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0hFA8tBc%15%BQPLQmUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLNQPLQJUDy0SVA8tMdQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLTGUDy0lVA8tIlQPLR9UDy0H%11%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLQ1%197%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKZQPLQF%330%BQPLQcUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLS8UDy0fFA8tEJQPLQoUDy0FlA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0AQ%191%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSmUD20BQ%330%UDy0V1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0+lA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xlA8tAY%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLTUUDy0VVA8tDdQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0d%192%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0pVE9tAI%330%FA8tFJQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSkUDy0Dw%42%UDy0sFA8tP9QPLT/UDy091A8tHRQPLQM%10%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tBs%122%FA8tD9QPLSWUDy01lA8tPlQPLT5UDy01lA8tJZQPLQ/%442%BQPLQaUDy0sFA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFxQPLQC%48%UDy0sFA8tPtQPLSfUDy0Gg%20%BQPLQeUDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLVQPLQD%106%BQPLQaUDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k1A8tBo%442%FA8tDNQPLSWUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Uw%58%UDy0glA8tDY%37%UDy0dFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRi%101%FA8tBpQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQa%448%UDy0C1A8tD9QPLR9UDy0rVA8tOBQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tPVQPLTgUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tB%102%UDy0A1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0F%96%FA8tJNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%474%BQPLQFUDy0HFA8tBxQPLQcUDy0HFA8tBI%5%UDy0AVA8tJJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKJQPLQB%101%FA8tE1QPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p%91%UDy0P1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%511%FA8tAlQPLTIUDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQ7%106%BQPLSzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tEE%85%UDy0llA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lg%516%BQPLQoUDy09FA8tP9QPLT/UDy0/1A8tP9QPLS/UDy0AQ%100%BQPLQrUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNhQPLQL%80%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%522%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Pw%106%UDy0klA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSR%80%UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%522%UDy0CVA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0sg%106%UDy0DlA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0HQ%74%UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%527%FA8tGVQPLT/UDy0/1A8tP9QPLT/UDy0+1A8tB8%106%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMZQPLQ5%80%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%527%FA8tAxQPLTuUDy0/1A8tP9QPLT/UDy0/1A8tG0%106%FA8tAFQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0ZFA8tAY%85%UDy0llA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lg%532%BQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tLQ%111%BQPLQ0UDy0/VA8tP9QPLT/UDy0+VA8tIxQPLQS%96%UDy0P1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%532%BQPLRIUDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQB%106%BQPLUBUDy0qVA8tP5QPLS+UDy0Jw%111%FA8tJNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%538%BQPLQRUDy09lA8tP9QPLT/UDy0/1A8tP5QPLQu%112%UDy0GVA8tFo%122%FA8tBpQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQa%544%UDy02FA8tP9QPLT/UDy0/1A8tP9QPLRM%250%BQPLQaUDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k1A8tBo%549%UDy0sVA8tP9QPLT/UDy0/1A8tP9QPLRz%261%FA8tD9QPLSWUDy01lA8tPlQPLT5UDy01lA8tJZQPLQ/%560%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLRz%864%UDy0eVA8tP9QPLT/UDy0/1A8tP9QPLRz%14133%FA8tAZQPLRgUDy0r1A8tLdQPLR8UDy0Fw%308%BQPLQGUDy0MVA8tDhQPLQO%528%UDy0BlA8tK1QPLT+UDy0/1A8tP9QPLT/UDy07VA8tH9QPLQT%288%UDy0AVA8tExQPLTZUDy0/lA8tP5QPLTtUDy0a1A8tAE%517%UDy0YFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBM%266%FA8tAFQPLRBUDy0vlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tFo%517%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRgUDy0B%245%BQPLQDUDy0TlA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLQC%512%UDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQE%224%UDy0AVA8tEFQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLQF%512%UDy0fFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0YFA8tAM%202%FA8tAFQPLRBUDy0vlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBQPLQD%512%UDy0ElA8tNdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLRBUDy0AQ%186%UDy0MlA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tH4%522%FA8tBtQPLSkUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tEFQPLQB%165%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0qFA8tAk%533%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS+UDy0Mg%148%BQPLQkUDy0n1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tK1QPLQ+UDy0Ag%548%BQPLQkUDy0rVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ9QPLQk%128%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS+UDy0QVA8tAE%565%UDy0AVA8tEFQPLS+UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0n1A8tCQ%106%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tEFQPLQB%586%BQPLQBUDy0QVA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSRUDy0F%85%BQPLQkUDy0n1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRBUDy0AQ%607%FA8tAFQPLRCUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tIFQPLQT%64%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0YFA8tAQ%629%UDy0BFA8tGBQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBM%42%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQE%650%BQPLQEUDy0YFA8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRgUDy0B%21%BQPLQTUDy0kVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLRgUDy0B%672%FA8tARQPLR+UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQEUDy0E1A8tH9QPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBE%693%UDy0E1A8tH9QPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTdUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tH9QPLQT%714%BQPLQTUDy0f1A8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLR/UDy0Ew%735%FA8tBRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0n1A8tBQ%757%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ9QPLQk%730%D/AAAD/wAAKP8AAE3/AABg/wAAYf8AAE3/AAAm/wAAAw%4%BQPLQnUDy0olA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSfUDy0J%16%FA8tARQPLR6UDy0fVA8tH1QPLR9UDy0Jg%682%/wAAC/8AAHH/AADZ/wAA/f8AAP//AAD//wAA//8AAP//AAD9/wAA2/8AAHX/AAAN/wAAAlA8tEFQPLS+UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tDI%26%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%676%D/AAAs/wAA1f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADe/wAAPQ%4%BQPLQBUDy0QVA8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tL5QPLRBUDy0AQ%31%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%671%P8AACH/AADm/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA9P8AAEM%10%FA8tAdQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tAE%42%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%666%/wAAAf8AALP/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8/wAA+/8AAP7/AAD//wAA//8AAP//AAD//wAA//8AAOj/AAAZ%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%47%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%666%/wAAMP8AAPz/AAD//wAA//8AAP//AAD//wAA7P8AAGj/AAAa/wAAEv8AAEn/AADP/wAA//8AAP//AAD//wAA//8AAP//AACR%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%15%FA8tGhQPLRYUDy0E%16%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%15%FA8tAZQPLQ/UDy0hlA8tAU%629%/wAAiP8AAP//AAD//wAA//8AAP//AAD0/wAANQ%20%D/AAAR/wAA0v8AAP//AAD//wAA//8AAP//AADr/wAACFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0B1A8tOdQPLT/UDy08lA8tK5QPLRaUDy0ElA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0T1A8tAdQPLRCUDy0lVA8tONQPLT+UDy0/lA8tDs%623%D/AAAB/wAAx/8AAP//AAD//wAA//8AAP//AACI%32%/wAATP8AAP7/AAD//wAA//8AAP//AAD+/wAAMlA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0QVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy081A8tLRQPLT9UDy0/1A8tP9QPLT/UDy0wVA8tOVQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tIo%623%D/AAAF/wAA7/8AAP//AAD//wAA//8AAP3/AAAw%32%/wAAC/8AAPf/AAD//wAA//8AAP//AAD//wAAUFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLQD%618%D/AAAS/wAA+/8AAP//AAD//wAA//8AAPr/AAAM%32%/wAABP8AAPD/AAD//wAA//8AAP//AAD//wAAVVA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%4%BQPLQBUDy0e1A8tOFQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tLdQPLQP%618%D/AAAM/wAAdP8AAHb/AAB2/wAAdv8AAHP/AAAC%32%/wAAIv8AAPz/AAD//wAA//8AAP//AAD//wAAQFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%15%FA8tAVQPLQ9UDy0kFA8tN9QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tLBQPLReUDy0FVA8tAE%687%D/AAAB/wAAlP8AAP//AAD//wAA//8AAP//AAD5/wAAGFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tARQPLQ6UDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLRVUDy0Dw%708%D/AABh/wAA/P8AAP//AAD//wAA//8AAP//AAC2/wAAAVA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%36%BQPLQVUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLRH%704%/wAAAv8AAHj/AAD7/wAA//8AAP//AAD//wAA//8AAPT/AAAx%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tAJQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0Fw%692%D/AAAG/wAAmv8AAP7/AAD//wAA//8AAP//AAD//wAA9v8AAFE%10%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tGVQPLT+UDy0/1A8tP9QPLT/UDy03FA8tKpQPLT/UDy0/1A8tP9QPLT/UDy0rVA8tAI%682%P8AAAH/AACc/wAA//8AAP//AAD//wAA//8AAP//AADn/wAAQw%15%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%26%UDy0KVA8tPFQPLT/UDy0/1A8tP9QPLT5UDy0PVA8tBBQPLTaUDy0/1A8tP9QPLT/UDy0/lA8tGc%682%P8AAE//AAD+/wAA//8AAP//AAD//wAA//8AALz/AAAe%21%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%20%BQPLQIUDy0yFA8tP9QPLT/UDy0/1A8tP9QPLS%11%BQPLQ7UDy0+FA8tP9QPLT/UDy0/1A8tPJQPLQq%672%/wAAAv8AAMf/AAD//wAA//8AAP//AAD+/wAAkf8AAAY%26%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%20%BQPLQdUDy001A8tP9QPLT/UDy0/1A8tMNQPLQG%16%UDy0fVA8tP9QPLT/UDy0/1A8tPBQPLRL%672%/wAAHP8AAPv/AAD//wAA//8AAP//AAC6/wAAAw%31%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%26%UDy0DlA8tJ1QPLT+UDy07lA8tCQ%21%UDy0BlA8tMBQPLT/UDy0zFA8tCk%677%/wAAQf8AAP//AAD//wAA//8AAP//AABv%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tAFQPLReUDy0W%32%FA8tCJQPLSKUDy0Cw%682%/wAASv8AAPH/AADx/wAA8f8AAPH/AABU%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAAf8AAAT/AAAE/wAABP8AAAT/AAAC%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAA/8AAAX/AAAF/wAABf8AAAX/AAAE%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAqP8AAPT/AAD0/wAA9P8AAPT/AADh/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAWP8AAH//AAB//wAAf/8AAH//AAB2/wAAAg%31%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tARQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rw%852%BQPLSfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Y%853%BQPLQbUDy011A8tP9QPLT/UDy0/1A8tP5QPLStUDy0Bg%858%UDy0ElA8tHxQPLS3UDy0r1A8tGBQPLQG%19749%FA8tCxQPLTgUDy0/FA8tHk%869%UDy0K1A8tOlQPLT/UDy0/1A8tP9QPLSE%858%BQPLQqUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0dw%847%FA8tClQPLToUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHU%837%UDy0KFA8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSB%826%BQPLQnUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0e%816%FA8tCZQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tH%806%UDy0JVA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR1UDy0AQ%788%BQPLQkUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bw%783%FA8tCNQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBQPLQ2UDy0CFA8tKVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGtQPLQB%768%UDy0IlA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tDc%10%FA8tAZQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRz%762%BQPLQhUDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0O%21%BQPLQFUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0bg%751%FA8tCBQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ5%32%UDy0AlA8tLZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%741%UDy0H1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tDo%42%FA8tANQPLStUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR1%730%BQPLQfUDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Ow%52%BQPLQDUDy0rlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDy0Yw%719%FA8tB5QPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQ9%64%UDy0ClA8tKpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGI%709%UDy0HVA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tD4%74%FA8tAtQPLSvUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRk%698%BQPLQcUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Pw%84%BQPLQFUDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Yg%79%FE9tXVQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA7tH0%474%FA8tBxQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR%97%UDy0ClA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tF0%74%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%469%UDy0G1A8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tEE%106%FA8tAVQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLRc%69%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%Es8tBFQPbNQUD2zUFA9s1BQPbNQUD2zUE47tTQ%207%BQPLQaUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0Qw%116%BQPLQEUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0WQ%63%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%202%FA8tBpQPLTYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLRE%128%UDy0BVA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%63%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%197%UDy0GVA8tNdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tEY%133%UDy0SFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0w%64%FE9tXVQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA8tMtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA7tH0%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%191%BQPLQYUDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Rw%132%BQPLRHUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0Gw%111%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%266%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%186%FA8tBdQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRI%133%FA8tD9QPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQc%117%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%69%gACAAk0zswo%186%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%181%UDy0FlA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEo%133%UDy0PlA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tB0%122%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%47%BVQLUYUDu0cFA7s71QPLToUDy0/VA8tP9QPLT5UDy00FA9tI9SPbMy%26%BgQL8ITz20pFA7tLBQO7SwUDu0sFA7tLBQO7SwUTy0q1VAqgw%26%FUrqgZQPLSmUDu0sFA7tLBQO7SwUDu0sFA7tLBQPLSpTjuxDUlJtgdSO7Y4Uju2OFA7tGNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLtSO7Y4Uju2OE47tTQ%159%BQPLQWUDy01FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0Sw%132%BQPLRBUDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0GQ%127%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%37%QEC/BFA7s3lQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1r0w5sxs%21%UD20bVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tX8%26%FE8tW5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLV8%5%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%155%FA8tBVQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRM%133%FA8tEFQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLQa%133%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BJSbYHUDu0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtOPrU+%18%D/AVA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJVPbYV%16%VUCqDFA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9AQL8E%5%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%150%UDy0FFA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tE0%133%UDy0OlA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tC%139%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BRPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUj2zMg%15%FM+syVQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7SS%16%UDy1f1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+04+tjE%10%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%144%BQPLQTUDy00VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0Tw%132%BQPLQ5UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0IQ%143%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FA8tV1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7O9UT20flA7s3lQPLSmUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UTy01GYzzAU%15%BRPbV1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5Uzy0Ig%4%BNQLMUUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0h%16%FE6uRZQO7SwUDu0sFE7tMFQPLT/UDy0/1A8tP9QPLT/UDy0/1E8tORQO7SwUDu0sFA8s6U%143%BQPLSIUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLRQ%133%FA8tDhQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQi%149%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%ZjPMBU88tOdQPLT/UDy0/1A8tP9QPLT/UDy0/FE8tFU%21%Uz6zJVA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0/088tGo%15%BVVaoDUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDyzpQ%4%BQPLWQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTVSUm2Bw%31%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%159%BQPLSGUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRX%128%UDy0N1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tCM%154%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UT20WFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%32%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM8%21%TTuyK1A8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/lA9s1BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP1PPLU3%37%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%159%BQPLQQUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0VQ%116%BQPLQ2UDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0J%160%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UDu0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UkC2H%37%BQPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9TObMo%21%FA7tH1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIw%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%143%D/AAAK/wAAC%11%UDy0EVA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tFQ%106%FA8tDVQPLTvUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tORQPLQf%165%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UDy06FA8tP9QPLT/UDy0/1A8tP9RPLTU%42%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbVg%21%GYzzAVQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD2021U5qgk%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%133%/wAABv8AAKb/AAD//wAA+/8AAIM%10%FA8tBFQPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLRT%96%UDy0OVA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05FA8tC%171%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSQLYcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPTz21ZE89tWRPPbVkTz21ZE89tWRPPbVkTz21ZE89tWRQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSV%26%BOPrYxUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+Tj61Pg%47%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%127%D/AAAF/wAAtf8AAP//AAD//wAA//8AAP//AACI%10%BQPLQSUDy0z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0UQ%84%BQPLQ5UDy07lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0Iw%175%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BQPLQzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Sw%32%UD21hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSV%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%122%P8AAAX/AAC5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAAhg%10%UDy0E1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tEs%74%FA8tDFQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOFQPLQn%181%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BPPLREUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLX%33%YEC/CFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlLPLQR%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%117%/wAABf8AAK3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAIQ%10%FA8tBRQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRP%64%UDy0MFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy051A8tCg%186%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSPbRLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTM%32%UD20bVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLR7%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%111%D/AAAF/wAAq/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACD%10%BQPLQUUDy00lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDy0Tg%52%BQPLQzUDy07VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0KQ%191%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSPbY7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTLTzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRQPLRm%26%BNPrIhUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TTuyKw%47%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%106%P8AAAT/AACq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgQ%10%UDy0FVA8tNNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEw%42%FA8tDRQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQq%197%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BRPrQpUDy0/1A8tP9QPLT/UDy0/1A8tP9RPLWh%104%/wFRPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21ylVVqgM%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%101%/wAABP8AAKj/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAH8%10%FA8tBZQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRL%32%UDy0LVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tCY%202%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BVK6oGTzy091A8tP9QPLT/UDy0/1A8tP9QPLTC%101%FA9tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9s3Y%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%95%D/AAAE/wAAp/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB+%10%BQPLQXUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0SQ%20%BQPLQyUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTqUDy0Jw%207%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%Tzy0xFA8tP9QPLT/UDy0/1A8tP9PPLT3Rka5Cw%36%BTPLQiTz21ZE89tWRPPbVkTz21ZE89tWRRPLMv%16%Ujq1H1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/087tWdQPLT8UDy0/1A8tP9QPLT/UDy0/088tPdTObMo%37%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%90%P8AAAP/AACl/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAf%11%UDy0F1A8tNZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEg%10%FA8tC9QPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQo%213%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UT21dVA8tP9QPLT/UDy0/1A8tP9QPLT/Tz21cQ%34%/wFQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbM2%16%UDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20sQ%4%BRO7ObUDy0/1A8tP9QPLT/UDy0/1A8tP9QPbTGgACAAg%31%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A7s6w%85%/wAAA/8AAKT/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHo%10%FA8tBhQPLTXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRHUDy0L1A8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA8tC0%218%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%Szy0EVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy09lE8tUw%21%TjuxDVE8taFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMU%15%BQPLRmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UT60KQ%4%BOO7EaUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UTyzcg%31%FA9szZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNI%79%D/AAAD/wAAo/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB4%10%BQPLQZUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTnUDy0Lw%223%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FE9tH5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7POTzy0mlA8tZBQPLStUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lI9szI%10%E8+sB1QPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSZ%16%UD21hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lM+syU%26%FM5syhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLO2UD20gk88tIQ%63%D/AACM/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAdw%10%UDy0GlA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLQw%229%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FVVqgNQPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTu0Xw%15%E88tLdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRVQLUY%16%VUS7D1A9tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMIAAP8B%21%GYzzAVQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHU%10%FA8tBpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tDI%234%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BQQK8QUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQO7VW%16%UTy0YlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tIE%26%FA7tHBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbRt%26%BRPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AADW/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABz%10%BQPLQbUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTuUDy0Lw%239%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%37%YEC/CFA9tIJQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDu0sFA6tiM%15%BMObMbUDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDyz6VVAqgw%26%FUrqgZQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0Uzy0Ig%20%BVRLsPUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AAAu/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAcQ%10%UDy0HFA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQ0%330%BON7EXUD20aVE9tLFPPLTXUD207FA8tPBQPLTeTzy0t1A8tXxQOrYj%176%SUm2B1E8tWtQO7O9Tzy051A8tPRQPLPpUDy00E88s5E%69%/wAAL/8AAOv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAG8%10%FA8tBxQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tC8%682%P8AADD/AADs/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABu%10%BQPLQdUDy03lA8tP9QPLT/UDy0/1A8tP9QPLTwUDy0Ng%692%D/AAAx/wAA7f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAb%11%UDy0HlA8tN9QPLT/UDy0/1A8tOxQPLQ3%704%/wAAMv8AAO7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAGo%10%FA8tB9QPLSzUDy0v1A8tC0%714%P8AADP/AADu/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABp%746%D/AAA0/wAA7/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+/wAAZ%747%/wAANf8AAPD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA8v8AAB%747%P8AADb/AADw/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AACU%751%D/AAA4/wAA8f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAxQ%762%/wAAOf8AAPH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADW/wAAFw%767%P8AADr/AADy/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANf/AAAY%778%D/AAA7/wAA8/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA2P8AABg%789%/wAAPP8AAPP/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADZ/wAAGQ%799%P8AAD3/AAD0/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANr/AAAa%810%D/AAA//wAA9P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA2/8AABs%821%/wAAQP8AAOT/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAC8/wAAGw%24986%UDy0GFA8tI5QPLTHUDy0tVA8tFFQPLQB%858%BQPLQWUDy021A8tP9QPLT/UDy0/1A8tP1QPLRz%858%BQPLSFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0K%853%BQPLS3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tD0%847%BQPLShUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ9%842%BQPLQ9UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Pg%842%UDy0aVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy081A8tD4%842%FA8tIxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQ/%842%BQPLSLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Pw%431%FA8tANQPLRvUDy0cFA8tAM%229%UDy0D1A8tH9QPLRY%144%UDy0i1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tE%422%UDy0BFA8tK1QPLT/UDy0/1A8tLBQPLQG%218%BQPLQXUDy011A8tP9QPLT/UDy0Uw%143%FA8tIpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLR%411%BQPLQDUDy0pFA8tP9QPLT/UDy0/1A8tP9QPLSqUDy0BQ%207%FA8tBJQPLTQUDy0/1A8tP9QPLT/UDy0xQ%148%BQPLSJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%399%FA8tAFQPLScUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0o1A8tAI%197%UDy0EFA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/lA8tAI%149%UDy0iFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEI%394%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%191%BQPLQMUDy0x1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tAQ%154%FA8tIhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRC%384%UDy0jFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSWUDy0AQ%175%FA8tApQPLTBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tAI%159%BQPLSHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0HQ%372%BQPLSDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jQ%170%UDy0CFA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zQ%170%UDy0hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tB0%362%FA8tHpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIQ%159%BQPLQGUDy0s1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%175%FA8tIVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNtQPLQe%352%UDy0clA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR7%149%FA8tARQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSZ%186%BQPLSLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Hg%340%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0cg%138%UDy0AlA8tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKFQPLQC%186%BQPLQKUDy0ulA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03FA8tB4%330%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQSUDy0EVA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGk%127%BQPLQBUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tAQ%197%UDy0CVA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQf%320%UDy0W1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01FA8tBg%10%FA8tBVQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRi%117%FA8tAFQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSuUDy0BQ%207%FA8tAlQPLS5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTdUDy0Hw%308%BQPLRbUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Fg%20%BQPLQYUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Wg%111%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLdQPLQD%218%BQPLQJUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8tC%299%FA8tFdQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQb%32%UDy0GlA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tFQ%101%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tAc%229%UDy0CVA8tLhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN5QPLQg%288%UDy0S1A8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tBw%42%FA8tCBQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRN%90%BQPLR7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0Cg%239%FA8tAhQPLS3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0I%277%BQPLRHUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0I%53%BQPLQiUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0RQ%79%FA8tHlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMVQPLQL%250%BQPLQIUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tCE%266%FA8tEVQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZQPLQl%64%UDy0JFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEI%69%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yFA8tA4%261%UDy0CFA8tLZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLQh%256%UDy0QFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tCY%74%FA8tCtQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%58%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUDy0D%272%FA8tAhQPLS2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTfUDy0Ig%244%BQPLQ8UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lg%84%BQPLQtUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Nw%47%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQR%282%BQPLQHUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tAk%234%FA8tDRQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQx%96%UDy0L1A8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tDU%37%UDy0YFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy001A8tBc%293%UDy0B1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLpQPLQJ%224%UDy0MVA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tDQ%106%FA8tDdQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ0%26%BQPLRdUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTVUDy0Fg%303%FA8tAdQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS6UDy0CQ%212%BQPLQvUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Ow%116%BQPLQ4UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0L%16%FA8tFlQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQb%314%BQPLQeUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tAo%202%FA8tCpQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR%129%UDy0O1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tCo%5%UDy0TVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tBs%325%UDy0HlA8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLtQPLQK%192%UDy0JFA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEY%138%FA8tERQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLRtUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0IQ%335%FA8tB1QPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0Cg%180%BQPLQfUDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0Tg%148%BQPLRHUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZQPLQm%346%BQPLQdUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tAo%170%FA8tANQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLRV%160%UDy0TFA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tCk%357%UDy0HVA8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL1QPLQK%165%FA8tFZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tFw%170%FA8tFRQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0Lg%367%FA8tBxQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS9UDy0Cw%159%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Z%181%BQPLRcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBQPLQ0%378%BQPLQcUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%154%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRs%192%UDy0ZFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy081A8tDo%389%UDy0HFA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQL%149%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHM%202%FA8tGtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0Q%400%FA8tBtQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Cw%143%FA8tGxQPLT/UDy0/1A8tP9QPLT/UDy0fg%212%BQPLR0UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRG%410%BQPLQbUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wFA8tAw%138%FA8tBNQPLTvUDy0/1A8tP9QPLSG%224%UDy0fVA8tP9QPLT/UDy0+lA8tE0%421%UDy0GlA8tNhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQM%138%BQPLRBUDy0tFA8tGg%234%FA8tHNQPLS0UDy0Tg%431%FA8tBtQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSh%842%BQPLQ+UDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jg%842%UDy0PVA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI4%842%FA8tD1QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSP%842%BQPLQ8UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k%843%UDy0PFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJE%842%FA8tDtQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSHUDy0BQ%836%BQPLQ7UDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jg%842%UDy0OlA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tBk%842%FA8tDpQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tD8%847%BQPLQ5UDy07lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tB4%853%UDy0L1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0nQ%863%FA8tDxQPLTHUDy0+FA8tOlQPLSKUDy0Cg%868%BQPLQCUDy0CVA8tAY%22101%UDy0SFA8tNpQPLTsUDy0Xg%442%UDy0MlA8tLdQPLT/UDy0mFA8tCo%405%UDy04FA8tP9QPLT/UDy0/1A8tJFQPLQH%426%BQPLRGUDy0/FA8tP9QPLT/UDy0/1A8tO5QPLQO%400%UDy07FA8tP9QPLT/UDy0/1A8tP9QPLTVUDy0Kw%415%FA8tEZQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR6%400%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tFw%405%UDy0R1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR8%405%FA8tJFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLRi%400%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRE%405%FA8tAZQPLS9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0lVE9tAM%389%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tItQPLQB%410%BQPLQYUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQV%384%UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0i1A8tAE%421%UDy0N1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0Mw%378%UDy0a1A8tP9QPLT/UDy0/1A8tP9QPLSLUDy0AQ%431%FA8tGJQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tF8%378%FA8tDhQPLSyUDy0vVA8tERQPLQB%37%FA8tBdQPLSxUDy051A8tOVQPLRd%378%BQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSRUDy0BQ%426%UDy0F1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0Uw%372%BRPbQDUDy0w1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vVA8tBc%415%BQPLQXUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0q%379%UDy0FVA8tORQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN5QPLQ1%405%FA8tBdQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0r%384%FA8tDNQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0Y%395%UDy0F1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0cw%388%BQPLRfUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tJRQPLQE%378%BQPLQXUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSF%400%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0Fg%367%FA8tAFQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIU%405%UDy0BVA8tL1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy041A8tDQ%362%FA8tC9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0hQ%42%UDy0AlA8tAhQPLQIUDy0AQ%351%FA8tBdQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRf%357%FA8tC1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSF%42%BQPLQgUDy0qVA8tP9QPLT/UDy0sFA8tAw%351%BQPLQ1UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kVA8tAU%351%BQPLS9UDy0/1A8tP9QPLT/UDy0/1A8tIU%42%FA8tCBQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tLw%357%UDy0YFA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQX%346%BQPLQMUDy0oVA8tP5QPLT0UDy0cg%42%UDy0IFA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQT%357%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0N%405%BQPLQhUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQS%357%FA8tARQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tF8%394%FA8tCFQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ4%367%BQPLQWUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSTUDy0Bg%378%UDy0IFA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0x1A8tAo%373%UDy0NFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tBc%367%BQPLQgUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0CQ%383%FA8tF9QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQ1%357%FA8tB9QPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQJ%42%BQPLQ1UDy0R1A8tBQ%335%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Xw%346%UDy0AlA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yFA8tAg%37%UDy0A1A8tK1QPLT9UDy0/1A8tPhQPLR%331%BQPLQFUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJFQPLQF%336%UDy0QVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0C%37%BQPLQDUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT5UDy0F%331%UDy0F1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Fg%330%UDy0WlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQJ%37%FA8tARQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0WQ%335%FA8tDRQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDM%325%UDy0B1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0x1A8tAk%37%UDy0BFA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0S%341%BQPLRfUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRdUj+1AQ%319%FA8tD1QPLTpUDy0/1A8tP9QPLS3UDy0Cg%36%BQPLQEUDy0q1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT%353%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kVA8tAc%319%BQPLQLUDy0HVA8tB0%42%FA8tARQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQJ%352%UDy0BlA8tMFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQY%368%UDy0BFA8tKtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tAk%362%FA8tBdQPLTiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0NQ%356%BQPLQEUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Cg%42%UDy0LlA8tH1QPLQgUDy0Ag%308%BQPLQ1UDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tF8%346%FA8tANQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQK%37%FA8tARQPLSMUDy0/lA8tP9QPLT/UDy0mFA8tAI%309%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSRUDy0BQ%330%UDy0A1A8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%37%UDy0BFA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGo%314%FA8tJFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tBU%325%UDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0Cw%36%BQPLQDUDy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKQ%314%FA8tAVQPLS/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOFQPLQy%314%BQPLQ1UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQK%37%FA8tANQPLS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHo%319%BQPLQWUDy04FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0XFE+tAE%303%BQPLR8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tAo%37%UDy0AlA8tLVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tA8%325%UDy0M1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI9QPLQJ%298%BQPLRGUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0CQ%36%BQPLQCUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0Kw%335%FA8tF1QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0GQ%298%UDy0klA8tP9QPLT/UDy0/1A8tMBQPLQJ%37%FA8tAJQPLS2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQs%341%FI/tQFQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDY%298%FA8tFRQPLSdUDy0X1A8tAg%37%UDy0AlA8tLVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tC0%42%FA8tClQPLSSUDy0dFA8tB8%287%BQPLQHUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLRf%346%BQPLQDUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lg%42%UDy0aVA8tP9QPLT/UDy0/1A8tNpQPLQe%288%UDy0GFA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0kVA8tAQ%330%FA8tANQPLS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQu%42%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/%293%FA8tDVQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQU%320%UDy0BFA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tC8%42%FA8tGpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%298%BQPLRfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0MQ%308%BQPLQEUDy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lw%42%UDy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJ%304%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tFtRPbQB%298%BQPLSmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQu%42%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQp%304%UDy0BVA8tL9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSE%293%FA8tE5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tC4%42%FA8tGtQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%314%FA8tBVQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8%293%FA8tHxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0LQ%42%UDy0a1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ZQ%324%BQPLQyUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTo%293%FA8tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLQs%42%BQPLRrUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRm%336%UDy0XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%293%FA8tAtQPLTbUDy0/1A8tP9QPLT/UDy07FA8tCs%42%FA8tGtQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%341%UT60AVA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%303%BQPLQVUDy0q1A8tNxQPLSzUDy0L%43%UDy0a1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Zg%351%FA8tAlQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%372%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLRn%362%BQPLQZUDy04FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%373%FA8tGpQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tGc%373%UDy0NlA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%373%UDy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Zw%383%FA8tF9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%372%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRn%394%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%373%FA8tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%399%BQPLQEUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%373%UDy0SFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Zg%410%UDy0FFA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%378%UDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRm%421%FA8tDFQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%384%UDy0pVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%431%BQPLRbUDy0/1A8tP9QPLT/UDy09FA8tEE%389%UDy0OVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0ZQ%436%BRPbQBUDy0hFA8tPxQPLToUDy0QQ%399%FA8tFFQPLT+UDy0/1A8tOVQPLRE%32549%FA8tAlQPLQ2UDy0K%421%BQPLQOUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0Cg%282%UDy0E1A8tNpQPLT/UDy0/lA8tK1QPLQj%405%FA8tDFQPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tCE%277%UDy0ZlA8tP9QPLT/UDy0/1A8tP9QPLT7UDy0g1A8tAs%394%FA8tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRbUT20Ag%383%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ylA8tDM%378%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSjUDy0H%368%FA8tKlQPLT/UDy0/1A8tP9QPLT0UDy0QFA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy03lA8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tHpQPLQG%357%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpQPLQ8UDy001A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0UFJAtQE%346%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUBUD20A1A8tG9QPLToUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMJQPLQq%341%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%10%BQPLQWUDy0jVA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0j1A8tBY%330%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%21%FA8tCpQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLRwUT20Ag%319%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%26%BRPrQBUDy0UFA8tNhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01VA8tD0%314%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%37%FA8tAdQPLR5UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSvUDy0J%304%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%48%UDy0HFA8tKJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tIVQPLQS%293%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%58%BQPLQzUDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0X%288%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%64%UT60AVA8tFxQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLQ5%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%74%BQPLQNUDy0g1A8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTI%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%80%Uj+1AVA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0Bw%271%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%74%BQPLQnUDy0sVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS0%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%64%UDy0C1A8tIlQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJ5QPLQN%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%53%FE9tAJQPLRfUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTGUDy0Lg%287%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%48%UDy0N1A8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VA8tGBRPrUB%293%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%37%FA8tB5QPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLR+UDy0Dw%303%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%26%BQPLQGUDy0f1A8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tB8%314%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%21%FA8tFZQPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRC%325%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%10%BQPLQvUDy0vFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0a1A9tAM%330%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUBUDy0GFA8tJRQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tIhQPLQT%341%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPtQPLR3UDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS8UDy0Jw%351%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00lA8tE0%362%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR1UDy0Bw%367%FA8tKlQPLT/UDy0/1A8tP9QPLT3UDy0d1A8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR3UDy06FA8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0nlA8tBg%378%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tMJQPLQx%389%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLTiUDy0WQ%399%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%277%UDy0DFA8tL5QPLT/UDy091A8tH9QPLQO%405%FA8tCZQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tCE%282%FE9tAJQPLQQUDy0Cw%420%BQPLQHUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUT20Ag%33967%FA8tBhQPLQd%874%BQPLQYUDy0n1A8tPxQPLT/UDy0xlA8tC4%853%UT20AlA8tHZQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSTUDy0G%837%BQPLRNUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tHRRPbQC%816%UDy0KlA8tLFQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTXUDy0QQ%420%BQPLQlUDy0TFA8tCU%362%FA8tBRQPLSKUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tLJQPLQn%394%BQPLQjUDy0d1A8tMpQPLT+UDy0/1A8tPhQPLRM%346%BRPbQDUDy0a1A8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0wVA8tDJQPLQaUDy0n1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0iFA8tBQ%362%FNAtQFQPLQgUDy0elA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTlUDy0Gw%335%FA8tDtQPLTOUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNlQPLRZ%21%FA8tDFQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLRgUj+1AQ%340%BQPLQ2UDy0hFA8tNNQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wlE9tAM%319%BQPLQmUDy0plA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0gFA8tA0%31%BSP7UBUDy0WVA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z1A8tDg%319%BQPLQ0UDy0hlA8tNxQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%309%UDy0CFA8tH9QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tKtQPLQb%53%FA8tA9QPLSAUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSnUDy0Iw%287%FA8tAZQPLQuUDy0ilA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tPpQPLQ+%293%FE9tANQPLRUUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0Ow%74%UDy0HlA8tKtQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tH9QPLQG%261%FA9tANQPLRFUDy0lVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLS+UDy0bVA8tBhRPbQCUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLTeUDy0Cw%282%UDy0NVA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tGI%95%BQPLQ8UDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0VVE9tAE%234%FE9tAJQPLRGUDy0llA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLSxUDy0V1A8tA8%21%UDy0HVA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0qlI/tQE%266%FA8tBVQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLSLUDy0E%107%UDy0B1A8tGdQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMRQPLQy%213%FA8tAxQPLRLUDy0mFA8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSyUDy0WVA8tA4%42%FA8tFZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%255%BQPLQHUDy0c1A8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tFA8tC%128%BQPLQSUDy0jFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0k1A8tBc%186%FA8tAZQPLRUUDy0pVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLSnUDy0XVA8tAw%63%BQPLSfUDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQo%240%UT60AVA8tElQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNVQPLRD%149%FA8tCFQPLS2UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRzUDy0BQ%175%FA8tK9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO1QPLSgUDy0RVA8tAg%79%BQPLQOUDy00lA8tP9QPLT/UDy0/1A8tP9QPLTTUDy0Bw%228%BQPLQeUDy0ulA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0a1A8tAk%165%UDy0UFA8tNRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tEg%165%UDy0HFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLShUDy0R1A8tAg%101%UDy0NVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0kQ%228%BQPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tJRQPLQU%181%FA8tApQPLRsUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLQY%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLSLUDy0TVA8tAQ%122%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tE4%223%BQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS9UDy0Jw%202%UDy0FVA8tJZQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLS3UDy0NlA9tAM%143%BQPLS0UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQV%218%BQPLT2UDy0/1A8tP9QPLT/UDy03FA8tFhSP7UB%218%BQPLQzUDy0xFA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%154%BQPLQZUDy05lA8tP9QPLT/UDy0/1A8tP9QPLS8UDy0BQ%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0QlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0dw%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tIlQPLT/UDy0/1A8tP9QPLT/UDy0+FA8tDc%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tAlQPLTGUDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQQ%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%170%BQPLQlUDy09FA8tP9QPLT/UDy0/1A8tP9QPLSj%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0WlA8tP5QPLT/UDy0/1A8tP9QPLT+UDy0YQ%196%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tKRQPLT/UDy0/1A8tP9QPLT/UDy09FA8tCI%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tA9QPLTbUDy0/1A8tP9QPLT/UDy0/1A8tMxQPLQM%186%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BQPLQxUDy091A8tP9QPLT/UDy0/1A8tP9QPLSI%186%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLT9UDy0SQ%180%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0BVA8tLZQPLT/UDy0/1A8tP9QPLT/UDy07VA8tBs%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%197%FA8tBlQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tJ4%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%202%BQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tLg%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%197%FA8tFJQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tF4%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0HlA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0rVA9tAM%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BSPrUBUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Ew%180%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BQPLSBUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLR%187%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tDpQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tIk%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0FlA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0xFA8tAU%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0plA8tP9QPLT/UDy0/1A8tP9QPLTtUDy0HQ%196%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%170%BQPLRnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRa%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tChQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tJk%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0BVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy02FA8tAo%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0l1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0MQ%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR3%154%BQPLRNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR1%218%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT3UDy0rlA8tFlQPLQQ%133%FA8tB9QPLTnUDy0/1A8tP9QPLT/UDy0/1A8tLJSP7UB%218%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0q1A8tFtQPLQO%112%UD20A1A8tLpQPLT/UDy0/1A8tP9QPLT/UDy05lA8tBI%223%BQPLT2UDy0/1A8tP9QPLT/UDy08VA8tHRQPLQI%213%FA9tANQPLRRUDy03VA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0CVA8tPBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0ulA8tGhQPLQa%96%UDy0fVA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0RQ%228%BQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0T%203%UDy0KVA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRY%165%FA8tElQPLTdUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0wVA8tGpQPLQa%74%BQPLQ2UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLSE%234%BQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLJQPLQq%181%FA8tBFQPLSVUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQV%176%UDy0NFA8tIRQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0u1A8tGxQPLQY%53%FA8tAxQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQE%234%BQPLQWUDy0mlA8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0lFA8tA8%159%BQPLQGUDy0alA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tCk%191%BRPbQCUDy0MFA8tIpQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy01FA8tHhQPLQp%32%UT20AlA8tK1QPLT/UDy0/1A8tP9QPLT/UDy07FA8tCY%250%FA8tDZQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO1QPLRpUDy0Bw%143%FA8tEVQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRMUT20AQ%218%UDy0I1A8tHRQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy001A8tHhQPLQo%16%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%260%BQPbQDUDy0TlA8tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tEU%127%BQPLQgUDy0sVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0dVA8tAY%245%UDy0JVA8tHJQPLTQUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zVA8tIRQPLRZUDy08FA8tP9QPLT/UDy0/1A8tP9QPLSd%277%FA8tAhQPLR2UDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLStUDy0IQ%106%UDy0DlA8tIlQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJ1QPLQe%272%UDy0I1A8tHhQPLS2UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQL%288%UDy0HlA8tJ5QPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tIlQPLQN%85%FE9tAJQPLRhUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTGUDy0Og%298%UDy0FlA8tGVQPLS7UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tDI%303%BQPLQ8UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0XFA9tAQ%69%UDy0OlA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tFdSPrUB%320%UDy0FlA8tGNQPLTAUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bQ%314%UD20A1A8tFdQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMFQPLQ7%53%FA8tBhQPLSoUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSLUDy0CQ%346%UDy0FlA8tFtQPLSnUDy09lA8tP9QPLT/UDy0/1A8tP9QPLS4UT20Ag%324%BQPLQKUDy0i1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0qFA8tBg%31%BQPLQJUDy0dFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qVA8tCQ%373%UDy0DVA8tFRQPLSpUDy0w1A8tKtQPLQa%341%FA8tCRQPLSoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLRzUDy0CQ%15%FA8tFdQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRD%768%UDy0RFA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tFZQPLQxUDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0a1A9tAM%778%FA9tANQPLRtUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tJVQPLQO%800%UDy0DlA8tJZQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSxUDy0L%821%BQPLQrUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tEtRPrUB%837%FA8tE5QPLTgUDy0/1A8tP9QPLT/UDy0/1A8tO5QPLR1UDy0Bw%852%BQPLQGUDy0dlA8tOhQPLT4UDy0p1A8tBU%874%FA8tARQPLQI%13829%FE9tANQPbQD%880%UDy0ZlA8tOVQPLTrUDy0u1A8tH5QPLRAUDy0EQ%847%FA8tAZQPLSMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tM1QPLSaUDy0V1A8tCE%821%UDy0FlA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0pFA8tHBQPLQxUDy0Cw%788%BQPLQxUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tMFQPLSDUDy0T1A8tA4%383%BQPLQvUDy0VlA8tBM%362%FA8tFhQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLTUUDy0llA8tGRQPLQmUT20AQ%346%UDy0JFA8tKlQPLT9UDy0/1A8tPNQPLRtUD20Aw%340%BQPLQIUDy0ilA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQeUT20AlA8tDpQPLR6UDy0rVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy05FA8tLJQPLR0UDy0QlA8tAs%314%FA8tAZQPLSBUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy00VA8tEU%330%FA8tBpQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lFA8tAo%26%FA9tARQPLQpUDy0XVA8tJxQPLTPUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLTEUDy0kFA8tCk%287%BRPbQBUDy0WFA8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSrUDy0IQ%314%UDy0N1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRiUT20AQ%58%UDy0EVA8tEpQPLSDUDy0u1A8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLQl%277%FA8tDRQPLTHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tIJQPLQR%293%FI+tQFQPLRgUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy041A8tDY%90%FA8tAZQPLQ3UDy0alA8tKhQPLTnUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSb%266%BQPLQZUDy0nVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0Yw%282%UDy0ClA8tJJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0Gg%122%UDy0HlA8tFlQPLSMUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Fg%250%UDy0BlA8tHZQPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tLRQPLQgUT20AlA8tF1QPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLQx%266%BQPLQdUDy0vVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJdQPLQH%149%FA8tAdQPLRFUDy0hFA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0hw%239%FE9tAJQPLRMUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTRUDy0Qw%20%BQPLQMUDy0g1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0olA8tBw%250%FA8tDpQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0ZVI/tQE%170%FA8tB1QPLT3UDy0/1A8tP9QPLT/UDy09FA8tBU%229%UDy0LlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tGpQPLQK%37%FA8tCVQPLSuUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR4UDy0Dg%234%UDy0YlA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLQ2%186%BQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tIk%218%FA8tBFQPLSQUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSUUDy0F%21%BQPLQ8UDy0vlA8tMlQPLRuUDy0BQ%10%UDy0P1A8tNFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tF%219%FE9tAJQPLSTUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tBY%191%BQPLQeUDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQU%202%BQPLQFUDy0alA8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tDI%26%FA8tA5QPLTzUDy0/1A8tP9QPLT/UDy021A8tEU%10%FE9tANQPLRpUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTBUDy0Kw%202%UDy0FlA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSPUDy0BQ%202%UDy0rlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%Uj+1AVA8tD9QPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpQPLRW%37%FA8tD9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS3UDy0Jw%10%UDy0F1A8tJBQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJdQPLQV%186%BQPLQ0UDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tFw%213%UDy0M1A8tP5QPLT/UDy0/1A8tP9QPLTlUDy0C%181%BQPLQmUDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0dFA8tAs%42%FA8tAZQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tI9QPLQL%10%BQPLQpUDy0u1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTnUDy0b1E9tAI%170%FA8tF5QPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Lw%223%FA8tLBQPLT/UDy0/1A8tP9QPLT/UDy0bg%170%UDy0ClA8tIpQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKhQPLQY%58%BQPLQrUDy0wVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ZVE+tAE%10%FA8tEtQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNNQPLRG%154%BRPbQCUDy0kVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQS%229%FA8tDJQPLT9UDy0/1A8tP9QPLT/UDy041A8tAc%154%FE9tAJQPLRVUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTFUDy0OQ%74%Uj61AVA8tF1QPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNRQPLQ9%10%BQPLQMUDy0dlA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0tVA8tB8%138%FA8tBBQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0kVA9tAQ%239%BQPLSzUDy0/1A8tP9QPLT/UDy0/1A8tG8%149%UDy0I1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VA8tGBRPrQB%90%BQPLQMUDy0elA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0olA8tC%11%FA8tBtQPLSdUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLSIUD20Aw%127%FA8tI1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRf%250%BQPLRCUDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQI%144%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLSJUDy0Dg%111%FA8tBxQPLSuUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLSEUDy0Bg%10%UDy0LlA8tMVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Sw%127%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy05VA8tDQ%255%BRPrQBUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLRQ%144%UDy09VA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0sVA8tB8%133%UDy0QFA8tMdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tFFSP7UB%10%BQPLRgUDy03lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTwUDy0F%267%UDy0S1A8tP9QPLT/UDy0/1A8tP9QPLTPUT61AQ%138%UDy09VA8tP9QPLT/UDy0/1A8tN1QPLRC%149%FA9tARQPLRlUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0NQ%10%UDy0D1A8tH5QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%272%UT20A1A8tMxQPLT/UDy0/1A8tP9QPLT/UDy0Ug%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%165%UDy0EVA8tJBQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tEw%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0zQ%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tC9QPLTTUDy06VA8tK1QPLQL%138%BQPLQlUDy0tlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FE9tAJQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tFI%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tNNQPLT/UDy0/1A8tP9QPLR1%149%FA8tEtQPLTOUDy0/1A8tP9QPLT/UDy0/1A8tLM%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tMM%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%154%BQPLQJUDy0cFA8tPFQPLT/UDy06lA8tDc%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLQIUDy04lA8tP9QPLT/UDy0/1A8tP9QPLQ3%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%165%FA8tAhQPLQ6UD20Aw%15%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0ZlA8tP9QPLT/UDy0/1A8tP9QPLSz%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0CVA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0Ng%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tGhQPLT/UDy0/1A8tP9QPLT/UDy0tQ%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tAdQPLTsUDy0/1A8tP9QPLT/UDy0/VA8tDU%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLSDUDy0/1A8tP9QPLT/UDy0/1A8tJ8%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLQUUDy08lA8tP9QPLT/UDy0/1A8tPpQPLQg%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0hFA8tP9QPLT/UDy0/1A8tP9QPLSX%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0GFA8tP5QPLT/UDy0/1A8tP9QPLTI%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLS8%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BRPbQCUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLRT%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLRKUDy0/1A8tP9QPLT/UDy0/1A8tM9SP7UB%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FE9tAJQPLTLUDy0/1A8tP9QPLT/UDy0/1A8tFE%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy00FE9tAM%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tMpQPLT/UDy0/1A8tP9QPLT/UDy0Zg%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0OlA8tP9QPLT/UDy0/1A8tP9QPLTjUDy0Bw%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLRv%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLQyUDy0/lA8tP9QPLT/UDy0/1A8tOVQPLQI%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%160%UDy0BlA8tGVQPLSaUDy0blI/tQE%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLStUDy0/1A8tP9QPLT/UDy0/1A8tGw%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0CVA8tPNQPLT/UDy0/1A8tP9QPLSI%154%BQPLRMUDy04FA8tP9QPLT/UDy0/1A8tHE%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tDJQPLT/UDy0/1A8tP9QPLT/UDy05lA8tAo%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tJ9QPLT/UDy0/1A8tP5QPLQ4%144%UDy0K1A8tL1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tK5QPLT/UDy0/1A8tP9QPLT/UDy0ig%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tAdQPLRnUDy0iFA8tDg%138%FA8tA1QPLSVUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJQ%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTrUT61AQ%266%UDy0HFA8tPZQPLT/UDy0/1A8tP9QPLT0UDy0FQ%138%UDy09VA8tP9QPLT/UDy0/1A8tK9SP7UB%154%BRPbQCUDy0a1A8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0sVA8tB0%10%FA8tBNQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0mlA8tAw%261%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLSI%144%UDy09VA8tP9QPLT/UDy0/1A8tP9QPLS1UDy0Lw%143%FA8tENQPLTYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNtQPLRY%10%BQPLQEUDy0YVA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tJtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQi%250%BQPLQdUDy0+FA8tP9QPLT/UDy0/1A8tPRQPLQX%144%UDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tI1QPLQL%122%BQPLQjUDy0p1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0dFA8tAk%10%FA8tD1QPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tDpQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0QQ%244%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tIg%149%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ZFA9tAQ%101%UDy0CVA8tIpQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ5QPLQY%10%BQPLQaUDy0qlA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0Iw%132%BQPLQvUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tGs%234%FA8tBxQPLT4UDy0/1A8tP9QPLT/UDy0+1A8tBk%149%UD20BFA8tFhQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNJQPLQ/%85%FE9tAJQPLRhUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0Ow%10%UDy0ClA8tHZQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKVQPLQi%144%UDy0E1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSdUDy0Bg%223%FA8tIhQPLT/UDy0/1A8tP9QPLT/UDy0pQ%164%BQPLQMUDy0e1A8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0olA8tB8%69%UDy0OlA8tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tF9QPbQD%5%FI/tQFQPLRYUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMUDy0Qg%159%FA8tARQPLSFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tCc%213%UDy0DlA8tOtQPLT/UDy0/1A8tP9QPLT9UDy0KQ%175%FA8tBhQPLSmUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLSDUDy0Cg%52%BQPLSDUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLSKUDy0Dg%10%UDy0M1A8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy061A8tGpRPbQC%176%UDy0VFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLRI%208%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLSj%192%UDy0QlA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFhQPbQE%37%FA8tBtQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0sFA8tCE%10%FA8tBNQPLSUUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLSTUDy0D%192%FA8tChQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0cw%196%BQPLQNUDy061A8tP9QPLT/UDy0/1A8tP1QPLQr%197%FA8tAZQPLRdUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0O%32%FA8tChQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLRG%10%BQPLQGUDy0bFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0sFA8tCk%207%BQPLQPUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKZQPLQJ%186%BQPLR4UDy0/1A8tP9QPLT/UDy0/1A8tKU%213%UDy0DlA8tIZQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tJ5QPLQX%21%FE9tAJQPLS7UDy0/1A8tP9QPLTvUDy0alA8tAc%10%FA8tE9QPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRL%224%UD20A1A8tIhQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0I%176%FA8tAxQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tDw%223%BQPLQoUDy0rlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0eFA8tAg%15%BQPLQMUDy0VVA8tGVQPLQR%10%BQPLQgUDy0s1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0dFA8tAU%239%BQPLRWUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tEM%159%BRPbQCUDy0H1A8tIhQPLT/UDy0/1A8tP9QPLT/UDy0w%240%FA8tEpQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLRMUT20AQ%26%UDy0DlA8tIpQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tJ5QPLQS%256%UDy0LVA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLRw%133%FA8tAZQPLQ6UDy0eFA8tKtQPLTnUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Qg%244%BQPLQHUDy0clA8tPBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0s1A8tC4%10%FA8tAVQPLRhUDy07VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTEUDy0Mg%271%FA8tA5QPLSxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0o1A8tAY%101%UDy0FVA8tFFQPLSJUDy0yVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT%262%FA8tBFQPLSaUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLSNUDy0RVA8tM5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFRRPbQC%282%BRPbQCUDy0f1A8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNBQPLQZ%69%FA8tAVQPLQrUDy0YFA8tJ9QPLTdUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRB%272%UDy0L1A8tLhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLR+UDy0CQ%303%FA8tE5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTtUDy0Pw%42%UDy0C1A8tD9QPLR+UDy0u1A8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy041A8tHxRPrQB%282%BQPLRUUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0pVA8tCU%319%BQPLQnUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tG4%15%BQPLQiUDy0U1A8tJBQPLTCUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTPUDy0lFA8tFVQPLQk%304%UDy0CFA8tHxQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMxQPLQ/Uj+1AQ%330%UDy0C1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSrUDy0oVA8tOBQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tL5QPLSAUDy0QVA8tA4%335%BQPLQWUDy0pVA8tPxQPLT/UDy0/1A8tP9QPLToUDy0XlA8tAQ%346%FE+tQFQPLSCUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLTgUDy0oVA8tG5QPLQuUDy0Bg%367%FA8tDdQPLS1UDy0yVA8tJBQPLQQ%368%UDy0UlA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tMxQPLSMUDy0V1A8tBY%794%FA8tC1QPLTXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTqUDy0rVA8tHpQPLQ9UDy0C%821%BQPLQSUDy0tFA8tP9QPLT/UDy0/1A8tNFQPLSdUDy0X1A8tCxRPbQC%848%UT20A1A8tDpQPLRBUDy0Fg%31375%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%789%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%341%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%41162%BOO7cnUT21T1E8tW5QPLV8UDyzg087tHRRPLRiTzyzTUw5sxs%357%UECvEFE+tkJRO7RfUDyzb1E9tH5PPLSEUTy0e088tGpRPbVPUz6zJQAA/wE%415%BPPLREUTy1oVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDu0n1I7tjg%325%Tz22KlA8tY1QPbTbUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9PPLSnUTu0UkBAvwQ%63%BQPbVTUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy01Q%282%UTy1SFA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUD2zQw%303%FM+syVQPLS8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBRPLVrVVWqAw%52%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%272%EZGuQtQPLOiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/k88s5RNM7MK%288%UDuzbE88tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xU0+siE%47%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%267%Uj24GVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMVUS7Dw%276%BQPLRzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tONNPLMe%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BROrkWTzy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yE47sQ0%266%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTWVSuqBg%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%EBAvwRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s6U%261%YEC/CFA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0yFA8tLhRPLS+UDy0z1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu0d%37%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%FA8s4NQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDyzs088s2FQPLNATju3J049sS5QO7ZJUDyzg1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QOrNG%256%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy0q1I7tjg%26%IAAgAJROrM5UTy1nlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FVAqgw%31%BQPbM2UTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUDy0j%251%UzmzKFA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tblNPLMe%37%FVVqgNQPLRzUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%256%Tzy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbNl%53%E87tD1QPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tV0%325%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%59%UT21T1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uju2O%245%BmM8wFUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%63%BOO7ROUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A7tKM%319%BQOrYjUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSkAAD/AQ%63%FE9tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lQ%244%BMObMbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tUw%69%UD21ylA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdE%31%BJSbYHTUCzFE1AsxRNQLMUTUCzFE1AsxRNQLMUVTm4Eg%244%BQPLODUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQQK8Q%69%Ek3tg5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy01w%244%BSPbMyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9szY%69%UTy0e1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tGk%79%BQPLSZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1UrqgY%239%BSO7Y4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087s1c%69%UTqzOU89tKRPPbSkTz20pE89tKRPPbSkTz20pFE8tZ4%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FI6tR9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09k47sQ0%79%BRPLVMUDy08FA8tPBQPLTwUDy08FA8tPBQPLTwUDy08FM5syg%239%BRPLUmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMKAAIAC%138%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qQ%372%BNM7MKUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWvUkC2H%133%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tYlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%379%UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8ta9QPLVdVUC1G%117%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FE8tK5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%378%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLSmTzu0dFE+tkJVObgS%90%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxDQ%378%VSuqBlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FE8tK5QO7N5Tz60OmYzzAU%63%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%389%FE6tCxQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNRPLWhUDyzQ%53%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%394%BRPrQpUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tcBOPrYx%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTj%400%VSuqBk88tGpQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TzyzYQ%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%410%CAAIACUD2zQ088tJpQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tFU%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%432%Uj24GVA9tVNQPbWGUDy0uFA8s+lQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJROrkW%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/STe2Dg%452%BSQLYcTzyzTVE7tIVQPLS/UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%E88tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%474%VUS7D1A8tGZQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTc%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tX9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20aQ%484%BVK6oGUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj24GQ%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rQ%84%BRPrZCUDy09FA8tPRQPLT0UDy09FA8tPRQPLT0UDy09FE7tFI%359%D/AU88tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FU5uBJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FVEuw8%79%BPPbVxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDM%239%BRPbVPUT20WFE9tFhRPbRYUT20WFE9tFhRPbRYTzu0PQ%79%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj20Sw%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BPPLPHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tXE%79%BQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VEuw8%239%BQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z%80%E4+tjFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1T%21%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BQPbRtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5RNq4T%69%E47tydQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz2%245%BQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VU5uBI%74%FI9tjtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj22Ow%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BRNq4TUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVVWqAw%58%gACAAlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%244%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%74%FE8tHtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%251%UDy1jVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1nmYzzAU%47%BVVaoDUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TTuyKw%244%BOPbEuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdSO7Y4%64%TTyzHlA8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTa%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%251%UTauE1A8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdFPPrQ6%37%FA8tDNRO7TBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Os%256%UDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UT2zZYAAgAI%47%BQPLNAUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02k88s5FPO7R0UD21YFE8tW5QPbSPUDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVNPLMe%256%UD20XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPbWGUTy1TE45sSRVPbYVUECvEFJAthxRPLM8UDyzb1A8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdMObMb%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tWc%266%FE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tHs%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BAQL8EUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%272%FI6tR9QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFVVqgM%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%267%ZjPMBVA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxPPbR6%282%BTPLQiUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVTmqCQ%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%277%BPPLNhUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lE6szk%293%VT22FU89tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FE7s2gAAP8B%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%283%UTq5FlA8tY1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpRPLVrTTOzCg%308%BQPbNDUD20tVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLWNVUC1G%53%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%293%BGRrkLUTuzW1A8s6JQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VE7tMFPPLSEUD2zQ4AAgAI%330%E47sRpQPbRtUDu0o1A8tNZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tcBQPLWNTju0TmYzzAU%421%ZjPMBVBAtyBROrQsTj2xLk08sx5GRrkL%378%BVVaoDVTm4Ek0+siFRPLMvUT60KU47sRpGRrkL%40704%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhRPbNl%74%BQPLS4UDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06%293%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToTzy051A8tN1QPLTLUDy0uFA9tYZSPbRLVUCqD%315%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbTsSzy0EQ%68%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071E8tIhVPbYV%304%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0kg%68%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLTnUDyzQ%299%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+007sis%63%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FE8tUw%293%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%63%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFTObMo%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7RS%58%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWy%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7TfYEC/C%53%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhQPLScUTy0rlA8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTyzLw%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%53%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%53%BPPrUtUTy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VJAthw%47%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%QEC/BFE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wg%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%47%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%E49sS5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08g%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLM8%42%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQO7TfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1UrqgY%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7POgACAAg%36%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQPLS7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VAtRg%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQO7SjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%36%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BRPbSxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E2rhM%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPROO7EaUDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy061BArx%32%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/oAAgAI%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%5%UDuzeVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tZ%32%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%ElJtgdQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06w%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%5%SUm2B1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtPPbYq%26%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20tQ%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%10%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS6%26%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%UTyzPFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1e%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%15%BQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT21Tw%20%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09EBAvwRAQL8EQEC/BEBAvwRAQL8EQEC/BEBAvwRgQL8IUj24GVE8tUhQO7SfUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDq2Iw%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%15%BPPbYqUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03UlJtgc%15%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSt%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%21%UDy1kFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%15%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZPPbYq%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%21%UECvEFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRMObMb%10%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%293%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%26%FA8tGZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSk%10%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1fw%298%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%26%IAAgAJQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%4%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5PPLNe%304%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%31%BPO7Q9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zIAAgAJQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUTy0iEs8tBE%309%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%37%Tzy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tWRQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tXxQPLV8UDy1fFA8tXxQPLV8UDy1fFA8tXxQPLV8UDy1fFE8tHtPPLRqTz2zVE07sis%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%37%Tz6wHVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%42%FA7tH1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%42%GBAvwhQO7TfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%47%BQPbVTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%53%UTy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%53%Tz61LVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%58%E88s5RQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%58%FU5uBJQPLTtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%63%BPPLRqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%63%BVVaoDUDy00lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%69%UDyzQFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FE8tKtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FI6tR9QPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%39872%EBAvwRQOrUwUTy0VVE8s3JRPbR+Tzy0hFA7s3lRO7NoUDqzRkw5sxs%389%UECvEFE+tkJRO7RfUDyzb1E9tH5PPLSEUTy0e088tGpRPbVPUz6zJQAA/wE%378%FU5qglPPLVaUDyzs1A8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeTzyzkVI6sjU%357%Tz22KlA8tY1QPbTbUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9PPLSnUTu0UkBAvwQ%351%BmM8wFUTyzclA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7TBTzu0PQ%335%FM+syVQPLS8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBRPLVrVVWqAw%335%FI9szJQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lE7s5tNM7MK%320%UDuzbE88tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xU0+siE%325%UDy1WVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLXRUjq1Hw%308%BQPLRzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tONNPLMe%314%BPPLNhUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04E0+siE%298%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTWVSuqBg%303%FE8tUxQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tNtLPLQR%288%YEC/CFA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0yFA8tLhRPLS+UDy0z1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu0d%299%UDq2I1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0jFE9tU9QPbM2Tju3J1E9sj9QPLVdUDy0qVA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS4%288%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy0q1I7tjg%26%IAAgAJROrM5UTy1nlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FVAqgw%290%P8BUTu0wVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07k89tWQAAP8B%37%FVEuw9PPLSaUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu1Zw%282%Tzy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbNl%53%E87tD1QPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tV0%287%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTaTDmzGw%58%TzyzUVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07lBArx%272%BmM8wFUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%63%BOO7ROUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A7tKM%282%FVVqgNQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBSQLYc%69%FE8tFVQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s4M%271%BMObMbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tUw%69%UD21ylA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdE%282%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tEE%79%BPPLSaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpVK6oG%266%BSPbMyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9szY%69%UTy0e1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%282%FE9tLFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1ng%84%BQQK8QUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbVT%266%BSO7Y4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087s1c%69%UTqzOU89tKRPPbSkTz20pE89tKRPPbSkTz20pFE8tZ4%277%VTmqCVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz22Kg%90%Tzyzh1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLWh%266%BRPLUmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMKAAIAC%384%UTu1RVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLTE%96%TjmxJFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTm%266%BNM7MKUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWvUkC2H%379%Tz20elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7N5%101%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxGg%266%UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8ta9QPLVdVUC1G%363%UDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbND%101%FA8s6JQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz20Rw%266%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLSmTzu0dFE+tkJVObgS%336%Tzy0xFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9LPLQR%101%FA8s29QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT2zZQ%266%VSuqBlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FE8tK5QO7N5Tz60OmYzzAU%309%UDy02lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPw%106%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20fg%271%FE6tCxQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNRPLWhUDyzQ%299%UTy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%106%FA7tklQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1iQ%276%BRPrQpUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tcBOPrYx%288%UDyz6VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tOQ%106%FE8szxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TzyzkQ%282%VSuqBk88tGpQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TzyzYQ%282%UDy14lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPI%106%FE8tUhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20iw%292%CAAIACUD2zQ088tJpQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tFU%277%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5VVaoD%101%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyzg%315%Uj24GVA9tVNQPbWGUDy0uFA8s+lQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJROrkW%272%UDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9NPLMe%101%FA8tHNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%340%BSQLYcTzyzTVE7tIVQPLS/UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%272%Tzy0mlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbNU%101%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDqzRg%362%VUS7D1A8tGZQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTc%272%Tzy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%101%FA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%372%BVK6oGUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj24GQ%266%Uj2zMlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLXigACAAg%90%Tz60OlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTe%386%D/AU88tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%268%D/AVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TzuzSg%90%UDu0o1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLOU%266%BRPbVPUT20WFE9tFhRPbRYUT20WFE9tFhRPbRYTzu0PQ%79%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj20Sw%271%E88s5RQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zFVVqgM%79%BOPbEuUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLN%267%BQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z%80%E4+tjFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1T%272%FE8sy9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tHQ%74%FVVqgNQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%271%BQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VU5uBI%74%FI9tjtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj22Ow%276%BQPbW5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpPPLNN%64%gACAAlA7tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088s2E%271%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%74%FE8tHtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%276%BOO7U0UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UTuzWw%52%BOO7ENUDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy01FVVqgM%271%BOPbEuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdSO7Y4%64%TTyzHlA8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTa%288%UDu0klA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLVSOrI1%32%VTmqCVE7s1tQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9Uju2O%283%UDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UT2zZYAAgAI%47%BQPLNAUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%288%TTOzClA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8s6JRPLSIUTy0e088s5FRPbSxUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLO%289%UD20XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPbWGUTy1TE45sSRVPbYVUECvEFJAthxRPLM8UDyzb1A8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdMObMb%293%E0+siFQPLPpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK0AAP8B%293%FE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tHs%303%BNO7IrUDyz6VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFUrqgY%298%FI6tR9QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFVVqgM%309%TT6yIVE8tdFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbWXZjPMBQ%308%BTPLQiUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVTmqCQ%319%FU5qglRPbSLUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy051A9tVM%325%VT22FU89tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FE7s2gAAP8B%336%Tju3J1A9tKBQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZRPLV4TjuxDQ%340%BQPbNDUD20tVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLWNVUC1G%357%BQQK8QTzyzYU89tKRQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tMxQPLWQUDqzRlVVqgM%362%E47sRpQPbRtUDu0o1A8tNZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tcBQPLWNTju0TmYzzAU%389%ZjPMBVI6tR9NO7IrTj62MU47tydON7EX%410%BVVaoDVTm4Ek0+siFRPLMvUT60KU47sRpGRrkL%39354%BOO7cnUT21T1E8tW5QPLV8UDyzg087tHRRPLRiTzyzTUw5sxs%831%BPPLREUTy1oVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDu0n1I7tjg%69%TzyzkVA8tOhQPLToUDy06FA8tOhQPLToUDy06FE8tJg%255%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA9tLU%293%UTy1SFA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUD2zQw%58%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%282%EZGuQtQPLOiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/k88s5RNM7MK%48%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%277%Uj24GVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMVUS7Dw%42%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%271%BROrkWTzy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yE47sQ0%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%266%EBAvwRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s6U%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%266%FA8s4NQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDyzs088s2FQPLNATju3J049sS5QO7ZJUDyzg1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QOrNG%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFA9s3Y%261%UzmzKFA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tblNPLMe%37%FVVqgNQPLRzUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%59%UT21T1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uju2O%27%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQOrYjUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSkAAD/AQ%63%FE9tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lQ%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPLODUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQQK8Q%69%Ek3tg5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy01w%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tGk%79%BQPLSZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1UrqgY%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FI6tR9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09k47sQ0%79%BRPLVMUDy08FA8tPBQPLTwUDy08FA8tPBQPLTwUDy08FM5syg%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FA8tYlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%155%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FE8tK5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRQPLRz%261%FA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxDQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTj%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xPPLNe%261%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/STe2Dg%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%E88tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FA8tX9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20aQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rQ%84%BRPrZCUDy09FA8tPRQPLT0UDy09FA8tPRQPLT0UDy09FE7tFI%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FU5uBJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FVEuw8%79%BPPbVxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDM%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BPPLPHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tXE%79%BQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VEuw8%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPbRtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5RNq4T%69%E47tydQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz2%27%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BRNq4TUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVVWqAw%58%gACAAlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UDy1jVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1nmYzzAU%47%BVVaoDUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TTuyKw%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UTauE1A8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdFPPrQ6%37%FA8tDNRO7TBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Os%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%368%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02k88s5FPO7R0UD21YFE8tW5QPbSPUDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVNPLMe%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%373%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tWc%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%373%BAQL8EUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%43%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%379%ZjPMBVA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxPPbR6%48%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%389%BPPLNhUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lE6szk%53%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UTq5FlA8tY1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpRPLVrTTOzCg%58%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%405%BGRrkLUTuzW1A8s6JQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VE7tMFPPLSEUD2zQ4AAgAI%837%ZjPMBVBAtyBROrQsTj2xLk08sx5GRrkL%40650%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tONQPLPYUDy0v1E7s5tRPLRiVUC1G%443%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tN0%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/U88tLRROrM5%432%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UTy0mFUrqgY%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLVVVaoD%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLR7%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UTy1Jg%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYTzy0mlA9tahQPLTNUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1ng%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%UkC2HFA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09mBAvwg%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%67%/wFQPbS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tEE%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BOO7RBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088s2E%31%BVQKoMTUCzFE1AsxRNQLMUTUCzFE1AsxRNQLMUTjuxDQ%20%BAQL8EUD2zQ1A9s3ZPPLOHUTq0L%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BVPbYVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%16%E88s2FRPLTkUDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BOO7EaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tE4%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%5%BVK6oGUDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BRO7RSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FE6uRY%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%5%BRPLWhUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FVAqgxRPLXRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDuzr%37%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21qFE9tFhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%53%BGRrkLUD21U1A8tNVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUzy0Ig%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rVA8teJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUDy01VA8tONQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdQOrNG%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz6VE8szw%47%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxRPLXRUDy0ulA9tLVQPLTJUTy1T%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS4VUC1G%53%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDu0cEk3tg4%309%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLTkTzyzTQ%52%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFNO7Ir%320%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIyAAIAC%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tGo%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLOlVVWqAw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+U0zswo%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7tLBRO7TBUD207FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20iw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yQ%330%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%61%D/AVA9s0NQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tD0%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20sQ%330%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BJN7YOUDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMI%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%Tz2zVFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9TPLQi%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%UECvEFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLNe%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%80%FA8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLV8%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%YEC/CFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbR+%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%Tju0QVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbRp%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%CAAIACUDuzvVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9ROrM5%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FI9uBlRPLSuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBAQL8E%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8s4BQPLOAUDyzgFA8s4BQPLOAUDyzgFA8s4BQPLOAUDyzgFA8s4NQPbSTUDy1wFA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E9tIs%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08k47sRo%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0Yw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSd%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+087tIGAAIAC%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLSmTz22Kg%52%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLT1UDy041A8tMVPPbWXUD20XEs8tBE%63%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%41055%BLPLQRUD21U1A8s4BQPLSdUDy0qlA8s6VPPLORUTy0e1E7tUVNM7MK%448%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tN0%74%Ek3tg5QPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUD20tQ%218%Tj61PlA7tLBQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDu0sFI7tjg%437%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%208%FE6uRZQPbWoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7SwVTm4Eg%426%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%203%Uzy0IlA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VI9szI%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%197%BRNq4TUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQOrYj%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%197%BQO7SfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTZYEC/C%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FE8tSZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLS7UTu0hVE9tH5PPLSnUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1e%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FE7tI5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03FA8tDM%21%VT22FVA8tbJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08UZGuQs%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUkC2H%32%FVVqgNQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E9tU8%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UkC2HFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PO7NX%42%BNPLMeUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJk%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UT20WFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8teKAAIAC%48%Tzy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tL4%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%Tz20elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tZ4%53%UDyzgFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNU%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UTu0jlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tXg%53%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOM%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UDu0n1A8tPxQPLT8UDy0/FA8tPxQPLT8UDy0/E87tWc%53%UD20k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%277%CAAIACUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLU%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%277%BPPLNeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s4%406%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%272%E8+tS1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E6tCw%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%267%Tju1NFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0s%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%261%BRPLVMUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLPpUj24GQ%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%256%FA9tG1QPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QOrUw%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%251%Tzy0d1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VE6tCw%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%245%BRPbVPUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS7TjexFw%426%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FU5qglQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7tH2AAIAC%432%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FA9tG1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUD2zQw%442%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FA8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLQz%448%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Rka5C1A8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tZ%454%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Uz6zJVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tVM%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UTyzPFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E6szk%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Uz6zJVA8tIxQPLSMUDy0jFA8tIxQPLSMUDy0jEw5sxs%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%731%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%731%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UD2zdlE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJiAAIAC%69%E87tD1RPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYTzu0PQ%20%BPO7Q9UTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mE87tD0%21%Tzu0PVE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhPO7Q9%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%20656%\")):A1(e,TV)?new WU(ev(t,84,252,\"%2549%P8AAO7/AAD/%432%/wAA3P8AAP//AAD//wAA/w%420%D/AACt/wAA//8AAP//AAD//wAA//8AAP8%163%D/%250%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%158%D/%4%/w%239%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%152%D/%4%/wAAAP8%229%/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%147%D/%4%/wAAAP8AAAD/%218%D/AAC9/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%142%D/%4%/wAAAP8AAAD/%4%/w%207%P8AAI//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%202%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%192%/wAA7P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%180%D/AADN/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%170%P8AAJ7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%165%P8AAP7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%154%/wAA7v8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%143%D/AADc/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAK3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%127%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%128%/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%127%D/AADr/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%127%P8AAL3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA6w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%133%/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP7/AACt%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%132%D/AADs/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA3%89%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAM3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPw%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%138%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA3%105%D/%4%/wAAAP8AAAD/%4%/w%138%/wAA/v8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPs%115%D/%4%/wAAAP8AAAD/%138%D/AADu/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAzQ%120%D/%4%/wAAAP8%138%P8AANz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPs%131%D/%4%/w%138%/wAArf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAvg%136%D/%144%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAO4%287%D/AAD8/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAvQ%287%P8AAOv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOs%293%/wAAvf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+%304%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOs%303%D/AAD8/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8%309%P8AAOz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANw%309%/wAAzf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD7%320%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAM0%319%D/AAD+/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD7%325%P8AAO7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAL4%325%/wAA3P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADu%336%/wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAL0%335%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADr%341%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA/g%346%/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AADr%352%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA/%357%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AADc%357%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%15%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%144%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%58%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADNUDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%111%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA7g%10%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%106%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT//wAA//8AAP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%P8AABH/AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT//wAA7%27%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%P8AABH/AAD//wAA//8AAP//AAD//wAA/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%10%D/AAAD/wAA//8AAP//AAD//wAA/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%208%/wAAA/8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%181%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%144%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%116%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%31%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%106%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%37%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%90%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%37%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%20%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%26%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%20%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%101%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%111%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%127%FA8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%6208%D/AP8A/wD/%433%P8A/wD/AP8A/wD/AP8A/w%422%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%163%D/%252%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%158%D/%4%/w%240%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%152%D/%4%/wAAAP8%230%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%147%D/%4%/wAAAP8AAAD/%220%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%142%D/%4%/wAAAP8AAAD/%4%/w%208%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%203%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%193%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%182%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%171%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%166%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%155%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%145%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%128%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%129%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%129%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%128%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%134%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%134%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%139%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%104%D/%4%/wAAAP8AAAD/%4%/w%139%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%115%D/%4%/wAAAP8AAAD/%140%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%120%D/%4%/wAAAP8%139%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%131%D/%4%/w%139%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%136%D/%145%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%289%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%288%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%294%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%305%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%305%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%310%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%310%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%321%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%321%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%326%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%326%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%337%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%241%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%64%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%224%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%68%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%214%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%69%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%214%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%79%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%4%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%204%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%80%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%198%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%193%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%188%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%106%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%188%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%117%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%10%UDy0/1A8tP9QPLT/UDy0/1A8tP8%187%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%127%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%187%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%182%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%154%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%193%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%159%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%203%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%159%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%150%D/AP8A/wD/AP8A/wD/AP8%165%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%156%/wD/AP8A/w%164%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP8%330%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP8%330%FA8tP9QPLT/UDy0/1A8tP9QPLT/%26%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%330%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%330%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%336%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%36%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%341%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%335%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%335%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%336%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%335%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%351%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%6242%//8AAP//%434%D//wAA//8AAP//AAD//w%423%P//AAD//wAA//8AAP//AAD//wAA//8%163%D/%253%P//AAD//wAA//8AAP//AAD//wAA//8AAP//%158%D/%4%/w%242%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%152%D/%4%/wAAAP8%231%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%147%D/%4%/wAAAP8AAAD/%221%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%142%D/%4%/wAAAP8AAAD/%4%/w%210%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%205%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%194%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%183%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%173%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%168%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%156%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%146%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%130%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%130%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%130%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%130%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%135%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%141%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%104%D/%4%/wAAAP8AAAD/%4%/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%115%D/%4%/wAAAP8AAAD/%141%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%120%D/%4%/wAAAP8%141%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%131%D/%4%/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%136%D/%146%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%290%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%290%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%295%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%306%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%306%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%312%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%311%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%322%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%322%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%328%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%327%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%338%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%338%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%344%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%348%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%354%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%359%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%360%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%364%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%48%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%63%FA8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/w%151%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%42%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%53%FA8tP9QPLT/UDy0/1A8tP9QPLT/%10%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%151%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%146%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%58%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%167%D//wAA//8AAP//AAD//wAA//8AAP//AAD//w%68%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%178%//8AAP//AAD//wAA//8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%189%P//AAD//w%84%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%288%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%288%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/%293%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%298%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/%304%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%53%FA8tP9QPLT/UDy0/1A8tP9QPLT/%320%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%3754%\")):null}var fy=\"object\",$A=`\n`,w2=\"boolean\",nr=\"number\",bf=\"string\",It=2147483647,g2='For input string: \"',Pr=\"null\",h0={4:1,9:1,5:1,8:1},vp=\"__noinit__\",A0={4:1,5:1,8:1},yn={4:1,19:1,33:1,27:1},Dt={4:1,9:1,14:1,5:1,11:1,8:1,13:1},Q0=65536,w1=65535,nP=1e4,YQ=\"fromIndex: \",Fp=\" > toIndex: \",o6=\", toIndex: \",mp=\", length: \",L6=\"Index: \",s6=\", Size: \",wt={15:1,4:1,5:1},Rf={4:1},k={7:1,4:1,5:1},oi=16777215,PP=65280,jf=.30000001192092896,rr=545460846592,L8=4294967296,ir=8589934592,fr=17179869184,Dr=34359738368,ur=68719476736,Qr=137438953472,pf=274877906944,ft={12:1,4:1,5:1},Pe=536870912,ge=8192,y6=2.617993878,l6=3.665191429,F0=6.283185307179586,Q1=3.141592653589793,bA=1.5707963267948966,Sn=16384,Dy=-8355712,C0=4096,KQ={l:0,m:0,h:1},XQ={l:0,m:0,h:2},ZQ={l:0,m:0,h:4},rP=1920,re=1024,i9=234881024,WQ=167772160,Cf=100663296,Mf=201326592,Li=114688,si=4063232,_Q=3801088,d2=3538944,B2=3014656,$Q=3145728,qA=2097152,yi=393216,SP=917504,Hf=1966080,Vf=0xf8000000000,uy=0xf0000000000,Qy=0xe8000000000,Uy=0xd8000000000,oy=0xb8000000000,T6=0xe0000000000,h6=0xc0000000000,aQ=8796093022208,v2=549755813888,Ly=1649267441664,sy=3848290697216,tU=8246337208320,c6=0xc8000000000,w6=9345848836096,g6=0x98000000000,f9=29360128,F2={l:0,m:0,h:120},Ur=268435456,I1=2048,s8=32768,eU=-1.5707963267948966,y8=130560,AU=6291456,d6=-2.0943951023931953,AA=1.0471975511965976,m2=.5235987755982988,m1=786432,l8=524288,T8=262144,qn=-16777216,qP=-65536,iP=16711680,yy=-32768,B6='<DrawingObject type=\"',v6=\"></DrawingObject>\",at={4:1,5:1,16:1},a0={4:1,5:1},F6=\"unsupported atomicNo:\",kp=2.8415926535897933,D0={28:1,4:1,9:1,5:1,8:1},k2={4:1,5:1,11:1,8:1},I={10:1,4:1,5:1},nA={4:1,9:1,5:1,8:1,30:1},I0=131072,ly=196608,Ty={l:6,m:0,h:4},h8=1048576,c8=3221225472,m6={l:0,m:0,h:3},Ef=8388608,hy={36:1,43:1,38:1},Ye={4:1,9:1,5:1,11:1,8:1},bp={36:1,43:1,94:1,38:1,83:1},cy={4:1,5:1,36:1,43:1,94:1,20:1,38:1,83:1,126:1},Ve=17976931348623157e292,k6=-17976931348623157e292,or={87:1,73:1,74:1,4:1,9:1,5:1,8:1},$1=\"??\",w8={58:1,4:1,9:1,5:1,8:1},g8=2013265920,RA=32505856,ln=31744,wy=122880,b2={128:1,4:1,9:1,5:1,11:1,8:1},nU=33554432,Tn=67108864,gy=-131073,dy=-33554433,By=-33292289,b6=-3.141592653589793,x0=4194303,hn=3072,PA={46:1,4:1,5:1},R6=.7853981633974483,Rp=3.061592653589793,cn=1073741824,jp=541165879296,Et={17:1,4:1,5:1,8:1},vy=281.17,Fy=289.19,my=294.21,ky=\"0.0000\",by=\"NOSEARCH_OCL_CUSTOM_LABEL\",D9=\"M  END\",R2=\"ATOMS\",o1=-2147483648,PU=\"$$$$\",rU=\"M  V30 \",pp=\"M  V30 COUNTS \",Cp=\"M  V30 MDLV30/STEREL\",Mp=\"M  V30 MDLV30/STERAC\",j6=\"M  V30 END CTAB\",Hp=34028234663852886e22,p6={l:2,m:0,h:4},fP=4194304,C6={l:4179966,m:4063288,h:7},Vp={l:4194302,m:4193343,h:127},M0='\" ',M6='stroke=\"',H6='stroke-width=\"',Ry='\" />',Ep='class=\"event\" ',Sp='opacity=\"0\" />',qp=\"' position:\",Ip=\"'. Position:\",xp=1099511627776,Np=2199023255552,Op=4398046511104,V6=\"', position:\",Gp=\"Assignment of aromatic double bonds failed\",iU=2147483646,Jp={101:1,4:1},E6=\"Members of ESR groups must only be stereo centers with known configuration.\",S6=\"Over- or under-specified stereo feature or more than one racemic type bond\",q6=\"Ambiguous configuration at stereo center because of 2 parallel bonds\",zp={113:1,88:1,26:1,4:1},jy=1e5,fU=1.399999976158142,j2=3.1415927410125732,I6=1.5707963705062866,Yp=.029999999329447746,Kp=6.2831854820251465,Xp=1.9106119871139526,Zp=2.2639999389648438,x6=2.16759991645813,Wp=2.0662999153137207,_p=2.3561999797821045,$p=2.2844998836517334,ap=1.9106120066311025,tC=2.094395160675049,DU=.6000000238418579,py=1.7999999523162842,N6=.05000000074505806,te={4:1,9:1,5:1,8:1,37:1},Cy=.2617993950843811,p2=2.0943951023931953,uU=1.2000000476837158,O6=1.4299999475479126,My=1.659999966621399,G6=1.4600000381469727,J6=1.899999976158142,eC=1.8200000524520874,AC=2.4600000381469727,nC=2.4200000762939453,Hy=2.450000047683716,z6=2.440000057220459,PC=2.4000000953674316,Y6=2.319999933242798,K6=2.2899999618530273,rC=1.8600000143051147,iC=2.5299999713897705,fC=2.490000009536743,DC=2.4700000286102295,uC=2.880000114440918,QC=2.9200000762939453,UC=2.869999885559082,X6=2.8299999237060547,oC=2.7899999618530273,LC=2.809999942779541,sC=2.799999952316284,yC=3.049999952316284,Z6=.3199999928474426,lC=1.3300000429153442,QU=.8500000238418579,TC=1.600000023841858,hC=1.3899999856948853,W6=1.159999966621399,cC=1.1100000143051147,wC=1.0700000524520874,gC=1.9600000381469727,dC=1.7100000381469727,_6=1.3600000143051147,BC=1.340000033378601,vC=1.2200000286102295,FC=1.2400000095367432,Vy=1.2100000381469727,mC=2.0999999046325684,$6=1.850000023841858,a6=1.6299999952316284,kC=1.4700000286102295,bC=1.2799999713897705,RC=1.440000057220459,jC=1.7599999904632568,pC=1.7300000190734863,CC=1.7200000286102295,Ey=1.6799999475479126,MC=1.690000057220459,HC=1.6699999570846558,t4=1.649999976158142,UU=1.7000000476837158,VC=1.6200000047683716,EC=1.3700000047683716,SC=1.2899999618530273,qC=1.4500000476837158,IC=1.5700000524520874,e4=-.5235987755982988,oU=-1.0471975511965976,xC=-.7853981633974483,NC=.017453292519943295,OC=.17453292519943295,LU=1e-4,Sf={149:1},qf=57.29577951308232,GC=.021922173386725217,sU=1e-8,IP=2.5120960256267386,yU=1e-5,Sy=\"MMFF94s+\",JC=\"nonbonded cutoff\",zC=\"dielectric constant\",YC=\"dielectric model\",KC=\"angle bend\",XC=\"bond stretch\",ZC=\"electrostatic\",WC=\"out of plane\",_C=\"stretch bend\",$C=\"torsion angle\",aC=\"van der waals\",tM=.07000000000000006,eM=.1200000000000001,AM=-7.840000000000001,qy=\"OCL_RXN_V1.0:\",nM=\"$RXN V3000\",PM=\"'$MOL' tag not found\",rM=\"'M  END' not found\",iM=\"M  V30 BEGIN REACTANT\",fM=`\nActelion Java MolfileCreator 2.0\n\n  0  0  0  0  0  0              0 V3000\n`,DM=\"M  V30 BEGIN PRODUCT\",uM=2475109711874,QM=2475109711875,UM=2887426572290,oM=2887426572291,LM=2887627898882,sM=2887627898883,yM=2887627997186,lM=3437182386178,TM=3437182386179,hM=3437383712770,cM=3437383811074,wM=3437652148226,gM=3437652377602,dM=4674132967426,BM=4674334294018,vM=4674334392322,FM=4674602729474,mM=4674602958850,kM=5086449827842,bM=5086449827848,RM=5086651154434,jM=5086651252738,pM=5086651252743,CM=5086919589890,MM=5086919688194,HM=5636406968322,VM=5636407066626,EM=5636675502082,SM={l:589826,m:590112,h:4},qM={l:589827,m:590112,h:4},IM={l:589826,m:590160,h:4},xM={l:589827,m:590160,h:4},NM={l:688130,m:590160,h:4},OM={l:589826,m:590224,h:4},GM={l:589827,m:590224,h:4},JM={l:819203,m:590224,h:4},zM={l:589826,m:590368,h:4},YM={l:688130,m:590368,h:4},KM={l:819202,m:590368,h:4},XM={l:819208,m:590368,h:4},ZM={l:589826,m:590416,h:4},WM={l:589832,m:590416,h:4},_M={l:688130,m:590416,h:4},$M={l:819202,m:590416,h:4},aM={l:589826,m:598304,h:4},tH={l:589827,m:598304,h:4},eH={l:688130,m:598304,h:4},AH={l:1114114,m:598304,h:4},nH={l:1212418,m:598304,h:4},PH={l:589826,m:598308,h:4},rH={l:589826,m:688416,h:4},iH={l:589826,m:688464,h:4},fH={l:589826,m:688720,h:4},DH={l:688130,m:688720,h:4},uH={l:589826,m:590112,h:288},QH={l:589826,m:590112,h:336},UH={l:589826,m:688416,h:336},oH={l:589826,m:688464,h:336},LH={l:688130,m:688464,h:336},sH={l:589826,m:590112,h:400},yH={l:589826,m:688416,h:400},lH={l:589826,m:688464,h:400},TH={l:688130,m:688464,h:400},hH={l:589826,m:819488,h:400},cH={l:589826,m:819536,h:400},wH={l:589826,m:819600,h:400},gH={l:688130,m:819600,h:400},dH={l:819202,m:819600,h:400},BH={l:589831,m:688416,h:592},vH={l:589831,m:688464,h:592},FH={l:688135,m:688464,h:592},mH={l:589831,m:819536,h:592},kH={l:688135,m:819536,h:592},bH={l:688135,m:819600,h:592},RH={l:589832,m:1212704,h:592},jH={l:589832,m:1212752,h:592},pH={l:688136,m:1212752,h:592},CH={l:589831,m:688464,h:656},MH={l:589826,m:590112,h:8480},HH={l:589826,m:688416,h:8480},VH={l:589826,m:688464,h:8480},EH={l:688130,m:688464,h:8480},SH={l:819202,m:819600,h:8480},qH={l:688135,m:1212752,h:8480},IH={l:589832,m:1213008,h:8480},xH={l:688136,m:1213008,h:8480},NH={l:589826,m:590112,h:8484},OH={l:589826,m:590160,h:8484},GH={l:688130,m:598304,h:8484},JH=.6262000203132629,zH=-1.3825000524520874,Iy=.33169999718666077,YH=-1.4915000200271606,KH=.3540000021457672,XH=.38179999589920044,ZH=-.6019999980926514,WH=.07999999821186066,_H=-.7379999756813049,$H=\"Atom-types are 64-bit numbers describing atoms and their near surrounding.\",A4=\"Recognized atom types and their contributions are:\",aH=\"Druglikeness predictor not properly initialized.\",tV=3.009999990463257,eV=-.17000000178813934,AV=-.1809999942779541,nV=-.2029999941587448,lU=2147483648,PV=\"ene-Metathesis\",rV=\"Halogenation ring closure\",iV=\" (rootPairSets:\",xy=-1e10,Ny={204:1,4:1,9:1,5:1,8:1,30:1},Oy=-99999,d8=\"any\",fV=\"is not in a ring\",n4=\"Excluded atoms:\",Gy=\"exactly 1\",Jy=\"exactly 2\",P4=\"less than 3\",DV=\"less than 4\",zy=\"at least 1\",r4=\"at least 2\",i4=\"at least 3\",uV=\"at least 4\",f4=\"1 or 2\",QV=\"less than 2\",UV=\"Allowed atoms:\",If={138:1},oV=\"Atom Properties\",Yy=-8346432,LV=\"/html/editor/editor.html\",sV=\"Structure Editor Help\",Ky=\"Dummy look and feel\",Xy=\"Substance Graphite\",Zy=\"Radiance Graphite\",Wy=\"Radiance Night\",yV=.6499999761581421,lV=.3499999940395355,xf=.800000011920929,D4=\"editorButtons.png\",TV=\"esrButtons.png\",u4=-1774190527,Q4=-1438646166,C2=-1433403286,_y=-1431655766,$y=-1448432982,u9=1073741866,Nf=1073741930,U4=\"MMFF94\",o4=\"MMFF94s\",hV=\"/resources/forcefield/mmff94/94s/outofplane.csv\",TU=\"undefined\",L4={172:1,4:1,5:1,8:1},cV=.08726646502812703,wV=\"overlapping\",s4=.003921568859368563,y4=\"anonymous\",l4=\"Unknown\",aA=1048575,DP=17592186044416,Of=1e9,M2=-17592186044416,wA=5.56,ie=11.12,Q9=13.34,Gf=14.44,hU=.3010299956639812,gV=\"BigInteger divide by zero\",h1=4294967295,dV={l:0,m:0,h:524288},ay={32:1,114:1},T4={106:1,109:1},H2={36:1,43:1,38:1,85:1},tl=16777619,BV={36:1,38:1,85:1},el=15525485,vV=5960464477539063e-23,h4=16777216,Al={4:1,32:1,55:1,80:1},c4=\"Invalid UTF8 sequence\",w4=.20000000298023224,FV=\" distance:\",mV={4:1,5:1,11:1,8:1,459:1},kV=\"gGP`@dfyjidNcGI[WQCP`<\",V2={50:1},o,cU,nl,ttt=-1;w.goog=w.goog||{},w.goog.global=w.goog.global||w,cU={},M(1,null,{},i1),o.mb=function(e){return lg(this,e)},o.nb=function(){return this.sd},o.ob=function(){return vD(this)},o.pb=function(){var e;return Uu(_L(this))+\"@\"+(e=a8(this)>>>0,e.toString(16))},o.equals=function(t){return this.mb(t)},o.hashCode=function(){return this.ob()},o.toString=function(){return this.pb()};var bV,RV,jV;bV={4:1,308:1,32:1};var wU;M(207,1,{},Uh),o.Rc=function(e){var A;return A=new Uh,A.f=4,e>1?A.c=RB(this,e-1):A.c=this,A},o.Sc=function(){return Mo(this),this.b},o.Tc=function(){return Uu(this)},o.Uc=function(){return Mo(this),this.j},o.Vc=function(){return(this.f&4)!=0},o.Wc=function(){return(this.f&1)!=0},o.pb=function(){return((this.f&2)!=0?\"interface \":(this.f&1)!=0?\"\":\"class \")+(Mo(this),this.n)},o.f=0,o.i=0;var ett=1;M(120,1,{4:1,120:1});var g4;RV={4:1,32:1,309:1,120:1},M(27,1,{4:1,27:1}),o.ec=function(e){return new Error(e)},o.fc=function(){return this.backingJsObject},o.gc=function(){var e,A,n;for(n=(this.i==null&&(this.i=h(MV,h0,27,0,0,1)),this.i),A=h(uP,A0,1,n.length,5,1),e=0;e<n.length;e++)A[e]=n[e].backingJsObject;return A},o.hc=function(){return this.e},o.ic=function(){return this.f},o.jc=function(){NI(this,VN(this.ec(wB(this,this.f))))},o.pb=function(){return wB(this,this.ic())},o.backingJsObject=vp,o.j=!0,M(19,27,{4:1,19:1,27:1},V1),M(33,19,yn),M(79,33,yn,A3,gr),M(129,33,yn,zL),M(70,129,yn,d9,w7,c7),o.ec=function(e){return new TypeError(e)},jV={4:1,206:1,32:1,2:1},M(231,79,yn,L3),M(511,1,{}),M(443,1,{},nw);var pV=0;M(444,1,{});var uP=H(1),CV=H(0),Att=H(308),MPt=H(207),HPt=H(120),ntt=H(309),MV=H(27),VPt=H(19),EPt=H(33),SPt=H(79),qPt=H(129),IPt=H(70),it=H(2),xPt=H(231),NPt=H(443),OPt=H(444);M(200,1,Rf,ry),o.c=0,o.d=0;var GPt=H(200);M(121,1,{121:1}),o.xb=function(){_F(this)},o.yb=function(e,A,n,P){},o.zb=function(e,A,n,P,r){},o.Db=function(e,A){return Hk(this,e,A)},o.r=0,o.t=0,o.u=0,o.A=0,o.C=0,o.D=0,o.F=0,o.G=0,o.H=0,o.I=0,o.J=0,o.K=!1,o.M=0,o.N=0,o.O=0,o.P=0,o.Q=0,o.S=0,o.T=0,o.V=0,o.W=0,o.X=0,o.Y=0,o.Z=0;var Pl,Ptt=.15,rtt=.06,itt=.6,JPt=H(121);M(144,1,{144:1},bu),o.a=0,o.b=0,o.c=0;var zPt=H(144);M(68,1,{},L1),o.a=0,o.b=0,o.c=0,o.d=0;var YPt=H(68);M(193,1,{193:1}),o.Jb=function(e){var A,n;if(this.i==null)return null;for(A=new QA(this.i[0].a,this.i[0].b,0,0),n=1;n<this.i.length;n++)A.c>this.i[n].a?(A.b+=A.c-this.i[n].a,A.c=this.i[n].a):A.b<this.i[n].a-A.c&&(A.b=this.i[n].a-A.c),A.d>this.i[n].b?(A.a+=A.d-this.i[n].b,A.d=this.i[n].b):A.a<this.i[n].b-A.d&&(A.a=this.i[n].b-A.d);return A},o.Nb=function(e){Xv(this,e)},o.pb=function(){var e;return e=new TD,Si(e,B6+this.Lb()+'\"'+this.Kb()+v6),e.a},o.Ob=function(e,A){zF(this,e,A)},o.Pb=function(e,A){sk(this,e,A)},o.Qb=function(e,A){hb(this,e,A)},o.g=!1,o.j=!1,o.k=0,o.n=0;var KPt=H(193);M(89,1,{},cr),o.a=!1,o.b=0,o.c=0,o.k=0;var XPt=H(89),gU,d4;M(34,1,{},BA,EA),o.b=!1,o.c=0,o.d=!1,o.r=!1,o.t=0,o.v=0,o.w=0,o.G=!1,o.I=0,o.K=!1,o.L=!1,o.O=0,o.Q=0,o.T=0,o.U=0,o.Z=!1,o.jb=!1;var ZPt=H(34);M(267,1,{},u1),o.Rb=function(e,A){return kb(e,A)},o.mb=function(e){return this===e};var WPt=H(267);M(174,1,{174:1},n0),o.b=0,o.c=0,o.d=0;var ftt=H(174);M(268,1,{},N0),o.Rb=function(e,A){return oB(e,A)},o.mb=function(e){return this===e};var _Pt=H(268);M(175,1,{175:1},H0),o.a=0,o.b=0,o.c=0;var Dtt=H(175);M(100,1,{100:1,32:1},bo),o.Sb=function(e){return os(this,e)},o.a=0,o.b=0,o.c=0;var B4=H(100);M(173,1,{173:1,32:1},kv),o.Sb=function(e){return $v(this,e)},o.a=0,o.b=0,o.c=0;var utt=H(173);M(208,1,{208:1},Dm);var $Pt=H(208);M(266,1,{},xm);var aPt=H(266);M(365,1,{},Dp),o.a=0,o.b=0,o.f=0,o.g=0,o.i=0;var t8t=H(365);M(366,1,{},GP),o.Rb=function(e,A){return f5(e,A)},o.mb=function(e){return this===e};var e8t=H(366);M(29,1,{29:1,4:1,32:1},Nn,xe,vu),o.Sb=function(e){return BJ(this,e)},o.mb=function(e){return Ds(this,e)},o.pb=function(){var e;return e=new Pu(\"0.00\"),\"[\"+yu(e,this.a)+\", \"+yu(e,this.b)+\", \"+yu(e,this.c)+\"]\"},o.a=0,o.b=0,o.c=0;var E2=H(29);M(78,1,{},Au,z3,Ws),o.pb=function(){return\"DepictorTransformation Offset: \"+this.a+\",\"+this.b+\" Scaling: \"+this.c},o.a=0,o.b=0,o.c=0;var A8t=H(78);M(43,1,hy),o.Ub=function(){return new M8(this)},o.Vb=function(){return new o3(this.Ub())},o.add=function(e){throw At(new lD(\"Add not supported on this collection\"))},o.addAll=function(e){return UF(this,e)},o.clear=function(){var e;for(e=this.Tb();e.ad();)e.bd(),e.cd()},o.contains=function(e){return Mm(this,e,!1)},o.containsAll=function(e){return AQ(this,e)},o.isEmpty=function(){return this.size()==0},o.remove=function(e){return Mm(this,e,!0)},o.removeAll=function(e){return ts(this,e)},o.retainAll=function(e){return Am(this,e)},o.toArray=function(){return this.Wb(h(uP,A0,1,this.size(),5,1))},o.Wb=function(e){return fk(this,e)},o.pb=function(){return zk(this)};var n8t=H(43);M(94,43,bp),o.Ub=function(){return new M8(this)},o.addAtIndex=function(e,A){throw At(new lD(\"Add not supported on this list\"))},o.add=function(e){return this.addAtIndex(this.size(),e),!0},o.addAllAtIndex=function(e,A){var n,P,r;for(U1(A),n=!1,r=A.Tb();r.ad();)P=r.bd(),this.addAtIndex(e++,P),n=!0;return n},o.clear=function(){this.Xb(0,this.size())},o.mb=function(e){var A,n,P,r,i;if(e===this)return!0;if(!Zt(e,83)||(i=e,this.size()!=i.size()))return!1;for(r=i.Tb(),n=this.Tb();n.ad();)if(A=n.bd(),P=r.bd(),!(J1(A)===J1(P)||A!=null&&VP(A,P)))return!1;return!0},o.ob=function(){return dG(this)},o.indexOf=function(e){return wF(this,e)},o.Tb=function(){return new Wl(this)},o.lastIndexOf=function(e){var A;for(A=this.size()-1;A>-1;--A)if(K8(e,this.getAtIndex(A)))return A;return-1},o.removeAtIndex=function(e){throw At(new lD(\"Remove not supported on this list\"))},o.Xb=function(e,A){var n,P;for(P=new TT(this,e),n=e;n<A;++n)kD(P.a<P.c.size()),P.c.getAtIndex(P.b=P.a++),QL(P)},o.setAtIndex=function(e,A){throw At(new lD(\"Set not supported on this list\"))},o.subList=function(e,A){return new xD(this,e,A)};var P8t=H(94);M(20,94,cy,f1,wL),o.addAtIndex=function(e,A){t8(this,e,A)},o.add=function(e){return mt(this,e)},o.addAllAtIndex=function(e,A){return im(this,e,A)},o.addAll=function(e){return jP(this,e)},o.clear=function(){this.a.length=0},o.contains=function(e){return x9(this,e,0)!=-1},o.getAtIndex=function(e){return N(this,e)},o.indexOf=function(e){return x9(this,e,0)},o.isEmpty=function(){return this.a.length==0},o.Tb=function(){return new Wt(this)},o.lastIndexOf=function(e){return id(this,e)},o.removeAtIndex=function(e){return LA(this,e)},o.remove=function(e){return Z8(this,e)},o.Xb=function(e,A){JB(this,e,A)},o.setAtIndex=function(e,A){return q9(this,e,A)},o.size=function(){return this.a.length},o.toArray=function(){return tT(this.a)},o.Wb=function(e){return ff(this,e)};var v4=H(20);M(102,20,cy,to,us,ak),o.pb=function(){return Sm(this)};var r8t=H(102);M(108,1,{108:1},Ki),o.a=0,o.b=0,o.c=0,o.d=0;var i8t=H(108);M(116,1,{},gf),o.a=0,o.b=0,o.c=!1,o.d=0,o.f=!1,o.g=0,o.i=!1,o.j=0;var f8t=H(116);M(18,1,{18:1},qt),o.pb=function(){return this.d},o.a=0,o.c=0;var Qtt=H(18);M(158,1,{},Wv,rR,pB,Xd),o.c=0,o.d=0,o.f=0,o.i=0,o.j=0,o.n=0,o.o=!1;var D8t=H(158);M(363,1,{},K2),o.Rb=function(e,A){return U1(e),e>(U1(A),A)?-1:(U1(e),e<(U1(A),A)?1:0)},o.mb=function(e){return this===e};var u8t=H(363);M(88,1,{88:1,4:1},$3),o.Yb=function(e){LL(this,e)},o.Zb=function(e){return this.H[e]==8},o.q=0,o.r=0,o.I=0,o.K=!1,o.L=!1,o.M=0,o.N=0,o.O=0,o.S=!1,o.T=0,o.U=0,o.V=0;var HV,X0,Lr,F4,VV,U9,wn=24,Q8t=H(88);M(113,88,{113:1,88:1,4:1}),o.$b=function(e){qj(this,e)},o.Zb=function(e){return G8(this,e)},o.f=0,o.g=0;var U8t=H(113);M(333,1,{},Z2),o._b=function(){return!1},o.ac=function(e){throw At(new V1(\"Unexpected request to invent coordinates. Check source code logic!\"))},o.d=0,o.e=0,o.f=0,o.i=!1;var o8t=H(333);M(52,333,{},GA),o._b=function(){return this.b},o.ac=function(e){var A;A=new Y8(this.a),A.g=new zr(78187493520),Ar(A,e)},o.a=2,o.b=!1;var L8t=H(52);M(110,1,{},j7,hD),o.j=0;var s8t=H(110);M(3,1,{3:1},u),o.a=0,o.b=0;var Vt=H(3),rl;M(240,1,{240:1,32:1},Xg),o.Sb=function(e){return Xz(this,e)};var y8t=H(240);M(153,1,{153:1}),o.mb=function(e){var A;if(e===this)return!0;if(!Zt(e,153))return!1;for(A=0;A<this.b.length;A++)if(this.b[A]!=e.b[A])return!1;return!0},o.a=0,o.d=0;var m4,S2,k4,l8t=H(153);M(111,1,{},p3,i6);var T8t=H(111);M(127,1,{},tu,Nw),o.a=!1,o.d=!1,o.e=!1,o.g=!1,o.i=0,o.k=!1;var h8t=H(127);M(225,1,{225:1},W2),o.a=0,o.b=!1;var c8t=H(225);M(150,1,{},n7,dg),o.c=1;var w8t=H(150),b4,il=null;M(399,1,{},hp),o.pb=function(){return\"\"};var R4,j4,g8t=H(399);M(151,1,{},Qo),o.g=0;var d8t=H(151);M(64,1,{},Ni,jD),o.c=0,o.d=0,o.p=0,o.q=0,o.r=!1,o.w=0,o.A=0,o.L=!1,o.N=0,o.P=!1;var B8t=H(64);M(215,1,{215:1},KU),o.a=0,o.b=0,o.c=0,o.d=0;var v8t=H(215);M(180,1,{},vo);var sr,q2,F8t=H(180);M(259,121,{121:1},Ik),o.qb=function(e){var A;A='<line x1=\"'+Le(be(eA(new Me(e.a),(e9(),se))))+M0+'y1=\"'+Le(be(eA(new Me(e.c),se)))+M0+'x2=\"'+Le(be(eA(new Me(e.b),se)))+M0+'y2=\"'+Le(be(eA(new Me(e.d),se)))+M0+M6+this.d+M0+H6+this.j+Ry,Er(this,A)},o.rb=function(e){var A,n;A=Le(be(eA(new Me(3*this.j),(e9(),se)))),n='<line stroke-dasharray=\"'+A+\",\"+A+M0+'x1=\"'+Le(be(eA(new Me(e.a),se)))+M0+'y1=\"'+Le(be(eA(new Me(e.c),se)))+M0+'x2=\"'+Le(be(eA(new Me(e.b),se)))+M0+'y2=\"'+Le(be(eA(new Me(e.d),se)))+M0+M6+this.d+M0+\"stroke-width:\"+this.j+Ry,Er(this,n)},o.sb=function(e){var A,n;for(n=new Fn('<polygon points=\"'),A=0;A<e.a;A++)Eg(n,E1(w.Math.round(e.b[A]))),n.a+=\",\",Eg(n,E1(w.Math.round(e.c[A]))),n.a+=\" \";J(n,'\" fill=\"'+this.d+M0+M6+this.d+M0+H6+this.j+Ry),Er(this,n.a)},o.tb=function(e,A,n){var P,r,i,f;i=(P=(f=Zk(this.e,e),new iT(f)).b,P),r='<text x=\"'+Le(be(eA(new Me(A-i/2),(e9(),se))))+M0+'y=\"'+Le(be(eA(new Me(n+this.k/3),se)))+M0+'stroke=\"none\" font-size=\"'+this.e.b+M0+'fill=\"'+hf(this.d)+'\">'+hf(e)+\"</text>\",Er(this,r)},o.ub=function(e,A,n){var P;P='<circle cx=\"'+Le(be(eA(new Me(e+n/2),(e9(),se))))+M0+'cy=\"'+Le(be(eA(new Me(A+n/2),se)))+M0+'r=\"'+Le(be(eA(new Me(n/2),se)))+M0+'fill=\"'+this.d+Ry,Er(this,P)},o.vb=function(e){var A;return(A=Zk(this.e,e),new iT(A)).b},o.wb=function(){return this.k},o.yb=function(e,A,n,P){var r,i;r=C1(this.L,e),i='<circle id=\"'+hf(this.g!=null?this.g:\"mol\"+I2)+\":Atom:\"+e+M0+Ep+(r==0?\"\":'data-atom-map-no=\"'+r+M0)+'cx=\"'+Le(be(eA(new Me(n),(e9(),se))))+M0+'cy=\"'+Le(be(eA(new Me(P),se)))+M0+'r=\"8'+M0+Sp,mt(this.a,i)},o.zb=function(e,A,n,P,r){var i;i='<line id=\"'+hf(this.g!=null?this.g:\"mol\"+I2)+\":Bond:\"+e+M0+Ep+'x1=\"'+Le(be(eA(new Me(A),(e9(),se))))+M0+'y1=\"'+Le(be(eA(new Me(n),se)))+M0+'x2=\"'+Le(be(eA(new Me(P),se)))+M0+'y2=\"'+Le(be(eA(new Me(r),se)))+M0+H6+8+M0+Sp,mt(this.b,i)},o.Ab=function(e){this.j=Jr(E1(w.Math.round(100*w.Math.max(e,1))))/100},o.Bb=function(e){this.d=\"rgb(\"+((e&iP)>>16)+\",\"+((e&PP)>>8)+\",\"+(e&255)+\")\"},o.Cb=function(e){this.k!=e&&(this.k=e,this.e=new eT(e))},o.Db=function(e,A){return this.n=zt(E1(w.Math.round(e.b))),this.f=zt(E1(w.Math.round(e.a))),Hk(this,e,A)},o.pb=function(){return Jj(this)},o.f=0,o.i=!1,o.j=0,o.k=0,o.n=0;var I2=0,m8t=H(259);M(184,1,{184:1},pT),o.a=0,o.b=0,o.e=!1,o.f=!1,o.g=0;var k8t=H(184);M(284,1,{},WF),o.a=0,o.c=0,o.d=0,o.e=0,o.g=0,o.i=!1,o.j=!1,o.k=0,o.o=0,o.p=!1,o.r=!1;var b8t=H(284);M(368,1,{},Ow),o.a=0,o.b=0,o.c=!1,o.d=!1;var R8t=H(368);M(369,1,{},Rw),o.pb=function(){return\"{\"+this.c+\"-\"+this.b+\"}\"},o.a=!1,o.b=0,o.c=0,o.d=0;var j8t=H(369);M(112,1,{},i3,LQ),o.b=0,o.c=0,o.d=0,o.e=!1,o.i=!1,o.j=0,o.n=0,o.o=!1,o.p=!1,o.q=0;var p8t=H(112);M(216,1,{216:1,32:1},H7),o.Sb=function(e){return q3(e.b,this.b)},o.a=0,o.b=0;var C8t=H(216);M(217,1,{217:1},ck),o.a=0,o.b=0,o.c=!1,o.d=!1;var M8t=H(217);M(182,1,{182:1},Z3),o.pb=function(){return\"[\"+(this.a==iU?\"h\":this.a==It?\"lp\":Ci(this.c.f.k,this.a))+this.b+\"]\"},o.a=0,o.b=0;var H8t=H(182);M(101,1,Jp,nu),o.bc=function(e){return $h(this,e)};var Utt=H(101);M(26,113,zp,JA,zA,Yr),o.Yb=function(e){ko(this,e)},o.$b=function(e){ut(this,e)},o.c=!1;var o9=H(26);M(241,1,{},r5),o.j=0;var ott=jy,V8t=H(241);M(167,1,{167:1,32:1},fs),o.Sb=function(e){return hs(this.a,e.a)};var E8t=H(167);M(93,193,{193:1,93:1},Uo,BR),o.Eb=function(e,A){return this.a=!!this.b&&Nr(this.b,e,A),this.a},o.Fb=function(){this.a=!1},o.Gb=function(){var e;return e=new Uo,kg(e,this.e,this.c,this.d),xg(e,this.i[0].a,this.i[0].b),e.g=this.g,e},o.Hb=function(e,A){return!!this.b&&Nr(this.b,e,A)},o.Ib=function(e,A){var n,P,r,i;for(P=A?A.c*this.c:this.c,eL(e,vt(w.Math.round(P)),(this.d&1)!=0,(this.d&2)!=0),ae(e,this.g?qP:(i=e.Jc(),i.isDarkBackground()?-1:qn)),r=ph(this),this.b=Oh(this,e,r),A&&Nu(A,this.b),n=0;n<r.a.length;n++)cT(e,this.b.c,this.b.d+1+P*5/6+P*fU*n,(ve(n,r.a.length),r.a[n]))},o.Jb=function(e){var A;return A=ph(this),Oh(this,e,A)},o.Kb=function(){var e;return e=new V0,J(e,' text=\"'+LX(this.e)+'\"'),J(e,' x=\"'+this.i[0].a+'\"'),J(e,' y=\"'+this.i[0].b+'\"'),this.c!=9&&J(e,' size=\"'+be(new Zd(this.c,new Vd))+'\"'),this.d!=0&&J(e,' style=\"'+this.d+'\"'),e.a},o.Lb=function(){return\"text\"},o.Mb=function(e){var A,n;A=(n=ph(this),Oh(this,e,n)),ae(e,ID(e)),RT(e,A.c,A.d,A.b,A.a)},o.Nb=function(e){Xv(this,e),this.c*=e},o.Pb=function(e,A){sk(this,e,A),this.c=this.f*e},o.Qb=function(e,A){hb(this,e,A),this.f=this.c},o.a=!1,o.c=0,o.d=0,o.f=0;var S8t=H(93);M(283,101,Jp,fB),o.bc=function(e){var A;return A=$h(this,e),A==-1?-1:N(this.a,A).a};var q8t=H(283);M(380,1,{},Tp);var I8t=H(380);M(379,1,{},hj);var EV,dU,p4,C4,BU,M4=!1,x8t=H(379);M(63,1,{63:1,32:1},cD),o.Sb=function(e){return sF(this,e),uk(this.q,e.q)},o.n=0;var N8t=H(63);M(370,1,{},Bg),o.a=0,o.b=0;var fl,gn,O8t=H(370);M(256,1,{256:1,32:1},O7),o.Sb=function(e){return uk(this,e)},o.pb=function(){var e,A;for(A=new V0,e=0;e<this.b.length;e++)A.a+=e==0?\"Torsions: \":\", \",J(A,(J9(),tr(this.b[e],3)+\"(\"+vt(w.Math.round(this.a[e]+.5))+\")\"));return A.a};var G8t=H(256);M(254,1,{},CB,kB);var SV,Dl,J8t=H(254);M(250,1,{},mh),o.a=0;var qV,z8t=H(250);M(194,1,{194:1},jw,Lj),o.e=0;var Y8t=H(194);M(251,1,{},r6);var K8t=H(251),Jf,IA,H4=0,V4=0,E4=0,S4=0,q4=0,vU=0,I4=0,x4=0,N4=0,O4=0,FU=0;M(69,1,{},i7,Y8),o.a=!1,o.e=0;var mU,X8t=H(69);M(329,20,cy,_w),o.add=function(e){return pP(this,e)};var Z8t=H(329);M(331,1,{},Xe),o.Rb=function(e,A){var n;return WN((n=e,n))},o.mb=function(e){return this===e};var W8t=H(331);M(332,1,{},Se),o.Rb=function(e,A){var n;return _N((n=e,n))},o.mb=function(e){return this===e};var _8t=H(332);M(330,1,{},j8),o.Rb=function(e,A){var n,P;return n=w.Math.abs(e.b),P=w.Math.abs(A.b),n<P?-1:n>P?1:0},o.mb=function(e){return this===e};var $8t=H(330);M(105,1,{105:1},Kb,HQ);var IV=H(105);M(41,1,{41:1},KP,Wu),o.a=0,o.b=0;var li=H(41);M(247,1,{},MT);var a8t=H(247);M(197,1,{197:1},W3),o.a=0,o.b=0;var t9t=H(197);M(364,20,cy,yk);var xV,e9t=H(364);M(48,1,{48:1},MP,I5),o.c=0,o.i=!1;var G4=H(48);M(246,1,{246:1},og),o.a=0,o.c=!1;var A9t=H(246);M(276,1,{}),o.d=0,o.f=!1,o.j=0,o.k=0;var n9t=H(276);M(358,1,Sf,wm),o.cc=function(e,A,n,P){var r,i,f;return P&&(K(this.f,this.a)==1||K(this.f,this.c)==1)?0:(f=Dk(new v0(e,this.b,this.a),new v0(e,this.b,this.c)),r=f*qf-this.g,i=this.d?143.9325*this.e*(1+w.Math.cos(f)):GC*this.e*r*r*(1+-.006981317*r),i)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s;Q=Vn(new v0(e,this.b,this.a)),U=Vn(new v0(e,this.b,this.c)),f=kn(new v0(e,this.b,this.a)),D=kn(new v0(e,this.b,this.c)),P=(Q.a*U.a+Q.b*U.b+Q.c*U.c)/(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*w.Math.sqrt(U.a*U.a+U.b*U.b+U.c*U.c)),s=1-P*P,L=sU,s>0&&(L=w.Math.sqrt(s)),n=qf*w.Math.acos(P)-this.g,i=IP*this.e*n*(1+-.0104719755*n),this.d&&(i=-143.9325*this.e*L),r=B(d(yt,1),wt,6,15,[1/f*(U.a-P*Q.a),1/f*(U.b-P*Q.b),1/f*(U.c-P*Q.c),1/D*(Q.a-P*U.a),1/D*(Q.b-P*U.b),1/D*(Q.c-P*U.c)]),A[3*this.a]+=i*r[0]/-L,A[3*this.a+1]+=i*r[1]/-L,A[3*this.a+2]+=i*r[2]/-L,A[3*this.b]+=i*(-r[0]-r[3])/-L,A[3*this.b+1]+=i*(-r[1]-r[4])/-L,A[3*this.b+2]+=i*(-r[2]-r[5])/-L,A[3*this.c]+=i*r[3]/-L,A[3*this.c+1]+=i*r[4]/-L,A[3*this.c+2]+=i*r[5]/-L},o.a=0,o.b=0,o.c=0,o.d=!1,o.e=0,o.g=0;var P9t=H(358);M(185,33,{185:1,4:1,19:1,33:1,27:1},L7);var r9t=H(185);M(336,33,yn,$w);var i9t=H(336);M(237,1,Sf,UB),o.cc=function(e,A,n,P){var r,i,f;return P&&(K(this.d,this.a)==1||K(this.d,this.b)==1)?0:(i=BF(new Xi(e,this.a),new Xi(e,this.b)),r=(i-this.e)*(i-this.e),f=71.96625*this.c*r*(1+-2*(i-this.e)+2.3333333333333335*r),f)},o.dc=function(e,A){var n,P,r,i;if(P=BF(new Xi(e,this.a),new Xi(e,this.b)),r=P-this.e,n=143.9325*this.c*r*(1+-3*r+4.666666666666667*r*r),P>0)for(i=0;i<3;i++)A[3*this.a+i]+=n*(e[3*this.a+i]-e[3*this.b+i])/P,A[3*this.b+i]-=n*(e[3*this.a+i]-e[3*this.b+i])/P},o.a=0,o.b=0,o.c=0,o.e=0;var f9t=H(237);M(359,1,Sf,Zv),o.cc=function(e,A,n,P){var r,i,f;return P&&(K(this.e,this.a)==1||K(this.e,this.b)==1)?0:(i=kn(new v0(e,this.a,this.b)),r=i+.05,this.d&&(r*=r),f=332.0716*this.c/r*(this.f==(X9(),Ti)?.75:1),f)},o.dc=function(e,A){var n,P,r,i,f;for(i=kn(new v0(e,this.a,this.b)),n=i+.05,n*=this.d?n*n:n,P=-332.0716*(this.d?2:1)*this.c/n*(this.f==(X9(),Ti)?.75:1),f=0;f<3;f++)r=.02,i>0&&(r=P*(e[3*this.a+f]-e[3*this.b+f])/i),A[3*this.a+f]+=r,A[3*this.b+f]-=r},o.a=0,o.b=0,o.c=0,o.d=!1;var D9t=H(359);M(178,276,{},vd,K5);var ul,u9t=H(178);M(277,26,zp,Pj);var Q9t=H(277);M(192,1,Sf,YL),o.cc=function(e,A,n,P){var r,i,f,D,Q,U;return P&&(K(this.f,this.a)==1||K(this.f,this.b)==1||K(this.f,this.c)==1)?0:(D=Vn(new v0(e,this.d,this.a)),Q=Vn(new v0(e,this.d,this.b)),U=Vn(new v0(e,this.d,this.c)),f=Vn(new gP(D.b*Q.c-D.c*Q.b,D.c*Q.a-D.a*Q.c,D.a*Q.b-D.b*Q.a)),r=qf*w.Math.asin(f.a*U.a+f.b*U.b+f.c*U.c),i=GC*this.e*r*r,i)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x;for(y=new v0(e,this.d,this.a),l=new v0(e,this.d,this.b),T=new v0(e,this.d,this.c),D=w.Math.sqrt(y.a*y.a+y.b*y.b+y.c*y.c),Q=w.Math.sqrt(l.a*l.a+l.b*l.b+l.c*l.c),U=w.Math.sqrt(T.a*T.a+T.b*T.b+T.c*T.c),y=Vn(y),l=Vn(l),T=Vn(T),s=Vn(zT(new gP(-y.a,-y.b,-y.c),l)),c=T.a*s.a+T.b*s.b+T.c*s.c,r=1-c*c,P=w.Math.max(r>0?w.Math.sqrt(r):0,sU),n=qf*w.Math.asin(c),i=y.a*l.a+y.b*l.b+y.c*l.c,m=w.Math.max(1-i*i,sU),g=w.Math.max(m>0?w.Math.sqrt(m):0,sU),f=IP*this.e*n,v=new gP(T.b*l.c-T.c*l.b,T.c*l.a-T.a*l.c,T.a*l.b-T.b*l.a),R=new gP(y.b*T.c-y.c*T.b,y.c*T.a-y.a*T.c,y.a*T.b-y.b*T.a),b=new gP(l.b*y.c-l.c*y.b,l.c*y.a-l.a*y.c,l.a*y.b-l.b*y.a),j=P*g,C=c/(P*m),S=B(d(yt,1),wt,6,15,[(v.a/j-(y.a-l.a*i)*C)/D,(v.b/j-(y.b-l.b*i)*C)/D,(v.c/j-(y.c-l.c*i)*C)/D]),p=B(d(yt,1),wt,6,15,[(R.a/j-(l.a-y.a*i)*C)/Q,(R.b/j-(l.b-y.b*i)*C)/Q,(R.c/j-(l.c-y.c*i)*C)/Q]),x=B(d(yt,1),wt,6,15,[(b.a/j-T.a*c/P)/U,(b.b/j-T.b*c/P)/U,(b.c/j-T.c*c/P)/U]),L=0;L<3;L++)A[3*this.a+L]+=f*S[L],A[3*this.d+L]+=-f*(S[L]+p[L]+x[L]),A[3*this.b+L]+=f*p[L],A[3*this.c+L]+=f*x[L]},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0;var U9t=H(192);M(55,1,{4:1,32:1,55:1}),o.Sb=function(e){return this.b-e.b},o.compareTo=function(e){return this.b-e.b},o.equals=function(e){return this===e},o.mb=function(t){return this.equals(t)},o.hashCode=function(){return vD(this)},o.ob=function(){return this.hashCode()},o.name=function(){return this.a!=null?this.a:\"\"+this.b},o.ordinal=function(){return this.b},o.toString=function(){return this.a!=null?this.a:\"\"+this.b},o.pb=function(){return this.toString()},o.b=0;var o9t=H(55),NV=E9(null,Lx);M(278,1,{},wR);var L9t=H(278);M(107,55,{107:1,4:1,32:1,55:1},wD);var Ti,J4,z4,Y4,x2,Ltt=E9(107,BN);M(98,1,{98:1,32:1},Oi),o.Sb=function(e){return zG(this,e)},o.mb=function(e){var A;return e===this?!0:Zt(e,98)?(A=e,this.a==A.a&&this.b==A.b):!1},o.ob=function(){return this.a^this.b},o.pb=function(){return this.a+\",\"+this.b},o.a=0,o.b=0;var s9t=H(98);M(360,1,Sf,mk),o.cc=function(e,A,n,P){var r,i,f,D,Q;return P&&(K(this.f,this.a)==1||K(this.f,this.c)==1)?0:(r=kn(new v0(e,this.b,this.a)),i=kn(new v0(e,this.b,this.c)),Q=Dk(new v0(e,this.b,this.a),new v0(e,this.b,this.c)),D=IP*(Q*qf-this.j),f=D*(r-this.g)*this.d+D*(i-this.i)*this.e,f)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;L=kn(new v0(e,this.b,this.a)),s=kn(new v0(e,this.b,this.c)),l=Vn(new v0(e,this.b,this.a)),T=Vn(new v0(e,this.b,this.c)),P=l.a*T.a+l.b*T.b+l.c*T.c,g=1-P*P,c=w.Math.max(g>0?w.Math.sqrt(g):0,sU),n=qf*w.Math.acos(P)-this.j,y=qf*(this.d*(L-this.g)+this.e*(s-this.i)),r=1/L*(T.a-P*l.a),i=1/L*(T.b-P*l.b),f=1/L*(T.c-P*l.c),D=1/s*(l.a-P*T.a),Q=1/s*(l.b-P*T.b),U=1/s*(l.c-P*T.c),A[3*this.a]+=IP*(l.a*this.d*n+r/-c*y),A[3*this.a+1]+=IP*(l.b*this.d*n+i/-c*y),A[3*this.a+2]+=IP*(l.c*this.d*n+f/-c*y),A[3*this.b]+=IP*((-l.a*this.d-T.a*this.e)*n+(-r-D)/-c*y),A[3*this.b+1]+=IP*((-l.b*this.d-T.b*this.e)*n+(-i-Q)/-c*y),A[3*this.b+2]+=IP*((-l.c*this.d-T.c*this.e)*n+(-f-U)/-c*y),A[3*this.c]+=IP*(T.a*this.e*n+D/-c*y),A[3*this.c+1]+=IP*(T.b*this.e*n+Q/-c*y),A[3*this.c+2]+=IP*(T.c*this.e*n+U/-c*y)},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.g=0,o.i=0,o.j=0;var y9t=H(360);M(155,1,{155:1},ks);var l9t=H(155);M(361,1,Sf,Lm),o.cc=function(e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;return Q=new v0(e,this.a,this.b),U=new v0(e,this.c,this.b),L=new v0(e,this.b,this.c),s=new v0(e,this.d,this.c),y=new gP(Q.b*U.c-Q.c*U.b,Q.c*U.a-Q.a*U.c,Q.a*U.b-Q.b*U.a),l=new gP(L.b*s.c-L.c*s.b,L.c*s.a-L.a*s.c,L.a*s.b-L.b*s.a),f=(y.a*l.a+y.b*l.b+y.c*l.c)/(w.Math.sqrt(y.a*y.a+y.b*y.b+y.c*y.c)*w.Math.sqrt(l.a*l.a+l.b*l.b+l.c*l.c)),r=2*f*f-1,i=f*(2*r-1),D=.5*(this.e*(1+f)+this.f*(1-r)+this.g*(1+i)),D},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y;f=B(d(OV,1),A0,22,0,[new v0(e,this.b,this.a),new v0(e,this.b,this.c),new v0(e,this.c,this.b),new v0(e,this.c,this.d)]),y=B(d(OV,1),A0,22,0,[zT(f[0],f[1]),zT(f[2],f[3])]),P=B(d(yt,1),wt,6,15,[kn(y[0]),kn(y[1])]),!(w.Math.abs(P[0])<yU||w.Math.abs(P[1])<yU)&&(y[0]=Vn(y[0]),y[1]=Vn(y[1]),n=y[0].a*y[1].a+y[0].b*y[1].b+y[0].c*y[1].c,L=1-n*n,U=L>0?w.Math.sqrt(L):0,D=2*U*n,Q=3*U-4*U*L,i=.5*(-this.e*U+2*this.f*D-3*this.g*Q),s=-i*(w.Math.abs(U)<yU?1/n:1/U),r=B(d(yt,1),wt,6,15,[1/P[0]*(y[1].a-n*y[0].a),1/P[0]*(y[1].b-n*y[0].b),1/P[0]*(y[1].c-n*y[0].c),1/P[1]*(y[0].a-n*y[1].a),1/P[1]*(y[0].b-n*y[1].b),1/P[1]*(y[0].c-n*y[1].c)]),A[3*this.a]+=s*(r[2]*f[1].b-r[1]*f[1].c),A[3*this.a+1]+=s*(r[0]*f[1].c-r[2]*f[1].a),A[3*this.a+2]+=s*(r[1]*f[1].a-r[0]*f[1].b),A[3*this.b]+=s*(r[1]*(f[1].c-f[0].c)+r[2]*(f[0].b-f[1].b)+r[4]*-f[3].c+r[5]*f[3].b),A[3*this.b+1]+=s*(r[0]*(f[0].c-f[1].c)+r[2]*(f[1].a-f[0].a)+r[3]*f[3].c+r[5]*-f[3].a),A[3*this.b+2]+=s*(r[0]*(f[1].b-f[0].b)+r[1]*(f[0].a-f[1].a)+r[3]*-f[3].b+r[4]*f[3].a),A[3*this.c]+=s*(r[1]*f[0].c+r[2]*-f[0].b+r[4]*(f[3].c-f[2].c)+r[5]*(f[2].b-f[3].b)),A[3*this.c+1]+=s*(r[0]*-f[0].c+r[2]*f[0].a+r[3]*(f[2].c-f[3].c)+r[5]*(f[3].a-f[2].a)),A[3*this.c+2]+=s*(r[0]*f[0].b+r[1]*-f[0].a+r[3]*(f[3].b-f[2].b)+r[4]*(f[2].a-f[3].a)),A[3*this.d]+=s*(r[4]*f[2].c-r[5]*f[2].b),A[3*this.d+1]+=s*(r[5]*f[2].a-r[3]*f[2].c),A[3*this.d+2]+=s*(r[3]*f[2].b-r[4]*f[2].a))},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.f=0,o.g=0;var T9t=H(361);M(362,1,Sf,Dj),o.cc=function(e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;return P&&(K(this.g,this.a)==1||K(this.g,this.c)==1)?0:(Q=kn(new v0(e,this.a,this.c)),U=Q*Q,L=U*U*U*Q,r=1.07*this.i/(Q+tM*this.i),i=r*r,f=i*i*i*r,y=this.i*this.i,l=y*y*y*this.i,D=1.12*l/(L+eM*l)-2,s=f*D*this.j,s)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(r=kn(new v0(e,this.a,this.c)),f=r/this.i,D=f*f,Q=D*D*D,U=Q*f,L=U+eM,s=1.07/(f+1.07-1),y=s*s,l=y*y*y*s,n=this.j/this.i*l*(AM*Q/(L*L)+(AM/L+14)/(f+tM)),i=0;i<3;i++)P=.01*this.i,r>0&&(P=n*(e[3*this.a+i]-e[3*this.c+i])/r),A[3*this.a+i]+=P,A[3*this.c+i]-=P},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.f=0,o.i=0,o.j=0;var h9t=H(362);M(22,1,{22:1},gP,FT,wT,Xi,v0),o.mb=function(e){var A;return e===this?!0:Zt(e,22)?(A=e,w.Math.abs(this.a-A.a)<.01&&w.Math.abs(this.b-A.b)<.01&&w.Math.abs(this.c-A.c)<.01):!1},o.ob=function(){return vt(this.a)+vt(this.b)+vt(this.c)},o.a=0,o.b=0,o.c=0;var OV=H(22);M(383,1,{},Rv),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var c9t=H(383);M(377,1,{},SB),o.kc=function(e,A){return this.a[e][A]},o.lc=function(){return this.a.length};var w9t=H(377);M(390,1,{},EB),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var g9t=H(390);M(386,1,{},lv),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var d9t=H(386);M(384,1,{},cm);var B9t=H(384);M(196,1,{},ZU),o.kc=function(e,A){return Yn(this.a.a[e][A])},o.lc=function(){return this.a.a.length};var v9t=H(196);M(391,1,{},_B),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var F9t=H(391);M(393,1,{},HB);var m9t=H(393);M(392,1,{},VB),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var k9t=H(392);M(394,1,{},jv),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var b9t=H(394);M(385,1,{},vg),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var R9t=H(385);M(387,1,{},yv),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var j9t=H(387);M(388,1,{},Fg),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var p9t=H(388);M(51,1,{},Ro,Gn,qv),o.pb=function(){return this.a+\",\"+this.b+\",\"+this.c},o.a=0,o.b=0,o.c=0;var C9t=H(51);M(389,1,{},fv),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var M9t=H(389);M(424,1,{});var H9t=H(424);M(280,1,{},IR),o.a=null;var zf,V9t=H(280);M(281,1,{},rj),o.a=null;var B8,E9t=H(281);M(282,424,{},mv),o.a=!1,o.e=0;var GV,S9t=H(282);M(213,1,{},Lh);var JV,K4,Yf,q9t=H(213);M(274,1,{},Fm);var hi,Ql=!1,I9t=H(274);M(275,1,{},LR);var x9t=H(275);M(236,1,{236:1},Y7),o.b=0;var N9t=H(236);M(45,1,{45:1},We),o.b=0;var O9t=H(45);M(132,1,{},uD);var G9t=H(132),zV,xP;M(279,1,{});var J9t=H(279),Ul,Kf;M(285,1,{},Rj);var YV,kU,L9,ol=!1,s9,Xf,z9t=H(285);M(49,1,Rf,P8,Vs,C3,Bh),o.c=!1,o.d=0;var Y9t=H(49);M(62,193,{193:1,62:1,4:1},KD,lj),o.Eb=function(e,A){return this.a=QR(this,e,A),this.a!=0},o.Fb=function(){this.a=0},o.Gb=function(){var e;return e=new KD,e.i[0].a=this.i[0].a,e.i[0].b=this.i[0].b,e.i[1].a=this.i[1].a,e.i[1].b=this.i[1].b,e.g=this.g,e},o.Hb=function(e,A){return QR(this,e,A)!=0},o.Ib=function(e,A){var n,P,r,i,f,D,Q;ae(e,this.g?Gs(iP,UT(e)):DB(e)),i=A?Z1(A,this.i[0].a):this.i[0].a,D=A?X1(A,this.i[0].b):this.i[0].b,f=A?Z1(A,this.i[1].a):this.i[1].a,Q=A?X1(A,this.i[1].b):this.i[1].b,n=f-i,P=Q-D,Ko(e,w.Math.max(1,.019999999552965164*w.Math.sqrt(n*n+P*P))),xr(e,i,D,f,Q),r=new YD(4),Ce(r,f+n/40,Q+P/40),Ce(r,f-n/5+P/10,Q-P/5-n/10),Ce(r,f-n/20,Q-P/20),Ce(r,f-n/5-P/10,Q-P/5+n/10),Yo(e,new rD(r))},o.Jb=function(e){var A,n,P,r,i,f;return f=rh(this),i=w.Math.max(f/8,3),A=kA(this.i[0].a,this.i[0].b,this.i[1].a,this.i[1].b),P=w.Math.abs(i*w.Math.cos(A)),r=w.Math.abs(i*w.Math.sin(A)),n=new nD,this.i[0].a<this.i[1].a?(n.c=this.i[0].a-P,n.b=this.i[1].a-this.i[0].a+2*P):(n.c=this.i[1].a-P,n.b=this.i[0].a-this.i[1].a+2*P),this.i[0].b<this.i[1].b?(n.d=this.i[0].b-r,n.a=this.i[1].b-this.i[0].b+2*r):(n.d=this.i[1].b-r,n.a=this.i[0].b-this.i[1].b+2*r),n},o.Kb=function(){var e;return e=new V0,J(e,' x1=\"'+this.i[0].a+'\"'),J(e,' y1=\"'+this.i[0].b+'\"'),J(e,' x2=\"'+this.i[1].a+'\"'),J(e,' y2=\"'+this.i[1].b+'\"'),e.a},o.Lb=function(){return\"arrow\"},o.Mb=function(e){var A,n,P,r,i,f;switch(ae(e,ID(e)),this.a){case 1:nL(e,this.i[0].a-8,this.i[0].b-8,16);break;case 2:nL(e,this.i[1].a-8,this.i[1].b-8,16);break;case 3:i=rh(this),r=w.Math.max(i/8,3),A=kA(this.i[0].a,this.i[0].b,this.i[1].a,this.i[1].b),n=r*w.Math.cos(A),P=-r*w.Math.sin(A),f=new YD(4),Ce(f,this.i[0].a+n,this.i[0].b+P),Ce(f,this.i[1].a+n,this.i[1].b+P),Ce(f,this.i[1].a-n,this.i[1].b-P),Ce(f,this.i[0].a-n,this.i[0].b-P),Yo(e,new rD(f))}},o.Ob=function(e,A){switch(this.a){case 1:this.i[0].a=this.o[0]+e-this.k,this.i[0].b=this.p[0]+A-this.n;break;case 2:this.i[1].a=this.o[1]+e-this.k,this.i[1].b=this.p[1]+A-this.n;break;default:zF(this,e,A)}},o.a=0;var K9t=H(62);M(214,1,{},s7),o.a=!1,o.b=!1,o.i=0,o.j=0,o.q=0,o.r=!1,o.t=!1;var X9t=H(214);M(286,1,{},sj);var Z9t=H(286);M(183,1,{183:1,32:1},Q5),o.Sb=function(e){return JO(this,e)},o.mb=function(e){return this.d==e.d&&this.e==e.e},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.f=0,o.g=0;var W9t=H(183);M(97,55,{97:1,4:1,32:1,55:1},Mi);var Ll,sl,yl,bU,ll,Tl,stt=E9(97,EN);M(199,1,{199:1},Up),o.b=!1,o.e=0;var ytt=H(199);M(148,1,{148:1,32:1},As),o.Sb=function(e){return YG(this,e)},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0;var ltt=H(148);M(300,1,{},u7),o.b=0,o.c=0;var RU,hl,_9t=H(300);M(202,1,{},Lo);var $9t=H(202);M(408,1,{},ij),o.b=0,o.g=0;var a9t=H(408);M(201,1,{201:1},NT),o.a=0;var trt=H(201);M(125,1,{125:1,32:1},gD),o.Sb=function(e){return this.b<e.b?-1:this.b>e.b?1:this.a<e.a?-1:this.a>e.a?1:0},o.a=0,o.b=0;var ert=H(125);M(407,1,{},Gg);var Art=H(407);M(170,1,{170:1},Jl),o.b=0,o.c=0,o.d=!1;var Ttt=H(170);M(406,1,{},Qj),o.a=0,o.c=0,o.d=0,o.e=0,o.f=0,o.g=0,o.n=0,o.o=0,o.p=!1,o.q=0,o.r=0,o.s=0,o.K=0;var nrt=H(406);M(403,1,{},pb);var Prt=H(403);M(402,1,{},jA),o.a=0,o.b=0,o.c=0,o.q=0;var rrt=H(402);M(293,1,If,jm),o.mc=function(e){bX(this,e)},o.a=0,o.B=!1,o.C=0;var KV,XV,ci,irt=H(293);M(378,1,{},J7),o.nc=function(){_S(this.a,this.b)};var frt=H(378);M(295,1,If,Xm),o.mc=function(e){lX(this,e)},o.a=0,o.t=0,o.v=!1;var Drt=H(295);M(400,1,{},z7),o.nc=function(){$S(this.a,this.b)};var urt=H(400);M(220,1,If,bm,qk),o.mc=function(e){Gz(this,e)},o.a=0,o.f=!1,o.g=0,o.i=0,o.j=0,o.k=0;var ZV,Qrt=H(220);M(401,1,{},G7),o.nc=function(){aS(this.a,this.b)};var Urt=H(401);M(338,1,{});var ort=H(338);M(162,338,{}),o.j=0;var Lrt=H(162);M(24,162,{24:1},q1),o.a=!1;var srt=H(24);M(287,1,If,KR),o.mc=function(e){var A;Zt(e,140)?E$((A=this,A)):Zt(e,156)?Ya(this,e):Zt(e,137)&&Ia(this,e)},o.a=!1,o.b=!1,o.c=0,o.d=!1,o.e=0,o.f=0,o.g=!1,o.q=0,o.s=0,o.t=0,o.u=0,o.w=0,o.B=0,o.C=0,o.D=0,o.F=0,o.H=0,o.J=0,o.K=0,o.N=0,o.O=!1,o.T=0,o.U=0,o.W=!1,o.X=0,o.Y=0,o.Z=!1,o.$=0,o.ab=0,o.eb=0,o.fb=0,o.hb=0,o.ib=0,o.kb=0,o.lb=0;var jU=!0,yrt=H(287);M(294,1,{},pw);var lrt=H(294);M(296,1,{},Cw);var Trt=H(296);M(297,1,{},Ld),o.b=0;var hrt=H(297);M(298,1,{},_c),o.nc=function(){};var crt=H(298);M(299,1,{},Mw),o.nc=function(){rB(this.a)};var wrt=H(299);M(302,1,{},sd);var grt=H(302);M(303,1,{262:1},yd),o.oc=function(){ZO(this.a,this.c,this.b)},o.c=0;var drt=H(303);M(304,1,{},K7),o.Rb=function(e,A){return kJ(this.a,this.b,e,A)},o.mb=function(e){return this===e};var Brt=H(304);M(305,1,If,Zb),o.mc=function(e){Y5(this,e)},o.b=0,o.d=0,o.e=0,o.f=0,o.j=0,o.k=0,o.o=0;var v8=0,dn=0,vrt=H(305);M(307,1,{},X7),o.nc=function(){WS(this.a,this.b)},o.b=0;var Frt=H(307);M(301,1,If,iv),o.mc=function(e){dK(this,e)};var WV,cl,_V,mrt=H(301);M(404,1,{},Hw),o.nc=function(){Bq(this.a)};var krt=H(404);M(140,162,{140:1},Vo),o.a=0;var brt=H(140),$V,aV,Zf,tE;M(104,121,{121:1,104:1},du),o.qb=function(e){xr(this.B,e.a,e.c,e.b,e.d)},o.rb=function(e){MN(this.B,e.a,e.c,e.b,e.d)},o.sb=function(e){Yo(this.B,new rD(e))},o.tb=function(e,A,n){jT(this.B,A,n,e)},o.ub=function(e,A,n){nL(this.B,e,A,n)},o.vb=function(e){return GL(this.B,e).b},o.wb=function(){return this.b},o.xb=function(){_F(this),this.a=1},o.Ab=function(e){this.a=e,Ko(this.B,this.a)},o.Bb=function(e){ae(this.B,e)},o.Cb=function(e){this.b=e,this.B&&eL(this.B,e,!1,!1)},o.a=0,o.b=0;var eE=H(104);M(221,1,{});var Rrt=H(221);M(156,162,{156:1},QB),o.a=!1,o.b=0;var jrt=H(156);M(137,162,{137:1},ch),o.pb=function(){return AE[this.j]+\" x:\"+this.g+\" y:\"+this.i+\" button:\"+this.b+\" clicks:\"+this.c+(this.f?\" shift\":\"\")+(this.d?\" ctrl\":\"\")+(this.a?\" alt\":\"\")+\" isPopup:\"+(this.e?\"y\":\"n\")},o.a=!1,o.b=0,o.c=0,o.d=!1,o.e=!1,o.f=!1,o.g=0,o.i=0;var AE,prt=H(137);M(56,1,{56:1},c9,v3),o.pb=function(){return\"x:\"+this.a+\" y:\"+this.b},o.a=0,o.b=0;var X4=H(56);M(118,1,{413:1},bv,YD),o.Hb=function(e,A){var n,P,r;for(r=!1,P=this.a-1,n=0;n<this.a;n++)this.c[n]>A!=this.c[P]>A&&e<(this.b[P]-this.b[n])*(A-this.c[n])/(this.c[P]-this.c[n])+this.b[n]&&(r=!r),P=n;return r},o.a=0;var Crt=H(118);M(35,1,{35:1,413:1},nD,QA),o.Hb=function(e,A){return Nr(this,e,A)},o.pb=function(){return\"x:\"+this.c+\" y:\"+this.d+\" w:\"+this.b+\" h:\"+this.a},o.a=0,o.b=0,o.c=0,o.d=0;var wl=H(35),de=-1,nE,Z4;M(410,1,{},Jg),o.getCanMolecule=function(e){var A;return A=X_(this.a,e),new CA(A)},o.getEncodedCoordinates=function(e){return Iu(this.a,e)},o.getEncodedMapping=function(){return Jd(this.a)},o.getFinalRank=function(){return this.a.f},o.getGraphAtoms=function(){return Rq(this.a)},o.getGraphIndexes=function(){return jq(this.a)},o.getIDCode=function(){return me(this.a)},o.getSymmetryRank=function(e){return Ho(this.a,e)},o.getSymmetryRanks=function(){return this.a.g},o.hasCIPParityDistinctionProblem=function(){return this.a.d},o.invalidateCoordinates=function(){this.a.s=null},o.normalizeEnantiomer=function(){return uj(this.a)},o.setParities=function(){Z5(this.a)};var Mrt=H(410);M(414,1,{},YU);var htt=2,ctt=0,wtt=1,gtt=4,dtt=3,Hrt=H(414);M(415,1,{},Yg),o.getConformerCount=function(){return this.a.p},o.getNextConformerAsMolecule=function(e){var A,n;return A=e?e.a:null,n=Ix(this.a,A),n?n==A?e:new CA(n):null},o.getOneConformerAsMolecule=function(e){var A;return A=Yx(this.a,e.a),A?e:null},o.getPotentialConformerCount=function(){return aq(this.a)},o.qc=function(e,A,n,P){return nZ(this.a,e.a,A,n,P)},o.initializeConformers=function(e,A){A===void 0&&(A={});var n=A.strategy;n===void 0&&(n=3);var P=A.maxTorsionSets;P===void 0&&(P=jy);var r=A.use60degreeSteps;return r===void 0&&(r=!1),this.qc(e,n,P,r)};var Btt=4,vtt=3,Ftt=1,mtt=2,Vrt=H(415);M(416,1,{},X2);var Ert=H(416);M(417,1,{},Lg),o.assessDruglikeness=function(e){var A;return l_(this.a,(A=e.a,!gl&&(gl=new xl),A))},o.getDetail=function(){var e;return e=this.a.a,!e&&qN(),fQ(e)},o.getDruglikenessString=function(e){return ZK(e.a)};var ktt=-999,Srt=H(417);M(418,1,{},bB),o._minimise=function(e,A,n){return xb(this.a,e,A)},o.getTotalEnergy=function(){return Fq(this.a)},o.size=function(){return this.a.b.q};var btt=U4,Rtt=o4,jtt=Sy,PE=!1,rE=!1,iE=!1,qrt=H(418);M(42,1,{42:1},Y3,AL,CA),o.addAtom=function(e){return W9(this.a,e)},o.addBond=function(e,A){return tL(this.a,e,A)},o.addFragment=function(e,A,n){OR(this.a,e.a,A,n)},o.rc=function(){pN(this.a)},o.sc=function(e){yp(this.a,e)},o.addImplicitHydrogens=function(e){e===void 0?this.rc():this.sc(e)},o.tc=function(){oo(),h5(this.a,1)},o.uc=function(e){h5(this.a,e)},o.addMissingChirality=function(e){e===void 0?this.tc():this.uc(e)},o.addMolecule=function(e){return RD(this.a,e.a)},o.addOrChangeAtom=function(e,A,n,P,r,i,f){return Jh(this.a,e,A,n,P,r,i,f)},o.addOrChangeBond=function(e,A,n){return wb(this.a,e,A,n)},o.addRing=function(e,A,n,P,r){return lf(this.a,e,A,n,P,r)},o.addRingToAtom=function(e,A,n,P){return mR(this.a,e,A,n,P)},o.addRingToBond=function(e,A,n,P){return GQ(this.a,e,A,n,P)},o.addSubstituent=function(e,A){return Js(this.a,e.a,A)},o.calculateTorsion=function(e){return qQ(this.a,e)},o.canonizeCharge=function(e){return Pp(this.a,e,!1)},o.changeAtom=function(e,A,n,P,r){return Bf(this.a,e,A,n,P,r)},o.changeAtomCharge=function(e,A){return oh(this.a,e,A)},o.changeBond=function(e,A){return Q8(this.a,e,A)},o.clear=function(){ki(this.a)},o.convertStereoBondsToSingleBonds=function(e){m5(this.a,e)},o.copyAtom=function(e,A,n,P){return En(this.a,e.a,A,n,P)},o.copyBond=function(e,A,n,P,r,i){return DQ(this.a,e.a,A,n,P,r,i)},o.copyMolecule=function(e){uf(this.a,e.a)},o.copyMoleculeByAtoms=function(e,A,n,P){ui(this.a,e.a,A,n,P)},o.copyMoleculeByBonds=function(e,A,n,P){return Mj(this.a,e.a,A,n,P)},o.copyMoleculeProperties=function(e){ko(this.a,e.a)},o.deleteAtom=function(e){wQ(this.a,e)},o.deleteAtomOrBond=function(e,A){return tb(this.a,e,A)},o.deleteAtoms=function(e){return sJ(this.a,e)},o.deleteBond=function(e){TI(this.a,e)},o.deleteBondAndSurrounding=function(e){Zh(this.a,e)},o.deleteMarkedAtomsAndBonds=function(){return Pi(this.a)},o.deleteMolecule=function(){ki(this.a)},o.deleteSelectedAtoms=function(){return nQ(this.a)},o.ensureHelperArrays=function(e){ut(this.a,e)},o.findAlleneCenterAtom=function(e){return nb(this.a,e)},o.findAlleneEndAtom=function(e,A){return Tm(this.a,e,A)},o.findAtom=function(e,A){return ZA(this.a,e,A)},o.findBINAPChiralityBond=function(e){return Us(this.a,e)},o.findBond=function(e,A){return df(this.a,e,A)},o.findRingSystem=function(e,A,n,P){nR(this.a,e,A,n,P)},o.getAbsoluteAtomParity=function(e){return c3(this.a,e)},o.getAbsoluteBondParity=function(e){return Nq(this.a,e)},o.getAllAtoms=function(){return this.a.q},o.getAllBonds=function(){return this.a.r},o.getAllConnAtoms=function(e){return Mt(this.a,e)},o.getAllConnAtomsPlusMetalBonds=function(e){return De(this.a,e)},o.getAllHydrogens=function(e){return wd(this.a,e)},o.getAromaticRingCount=function(){return HO(this.a)},o.getAtomAbnormalValence=function(e){return br(this.a,e)},o.getAtomCIPParity=function(e){return jo(this.a,e)},o.getAtomCharge=function(e){return p1(this.a,e)},o.getAtomColor=function(e){return ou(this.a,e)},o.getAtomCustomLabel=function(e){return _n(this.a,e)},o.getAtomESRGroup=function(e){return VA(this.a,e)},o.getAtomESRType=function(e){return Ae(this.a,e)},o.getAtomLabel=function(e){return Ci(this.a,e)},o.getAtomList=function(e){return MA(this.a,e)},o.getAtomListString=function(e){return Yh(this.a,e)},o.getAtomMapNo=function(e){return C1(this.a,e)},o.getAtomMass=function(e){return ye(this.a,e)},o.getAtomParity=function(e){return d0(this.a,e)},o.getAtomPi=function(e){return a1(this.a,e)},o.getAtomPreferredStereoBond=function(e){return Vv(this.a,e)},o.getAtomQueryFeaturesObject=function(e){return ya(this.a,e)},o.getAtomRadical=function(e){return FA(this.a,e)},o.getAtomRingBondCount=function(e){return HT(this.a,e)},o.getAtomRingCount=function(e,A){return E5(this.a,e,A)},o.getAtomRingSize=function(e){return M9(this.a,e)},o.getAtomX=function(e){return kt(this.a,e)},o.getAtomY=function(e){return jt(this.a,e)},o.getAtomZ=function(e){return vA(this.a,e)},o.getAtomicNo=function(e){return K(this.a,e)},o.getAtoms=function(){return this.a.f},o.getAverageBondLength=function(e){return HL(this.a,e)},o.getAverageTopologicalAtomDistance=function(){return HX(this.a)},o.getBond=function(e,A){return D1(this.a,e,A)},o.getBondAngle=function(e,A){return Y0(this.a,e,A)},o.getBondAtom=function(e,A){return z(this.a,e,A)},o.getBondBridgeMaxSize=function(e){return gT(this.a,e)},o.getBondBridgeMinSize=function(e){return x3(this.a,e)},o.getBondCIPParity=function(e){return gu(this.a,e)},o.getBondESRGroup=function(e){return $i(this.a,e)},o.getBondESRType=function(e){return cP(this.a,e)},o.getBondLength=function(e){return hh(this.a,e)},o.getBondOrder=function(e){return dt(this.a,e)},o.getBondParity=function(e){return qe(this.a,e)},o.getBondPreferredStereoBond=function(e){return gY(this.a,e)},o.getBondQueryFeatures=function(e){return ee(this.a,e)},o.getBondQueryFeaturesObject=function(e){return f_(this.a,e)},o.getBondRingSize=function(e){return pr(this.a,e)},o.getBondType=function(e){return l1(this.a,e)},o.getBondTypeSimple=function(e){return Lu(this.a,e)},o.getBonds=function(){return this.a.g},o.getBounds=function(){var e;return e=Ib(this.a,oE),e?Ox(e.c,e.d,e.b,e.a):null},o.getCanonizedIDCode=function(e){var A;return A=new EA(this.a,e),me(A)},o.getChiralText=function(){return vR(this.a)},o.getChirality=function(){return this.a.I},o.getCompactCopy=function(){return new CA(Xn(this.a))},o.getConnAtom=function(e,A){return _(this.a,e,A)},o.getConnAtoms=function(e){return O(this.a,e)},o.getConnBond=function(e,A){return Ot(this.a,e,A)},o.getConnBondOrder=function(e,A){return pA(this.a,e,A)},o.getDefaultMaxValenceUncharged=function(e){return IO(this.a,e)},o.getDiastereotopicAtomIDs=function(){return YY(this.a)},o.getElectronValenceCorrection=function(e,A){return Fu(this.a,e,A)},o.getExcludedNeighbourCount=function(e){return EL(this.a,e)},o.getExplicitHydrogens=function(e){return R3(this.a,e)},o.getFinalRanks=function(e){var A;return A=new EA(this.a,e),A.f},o.getFisherProjectionParity=function(e,A,n,P){return R5(this.a,e,A,n,P)},o.getFragmentAtoms=function(e,A){return _m(this.a,e,A)},o.getFragmentNumbers=function(e,A,n){return n9(this.a,e,A,n)},o.getFragments=function(){var e,A,n;for(e=MO(this.a),n=h(W4,L4,42,e.length,0,1),A=0;A<e.length;A++)n[A]=new CA(e[A]);return n},o.getFreeValence=function(e){return Zi(this.a,e)},o.getHandleHydrogenMap=function(){return Qu(this.a)},o.getHelperArrayStatus=function(){return this.a.T},o.getHoseCodes=function(e){e=e||{};var A=(typeof e.maxSphereSize===TU?5:e.maxSphereSize)|0,n=(typeof e.type===TU?0:e.type)|0;return TJ(this.a,A,n)},o.getIDCode=function(){var e;return e=FF(this.a),e==null&&(e=me(new BA(this.a))),e},o.getIDCodeAndCoordinates=function(){return{idCode:this.getIDCode(),coordinates:this.getIDCoordinates()}},o.getIDCoordinates=function(){var e;return e=gG(this.a),e==null&&(e=B7(new BA(this.a))),e},o.getImplicitHigherValence=function(e,A){return Uf(this.a,e,A)},o.getImplicitHydrogens=function(e){return xt(this.a,e)},o.getIndex=function(){return rx(this.a)},o.getLowestFreeValence=function(e){return gQ(this.a,e)},o.getMaxAtoms=function(){return this.a.M},o.getMaxBonds=function(){return this.a.N},o.getMaxValence=function(e){return lT(this.a,e)},o.getMaxValenceUncharged=function(e){return Cn(this.a,e)},o.getMetalBondedConnAtoms=function(e){return xi(this.a,e)},o.getMolecularFormula=function(){return new Pg(this.a)},o.getMoleculeColor=function(){return this.a.O},o.getMolweight=function(){return wY(this.a)},o.getName=function(){return this.a.P},o.getNonHydrogenNeighbourCount=function(e){return e0(this.a,e)},o.getNumberOfHydrogens=function(){return KG(this.a)},o.getOccupiedValence=function(e){return G1(this.a,e)},o.getPath=function(e,A,n,P,r){return l2(this.a,e,A,n,P,null,r)},o.getPathBonds=function(e,A,n){Vm(this.a,e,A,n)},o.getPathLength=function(e,A){return o5(this.a,e,A)},o.getRingSet=function(){return new Sw(On(this.a))},o.getRotatableBondCount=function(){return hR(this.a)},o.getStereoBond=function(e){return pQ(this.a,e)},o.getStereoCenterCount=function(){return oF(this.a)},o.vc=function(){return this.a},o.getStereoProblem=function(e){return Vg(this.a,e)},o.getSubstituent=function(e,A,n,P,r){return SQ(this.a,e,A,n,P.a,r)},o.getSubstituentSize=function(e,A){return L5(this.a,e,A)},o.getSymmetryRank=function(e){return R0(this.a,e)},o.getZNeighbour=function(e,A){return _R(this.a,e,A)},o.invalidateHelperArrays=function(e){YS(this.a,e)},o.inventCoordinates=function(){var e;e=new i7,e.g=new zr(0),Ar(e,this.a),Lf(this.a)},o.is3D=function(){return GT(this.a)},o.isAlkaliMetal=function(e){return LO(this.a,e)},o.isAllylicAtom=function(e){return sI(this.a,e)},o.isAmideTypeBond=function(e){return RK(this.a,e)},o.isAromaticAtom=function(e){return vn(this.a,e)},o.isAromaticBond=function(e){return _e(this.a,e)},o.isAtomConfigurationUnknown=function(e){return Fr(this.a,e)},o.isAtomMarkedForDeletion=function(e){return Xq(this.a,e)},o.isAtomParityPseudo=function(e){return Ei(this.a,e)},o.isAtomStereoCenter=function(e){return E8(this.a,e)},o.isAutoMappedAtom=function(e){return Bn(this.a,e)},o.isBINAPChiralityBond=function(e){return fi(this.a,e)},o.isBondBackgroundHilited=function(e){return V3(this.a,e)},o.isBondBridge=function(e){return Bu(this.a,e)},o.isBondForegroundHilited=function(e){return vr(this.a,e)},o.isBondMarkedForDeletion=function(e){return $q(this.a,e)},o.isBondParityPseudo=function(e){return wo(this.a,e)},o.isBondParityUnknownOrNone=function(e){return E3(this.a,e)},o.isChalcogene=function(e){return VT(this.a,e)},o.isDelocalizedBond=function(e){return G8(this.a,e)},o.isEarthAlkaliMetal=function(e){return sO(this.a,e)},o.isElectronegative=function(e){return tA(this.a,e)},o.isElectropositive=function(e){return EY(this.a,e)},o.isFlatNitrogen=function(e){return EP(this.a,e,!0)},o.isFragment=function(){return this.a.K},o.isHalogene=function(e){return ON(this.a,e)},o.isMarkedAtom=function(e){return z0(this.a,e)},o.isMetalAtom=function(e){return _0(this.a,e)},o.isNaturalAbundance=function(e){return Du(this.a,e)},o.isNitrogenFamily=function(e){return yT(this.a,e)},o.isOrganicAtom=function(e){return bb(this.a,e)},o.isPseudoRotatableBond=function(e){return $b(this.a,e)},o.isPurelyOrganic=function(){return hK(this.a)},o.isRingAtom=function(e){return qi(this.a,e)},o.isRingBond=function(e){return fA(this.a,e)},o.isSelectedAtom=function(e){return r0(this.a,e)},o.isSelectedBond=function(e){return mP(this.a,e)},o.isSimpleHydrogen=function(e){return lG(this.a,e)},o.isSmallRingAtom=function(e){return go(this.a,e)},o.isSmallRingBond=function(e){return WP(this.a,e)},o.isStabilizedAtom=function(e){return yI(this.a,e)},o.isStereoBond=function(e){return Cr(this.a,e)},o.markAtomForDeletion=function(e){Zw(this.a,e)},o.markBondForDeletion=function(e){tq(this.a,e)},o.normalizeAmbiguousBonds=function(){return Qi(this.a)},o.removeAtomColors=function(){xd(this.a)},o.removeAtomCustomLabels=function(){this.a.t=null},o.removeAtomMarkers=function(){nT(this.a)},o.removeAtomSelection=function(){hx(this.a)},o.removeBondHiliting=function(){$d(this.a)},o.removeExplicitHydrogens=function(){g5(this.a,!0)},o.removeQueryFeatures=function(){return Yb(this.a)},o.renumberESRGroups=function(e){return $0(this.a,e)},o.scaleCoords=function(e){GB(this.a,e)},o.setAllAtoms=function(e){fq(this.a,e)},o.setAllBonds=function(e){Dq(this.a,e)},o.setAssignParitiesToNitrogen=function(e){xq(this.a,e)},o.setAtomAbnormalValence=function(e,A){XA(this.a,e,A)},o.setAtomCIPParity=function(e,A){bd(this.a,e,A)},o.setAtomCharge=function(e,A){E0(this.a,e,A)},o.setAtomColor=function(e,A){FD(this.a,e,A)},o.setAtomConfigurationUnknown=function(e,A){Xo(this.a,e,A)},o.setAtomCustomLabel=function(e,A){u8(this.a,e,A)},o.setAtomESR=function(e,A,n){He(this.a,e,A,n)},o.setAtomList=function(e,A,n){Tf(this.a,e,A,n)},o.setAtomMapNo=function(e,A,n){Ze(this.a,e,A,n)},o.setAtomMarker=function(e,A){zn(this.a,e,A)},o.setAtomMass=function(e,A){jr(this.a,e,A)},o.setAtomParity=function(e,A,n){ce(this.a,e,A,n)},o.setAtomQueryFeature=function(e,A,n){T1(this.a,e,A,n)},o.setAtomRadical=function(e,A){Ne(this.a,e,A)},o.setAtomSelection=function(e,A){dP(this.a,e,A)},o.setAtomX=function(e,A){Be(this.a,e,A)},o.setAtomY=function(e,A){Ie(this.a,e,A)},o.setAtomZ=function(e,A){hP(this.a,e,A)},o.setAtomicNo=function(e,A){K0(this.a,e,A)},o.setBondAtom=function(e,A,n){BD(this.a,e,A,n)},o.setBondBackgroundHiliting=function(e,A){vx(this.a,e,A)},o.setBondCIPParity=function(e,A){td(this.a,e,A)},o.setBondESR=function(e,A,n){U8(this.a,e,A,n)},o.setBondForegroundHiliting=function(e,A){Fx(this.a,e,A)},o.setBondOrder=function(e,A){uT(this.a,e,A)},o.setBondParity=function(e,A,n){A8(this.a,e,A,n)},o.setBondParityUnknownOrNone=function(e){n3(this.a,e)},o.setBondQueryFeature=function(e,A,n){Ge(this.a,e,A,n)},o.setBondType=function(e,A){w0(this.a,e,A)},o.setChirality=function(e){Gl(this.a,e)},o.setFragment=function(e){je(this.a,e)},o.setHelperValidity=function(e){RS(this.a,e)},o.setHydrogenProtection=function(e){bS(this.a,e)},o.setMaxAtoms=function(e){kQ(this.a,e)},o.setMaxBonds=function(e){eQ(this.a,e)},o.setMoleculeColor=function(e){jS(this.a,e)},o.setName=function(e){$2(this.a,e)},o.setParitiesValid=function(e){sD(this.a,e)},o.setStereoBondFromAtomParity=function(e){Ay(this.a,e)},o.setStereoBondFromBondParity=function(e){Nj(this.a,e)},o.setStereoBondsFromParity=function(){Lf(this.a)},o.setToRacemate=function(){this.a.L=!0},o.setUnknownParitiesToExplicitlyUnknown=function(){H3(this.a)},o.shareSameFragment=function(e,A){return o5(this.a,e,A)!=-1},o.stripIsotopInfo=function(){return SJ(this.a)},o.stripSmallFragments=function(e){return VR(this.a,e)},o.stripStereoInformation=function(){ds(this.a)},o.suggestBondType=function(e,A){return Ax(this.a,e,A)},o.supportsImplicitHydrogen=function(e){return aL(this.a,e)},o.swapAtoms=function(e,A){S5(this.a,e,A)},o.swapBonds=function(e,A){t5(this.a,e,A)},o.toIsomericSmiles=function(e){e=e||{};var A=e.createSmarts===!0,n=e.includeMapping===!0,P=e.kekulizedOutput===!0;return this.wc(A,n,P)},o.wc=function(e,A,n){return Gv(this,e,A,n)},o.toMolfile=function(){var e;return e=new p3(this.a),e.a.a},o.toMolfileV3=function(){var e;return e=new dg(this.a),e.b.a},o.toSVG=function(e,A,n,P,r,i,f){var D,Q,U,L,s,y,l,T,c,g,m,v;for(U=!0,s=0;s<this.a.q-1;s++)if(kt(this.a,s)!=kt(this.a,s+1)||jt(this.a,s)!=jt(this.a,s+1)){U=!1;break}return y=U?Xn(this.a):this.a,U&&Ar(new Y8(0),y),ut(y,95),v=WW(f),L=J_(f),Q=new Ik(y,L,i),Q.J=n,L2(Q,null,new QA(0,0,e,A),v),D=Q.v,W5(Q,null),m=Jj(Q),P?(T=zt(E1(w.Math.round(D.b+r*2))),l=zt(E1(w.Math.round(D.a+r*2))),c=zt(E1(w.Math.round(D.c-r))),g=zt(E1(w.Math.round(D.d-r))),bT(m,'width=\"\\\\d+px\" height=\"\\\\d+px\" viewBox=\"0 0 \\\\d+ \\\\d+\"','width=\"'+T+'px\" height=\"'+l+'px\" viewBox=\"'+c+\" \"+g+\" \"+T+\" \"+l+'\"')):m},o.toSmarts=function(){return Ru(new hD(this.a,1))},o.toSmiles=function(){return Gv(this,!1,!1,!0)},o.translateCoords=function(e,A){CL(this.a,e,A)},o.validate=function(){$W(this.a)},o.zoomAndRotate=function(e,A,n){Rk(this.a,e,A,n)},o.zoomAndRotateInit=function(e,A){eb(this.a,e,A)};var ptt=32,Ctt=2,Mtt=4,Htt=6,Vtt=64,Ett=128,Stt=1,qtt=256,Itt=8,xtt=re,Ntt=16,Ott=I1,Gtt=512,Jtt=cV,ztt=24,Ytt=cV,fE,Ktt=q6,Xtt=E6,Ztt=S6,Wtt=0,_tt=3,$tt=1,att=2,t1t=64,e1t=384,A1t=448,n1t=192,P1t=256,r1t=0,i1t=320,f1t=128,DE,D1t=1,u1t=2,Q1t=4,U1t=0,o1t=3,L1t=1,s1t=Ty,y1t=2,l1t=1,T1t=2,h1t=i9,c1t=3,w1t=25,g1t={l:4186111,m:4193407,h:127},d1t=5,B1t=39,v1t=Vf,F1t=Pe,m1t=Ur,k1t=ZQ,b1t=rP,R1t=4,j1t=7,p1t=XQ,C1t=KQ,M1t=ge,H1t=C0,V1t={l:4194302,m:4193343,h:7},E1t=5,S1t=17,q1t=si,I1t=rr,x1t=7,N1t=32,O1t=I1,G1t=46,J1t=v2,z1t=128,Y1t=I0,K1t=Sn,X1t=xp,Z1t=256,W1t=T8,_1t=s8,$1t=Np,a1t=512,t0t=l8,e0t=Q0,A0t=16,n0t=Op,P0t=re,r0t=h8,i0t=32,f0t=aQ,D0t=qA,u0t=64,Q0t=4,U0t=8,o0t=Tn,L0t=nU,s0t=134217728,y0t=3,l0t=14,T0t=Li,h0t=L8,c0t=ir,w0t=fr,g0t=Dr,d0t=ur,B0t=Qr,v0t=pf,F0t=120,m0t=4,k0t=3,b0t=2,R0t=c8,j0t=lU,p0t=c8,C0t=cn,M0t=30,H0t=C6,V0t=f9,E0t=3,S0t=22,q0t=m6,I0t=2,x0t=44,N0t=48,O0t=32,G0t=0,J0t=16,z0t=4,Y0t=48,uE,K0t=1,X0t=0,Z0t=3,W0t=2,_0t=1,$0t=0,a0t=3,tet=2,eet=oi,Aet=AU,net=2,Pet=21,ret=qA,iet=31,fet=5,Det=0,uet=y8,Qet=8,Uet=7680,oet=4,Let=9,set=9,yet=wy,Tet=4,het=13,cet=8,wet=8388480,get=2,det=Ef,Bet=h8,vet=16,Fet=6291840,met=23,ket=fP,bet=128,Ret=32,jet=64,pet=96,Cet=2,Met=5,Het=256,Vet=SP,Eet=3,qet=17,Iet=384,xet=2,Net=7,Oet=6291967,Get=1,Jet=4,zet=386,Yet=512,Ket=8,Xet=2,Zet=129,Wet=511,_et=127,$et=384,aet=16,tAt=32,eAt=64,AAt=1,nAt=4,PAt=257,rAt=458752,iAt=yi,fAt=w1,DAt=T8,uAt=I0,QAt=Q0,UAt=ly,oAt=0,LAt=327680,QE,sAt=24,yAt=321,lAt=6,TAt=5,hAt=32,cAt=0,wAt=1,gAt=2,dAt=255,BAt=16,vAt=128,FAt=1,mAt=8,kAt=4,bAt=2,RAt=32,jAt=64,pAt=248,CAt=31,MAt=1,HAt=0,VAt=15,EAt=7,SAt=3,qAt=63,IAt=95,xAt=190,NAt=16,OAt=0,GAt=1,JAt=16,zAt=256,YAt=128,KAt=8,XAt=32,ZAt=4,WAt=511,_At=64,$At=1,aAt=2,UE,oE,W4=H(42);M(419,279,{},p7),$n(o,{acceptorCount:{get:function(){return GO(this)}}}),$n(o,{donorCount:{get:function(){return kG(this)}}}),$n(o,{logP:{get:function(){return YJ(this)}}}),$n(o,{logPString:{get:function(){return fQ(S$((new Lh,this.a)))}}}),$n(o,{logS:{get:function(){return vK((Q6(),this.a))}}}),$n(o,{logSString:{get:function(){return fQ(p_((Q6(),this.a)))}}}),$n(o,{polarSurfaceArea:{get:function(){return FO((e6(),this.a))}}}),$n(o,{polarSurfaceAreaString:{get:function(){return fQ(KX((e6(),this.a)))}}}),$n(o,{rotatableBondCount:{get:function(){return hR(this.a)}}}),$n(o,{stereoCenterCount:{get:function(){return oF(this.a)}}});var Irt=H(419);M(67,1,{},_P,Cd),o.addCatalyst=function(e){al(this.a,e.a)},o.addCatalystAt=function(e,A){dq(this.a,e.a,A)},o.addProduct=function(e){S7(this.a,e.a)},o.addProductAt=function(e,A){iI(this.a,e.a,A)},o.addReactant=function(e){q7(this.a,e.a)},o.addReactantAt=function(e,A){fI(this.a,e.a,A)},o.clear=function(){nv(this.a)},o.clone=function(){return new _P(new Vs(this.a))},o.getAverageBondLength=function(){return fb(this.a)},o.getCatalyst=function(e){return new CA(Oq(this.a,e))},o.getCatalysts=function(){return this.a.a.a.length},o.getHighestMapNo=function(){return ms(this.a)},o.getMergedCopy=function(){return new _P(WK(this.a))},o.getMolecule=function(e){return new CA(Pv(this.a,e))},o.getMolecules=function(){return ex(this.a)},o.getName=function(){return oI(this.a)},o.getProduct=function(e){return new CA(w3(this.a,e))},o.getProducts=function(){return this.a.f.a.length},o.getReactant=function(e){return new CA(dr(this.a,e))},o.getReactants=function(){return this.a.g.a.length},o.getReactionCenterMapNos=function(){return ia(this.a)},o.isEmpty=function(){return AX(this.a)},o.isFragment=function(){return Sq(this.a)},o.isPerfectlyMapped=function(){return k$(this.a)},o.isReactionLayoutRequired=function(){return U_(this.a)},o.removeCatalysts=function(){mi(this.a.a.a,0)},o.setFragment=function(e){yz(this.a,e)},o.setName=function(e){IS(this.a,e)},o.toRxn=function(e){var A;return A=new IR(this.a,e),A.a?A.a.a:null},o.toRxnV3=function(e){var A;return A=new rj(this.a,e),A.a?A.a.a:null},o.toSmiles=function(){return AZ(this.a)},o.validateMapping=function(){l$(this.a)};var xrt=H(67);M(420,1,{},ac);var tnt=\"+\",ent=15,Ant=8,nnt=2,Pnt=3,rnt=4,int=1,fnt=0,Dnt=\" \",unt=\"#\",Qnt=\"!\",Unt=16,Nrt=H(420);M(421,1,{},I7),o.getProducts=function(){var e,A,n,P;if(P=VJ(this.a),P.length==0)return R1(W4,[nA,L4],[172,42],0,[0,0],2);for(n=R1(W4,[nA,L4],[172,42],0,[P.length,P[0].length],2),e=0;e<P.length;e++)for(A=0;A<P[0].length;A++)n[e][A]=new CA(P[e][A]);return n},o.setReactant=function(e,A){return ZW(this.a,e,A.a)};var Ort=H(421);M(422,1,{},_2);var pU=!1,Grt=H(422);M(261,1,{},Sw),o.determineAromaticity=function(e,A,n,P){Zs(this.a,e,A,n,P)},o.getAtomIndex=function(e,A){return rF(this.a,e,A)},o.getAtomRingSize=function(e){return iA(this.a,e)},o.getBondIndex=function(e,A){return _O(this.a,e,A)},o.getBondRingSize=function(e){return yP(this.a,e)},o.getHeteroPosition=function(e){return cq(this.a,e)},o.getRingAtoms=function(e){return h3(this.a,e)},o.getRingBonds=function(e){return V7(this.a,e)},o.getRingSize=function(e){return N3(this.a,e)},o.getSharedRing=function(e,A){return KL(this.a,e,A)},o.getSize=function(){return this.a.j.a.length},o.isAromatic=function(e){return u3(this.a,e)},o.isAtomMember=function(e,A){return yA(this.a,e,A)},o.isBondMember=function(e,A){return Af(this.a,e,A)},o.isDelocalized=function(e){return wq(this.a,e)},o.qualifiesAsAmideTypeBond=function(e){return ps(this.a,e)},o.validateMemberIndex=function(e,A){return WT(this.a,e,A)};var ont=7,Lnt=3,snt=7,ynt=5,lnt=1,Jrt=H(261);M(423,1,{},ld),o.getField=function(e){var A,n;for(n=fx(this.a),A=0;A<n.length;A++)if(A1(n[A],e))return iB(this.a,A);return null},o.getFieldData=function(e){return iB(this.a,e)},o.getFieldNames=function(e){return aI(this.a,e)},o.getMolecule=function(){return new CA(NY(this.a))},o.getNextFieldData=function(){var e;return e=this.a.b.a,e},o.getNextMolFile=function(){var e;return e=this.a.g.a,e},o.next=function(){return F$(this.a)};var zrt=H(423);M(425,1,{},AB),o.findFragmentInMolecule=function(e){var A;return A=DX(e),sn(this.b,A,this.a)},o.getMatchList=function(){return QJ(this.b.F)},o.isFragmentInMolecule=function(){return Ag(this.b)},o.setFragment=function(e){Ln(this.b,e.a)},o.setMol=function(e,A){Dn(this.b,A.a),Ln(this.b,e.a)},o.setMolecule=function(e){Dn(this.b,e.a)},o.a=0;var Yrt=H(425);M(426,1,{},t7),o.createIndex=function(e){return Ts(this.a,e.a)},o.isFragmentInMolecule=function(){return jK(this.a)},o.setFragment=function(e,A){LN(this.a,e.a,A)},o.setMolecule=function(e,A){sN(this.a,e.a,A)};var Krt=H(426);M(427,1,{},Ww),o.getSmartsWarning=function(){return wN(this.a)},o.xc=function(e,A,n,P,r,i){var f;switch(f=0,e){case\"smarts\":f=2;break;case\"guess\":f=1}n&&(f|=8),A&&(f|=4),P&&(f|=16),r&&(f|=32),i&&(f|=64),this.a=new LQ(f)},o.yc=function(e,A,n,P){var r;return kd(this.a,e.a,KA((r=A,JD(),r)),n,P),e},o.parseMolecule=function(e,A){A=A||{};var n=A.molecule||new Y3,P=!A.noCoordinates,r=!A.noStereo;return this.yc(n,e,P,r)},o.parseReaction=function(e){return new _P(kN(this.a,e))},o.setRandomSeed=function(e){SS(this.a,e)};var Xrt=H(427);M(428,1,{},$7),o.assessRisk=function(e,A){var n;return cZ(e.a,(n=A,!gl&&(gl=new xl),n))},o.getDetail=function(e,A){return fQ(u$(e.a,A))};var Tnt=3,hnt=2,LE,cnt=1,wnt=0,gnt=2,dnt=0,Bnt=3,vnt=1,Zrt=H(428);M(429,1,{},zg),o.applyTransformation=function(e,A){SG(this.a,e.a,A)},o.setMolecule=function(e,A){return nX(this.a,e.a)};var Wrt=H(429);M(430,1,{},$c);var _rt=H(430);M(260,153,{153:1},Pg),$n(o,{absoluteWeight:{get:function(){return BO(this)}}}),$n(o,{formula:{get:function(){return wJ(this)}}}),$n(o,{relativeWeight:{get:function(){return vO(this)}}});var $rt=H(260);M(431,1,{},db),o.addPastedOrDropped=function(e,A,n){YR(this.a,e.a)},o.clearAll=function(){sb(this.a)},o.fireKeyEvent=function(e,A,n,P,r,i){var f;f=new QB(e,A,i,this.a),YT(this.d,f)},o.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var U;U=new ch(e,A,n,P,r,i,f,D,Q,this.a),YT(this.e,U)},o.getGenericEditorArea=function(){return this.a},o.zc=function(){return this.c},o.getMode=function(){return this.a.U},o.getMolecule=function(){return new CA(this.a.V)},o.getReaction=function(){return new _P(dh(this.a))},o.moleculeChanged=function(){ZN(this.a)},o.repaint=function(){n1(this)},o.setMolecule=function(e){dJ(this.a,e.a)},o.setReaction=function(e){ER(this.a,e.a)},o.toolChanged=function(e){au(this.a,e)},o.b=!1;var Fnt=4,mnt=8,knt=1,bnt=2,sE,yE,lE,TE,Rnt=-2,jnt=-5,pnt=-1,Cnt=-4,Mnt=-8,Hnt=-7,Vnt=1,Ent=2,Snt=-6,qnt=-3,Int=8,xnt=2,Nnt=1,Ont=4,Gnt=3,Jnt=7,znt=4,Ynt=5,Knt=6,Xnt=1,Znt=2,Wnt=-1,_nt=-2,$nt=0,ant=1,tPt=4,ePt=2,APt=3,nPt=10,PPt=5,rPt=6,iPt=13,fPt=11,DPt=7,uPt=8,QPt=12,UPt=9,art=H(431);M(288,1,If,Vw),o.mc=function(e){Vx(this.a,e.j,e.a)};var tit=H(288);M(291,1,{262:1},Ew),o.oc=function(){$I(this.a)};var eit=H(291);M(433,1,{},Rm),o.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var U;U=new ch(e,A,n,P,r,i,f,D,Q,this.b),YT(this.d,U)},o.getHeight=function(){return this.b.e},o.Ac=function(){return this.c},o.getWidth=function(){return this.b.o},o.setDimensions=function(e,A){cB(this,e,A)},o.a=!1;var Ait=H(433);M(306,1,{262:1},qw),o.oc=function(){PF(this.a)};var nit=H(306);M(432,1,{},gB),o.build16x16CursorImage=function(e){var A;return A=Uv(this,16,16),EK(A,e),A.a},o.createDialog=function(e,A){return ED(this,e,A)},o.createImage=function(e,A){return Uv(this,e,A)},o.createNativeDialog=function(e){return eB(this,e)},o.createPopupMenu=function(e){return null},o.Bc=function(){return this.a},o.grabFocus=function(){Md(this)},o.openChemistryFile=function(e){return null},o.runLater=function(e){sL(this,e)},o.Cc=function(e){e.oc()},o.setCursor=function(e){Yd(this,e)},o.setEditorArea=function(e){},o.showHelpDialog=function(e,A){hT(this,e,A)},o.showMessage=function(e){};var Pit=H(432);M(171,1,{}),o.Dc=function(e,A){QO(this,new Vo(this,e,A))},o.Ec=function(){return this.b};var rit=H(171);M(454,171,{},y7);var iit=H(454);M(290,1,{},Iw),o.Fc=function(){return this.a};var fit=H(290);M(455,171,{},l7);var Dit=H(455);M(292,1,{},xw),o.Gc=function(){this.a&&this.a.mc(new Vo(this,1,0))},o.Hc=function(){this.a&&this.a.mc(new Vo(this,0,0))},o.Ic=function(){return this.b};var uit=H(292);M(157,1,{},a2),o.Jc=function(){return this.a};var Qit=H(157);M(219,1,{},WU),o.pc=function(){var e=this.Kc();return e},o.Kc=function(){return this.a};var Uit=H(219);M(289,221,{},aw);var oit=H(289);M(453,171,{},T7);var Lit=H(453);M(218,221,{},e3);var sit=H(218);M(139,1,{},rD),o.getSize=function(){return this.a.a},o.getX=function(e){return U7(this.a,e)},o.getY=function(e){return o7(this.a,e)};var yit=H(139);M(456,171,{},h7);var lit=H(456);M(212,1,{},xl);var gl=null,Tit=H(212),_4=null;M(257,1,Rf,Il),o.Rb=function(e,A){return cs(e,A)},o.mb=function(e){return this===e};var hit=H(257),xA,wi;M(131,1,Rf,AD),o.Rb=function(e,A){return hs(e,A)},o.mb=function(e){return this===e};var cit=H(131);M(92,1,{},pi,M3);var wit=H(92);M(382,92,Rf,Kg);var git=H(382);M(344,129,yn);var dit=H(344);M(163,344,{163:1,4:1,19:1,33:1,27:1},qB),o.ic=function(){return AK(this),this.c},o.Lc=function(){return J1(this.b)===J1($4)?null:this.b};var $4,Bit=H(163);M(409,1,{});var vit=H(409),CU=0,hE=0,MU=-1;M(396,409,{},tw);var a4,Fit=H(396),In,tc,cE,ec,Ac;M(57,1,{},BP,jL),o.a=0;var mit=H(57);M(239,1,{},eT),o.b=0;var wE=null,gE,kit=H(239);M(160,1,{160:1}),o.mb=function(e){return aF(this,e)},o.ob=function(){var e;return e=this.Mc()+this.Nc(),vt(e)*37};var bit=H(160);M(168,160,{168:1,160:1},M7),o.mb=function(e){var A;return Zt(e,168)?(A=e,this.a==A.a&&this.b==A.b):aF(this,e)},o.Mc=function(){return this.a},o.Nc=function(){return this.b},o.a=0,o.b=0;var Rit=H(168);M(159,160,{160:1,159:1,4:1},Pw,ig),o.Mc=function(){return this.a},o.Nc=function(){return this.b},o.a=0,o.b=0;var oPt=H(159);M(451,1,{});var jit=H(451);M(248,451,{248:1}),o.mb=function(e){var A;return e===this?!0:Zt(e,169)?(A=e,this.c==A.c&&this.d==A.d&&this.b==A.b&&this.a==A.a):!1},o.ob=function(){var e;return e=ss(this.c),e=O1(e,Un(ss(this.d),37)),e=O1(e,Un(ss(this.b),43)),e=O1(e,Un(ss(this.a),47)),zt(e)^zt(q0(e,32))};var pit=H(248);M(169,248,{248:1,169:1},iT),o.a=0,o.b=0,o.c=0,o.d=0;var Cit=H(169);M(447,1,{}),o.Oc=function(){var e;return e=h(l9,a0,6,1,15,1),this.Pc(e)==-1?-1:e[0]},o.Pc=function(e){return this.Qc(e,0,e.length)};var Mit=H(447);M(53,447,{},nn),o.Oc=function(){return bL(this)},o.Qc=function(e,A,n){return this.b.Qc(e,A,n)},o.a=0;var Hit=H(53);M(412,1,{});var Vit=H(412);M(411,412,{});var Eit=H(411);M(446,1,{});var Sit=H(446);M(103,447,{},Fi),o.Oc=function(){return Xx(this.a)},o.Pc=function(e){return NF(this,e,0,e.length)},o.Qc=function(e,A,n){return NF(this,e,A,n)};var qit=H(103);M(265,411,{},rw);var Iit=H(265);M(86,447,{},b9),o.Oc=function(){return this.a==this.b.length?-1:Yi(this.b,this.a++)},o.Qc=function(e,A,n){var P;return this.a>=this.b.length?-1:(P=w.Math.min(this.b.length-this.a,n),iO(this.b,this.a,this.a+P,e,A),this.a+=P,P)},o.a=0;var xit=H(86);M(448,1,{});var Nit=H(448);M(238,448,{},f3),o.pb=function(){return this.a.a};var Oit=H(238);M(130,1,{206:1}),o.pb=function(){return this.a};var Git=H(130);M(82,33,yn,p8);var Jit=H(82);M(255,79,yn,f7,m7);var zit=H(255);M(141,1,{4:1,141:1,32:1},zl),o.Sb=function(e){return this.a-e.a},o.mb=function(e){return Zt(e,141)&&e.a==this.a},o.ob=function(){return this.a},o.pb=function(){return String.fromCharCode(this.a)},o.a=0;var LPt=H(141),nc;M(66,33,yn,P3,C8);var Yit=H(66);M(164,33,yn,P7,ro);var Kit=H(164);M(142,120,{4:1,32:1,142:1,120:1},Yl),o.Sb=function(e){return q3(this.a,e.a)},o.Xc=function(){return this.a},o.mb=function(e){return Zt(e,142)&&e.a==this.a},o.ob=function(){return this.a},o.Yc=function(){return this.a},o.pb=function(){return\"\"+this.a},o.a=0;var sPt=H(142),Pc;M(143,120,{4:1,32:1,143:1,120:1},Kl),o.Sb=function(e){return Mx(this.a,e.a)},o.Xc=function(){return Jr(this.a)},o.mb=function(e){return Zt(e,143)&&P0(e.a,this.a)},o.ob=function(){return JI(this.a)},o.Yc=function(){return zt(this.a)},o.pb=function(){return\"\"+Te(this.a)},o.a=0;var yPt=H(143),rc;M(514,1,{}),M(397,33,yn,d7);var Xit=H(397);M(40,66,{4:1,19:1,40:1,33:1,27:1},YP);var Zit=H(40);M(115,1,{4:1,115:1},oT),o.mb=function(e){var A;return Zt(e,115)?(A=e,this.c==A.c&&this.d==A.d&&this.a==A.a&&this.b==A.b):!1},o.ob=function(){return fJ(B(d(uP,1),A0,1,5,[k1(this.c),this.a,this.d,this.b]))},o.pb=function(){return this.a+\".\"+this.d+\"(\"+(this.b!=null?this.b:\"Unknown Source\")+(this.c>=0?\":\"+this.c:\"\")+\")\"},o.c=0;var dE=H(115);M(76,130,{206:1},TD,fu);var Wit=H(76);M(25,130,{206:1},V0,k9,Fn);var _it=H(25);M(516,1,{});var gi;M(39,33,yn,dA,lD);var $it=H(39);M(31,120,{4:1,32:1,120:1,31:1},Me,a3,Zd,nf,Z7,pD),o.Sb=function(e){return qR(this,e)},o.Xc=function(){return Le(be(this))},o.mb=function(e){var A;return this===e?!0:Zt(e,31)?(A=e,this.e==A.e&&qR(this,A)==0):!1},o.ob=function(){var e;return this.b!=0?this.b:this.a<54?(e=E1(this.f),this.b=zt(V(e,-1)),this.b=33*this.b+zt(V(q0(e,32),-1)),this.b=17*this.b+vt(this.e),this.b):(this.b=17*Pm(this.c)+vt(this.e),this.b)},o.Yc=function(){return this.e<=-32||this.e>(this.d>0?this.d:w.Math.floor((this.a-1)*hU)+1)?0:Nd(this.e==0||this.a==0&&this.f!=-1?(!this.c&&(this.c=kP(E1(this.f))),this.c):this.e<0?bP((!this.c&&(this.c=kP(E1(this.f))),this.c),ii(-this.e)):x5((!this.c&&(this.c=kP(E1(this.f))),this.c),ii(this.e)))},o.pb=function(){return be(this)},o.a=0,o.b=0,o.d=0,o.e=0,o.f=0;var BE,HU,ic,fc,di,dl,VU,Dc,vE=H(31);M(23,120,{4:1,32:1,120:1,23:1},mA,IB,Ue,Zm,jg),o.Sb=function(e){return rs(this,e)},o.Xc=function(){return Le(t6(this,0))},o.mb=function(e){return Th(this,e)},o.ob=function(){return Pm(this)},o.Yc=function(){return Nd(this)},o.pb=function(){return t6(this,0)},o.b=-2,o.c=0,o.d=0,o.e=0;var uc,N2,FE,EU,SU,y9,Bi=H(23),mE,kE;M(99,1,{4:1,99:1},Vd,XD),o.mb=function(e){return Zt(e,99)&&e.a==this.a&&e.b==this.b},o.ob=function(){return this.a<<3|this.b.b},o.pb=function(){return\"precision=\"+this.a+\" roundingMode=\"+this.b},o.a=0;var ait=H(99),yr,Wf,Qc;M(72,55,{4:1,32:1,55:1,72:1},j9);var bE,RE,jE,pE,se,Bl,CE,ME,lPt=E9(72,dO);M(114,1,ay),o.Sb=function(e){return PN(this.a,e.a)},o.mb=function(e){var A;return e===this?!0:Zt(e,114)?(A=e,A1(this.a,A.a)):!1},o.ob=function(){return Qh(this.a)},o.pb=function(){return this.a};var tft=H(114);M(450,1,{});var eft=H(450);M(124,450,{},Pu,y3),o.a=0;var Aft=H(124);M(106,1,T4),o.getOrDefault=function(e,A){var n;return n=this.get(e),n==null&&!this.containsKey(e)?A:n},o.putIfAbsent=function(e,A){var n;return n=this.get(e),n??this.put(e,A)},o.replace=function(e,A){return this.containsKey(e)?this.put(e,A):null},o.clear=function(){this.$c().clear()},o.Zc=function(e){return dk(this,e)},o.containsKey=function(e){return!!Ch(this,e,!1)},o.containsValue=function(e){var A,n,P;for(n=this.$c().Tb();n.ad();)if(A=n.bd(),P=A.ed(),J1(e)===J1(P)||e!=null&&VP(e,P))return!0;return!1},o.mb=function(e){var A,n,P;if(e===this)return!0;if(!Zt(e,109)||(P=e,this.size()!=P.size()))return!1;for(n=P.$c().Tb();n.ad();)if(A=n.bd(),!this.Zc(A))return!1;return!0},o.get=function(e){return XP(Ch(this,e,!1))},o.ob=function(){return gF(this.$c())},o.isEmpty=function(){return this.size()==0},o.keySet=function(){return new Xl(this)},o.put=function(e,A){throw At(new lD(\"Put not supported on this map\"))},o.putAll=function(e){var A,n;for(U1(e),n=e.$c().Tb();n.ad();)A=n.bd(),this.put(A.dd(),A.ed())},o.remove=function(e){return XP(Ch(this,e,!0))},o.size=function(){return this.$c().size()},o.pb=function(){var e,A,n;for(n=new dL(\", \",\"{\",\"}\"),A=this.$c().Tb();A.ad();)e=A.bd(),Tv(n,jB(this,e.dd())+\"=\"+jB(this,e.ed()));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c},o.values=function(){return new fD(this)};var nft=H(106);M(334,106,T4),o.clear=function(){Cu(this)},o.containsKey=function(e){return Mu(this,e)},o.containsValue=function(e){return jd(this,e)},o.$c=function(){return new iD(this)},o.get=function(e){return qr(this,e)},o.put=function(e,A){return Sr(this,e,A)},o.remove=function(e){return BL(this,e)},o.size=function(){return dD(this)},o.b=0;var Pft=H(334);M(445,43,H2),o.Ub=function(){return new M8(this)},o.mb=function(e){var A;return e===this?!0:!Zt(e,85)||(A=e,A.size()!=this.size())?!1:AQ(this,A)},o.ob=function(){return gF(this)},o.removeAll=function(e){var A,n,P,r;if(U1(e),r=this.size(),r<e.size())for(A=this.Tb();A.ad();)n=A.bd(),e.contains(n)&&A.cd();else for(P=e.Tb();P.ad();)n=P.bd(),this.remove(n);return r!=this.size()};var rft=H(445);M(145,445,H2,iD),o.clear=function(){Cu(this.a)},o.contains=function(e){return mB(this,e)},o.Tb=function(){return new hF(this.a)},o.remove=function(e){var A;return mB(this,e)?(A=e.dd(),BL(this.a,A),!0):!1},o.size=function(){return dD(this.a)};var ift=H(145);M(335,1,{},hF),o._c=function(e){Kn(this,e)},o.bd=function(){var e;return Bd(this.f.b,this.d),kD(this.b),this.c=this.a,e=this.a.bd(),this.b=ih(this),e},o.ad=function(){return this.b},o.cd=function(){ku(!!this.c),Bd(this.f.b,this.d),this.c.cd(),this.c=null,this.b=ih(this),this.d=this.f.b},o.b=!1,o.d=0;var fft=H(335);M(226,1,{},Wl),o._c=function(e){Kn(this,e)},o.ad=function(){return p9(this)},o.bd=function(){return WB(this)},o.cd=function(){QL(this)},o.a=0,o.b=-1;var Dft=H(226);M(227,226,{},TT),o.cd=function(){QL(this)};var uft=H(227);M(133,94,bp,xD),o.addAtIndex=function(e,A){DL(e,this.b),this.c.addAtIndex(this.a+e,A),++this.b},o.getAtIndex=function(e){return ve(e,this.b),this.c.getAtIndex(this.a+e)},o.removeAtIndex=function(e){var A;return ve(e,this.b),A=this.c.removeAtIndex(this.a+e),--this.b,A},o.setAtIndex=function(e,A){return ve(e,this.b),this.c.setAtIndex(this.a+e,A)},o.size=function(){return this.b},o.a=0,o.b=0;var Qft=H(133);M(228,445,H2,Xl),o.clear=function(){this.a.clear()},o.contains=function(e){return this.a.containsKey(e)},o.Tb=function(){var e;return e=this.a.$c().Tb(),new Zl(e)},o.remove=function(e){return this.a.containsKey(e)?(this.a.remove(e),!0):!1},o.size=function(){return this.a.size()};var Uft=H(228);M(229,1,{},Zl),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a.ad()},o.bd=function(){var e;return e=this.a.bd(),e.dd()},o.cd=function(){this.a.cd()};var oft=H(229);M(135,43,hy,fD),o.clear=function(){this.a.clear()},o.contains=function(e){return this.a.containsValue(e)},o.Tb=function(){var e;return e=this.a.$c().Tb(),new DD(e)},o.size=function(){return this.a.size()};var Lft=H(135);M(136,1,{},DD),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a.ad()},o.bd=function(){var e;return e=this.a.bd(),e.ed()},o.cd=function(){this.a.cd()};var sft=H(136),yft=tx();M(161,1,{161:1,84:1}),o.mb=function(e){var A;return Zt(e,84)?(A=e,K8(this.c,A.dd())&&K8(this.d,A.ed())):!1},o.dd=function(){return this.c},o.ed=function(){return this.d},o.ob=function(){return Fo(this.c)^Fo(this.d)},o.fd=function(e){return hd(this,e)},o.pb=function(){return this.c+\"=\"+this.d};var lft=H(161);M(146,161,{161:1,146:1,84:1},ho);var Tft=H(146);M(449,1,{84:1}),o.mb=function(e){var A;return Zt(e,84)?(A=e,K8(this.b.value[0],A.dd())&&K8(pL(this),A.ed())):!1},o.ob=function(){return Fo(this.b.value[0])^Fo(pL(this))},o.pb=function(){return this.b.value[0]+\"=\"+pL(this)};var hft=H(449);M(233,106,{106:1,233:1,109:1,460:1,458:1}),o.Zc=function(e){return ov(this,e)},o.containsKey=function(e){return So(this,e)},o.$c=function(){return new _l(this)},o.get=function(e){return le(this,e)},o.keySet=function(){return new w9(this)};var cft=H(233);M(234,445,H2,_l),o.contains=function(e){return Zt(e,84)&&ov(this.b,e)},o.Tb=function(){return new N8(this.b)},o.remove=function(e){var A;return Zt(e,84)?(A=e,vv(this.b,A)):!1},o.size=function(){return this.b.c};var wft=H(234);M(90,445,H2,w9),o.Ub=function(){return new l3(this)},o.clear=function(){bi(this.a)},o.contains=function(e){return So(this.a,e)},o.Tb=function(){var e;return e=new N8(new x8(this.a).b),new g9(e)},o.remove=function(e){return So(this.a,e)?(BT(this.a,e),!0):!1},o.size=function(){return this.a.c};var gft=H(90);M(91,1,{},g9),o._c=function(e){Kn(this,e)},o.ad=function(){return p9(this.a.a)},o.bd=function(){var e;return e=Br(this.a),e.dd()},o.cd=function(){dd(this.a)};var dft=H(91);M(452,43,hy),o.add=function(e){return aN(ls(this,e)),!0},o.addAll=function(e){return U1(e),Io(e!=this,\"Can't add a queue to itself\"),UF(this,e)},o.clear=function(){for(;XT(this)!=null;);};var Bft=H(452);M(398,43,{5:1,36:1,43:1,38:1},Ng),o.add=function(e){return uL(this,e),!0},o.clear=function(){this.b!=this.c&&(this.a=h(uP,A0,1,8,5,1),this.b=0,this.c=0)},o.contains=function(e){return bF(new ao(this),e)},o.isEmpty=function(){return v7(this)},o.Tb=function(){return new ao(this)},o.remove=function(e){return UN(new ao(this),e)},o.size=function(){return this.c-this.b&this.a.length-1},o.Ub=function(){return new M8(this)},o.Wb=function(e){var A;return A=this.c-this.b&this.a.length-1,e.length<A&&(e=uu(new Array(A),e)),tF(this,e,A),e.length>A&&(e[A]=null),e},o.b=0,o.c=0;var vft=H(398);M(198,1,{},ao),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a!=this.b},o.bd=function(){return nm(this)},o.cd=function(){eF(this)},o.a=0,o.b=0,o.c=-1;var Fft=H(198);M(21,1,{},Wt),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a<this.c.a.length},o.bd=function(){return t1(this)},o.cd=function(){ku(this.b!=-1),LA(this.c,this.a=this.b),this.b=-1},o.a=0,o.b=-1;var mft=H(21);M(269,w.Function,{},vi),o.gd=function(e,A){return $8(e,A)},M(466,w.Function,{},Nl),o.hd=function(e,A){return G(e,A)<0?-1:G(e,A)>0?1:0},M(179,94,{4:1,36:1,43:1,94:1,38:1,83:1,126:1},Po),o.contains=function(e){return wF(this,e)!=-1},o.getAtIndex=function(e){return ve(e,this.a.length),this.a[e]},o.setAtIndex=function(e,A){var n;return n=(ve(e,this.a.length),this.a[e]),this.a[e]=A,n},o.size=function(){return this.a.length},o.toArray=function(){return Ym(this,h(uP,A0,1,this.a.length,5,1))},o.Wb=function(e){return Ym(this,e)};var kft=H(179);M(47,w.Function,{},u0),o.gd=function(e,A){return e-A},M(181,1,{181:1},Zg),o.mb=function(e){var A,n,P;if(this===e)return!0;if(!Zt(e,181)||(P=e,n=yL(this.a),n!=yL(P.a)))return!1;for(A=0;A<=n;A++)if((this.a[A]|0)!=(P.a[A]|0))return!1;return!0},o.ob=function(){var e,A,n,P;for(n=yL(this.a),e=-2128831035^n,A=0;A<=n;A++)P=this.a[A]|0,e=e*tl&-1^P&255,e=e*tl&-1^P>>>8&255,e=e*tl&-1^P>>>16&255,e=e*tl&-1^P>>>24;return e},o.pb=function(){var e,A;if(OO(this)==0)return\"{}\";for(A=new Fn(\"{\"),e=gk(this,0),A.a+=e;(e=gk(this,e+1))!=-1;)A.a+=\", \",A.a+=e;return A.a+=\"}\",A.a};var bft=H(181);M(186,1,{36:1,38:1},_U),o.Ub=function(){return new M8(this)},o.Vb=function(){return new o3(this.Ub())},o.add=function(e){throw At(new dA)},o.addAll=function(e){throw At(new dA)},o.clear=function(){throw At(new dA)},o.contains=function(e){return this.b.contains(e)},o.containsAll=function(e){return this.b.containsAll(e)},o.isEmpty=function(){return this.b.isEmpty()},o.Tb=function(){return new Gw(this.b.Tb())},o.remove=function(e){throw At(new dA)},o.removeAll=function(e){throw At(new dA)},o.retainAll=function(e){throw At(new dA)},o.size=function(){return this.b.size()},o.toArray=function(){return this.b.toArray()},o.pb=function(){return $D(this.b)};var Rft=H(186);M(342,1,{},Gw),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a.ad()},o.bd=function(){return this.a.bd()},o.cd=function(){Kq()};var jft=H(342);M(187,186,{36:1,38:1,83:1},Co),o.Ub=function(){return new M8(this)},o.addAtIndex=function(e,A){throw At(new dA)},o.addAllAtIndex=function(e,A){throw At(new dA)},o.mb=function(e){return VP(this.a,e)},o.getAtIndex=function(e){return this.a.getAtIndex(e)},o.ob=function(){return a8(this.a)},o.indexOf=function(e){return this.a.indexOf(e)},o.isEmpty=function(){return this.a.isEmpty()},o.lastIndexOf=function(e){return this.a.lastIndexOf(e)},o.removeAtIndex=function(e){throw At(new dA)},o.setAtIndex=function(e,A){throw At(new dA)},o.subList=function(e,A){return new Co(this.a.subList(e,A))};var pft=H(187);M(339,1,{109:1},zw),o.getOrDefault=function(e,A){var n;return n=this.c.get(e),n==null&&!this.c.containsKey(e)?A:n},o.putIfAbsent=function(e,A){var n;return n=this.c.get(e),n??B3()},o.replace=function(e,A){return this.c.containsKey(e)?B3():null},o.clear=function(){throw At(new dA)},o.containsKey=function(e){return this.c.containsKey(e)},o.containsValue=function(e){return this.c.containsValue(e)},o.$c=function(){return!this.a&&(this.a=new b7(this.c.$c())),this.a},o.mb=function(e){return VP(this.c,e)},o.get=function(e){return this.c.get(e)},o.ob=function(){return a8(this.c)},o.isEmpty=function(){return this.c.isEmpty()},o.keySet=function(){return!this.b&&(this.b=new io(this.c.keySet())),this.b},o.put=function(e,A){return B3()},o.putAll=function(e){throw At(new dA)},o.remove=function(e){throw At(new dA)},o.size=function(){return this.c.size()},o.pb=function(){return $D(this.c)},o.values=function(){return!this.d&&(this.d=new _U(this.c.values())),this.d};var Cft=H(339);M(188,186,BV,io),o.Ub=function(){return new M8(this)},o.mb=function(e){return VP(this.b,e)},o.ob=function(){return a8(this.b)};var Mft=H(188);M(340,188,BV,b7),o.contains=function(e){return this.b.contains(e)},o.containsAll=function(e){return this.b.containsAll(e)},o.Tb=function(){var e;return e=this.b.Tb(),new Jw(e)},o.toArray=function(){var e;return e=this.b.toArray(),AN(e,e.length),e};var Hft=H(340);M(343,1,{},Jw),o._c=function(e){Kn(this,e)},o.bd=function(){return new $l(this.a.bd())},o.ad=function(){return this.a.ad()},o.cd=function(){throw At(new dA)};var Vft=H(343);M(230,1,{84:1},$l),o.mb=function(e){return this.a.mb(e)},o.dd=function(){return this.a.dd()},o.ed=function(){return this.a.ed()},o.ob=function(){return this.a.ob()},o.fd=function(e){throw At(new dA)},o.pb=function(){return $D(this.a)};var Eft=H(230);M(341,187,{36:1,38:1,83:1,126:1},k7);var Sft=H(341);M(263,1,Rf,ew),o.Rb=function(e,A){return $8(e.b,A.b)},o.mb=function(e){return this===e};var qft=H(263),vl;M(373,1,Rf,Aw),o.Rb=function(e,A){return U1(e),Qm(e,(U1(A),A))},o.mb=function(e){return this===e};var Ift=H(373);M(258,33,yn,r3);var xft=H(258);M(65,334,{4:1,5:1,106:1,109:1},LP);var Nft=H(65);M(122,445,{4:1,5:1,36:1,43:1,38:1,122:1,85:1},QD),o.add=function(e){return aP(this,e)},o.clear=function(){Cu(this.a)},o.contains=function(e){return Mu(this.a,e)},o.isEmpty=function(){return dD(this.a)==0},o.Tb=function(){var e;return e=new Xl(this.a).a.$c().Tb(),new Zl(e)},o.remove=function(e){return BL(this.a,e)!=null},o.size=function(){return dD(this.a)};var Oft=H(122);M(376,1,{36:1},Ud),o.Tb=function(){return new OT(this)},o.c=0;var Gft=H(376);M(245,1,{},OT),o._c=function(e){Kn(this,e)},o.bd=function(){return this.d=this.a[this.c++],this.d},o.ad=function(){var e;return this.c<this.a.length?!0:(e=this.b.next(),e.done?!1:(this.a=e.value[1],this.c=0,!0))},o.cd=function(){i5(this.e,this.d.dd()),this.c!=0&&--this.c},o.c=0,o.d=null;var Jft=H(245);M(374,1,{36:1},od),o.Tb=function(){return new ST(this)},o.c=0,o.d=0;var zft=H(374);M(244,1,{},ST),o._c=function(e){Kn(this,e)},o.bd=function(){return this.c=this.a,this.a=this.b.next(),new gd(this.d,this.c,this.d.d)},o.ad=function(){return!this.a.done},o.cd=function(){pF(this.d,this.c.value[0])};var Yft=H(244);M(375,449,{84:1},gd),o.dd=function(){return this.b.value[0]},o.ed=function(){return pL(this)},o.fd=function(e){return sm(this.a,this.b.value[0],e)},o.c=0;var Kft=H(375);M(310,1,{},iw),o.jd=function(e){return fd(this,e)},o.kd=function(e){return e.dd()};var Xft=H(310);M(311,1,{},fw),o.jd=function(e){return Dd(this,e)},o.kd=function(e){return e.ed()};var Zft=H(311);M(405,33,yn,r7);var Wft=H(405);M(147,452,hy,W7,R7),o.addAll=function(e){var A,n,P;for(U1(e),Wg(e!=this),P=this.b.a.length,n=e.Tb();n.ad();)A=n.bd(),mt(this.b,U1(A));return P!=this.b.a.length?(PQ(this,0),!0):!1},o.clear=function(){mi(this.b.a,0)},o.contains=function(e){return(e==null?-1:x9(this.b,e,0))!=-1},o.Tb=function(){return new Yw(this)},o.remove=function(e){var A;return A=e==null?-1:x9(this.b,e,0),A<0?!1:($T(this,A),!0)},o.removeAll=function(e){return ts(this.b,e)?(PQ(this,0),!0):!1},o.retainAll=function(e){return Am(this.b,e)?(PQ(this,0),!0):!1},o.size=function(){return this.b.a.length},o.Ub=function(){return new M8(this)},o.toArray=function(){return tT(this.b.a)},o.Wb=function(e){return ff(this.b,e)};var _ft=H(147);M(395,1,{},Yw),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a<this.c.b.a.length},o.bd=function(){return kD(this.a<this.c.b.a.length),this.b=this.a++,N(this.c.b,this.b)},o.cd=function(){ku(this.b!=-1),$T(this.c,this.a=this.b),this.b=-1},o.a=0,o.b=-1;var $ft=H(395);M(59,1,{},aD,zr),o.a=0,o.b=0;var Uc,oc,TPt=0,aft=H(59);M(60,1,{},M8);var tDt=H(60);M(189,60,{},l3);var eDt=H(189);M(152,1,{},Sg,dL),o.pb=function(){return this.a?this.e.length==0?this.a.a:this.a.a+(\"\"+this.e):this.c};var ADt=H(152);M(44,233,{4:1,5:1,106:1,233:1,109:1,460:1,458:1,44:1},lP,Ji),o.clear=function(){bi(this)},o.$c=function(){return new x8(this)},o.put=function(e,A){return ze(this,e,A)},o.remove=function(e){return BT(this,e)},o.size=function(){return this.c},o.c=0;var HE=H(44);M(71,1,{},N8),o._c=function(e){Kn(this,e)},o.bd=function(){return Br(this)},o.ad=function(){return p9(this.a)},o.cd=function(){dd(this)};var nDt=H(71);M(77,234,H2,x8),o.clear=function(){bi(this.a)};var PDt=H(77);M(123,146,{161:1,146:1,84:1,123:1},RL),o.b=!1;var hPt=H(123);M(191,1,{},XU),o.pb=function(){return\"State: mv=\"+this.c+\" value=\"+this.d+\" done=\"+this.a+\" found=\"+this.b},o.a=!1,o.b=!1,o.c=!1;var rDt=H(191);M(80,55,Al,lu),o.ld=function(){return!1},o.md=function(){return!1};var Lc,VE,EE,SE,cPt=E9(80,SN);M(354,80,Al,Cg),o.md=function(){return!0};var iDt=E9(354,null);M(355,80,Al,qg),o.ld=function(){return!0},o.md=function(){return!0};var fDt=E9(355,null);M(356,80,Al,Mg),o.ld=function(){return!0};var DDt=E9(356,null);M(134,445,{4:1,5:1,36:1,43:1,38:1,85:1},D3,uo),o.Ub=function(){return new l3(this)},o.add=function(e){return zi(this,e)},o.clear=function(){bi(this.a)},o.contains=function(e){return lo(this,e)},o.Tb=function(){var e;return e=new N8(new x8(new w9(this.a).a).b),new g9(e)},o.remove=function(e){return BT(this.a,e)!=null},o.size=function(){return this.a.c};var uDt=H(134);M(367,94,{4:1,5:1,36:1,43:1,94:1,38:1,83:1,126:1},A7),o.addAtIndex=function(e,A){pu(e,this.a.a.length+1),t8(this.a,e,A)},o.add=function(e){return a7(this,e)},o.addAllAtIndex=function(e,A){return pu(e,this.a.a.length+1),im(this.a,e,A)},o.addAll=function(e){return jP(this.a,e)},o.clear=function(){mi(this.a.a,0)},o.contains=function(e){return x9(this.a,e,0)!=-1},o.containsAll=function(e){return AQ(this.a,e)},o.getAtIndex=function(e){return pu(e,this.a.a.length),N(this.a,e)},o.indexOf=function(e){return x9(this.a,e,0)},o.isEmpty=function(){return this.a.a.length==0},o.Tb=function(){return new Wt(this.a)},o.lastIndexOf=function(e){return id(this.a,e)},o.removeAtIndex=function(e){return pu(e,this.a.a.length),LA(this.a,e)},o.removeAll=function(e){return ts(this.a,e)},o.Xb=function(e,A){JB(this.a,e,A)},o.setAtIndex=function(e,A){return pu(e,this.a.a.length),q9(this.a,e,A)},o.size=function(){return this.a.a.length},o.subList=function(e,A){return new xD(this.a,e,A)},o.toArray=function(){return tT(this.a.a)},o.Wb=function(e){return tg(this,e)},o.pb=function(){return zk(this.a)};var QDt=H(367);M(350,106,T4),o.containsKey=function(e){return kT(this,e)},o.containsValue=function(e){if(e==null)throw At(new d9);return jd(this.e,e)},o.$c=function(){return new iD(this.e)},o.get=function(e){return YB(this,e)},o.put=function(e,A){return Hv(this,e,A)},o.putIfAbsent=function(e,A){return kT(this,e)?this.get(e):this.put(e,A)},o.remove=function(e){if(e==null)throw At(new d9);return BL(this.e,e)},o.replace=function(e,A){if(A==null)throw At(new d9);return kT(this,e)?this.put(e,A):null};var UDt=H(350);M(264,1,{},Dw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return e};var oDt=H(264);M(61,1,{},TP),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return O3(this.a,this.b,e)};var LDt=H(61);M(95,55,{4:1,32:1,55:1,95:1},To);var qE,qU,sc,Fl=E9(95,dN);M(166,1,{},Su);var sDt=H(166);M(314,1,{},uw),o.nd=function(e,A){e.add(A)};var yDt=H(314);M(316,1,{},Qw),o.pc=function(){return new f1};var lDt=H(316);M(317,1,{},Uw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Wo(e)};var TDt=H(317);M(318,1,{},ow),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Zt(e,126)?new k7(e):new Co(e)};var hDt=H(318);M(319,1,{},Lw),o.pc=function(){return new LP};var cDt=H(319);M(320,1,{},sw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return new zw(e)};var wDt=H(320);M(224,1,{},Ol),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Wo(e)};var gDt=H(224);M(323,1,{},yw),o.pc=function(){return new QD};var dDt=H(323);M(324,1,{},lw),o.nd=function(e,A){aP(e,A)};var BDt=H(324);M(327,1,{},Tw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Wo(e)};var vDt=H(327);M(328,1,{},hw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return new io(e)};var FDt=H(328);M(313,1,{},fg),o.nd=function(e,A){vI(this.a,this.b,e,A)};var mDt=H(313);M(315,1,{},cw);var kDt=H(315);M(321,1,{},Rd),o.nd=function(e,A){pY(this.a,this.c,this.b,e,A)},o.b=!1;var bDt=H(321);M(322,1,{},ww);var RDt=H(322);M(325,1,{},gw);var jDt=H(325);M(326,1,{},dw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return e};var pDt=H(326);M(345,1,{}),o.b=!1;var CDt=H(345);M(190,345,{},o3);var MDt=H(190);M(346,1,{},Bw);var HDt=H(346);M(347,1,{},Kw);var VDt=H(347);M(348,1,{},Dg);var EDt=H(348);M(222,114,ay);var SDt=H(222);M(223,222,ay,T3);var qDt=H(223);M(312,222,ay,mg);var IDt=H(312);M(337,446,{},Og),o.a=0,o.b=0;var IE=null,xDt=H(337);M(211,63,{63:1,32:1,211:1},Tj),o.b=0;var NDt=H(211);M(249,1,{249:1},nd);var ODt=H(249);M(209,1,{},pg),o.a=0,o.d=0,o.i=!1,o.j=!1,o.o=0,o.p=0,o.v=0,o.w=0,o.C=!1;var GDt=H(209);M(271,1,{},mw),o.Rb=function(e,A){return q3(A.o.length,e.o.length)},o.mb=function(e){return this===e};var JDt=H(271);M(272,1,{},D7);var zDt=H(272);M(177,1,{177:1},Nv);var wPt=H(177);M(351,350,{4:1,106:1,109:1},Pd),o.get=function(e){return ZB(this,e)},o.put=function(e,A){return $B(this,e,A)},o.clear=function(){Cu(new iD(this.e).a)},o.a=0,o.b=0,o.c=0,o.d=0;var IU,YDt=H(351);M(232,1,{32:1,232:1},Qg),o.Sb=function(e){return $x(this,e)},o.b=0;var KDt=H(232);M(270,1,{},Hd),o.b=!1,o.c=0,o.d=0;var XDt=H(270);M(176,1,{176:1},gj),o.a=0,o.b=!1,o.i=0,o.j=0,o.n=0;var xE,NE,OE,gPt=H(176);M(165,1,{32:1,165:1},uB),o.Sb=function(e){return YF(this,e)},o.mb=function(e){return YF(this,e)==0},o.pb=function(){var e,A,n,P,r,i,f,D;for(D=new V0,n=this.i,r=0,f=n.length;r<f;++r)e=n[r],D.a+=e,D.a+=\",\";for(this.i.length!=0&&un(D,D.a.length-1),D.a+=\";\",A=this.d,P=0,i=A.length;P<i;++P)e=A[P],D.a+=e,D.a+=\",\";return this.d.length!=0&&un(D,D.a.length-1),D.a},o.b=0,o.e=0,o.g=!1;var GE=H(165);M(252,1,{252:1},fm),o.a=0;var ZDt=H(252);M(381,1,{},tj),o.c=0;var yc,WDt=H(381);M(235,1,{}),o.g=0,o.n=0,o.s=0,o.t=0,o.u=0,o.C=0,o.G=!1;var _Dt=H(235);M(352,1,{},Fw);var $Dt=H(352);M(117,235,{117:1},VL),o.od=function(e){return xQ(this)},o.b=!1;var aDt=H(117);M(210,117,{117:1},fT),o.od=function(e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(!e)return this.a?OD(this,h(F,k,6,this.w.length,15,1),h(F,k,6,this.v.length,15,1)):xQ(this);if(e.b==0)return xQ(this);for(P=pK(this,e),n=e.i,A=e.d,L=h(rt,ft,6,P.length,16,1),i=0;i<64;i++){for((L[0]||this.w[0].d.length==1)&&(P[0]=0),U=1,D=1;D<this.w.length;D++)L[U]||this.w[D].d.length==1?P[U]=P[U-1]:P[U]+=P[U-1],++U;for(T=this.v,c=0,g=T.length;c<g;++c)l=T[c],L[U]||l.b.length==1?P[U]=P[U-1]:P[U]+=P[U-1],++U;if(P[P.length-1]==0)return xQ(this);for(y=jn(this.c)*P[P.length-1],f=0;f<P.length;f++)if(y<P[f]){if(m=bn(n,n.length),r=bn(A,A.length),f<this.w.length){for(s=1;s<this.w[f].d.length;s++)if(++m[f],m[f]==this.w[f].d.length&&(m[f]=0),v=OD(this,m,r),Q=a9(this.F,v),(Q<0?-1:Q)==-1)return v}else for(f-=this.w.length,s=1;s<this.v[f].b.length;s++)if(++r[f],r[f]==this.v[f].b.length&&(r[f]=0),v=OD(this,m,r),Q=a9(this.F,v),(Q<0?-1:Q)==-1)return v;L[f]=!0;break}}return xQ(this)},o.a=!1;var t2t=H(210);M(273,235,{},Bb),o.od=function(e){return this.a==null||(this.b+1==this.a.length&&V$(this),this.a==null)?null:(++this.b,this.a[this.b])},o.b=0;var e2t=H(273);M(357,1,{},vw),o.Rb=function(e,A){return $8(A.e,e.e)},o.mb=function(e){return this===e};var A2t=H(357);M(253,1,{32:1,253:1},ug),o.Sb=function(e){return this.a<e.a?-1:this.a>e.a?1:0},o.a=0;var n2t=H(253);M(50,1,V2),o.g=!1;var ml,P2t=H(50);M(243,50,V2,xT),o.pd=function(e,A){var n,P,r,i,f;if(f=IQ(e,this.f)<0?1:0,A!=null)for(P=this.f,r=0,i=P.length;r<i;++r)n=P[r],A[n]+=f/4;return f},o.qd=function(e,A){var n,P,r,i,f,D,Q;if(D=IQ(e,this.f),D==0||this.b==D>0)return!1;for(Q=z8(J0(e,this.f[2]),J0(e,this.f[1])),ti(Q),f=w.Math.abs(D)<bA?-2*D:2*(Q1-D),this.a&&(f=-f),P=this.c,r=0,i=P.length;r<i;++r)n=P[r],wf(e,n,J0(e,this.f[1]),Q,f);return!0},o.rd=function(){return 5},o.pb=function(){var e;return e=new Fn(\"binap rule (\"+(this.b?\"positive\":\"negative\")+\" torsion):\"),t2(this,e),e.a},o.a=!1,o.b=!1;var r2t=H(243);M(154,1,{},NQ),o.b=0,o.e=!1,o.n=0;var JE,i2t=H(154);M(353,1,{},kw),o.Rb=function(e,A){return CT(),$8(e.e,A.e)},o.mb=function(e){return this===e};var f2t=H(353);M(81,50,{50:1,81:1},_7,TF,$L,th),o.pd=function(e,A){var n;return n=LW(this,e),A!=null&&n>0&&(A[this.f[0]]+=n/2,A[this.f[1]]+=n/2),n},o.qd=function(e,A){var n,P,r,i,f,D,Q;if(r=v9(e,this.f[1])-v9(e,this.f[0]),i=F9(e,this.f[1])-F9(e,this.f[0]),f=m9(e,this.f[1])-m9(e,this.f[0]),n=w.Math.sqrt(r*r+i*i+f*f),P=0,this.a.length==2?n<this.a[0]?P=(n-this.a[0])/n:n>this.a[1]&&(P=(n-this.a[1])/n):n<this.a[0]?P=(n-this.a[0])/n:n>this.a[0]&&(P=(n-this.a[0])/n),w.Math.abs(P)<.001)return!1;if(D=A*P,Q=e.o,this.c==10){if(Mt(Q,this.f[0])==1&&Mt(Q,this.f[1])!=1)return I8(J0(e,this.f[0]),r*D,i*D,f*D),!0;if(Mt(Q,this.f[0])!=1&&Mt(Q,this.f[1])==1)return I8(J0(e,this.f[1]),-r*D,-i*D,-f*D),!0}return D/=2,s5(e,this.f[0],this.b,r*D,i*D,f*D),s5(e,this.f[1],this.b,-r*D,-i*D,-f*D),!0},o.rd=function(){return 0},o.pb=function(){var e,A;if(A=new Fn(\"distance rule:\"),t2(this,A),this.a.length==1?J(A,(J9(),FV+tr(this.a[0],5))):J(A,(J9(),\" min:\"+tr(this.a[0],5)+\" max:\"+tr(this.a[1],5))),this.b!=null)for(J(A,\" not:\"+this.b[0]),e=1;e<this.b.length;e++)J(A,\",\"+this.b[e]);return A.a},o.c=0;var zE=H(81);M(242,50,V2,zh),o.pd=function(e,A){var n,P,r,i,f,D,Q;for(n=new Nn,f=new Nn,P=R1(yt,[h0,wt],[15,6],15,[this.f.length,3],2),V5(e,this.f,n,f,P),Q=0,i=0;i<this.f.length;i++)r=-(f.a*P[i][0]+f.b*P[i][1]+f.c*P[i][2]),D=20*r*r,A!=null&&(A[this.f[i]]+=D),Q+=D;return Q},o.qd=function(e,A){var n,P,r,i,f;for(n=new Nn,f=new Nn,P=R1(yt,[h0,wt],[15,6],15,[this.a.length,3],2),V5(e,this.a,n,f,P),i=0;i<this.f.length;i++)r=-(f.a*(v9(e,this.f[i])-n.a)+f.b*(F9(e,this.f[i])-n.b)+f.c*(m9(e,this.f[i])-n.c)),s5(e,this.f[i],this.f,.5*r*A*f.a,.5*r*A*f.b,.5*r*A*f.c);return!0},o.rd=function(){return 1},o.pb=function(){var e;return e=new Fn(\"plane rule:\"),t2(this,e),e.a};var D2t=H(242);M(96,63,{63:1,32:1,96:1},mu,rd),o.b=!1,o.c=0,o.e=0;var YE=H(96);M(371,50,V2,C7),o.pd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;for(i=h(yt,wt,6,3,15,1),L=0;L<this.f.length;L++)i[0]+=v9(e,this.f[L]),i[1]+=F9(e,this.f[L]),i[2]+=m9(e,this.f[L]);for(g=0;g<3;g++)i[g]/=this.f.length;for(n=R1(yt,[h0,wt],[15,6],15,[this.f.length,3],2),s=0;s<this.f.length;s++)n[s][0]=v9(e,this.f[s])-i[0],n[s][1]=F9(e,this.f[s])-i[1],n[s][2]=m9(e,this.f[s])-i[2];for(j=R1(yt,[h0,wt],[15,6],15,[3,3],2),y=0;y<this.f.length;y++)for(c=0;c<3;c++)for(m=0;m<3;m++)j[c][m]+=n[y][c]*n[y][m];for(S=new ry(j),P=S.e,R=0,l=1;l<3;l++)P[l]>P[R]&&(R=l);for(r=S.a,b=h(yt,wt,6,3,15,1),T=0;T<3;T++)b[T]=r[T][R];for(p=0,U=0;U<this.f.length;U++)v=b[0]*n[U][0]+b[1]*n[U][1]+b[2]*n[U][2],f=v*b[0]-n[U][0],D=v*b[1]-n[U][1],Q=v*b[2]-n[U][2],C=10*f*f+D*D+Q*Q,A!=null&&(A[this.f[U]]+=C),p+=C;return p},o.qd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S;for(i=h(yt,wt,6,3,15,1),D=0;D<this.f.length;D++)i[0]+=v9(e,this.f[D]),i[1]+=F9(e,this.f[D]),i[2]+=m9(e,this.f[D]);for(m=0;m<3;m++)i[m]/=this.f.length;for(n=R1(yt,[h0,wt],[15,6],15,[this.f.length,3],2),Q=0;Q<this.f.length;Q++)n[Q][0]=v9(e,this.f[Q])-i[0],n[Q][1]=F9(e,this.f[Q])-i[1],n[Q][2]=m9(e,this.f[Q])-i[2];for(C=R1(yt,[h0,wt],[15,6],15,[3,3],2),U=0;U<this.f.length;U++)for(g=0;g<3;g++)for(v=0;v<3;v++)C[g][v]+=n[U][g]*n[U][v];for(S=new ry(C),P=S.e,b=0,L=1;L<3;L++)P[L]>P[b]&&(b=L);for(r=S.a,j=h(yt,wt,6,3,15,1),s=0;s<3;s++)j[s]=r[s][b];for(R=h(yt,wt,6,this.f.length,15,1),y=0;y<this.f.length;y++)R[y]=j[0]*n[y][0]+j[1]*n[y][1]+j[2]*n[y][2];if(A==1){for(T=!1,c=R[0]<R[1],l=2;l<this.f.length;l++)if(c!=R[l-1]<R[l]){T=!0;break}if(T)return!1}for(f=0;f<this.f.length;f++)I8(J0(e,this.f[f]),A*(R[f]*j[0]-n[f][0]),A*(R[f]*j[1]-n[f][1]),A*(R[f]*j[2]-n[f][2]));return!0},o.rd=function(){return 2},o.pb=function(){var e;return e=new Fn(\"line rule:\"),t2(this,e),e.a};var u2t=H(371);M(372,50,V2,Wd),o.pd=function(e,A){var n,P,r,i,f;if(i=0,P=uR(this,e),f=0,this.f[3]==-1?A2(e,P,this.f[4],this.f[2])||++f:(A2(e,P,this.f[4],this.f[2])||++f,A2(e,P,this.f[4],this.f[3])&&++f),f!=0)for(n=0;n<this.f.length;n++)this.f[n]!=-1&&(r=.68*f,A!=null&&(A[this.f[n]]+=r),i+=r);return i},o.qd=function(e,A){var n,P,r,i,f,D,Q;if(D=uR(this,e),f=this.f[3]==-1&&!A2(e,D,this.f[4],this.f[2])||this.f[3]!=-1&&!A2(e,D,this.f[4],this.f[2])&&A2(e,D,this.f[4],this.f[3]),!f)return!1;for(Q=Wz(this,e),P=this.a,r=0,i=P.length;r<i;++r)n=P[r],wf(e,n,J0(e,this.f[4]),Q,Q1);return!0},o.rd=function(){return 4},o.pb=function(){var e,A,n,P,r;for(r=new Fn(\"stereo rule:\"),t2(this,r),r.a+=\" rotatable:\",A=this.a,n=0,P=A.length;n<P;++n)e=A[n],r.a+=e+\" \";return r.a};var Q2t=H(372);M(195,50,V2,xL),o.pd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(n=lL(e,this.f),isNaN(n))return 0;if(n<0&&(n+=F0),l=180*n/Q1,f=Sk(this,n),f==-1)for(x1(),L=this.e,s=0,y=L.length;s<y;++s);if(Q=Wk(this,n,f),Q==0)return 0;for(P=w.Math.abs(l-this.e[f]),P>180&&(P=360-P),P>60&&(P=60),D=e.o,U=3*Q*P*P/3600,T=0,i=0;i<Mt(D,this.f[1]);i++)_(D,this.f[1],i)!=this.f[2]&&(A!=null&&(A[_(D,this.f[1],i)]+=U),T+=U);for(r=0;r<Mt(D,this.f[2]);r++)_(D,this.f[2],r)!=this.f[1]&&(A!=null&&(A[_(D,this.f[2],r)]+=U),T+=U);return T},o.qd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;if(Q=lL(e,this.f),isNaN(Q)||(Q<0&&(Q+=F0),y=Sk(this,Q),R=Wk(this,Q,y),R==0)||(f=Q1*this.e[y]/180-Q,w.Math.abs(f)>Q1&&(f=f<0?F0+f:f-F0),w.Math.abs(f)<.0031415926535897933))return!1;if(b=z8(J0(e,this.f[2]),J0(e,this.f[1])),ti(b),f*=A*R,g=e.o,this.a!=null)for(m=this.d==0?-f:f,P=this.a,r=0,i=P.length;r<i;++r)n=P[r],wf(e,n,J0(e,this.f[1]),b,m);else for(D=D1(g,this.f[1],this.f[2]),l=D!=-1&&(g.p&&D<g.g?yP(g.p,D):0)<=5,s=1;s<=2;s++)for(U=(s==1?-2:2)*HT(g,this.f[s]),T=0;T<Mt(g,this.f[s]);T++)if(L=_(g,this.f[s],T),L!=this.f[3-s]&&(gm(e,L,this.f[s],b,f/U),!l))for(c=0;c<g.j[L];c++)v=g.i[L][c],v!=L&&g.e[v]!=1&&gm(e,v,this.f[s],b,f/(4*U));return!0},o.rd=function(){return 3},o.pb=function(){var e,A;for(A=new Fn(\"torsion rule:\"),t2(this,A),A.a+=\" torsions:\",e=0;e<this.e.length;e++)e!=0&&(A.a+=\",\"),J(A,this.e[e]+\"(\"+this.b[e]+\")\");return A.a},o.d=0;var U2t=H(195),Yt=Mr(\"S\"),q=Mr(\"B\"),F=Mr(\"I\"),rt=Mr(\"Z\"),yt=Mr(\"D\"),Ee=Mr(\"F\"),NA=Mr(\"J\"),l9=Mr(\"C\");o=s0(\"OCL.Canonizer\",Jg),o=s0(\"OCL.CanonizerUtil\",YU),o.BACKBONE=htt,o.NORMAL=ctt,o.NOSTEREO=wtt,o.NOSTEREO_TAUTOMER=gtt,o.TAUTOMER=dtt,o.getIDCode=Ez,o=s0(\"OCL.ConformerGenerator\",Yg),o.STRATEGY_ADAPTIVE_RANDOM=Btt,o.STRATEGY_LIKELY_RANDOM=vtt,o.STRATEGY_LIKELY_SYSTEMATIC=Ftt,o.STRATEGY_PURE_RANDOM=mtt,o=s0(\"OCL.DrugScoreCalculator\",X2),o.calculate=SI,o=s0(\"OCL.DruglikenessPredictor\",Lg),o.DRUGLIKENESS_UNKNOWN=ktt,o=s0(\"OCL.ForceFieldMMFF94\",bB),o.MMFF94=btt,o.MMFF94S=Rtt,o.MMFF94SPLUS=jtt,QT(),o=s0(\"OCL.GenericEditorArea\",db),o.EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED=Fnt,o.EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED=mnt,o.EDITOR_EVENT_MOLECULE_CHANGED=knt,o.EDITOR_EVENT_SELECTION_CHANGED=bnt,o.HOTSPOT_16=sE,o.HOTSPOT_32=yE,o.IMAGE_DATA_16=lE,o.IMAGE_NAME_32=TE,o.KEY_ALT=Rnt,o.KEY_BACK_SPACE=jnt,o.KEY_CTRL=pnt,o.KEY_DELETE=Cnt,o.KEY_ENTER=Mnt,o.KEY_ESCAPE=Hnt,o.KEY_EVENT_PRESSED=Vnt,o.KEY_EVENT_RELEASED=Ent,o.KEY_HELP=Snt,o.KEY_SHIFT=qnt,o.MODE_DRAWING_OBJECTS=Int,o.MODE_MARKUSH_STRUCTURE=xnt,o.MODE_MULTIPLE_FRAGMENTS=Nnt,o.MODE_REACTION=Ont,o.MOUSE_EVENT_CLICKED=Gnt,o.MOUSE_EVENT_DRAGGED=Jnt,o.MOUSE_EVENT_ENTERED=znt,o.MOUSE_EVENT_EXITED=Ynt,o.MOUSE_EVENT_MOVED=Knt,o.MOUSE_EVENT_PRESSED=Xnt,o.MOUSE_EVENT_RELEASED=Znt,o.TableLayoutFill=Wnt,o.TableLayoutPreferred=_nt,o.cChainCursor=$nt,o.cDeleteCursor=ant,o.cFistCursor=tPt,o.cHandCursor=ePt,o.cHandPlusCursor=APt,o.cInvisibleCursor=nPt,o.cLassoCursor=PPt,o.cLassoPlusCursor=rPt,o.cPointedHandCursor=iPt,o.cPointerCursor=fPt,o.cSelectRectCursor=DPt,o.cSelectRectPlusCursor=uPt,o.cTextCursor=QPt,o.cZoomCursor=UPt,o=s0(\"OCL.GenericEditorToolbar\",Rm),o=s0(\"OCL.GenericUIHelper\",gB),_A(),o=s0(\"OCL.Molecule\",AL),o.CANONIZER_ASSIGN_PARITIES_TO_TETRAHEDRAL_N=ptt,o.CANONIZER_CONSIDER_DIASTEREOTOPICITY=Ctt,o.CANONIZER_CONSIDER_ENANTIOTOPICITY=Mtt,o.CANONIZER_CONSIDER_STEREOHETEROTOPICITY=Htt,o.CANONIZER_COORDS_ARE_3D=Vtt,o.CANONIZER_CREATE_PSEUDO_STEREO_GROUPS=Ett,o.CANONIZER_CREATE_SYMMETRY_RANK=Stt,o.CANONIZER_DISTINGUISH_RACEMIC_OR_GROUPS=qtt,o.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS=Itt,o.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS_WITHOUT_RANKING=xtt,o.CANONIZER_ENCODE_ATOM_SELECTION=Ntt,o.CANONIZER_NEGLECT_ANY_STEREO_INFORMATION=Ott,o.CANONIZER_TIE_BREAK_FREE_VALENCE_ATOMS=Gtt,o.FISCHER_PROJECTION_LIMIT=Jtt,o.FISCHER_PROJECTION_RING_LIMIT=ztt,o.STEREO_ANGLE_LIMIT=Ytt,o.VALIDATION_ERRORS_STEREO=fE,o.VALIDATION_ERROR_AMBIGUOUS_CONFIGURATION=Ktt,o.VALIDATION_ERROR_ESR_CENTER_UNKNOWN=Xtt,o.VALIDATION_ERROR_OVER_UNDER_SPECIFIED=Ztt,o.cAtomCIPParityNone=Wtt,o.cAtomCIPParityProblem=_tt,o.cAtomCIPParityRorM=$tt,o.cAtomCIPParitySorP=att,o.cAtomColorBlue=t1t,o.cAtomColorDarkGreen=e1t,o.cAtomColorDarkRed=A1t,o.cAtomColorGreen=n1t,o.cAtomColorMagenta=P1t,o.cAtomColorNone=r1t,o.cAtomColorOrange=i1t,o.cAtomColorRed=f1t,o.cAtomLabel=DE,o.cAtomParity1=D1t,o.cAtomParity2=u1t,o.cAtomParityIsPseudo=Q1t,o.cAtomParityNone=U1t,o.cAtomParityUnknown=o1t,o.cAtomQFAny=L1t,o.cAtomQFAromState=s1t,o.cAtomQFAromStateBits=y1t,o.cAtomQFAromStateShift=l1t,o.cAtomQFAromatic=T1t,o.cAtomQFCharge=h1t,o.cAtomQFChargeBits=c1t,o.cAtomQFChargeShift=w1t,o.cAtomQFDepictedFeatures=g1t,o.cAtomQFENeighbourBits=d1t,o.cAtomQFENeighbourShift=B1t,o.cAtomQFENeighbours=v1t,o.cAtomQFExcludeGroup=F1t,o.cAtomQFFlatNitrogen=m1t,o.cAtomQFHeteroAromatic=k1t,o.cAtomQFHydrogen=b1t,o.cAtomQFHydrogenBits=R1t,o.cAtomQFHydrogenShift=j1t,o.cAtomQFIsNotStereo=p1t,o.cAtomQFIsStereo=C1t,o.cAtomQFMatchStereo=M1t,o.cAtomQFMoreNeighbours=H1t,o.cAtomQFNarrowing=V1t,o.cAtomQFNeighbourBits=E1t,o.cAtomQFNeighbourShift=S1t,o.cAtomQFNeighbours=q1t,o.cAtomQFNewRingSize=I1t,o.cAtomQFNewRingSizeBits=x1t,o.cAtomQFNewRingSizeShift=N1t,o.cAtomQFNoMoreNeighbours=O1t,o.cAtomQFNoOfBits=G1t,o.cAtomQFNot0ENeighbours=J1t,o.cAtomQFNot0Hydrogen=z1t,o.cAtomQFNot0Neighbours=Y1t,o.cAtomQFNot0PiElectrons=K1t,o.cAtomQFNot1ENeighbour=X1t,o.cAtomQFNot1Hydrogen=Z1t,o.cAtomQFNot1Neighbour=W1t,o.cAtomQFNot1PiElectron=_1t,o.cAtomQFNot2ENeighbours=$1t,o.cAtomQFNot2Hydrogen=a1t,o.cAtomQFNot2Neighbours=t0t,o.cAtomQFNot2PiElectrons=e0t,o.cAtomQFNot2RingBonds=A0t,o.cAtomQFNot3ENeighbours=n0t,o.cAtomQFNot3Hydrogen=P0t,o.cAtomQFNot3Neighbours=r0t,o.cAtomQFNot3RingBonds=i0t,o.cAtomQFNot4ENeighbours=f0t,o.cAtomQFNot4Neighbours=D0t,o.cAtomQFNot4RingBonds=u0t,o.cAtomQFNotAromatic=Q0t,o.cAtomQFNotChain=U0t,o.cAtomQFNotCharge0=o0t,o.cAtomQFNotChargeNeg=L0t,o.cAtomQFNotChargePos=s0t,o.cAtomQFPiElectronBits=y0t,o.cAtomQFPiElectronShift=l0t,o.cAtomQFPiElectrons=T0t,o.cAtomQFRingSize0=h0t,o.cAtomQFRingSize3=c0t,o.cAtomQFRingSize4=w0t,o.cAtomQFRingSize5=g0t,o.cAtomQFRingSize6=d0t,o.cAtomQFRingSize7=B0t,o.cAtomQFRingSizeLarge=v0t,o.cAtomQFRingState=F0t,o.cAtomQFRingStateBits=m0t,o.cAtomQFRingStateShift=k0t,o.cAtomQFRxnParityBits=b0t,o.cAtomQFRxnParityHint=R0t,o.cAtomQFRxnParityInvert=j0t,o.cAtomQFRxnParityRacemize=p0t,o.cAtomQFRxnParityRetain=C0t,o.cAtomQFRxnParityShift=M0t,o.cAtomQFSimpleFeatures=H0t,o.cAtomQFSmallRingSize=V0t,o.cAtomQFSmallRingSizeBits=E0t,o.cAtomQFSmallRingSizeShift=S0t,o.cAtomQFStereoState=q0t,o.cAtomQFStereoStateBits=I0t,o.cAtomQFStereoStateShift=x0t,o.cAtomRadicalState=N0t,o.cAtomRadicalStateD=O0t,o.cAtomRadicalStateNone=G0t,o.cAtomRadicalStateS=J0t,o.cAtomRadicalStateShift=z0t,o.cAtomRadicalStateT=Y0t,o.cAtomValence=uE,o.cBondCIPParityEorP=K0t,o.cBondCIPParityNone=X0t,o.cBondCIPParityProblem=Z0t,o.cBondCIPParityZorM=W0t,o.cBondParityEor1=_0t,o.cBondParityNone=$0t,o.cBondParityUnknown=a0t,o.cBondParityZor2=tet,o.cBondQFAllFeatures=eet,o.cBondQFAromState=Aet,o.cBondQFAromStateBits=net,o.cBondQFAromStateShift=Pet,o.cBondQFAromatic=ret,o.cBondQFBondTypes=iet,o.cBondQFBondTypesBits=fet,o.cBondQFBondTypesShift=Det,o.cBondQFBridge=uet,o.cBondQFBridgeBits=Qet,o.cBondQFBridgeMin=Uet,o.cBondQFBridgeMinBits=oet,o.cBondQFBridgeMinShift=Let,o.cBondQFBridgeShift=set,o.cBondQFBridgeSpan=yet,o.cBondQFBridgeSpanBits=Tet,o.cBondQFBridgeSpanShift=het,o.cBondQFDelocalized=cet,o.cBondQFDepictedFeatures=wet,o.cBondQFDouble=get,o.cBondQFMatchFormalOrder=det,o.cBondQFMatchStereo=Bet,o.cBondQFMetalLigand=vet,o.cBondQFNarrowing=Fet,o.cBondQFNoOfBits=met,o.cBondQFNotAromatic=ket,o.cBondQFNotRing=bet,o.cBondQFQuadruple=Ret,o.cBondQFQuintuple=jet,o.cBondQFRareBondTypes=pet,o.cBondQFRareBondTypesBits=Cet,o.cBondQFRareBondTypesShift=Met,o.cBondQFRing=Het,o.cBondQFRingSize=Vet,o.cBondQFRingSizeBits=Eet,o.cBondQFRingSizeShift=qet,o.cBondQFRingState=Iet,o.cBondQFRingStateBits=xet,o.cBondQFRingStateShift=Net,o.cBondQFSimpleFeatures=Oet,o.cBondQFSingle=Get,o.cBondQFTriple=Jet,o.cBondTypeCross=zet,o.cBondTypeDeleted=Yet,o.cBondTypeDelocalized=Ket,o.cBondTypeDouble=Xet,o.cBondTypeDown=Zet,o.cBondTypeIncreaseOrder=Wet,o.cBondTypeMaskSimple=_et,o.cBondTypeMaskStereo=$et,o.cBondTypeMetalLigand=aet,o.cBondTypeQuadruple=tAt,o.cBondTypeQuintuple=eAt,o.cBondTypeSingle=AAt,o.cBondTypeTriple=nAt,o.cBondTypeUp=PAt,o.cChiralityDiastereomers=rAt,o.cChiralityEpimers=iAt,o.cChiralityIsomerCountMask=fAt,o.cChiralityKnownEnantiomer=DAt,o.cChiralityMeso=uAt,o.cChiralityNotChiral=QAt,o.cChiralityRacemic=UAt,o.cChiralityUnknown=oAt,o.cChiralityUnknownEnantiomer=LAt,o.cCommonOxidationState=QE,o.cDefaultAVBL=sAt,o.cDefaultAllowedPseudoAtoms=yAt,o.cDefaultAtomValence=lAt,o.cESRGroupBits=TAt,o.cESRMaxGroups=hAt,o.cESRTypeAbs=cAt,o.cESRTypeAnd=wAt,o.cESRTypeOr=gAt,o.cHelperAll=dAt,o.cHelperBitCIP=BAt,o.cHelperBitIncludeNitrogenParities=vAt,o.cHelperBitNeighbours=FAt,o.cHelperBitParities=mAt,o.cHelperBitRings=kAt,o.cHelperBitRingsSimple=bAt,o.cHelperBitSymmetrySimple=RAt,o.cHelperBitSymmetryStereoHeterotopicity=jAt,o.cHelperBitsStereo=pAt,o.cHelperCIP=CAt,o.cHelperNeighbours=MAt,o.cHelperNone=HAt,o.cHelperParities=VAt,o.cHelperRings=EAt,o.cHelperRingsSimple=SAt,o.cHelperSymmetrySimple=qAt,o.cHelperSymmetryStereoHeterotopicity=IAt,o.cMaxAtomicNo=xAt,o.cMaxConnAtoms=NAt,o.cMoleculeColorDefault=OAt,o.cMoleculeColorNeutral=GAt,o.cPseudoAtomA=JAt,o.cPseudoAtomAttachmentPoint=zAt,o.cPseudoAtomPolymer=YAt,o.cPseudoAtomR=KAt,o.cPseudoAtomX=XAt,o.cPseudoAtomsAGroups=ZAt,o.cPseudoAtomsAll=WAt,o.cPseudoAtomsAminoAcids=_At,o.cPseudoAtomsHydrogenIsotops=$At,o.cPseudoAtomsRGroups=aAt,o.cRoundedMass=UE,o.fromIDCode=Cz,o.fromMolfile=Px,o.fromMolfileWithAtomMap=JJ,o.fromSmiles=Dz,o.getAngle=YI,o.getAngleDif=AI,o.getAtomicNoFromLabel=nI,o.getDefaultAverageBondLength=LI,o.isAtomicNoElectronegative=qq,o.isAtomicNoElectropositive=Iq,o.setDefaultAverageBondLength=yq,o=s0(\"OCL.MoleculeProperties\",p7),o=s0(\"OCL.Reaction\",Cd),o.create=eI,o.fromMolecules=LJ,o.fromRxn=UO,o.fromSmiles=JN,o=s0(\"OCL.ReactionEncoder\",ac),o.CATALYST_DELIMITER=tnt,o.INCLUDE_ALL=ent,o.INCLUDE_CATALYSTS=Ant,o.INCLUDE_COORDS=nnt,o.INCLUDE_DEFAULT=Pnt,o.INCLUDE_DRAWING_OBJECTS=rnt,o.INCLUDE_MAPPING=int,o.INCLUDE_RXN_CODE_ONLY=fnt,o.MOLECULE_DELIMITER=Dnt,o.OBJECT_DELIMITER=unt,o.PRODUCT_IDENTIFIER=Qnt,o.RETAIN_REACTANT_AND_PRODUCT_ORDER=Unt,o.decode=$K,o.encode=ZZ,o=s0(\"OCL.Reactor\",I7),o=s0(\"OCL.Resources\",_2),o._register=Qq,o=s0(\"OCL.RingCollection\"),o.MAX_SMALL_RING_SIZE=ont,o.MODE_SMALL_AND_LARGE_RINGS=Lnt,o.MODE_SMALL_AND_LARGE_RINGS_AND_AROMATICITY=snt,o.MODE_SMALL_RINGS_AND_AROMATICITY=ynt,o.MODE_SMALL_RINGS_ONLY=lnt,o=s0(\"OCL.SDFileParser\",ld),o=s0(\"OCL.SSSearcher\",AB),o=s0(\"OCL.SSSearcherWithIndex\",t7),o.bitCount=Uq,o.getHexStringFromIndex=Pq,o.getIndexFromHexString=rq,o.getKeyIDCode=oq,o.getSimilarityAngleCosine=mq,o.getSimilarityTanimoto=kq,o=s0(\"OCL.SmilesParser\",Ww),d3(),o=s0(\"OCL.ToxicityPredictor\",$7),o.RISK_HIGH=Tnt,o.RISK_LOW=hnt,o.RISK_NAMES=LE,o.RISK_NO=cnt,o.RISK_UNKNOWN=wnt,o.TYPE_IRRITANT=gnt,o.TYPE_MUTAGENIC=dnt,o.TYPE_REPRODUCTIVE_EFFECTIVE=Bnt,o.TYPE_TUMORIGENIC=vnt,o=s0(\"OCL.Transformer\",zg),o=s0(\"OCL.Util\",$c),o.getHoseCodesFromDiastereotopicID=$J,o=s0(\"java.io.Serializable\"),o.$isInstance=Mz,R9(),o=s0(\"java.lang.Boolean\"),o.$isInstance=nx,o=s0(\"java.lang.CharSequence\"),o.$isInstance=ZG,o=s0(\"java.lang.Cloneable\"),o.$isInstance=cG,o=s0(\"java.lang.Comparable\"),o.$isInstance=WJ,o=s0(\"java.lang.Double\"),o.$isInstance=bI,o=s0(\"java.lang.Number\"),o.$isInstance=AO,o=s0(\"java.lang.String\"),o.$isInstance=RI,o=s0(\"java.lang.Throwable\"),o.of=PJ,o=s0(\"java.util.List\"),o.copyOf=tz,o=s0(\"java.util.Map\"),o.copyOf=rN,o=s0(\"java.util.Set\"),o.copyOf=kz,o=s0(\"javaemul.internal.HashCodes\",nw),o.getIdentityHashCode=Sz,o.getNextHash=Aq,o.getObjectIdentityHashCode=vD,o=s0(\"javaemul.internal.JsUtils\"),o.toDoubleFromUnsignedInt=nq;var KE=HN,dPt=TY;SO(kS),zO(\"permProps\",[[]]),H1(\"moduleStartup\",\"moduleEvalEnd\"),dPt(Ft.__errFn,Ft.__moduleName,Ft.__moduleBase,Ft.__softPermutationId,Ft.__computePropValue),H1(\"moduleStartup\",\"end\"),Bt&&Bt.permProps&&Ft.__moduleStartupDone(Bt.permProps);let XE=w.OCL;return XE.version=\"9.20.0\",XE}var RPt=typeof window<\"u\"&&typeof window.document<\"u\",R8;R8={document:{compatMode:\"CSS1Compat\"}},R8.setTimeout=globalThis.setTimeout?globalThis.setTimeout.bind(globalThis):eD,R8.clearTimeout=globalThis.clearTimeout?globalThis.clearTimeout.bind(globalThis):eD,R8.setInterval=globalThis.setInterval?globalThis.setInterval.bind(globalThis):eD,R8.clearInterval=globalThis.clearInterval?globalThis.clearInterval.bind(globalThis):eD,R8.Error=globalThis.Error,R8.Map=globalThis.Map,R8.Math=globalThis.Math,R8.RegExp=globalThis.RegExp,R8.TypeError=globalThis.TypeError;var jPt=bPt(R8),Z0=jPt;function mS(w){let Z=w.Resources._register.bind(w.Resources);if(delete w.Resources._register,w.Resources.register=function(Ft){typeof Ft==\"string\"&&(Ft=JSON.parse(Ft));let H1=new TextEncoder;if(typeof Ft!=\"object\"||Ft===null)throw new TypeError(\"resources must be an object\");let bt={};for(let[y1,i1]of Object.entries(Ft)){if(typeof i1!=\"string\")throw new TypeError(`resource ${y1} must be a string`);bt[y1]=H1.encode(i1)}Z(bt)},w.Resources.registerFromUrl=async function(Ft=pPt()){let bt=await(await fetch(Ft)).json(),y1=new TextEncoder,i1=Object.fromEntries(Object.entries(bt).map(([L1,u1])=>[L1,y1.encode(u1)]));Z(i1)},typeof process<\"u\"){let ot=function(){let Ft=process.getBuiltinModule(\"node:path\"),H1=Ft.join(import.meta.dirname,\"resources.json\");return import.meta.filename.endsWith(\"register_resources.js\")&&(H1=Ft.join(import.meta.dirname,\"../dist/resources.json\")),H1};var Bt=ot;w.Resources.registerFromNodejs=function(H1=ot()){let y1=process.getBuiltinModule(\"node:fs\").readFileSync(H1,\"ascii\");w.Resources.register(y1)}}else w.Resources.registerFromNodejs=function(){throw new Error(\"Resources.registerFromNodejs can only be called from Node.js\")}}function pPt(){return new URL(\"resources.json\",import.meta.url).href}Wc(Z0);FS(Z0);mS(Z0);var Lut=Z0,sut=Z0.CanvasEditor,yut=Z0.registerCustomElement,lut=Z0.Canonizer,Tut=Z0.CanonizerUtil,hut=Z0.ConformerGenerator,cut=Z0.DrugScoreCalculator,wut=Z0.DruglikenessPredictor,gut=Z0.ForceFieldMMFF94,dut=Z0.Molecule,But=Z0.MoleculeProperties,vut=Z0.Reaction,Fut=Z0.ReactionEncoder,mut=Z0.Reactor,kut=Z0.Resources,but=Z0.RingCollection,Rut=Z0.SDFileParser,jut=Z0.SSSearcher,put=Z0.SSSearcherWithIndex,Cut=Z0.SmilesParser,Mut=Z0.ToxicityPredictor,Hut=Z0.Transformer,Vut=Z0.Util,Eut=Z0.version;export{lut as Canonizer,Tut as CanonizerUtil,sut as CanvasEditor,hut as ConformerGenerator,cut as DrugScoreCalculator,wut as DruglikenessPredictor,gut as ForceFieldMMFF94,dut as Molecule,But as MoleculeProperties,vut as Reaction,Fut as ReactionEncoder,mut as Reactor,kut as Resources,but as RingCollection,Rut as SDFileParser,jut as SSSearcher,put as SSSearcherWithIndex,Cut as SmilesParser,Mut as ToxicityPredictor,Hut as Transformer,Vut as Util,Lut as default,yut as registerCustomElement,Eut as version};\n/**\n * openchemlib - Manipulate molecules\n * @version v9.20.0\n * @date 2026-02-13T13:13:04.163Z\n * @link https://github.com/cheminfo/openchemlib-js\n * @license BSD-3-Clause\n*/\n","import { SSSearcher } from 'openchemlib';\n/**\n * Applies fragment labels from a fragment molecule to a target molecule. This method is in\n * place and modifies the target molecule directly.\n * @param molecule - The target molecule to which fragment labels will be applied.\n * @param fragment - The fragment molecule containing the labels to apply.\n * @param options\n * @returns The number of matches found\n */\nexport function applyFragmentLabels(molecule, fragment, options = {}) {\n    const { algorithm = 'overlapping', prefix = '', suffix = '' } = options;\n    const sssearcher = new SSSearcher();\n    sssearcher.setMolecule(molecule);\n    sssearcher.setFragment(fragment);\n    const found = sssearcher.findFragmentInMolecule({ countMode: algorithm });\n    const matches = sssearcher.getMatchList();\n    for (const match of matches) {\n        for (let fragmentAtomIndex = 0; fragmentAtomIndex < match.length; fragmentAtomIndex++) {\n            const moleculeAtomIndex = match[fragmentAtomIndex];\n            const label = fragment.getAtomCustomLabel(fragmentAtomIndex);\n            if (label) {\n                molecule.setAtomCustomLabel(moleculeAtomIndex, prefix + label + suffix);\n            }\n        }\n    }\n    return found;\n}\n//# sourceMappingURL=applyFragmentLabels.js.map","export const autoLabelDatabase = [\n    {\n        idCode: 'ea^P@@@LdbVRRbbvRRbLVRbrTVRdsRuMTmSSMLuSPEdEaLWEiATSUCRu]_QKPW@M]gIhM]GIdC]cAdvAnqirXcW^rZ`wXtYLqkkYMp[lYLfDuvlfdMvMfSJFzBKImC]cCdqanqbrZpwTpYLx[hKLf|MvMVSAFzBSIhm]cUdc]AQdvVnqbqQnqnrZhwXsYLukl[MuklYLMkjXMMklZLmklXMlklxyWQuvnqisrn}oe][@j{VaUtlcklX]bknXeWTuJnqf]]c]n]]cM`',\n        coordinates: '!BmpJH@oy?mwvH_[\\\\Bb@Jw_Xa}mpK~_x`B?g~w_Xa}mpJH@k]}bGw~_{\\\\Bb@JH__x@b@JH_X`BbGw~@H`BbGvH@ha}?`BH@ha}b@K~@Ha}',\n        mf: 'C40H56',\n        mw: 536.88464,\n        label: 'Lycopene',\n    },\n    {\n        idCode: 'eaYP@@@LdbbTbsbrTVRTVRbrbbdWBaOKUMUMLtsSMLuUU@RTVdyAVUUCRu]_tEpCWVrZCWZrYCW^r[CWXrXcWRrZ`wXpyLqkhyMqkjYLH[l[lfdMvLvSJZ{fSZZ{NSFF{FCIkC]cSdsanqhr[pwXrYLD[l[LfbMvLVSIFzfCIlc]cUdqVnqjuVnqbsVnqlwVnqdpvni`tvnqhrvnq`vrnsce]GWZ{FgOJ{v~UulBkmZEWXrJnel]]cCbU]STz{F{Lz{F[\\\\j{f@',\n        coordinates: '!B?`BH_[]}mpJH?H`BmpIt^pnGmwvH_X`B?g~H_X`BbGvH@oy?bGvH@ha}b@JH__x@b@JH_X`BbGw~@H`BbGw~_x`BbGvw_Xa}f~atnH`B',\n        mf: 'C40H56',\n        mw: 536.88464,\n        label: 'beta-carotene',\n    },\n    {\n        idCode: 'eghP@@@LddTTVdRVbLf|VRgEdbgfPRUUUUUUUUUUUW@B`RDhbb\\\\ST@~P`aBOt^PAnshFzNP{lXMawXtXcnqiuG]cEfF{vx[mXQnqiN{FSJ]vMft{lZlYw\\\\pZqnmgFzV|[jXKnqntW]cCdn{F[YMwLUwTtzkniasW]SAnnzfSC]uMFf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmwvH__x@?g~w@oy??g~H@k\\\\B?`@_YSF?bGvH_Xa}Gqhq`ELXb@KxF}MgYVBw?Cctm?vw?K_}m?s~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Cucurbitane',\n    },\n    {\n        idCode: 'eghP@@@LddTbbtVdIVbdsRdabcfefSUUUUUUUUUUUW@D`bDh`bbbR@~PPbbOt^PAnchN{FKHMv]`w^qG]cCjN{FsL]vMVx{nXLIwXpZSnqhrc][Z]vMvL{lYMYwXsYqnuoF{FB{lZ]EwTpYInelfzfJ{jYMUwTtYinynnzfgC]uLNf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmpJH@oy??`C~@A}eL[~H__x@bGt_Fh`BTqc~_x`B?`AeXHa}bGvw?Cctb@KxF}Mgm?vw?K_}m?s~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Dammarane',\n    },\n    {\n        idCode: 'eghP@@@LddTTVbTad|VLVR`fdea`VUUUUUUUUUUUUW@B`UBxRdBST@~P`bbOt^PCnq`tC]gHMvm`wXqG]cSjFzNX{lZMpwRpc][RMuLiwXq[Qn}cN{FSVMwLywTt{sniapW]cYhn{FkI]wLFr{l[lUwXpzknqfsW]SAnnzfSC]uMFf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmpK~_x`B?`Bw__x@bGvw_Xa}mpK~_{\\\\Bb@KxF}Mg?`@_YSF?Gqhq`ELXYVBw@cctm?vw@k_}mpK~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Lanostane',\n    },\n    {\n        idCode: 'eghP@@@LddTbbtVdIVbdsRdabcfefSUUUUUUUUUUUW@B`RBhPbbbR@~PPbbOtnPAnchN{FKHMv]`w^qG]cCjN{FsL]vMVD{lXMIwXtYQnmmN{F{F]vLfl{lYlxwZwc]cA]vMNb{jXLdwRvS]SE]uLfj{jZLtw\\\\wW]SSanzfGS]uMfV{jXmmwTuX{ninuw]SM`',\n        coordinates: '!BmpJH@oy??`C~@A}eL[~H__x@bGt_Fh`BTqc~_x`B?`AeXHa}bGvw@cctb@KxF}Mgm?vw@k_}mpK~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Protostane',\n    },\n    {\n        idCode: 'egdP@@@LddTQdVeRdtVLVRgD`bfag`VUUUUUUUUUUUUUp@jHICHy@du@OhCHQy@FzV`[mYAnylNzfgD]uLNh{lXLpwVwC]SBMv]HwXrg]cSmF{vL[hzsnqhsg]cEoN{FSA]vMfb{lZlew\\\\p[KnqnqW]cCjn{F[M]uLFz{jYLMwTtZ[nilrw]SEmnzfkG]uMvn{jYl',\n        coordinates: '!BmpJH@o`[tv_~@K]}?`Bw@h`B?`Bw@k]}?`Bw@k\\\\B?`@_YSF?Gqhq`ELXYVBw@cctm?vw@k_}mpK~_p',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Cycloartane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVbtVtT|R`ebf`QVWVquUUUUUUUUUUTh@hHaJDIMHDhitidA}`aEDQQ~cr@]vMf`{lXlawXp{CnqdqG]SMjFzNX{lZmqwTwXSnqntg]cSeN{FcZMv\\\\Xw^ug]cMgNzfS^]uLNB{jXMEwXpYKnijvS][E]uMFj{nXLuwTt{inuaf{Ff[iY[nibvs]SGMwM]wTvX',\n        coordinates: '!B?l]klaRrW`@TcVnM?l]kc_{XEHtTlo{GZ{IklalMZ{HTc_{GEHw~vAL|HgS~qqRrEHtAmqRMEKK~qp',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Friedelane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVadLTRltdabce`VSPvuUUUUUUUUUUUpAHHaAEhgIt`OdDHDc}Gd@{lXm@wQrG]cYlN{FkD]uMvh[lyan}nNzf[B]vLNd{lYLiwXs[Snq`qg]cQkFzv\\\\{l[mywXtxInuhf{FR{jZmewTrXkniauW]SAfnzfc]MtlLwTtw]sAenzfg[MwL]wTqZ{nilp',\n        coordinates: '!BbGw~@K]}?g~H@oy??`Bw@h`BmpJH__x@bGvw_Yg@?g~H@ox@nuSOsURDotzH_Xa}bGwIPH`BuB^KAp',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Lupane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVdLJtRdvdabcedQPwVuUUUUUUUUUUUpAHHHmIELet`OhMHQy@FzN`{lXl`wYvC]{D]uLvh{l[LqwXu[cninpg]cAiN{FcJMumiwXpxsnqdug]cMgF{V|[lXKnijtW]c]dn{FgYMtlTwTuW]SIfnzfG]]uLFF[nZ[nibrw]SYmnzfcG]wLFn{jZ\\\\',\n        coordinates: '!BmpJH@oy??`C~@K]}?g~H__x@bGvw@h`BmpK~_x`B?`Bw__x@bGvH_[\\\\BCwvw@h`BuB^KA?x@vuPlf@',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Oleanane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVadLTRvtdabce`UTpvuUUUUUUUUUUUHAHHaAIhgIyJet`OdDHDc}Gd@{lXm@wQrG]cYlN{FkD]uMvh[lyan}nNzf[B]vLNd{lYLiwXs[Snq`qg]cQkFzv\\\\{l[mywXtxInuhf{FR{jZmewTrXkniauW]SAfnzfg]MtlLwTtw]SQen{fC[MwL]wTqZ{nilp',\n        coordinates: '!BRGw~`C]}?k}H@oz??`@w@d`BMpIH__z@RGtw__z@?k}H@ox@MpKwoS\\\\Bb@IH_Ta}?hC~@D`BANmSip',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Taraxastane',\n    },\n    {\n        idCode: 'egdP@@@LdbTbbTVbbQvdjteB`e`QVSRvsUUUUUUUUUUTH`lIQAIH`hdidA}AaGzOHAwXvZCnqdrG]cElN{FGD]vMFh[hycnqjwG]S]aN{F{R]vMNT[l{Qn}cNzf[V]vLv\\\\{jYMywTpxKni`tW]SSdn{FCYMulUwTtZkny`sS]k]MvLMwTuZYneefzfv[nX{nibuw]SY`',\n        coordinates: '!BR@K~os\\\\BRGuH_S]}?k|w__z@?k?~o?x@MpHw@o^}MpJH@da}RGw~`Ox@?k}H@ox@RGuH_T`BANmSip',\n        mf: 'C30H50',\n        mw: 410.727,\n        label: 'Ursane',\n    },\n    {\n        idCode: 'ek`P@@@LddTTVbvebQbrbbxtdlL\\\\BRjjjjjjjjjjk`APJaJQqYSj@_XPQQBd_i\\\\`G]cAhF{NP[m[AnqbN{FgTMt\\\\qwXt[anmaFzVd[jYSnqbvc]{F]vLfl[nYsnqlwg]cU`n{F{Q]vLNR{lYmewTpXkniduW]SQfnzfs]]uLVF{jZmMwTpy[ninvw]SMcnzfg@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw?Cctm?vw?K_}?`Bw?Oy?Stp',\n        mf: 'C29H52',\n        mw: 400.73187999999993,\n        label: 'Poriferastane',\n    },\n    {\n        idCode: 'ek`P@@@LddTTVbvebQbrbbxtdlL\\\\BRjjjjjjjjjjk`APJaJQqYSi@_XPQQBd_i\\\\`G]cAhF{NP[m[AnqbN{FgTMt\\\\qwXt[anmaFzVd[jYSnqbvc]{F]vLfl[nYsnqlwg]cU`n{F{Q]vLNR{lYmewTpXkniduW]SQfnzfs]]uLVF{jZmMwTpy[ninvw]SMcnzfg@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw?Cctm?vw?K_}?`Bw?Oy?Stp',\n        mf: 'C29H52',\n        mw: 400.73187999999993,\n        label: 'Stigmastane',\n    },\n    {\n        idCode: 'ekdPD@@@LLdTbRbRUTRtrTfVXTxDl\\\\RrZzvNjjjjjjjjjjjbHDPkET`Oz[IAwTrYCnifqG]SAjNzfsL]uMVx{lYlIwXwZSnihrg]SEmNzf{F]vMVl{l[LywXq[snqdpW]cChfzNR{lZMdwYqS]{U]vLFZ[k[inuaf{Ff{lZ\\\\lwRvs]SGMwL',\n        coordinates: '!BgF_GS_ygnOiwSb|fnOeBRwiXe?U?IdIKnOfx~fSR?badSVSMYCK~YvQMYDw~YvPr?aadSVQMYCH',\n        mf: 'C27H44O2',\n        mw: 400.64435999999995,\n        label: 'Spirostane',\n    },\n    {\n        idCode: String.raw `fc@@@LddTTVbvebQbrbgMRlYpTuUUUUUUUUUW@JBheQrsNhGvHQREQ~atAwXpZC]gH[m[C]cD{lZ]Qncf]vMFxwVpfzVdwTrn{FKZ[oXw]cIkMwL{nqlwn{FkA{l[mGnqar^{F[Y{jXLWnidu^zfcM{j[Mwnibp~zfkS{jX\\oninv~zf[@`,\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}?`Bw@oy?',\n        mf: 'C28H50',\n        mw: 386.705,\n        label: 'Campestane',\n    },\n    {\n        idCode: String.raw `fc@@@LddTTVbvebQbrbgMRlYpTuUUUUUUUUUW@JBheQrsNpGvHQREQ~atAwXpZC]gH[m[C]cD{lZ]Qncf]vMFxwVpfzVdwTrn{FKZ[oXw]cIkMwL{nqlwn{FkA{l[mGnqar^{F[Y{jXLWnidu^zfcM{j[Mwnibp~zfkS{jX\\oninv~zf[@`,\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}?`Bw@oy?',\n        mf: 'C28H50',\n        mw: 386.705,\n        label: 'Ergostane',\n    },\n    {\n        idCode: 'ec`PH@@@LdTTRRTVVbfQdrvEG@g`USRvuUUUUUUUUUUXTKaEHC~frP]vLvP{jYMawXwXcnqjuG]SAfNzfs\\\\]vMfD{lXmIwTtYSnibvg]cIcN{FGVMt\\\\ywTu[snqhpS]gQMwlewTw[KnifqW]cAjfzvZ[m[inqan{FgSMtllwTvs]s@',\n        coordinates: '!BtJW~hNpx{D_Pfd_ltJWPfak`esvhPox@jCvWPj`}jDK~gy\\\\}?bBhOZ`}?i~hPoz`jCvhOZaB',\n        mf: 'C27H46O',\n        mw: 386.66124,\n        label: 'Furostane',\n    },\n    {\n        idCode: 'eglPD@@@MlbbbbbRRqfbbbRRsDbeagaSPqrusP@PAE@D@HPP@@_tNrCWYrY@wYrZM`[hyMFHMtlfcTZ{FSLV{FCIhwFncdpfnedtanq`rYSWTr[SWZrXsW^rZsW\\\\rYsWXp[sWVrXKWRtZHwXpZLeklzMdkiXkWQtZiWZsRnsne]cCJ{ffUt\\\\lkkXyWTurn}`',\n        coordinates: '!B?`Bw@h`B?`Bw__x@bOvw?H`BmpJH@h`Bm?w~@Hc}mpJH@ox@m?w~@Hc}b@Jw@k\\\\Bb@JH@ox@m?vH?P',\n        mf: 'C28H18O2',\n        mw: 386.44892,\n        label: 'Bisanthrone',\n    },\n    {\n        idCode: 'fmo@@@LddTTVbvebQbrTyjUcNBfjjjjjjjjjh@Oz[PCFCPirJmbcDXtzdNXqhwIlJKRdrfLVu]cLYMZsNXv[sFkAXwZKFGIXs[JfCETrZjfcMTv[jfKCTuZZf{KTsX',\n        coordinates: '!BetK~gzaBM`BWO_z`esvhOZ`}etK~gy]BjDK~hL~esyhqXNLxi]BWP`QLesvWPi\\\\}?i~WP`',\n        mf: 'C27H48',\n        mw: 372.67812,\n        label: 'cholesterol',\n    },\n    {\n        idCode: 'fmo@@@LddTTVbvebQbrTyjUcNBfjjjjjjjjji`EATRhyY`OlPbdJc}MhCnq`tF{NPwZvF{FIwXtzc]GL{lZMqnmaMtmInie]vLVtw^qn{FSV[nYw]cYo]vMVCwXwZO]cCd}vLvswTpXo]SIj}uMF[wTv[o]SEa}uMVgwTwY_]SM`',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}mpK~_p',\n        mf: 'C27H48',\n        mw: 372.67812,\n        label: 'Cholestane',\n    },\n    {\n        idCode: 'fa{@@@LddTTVbvebQbwMRlYpTuUUUUUUUUL@hJbUGKLA}bDTaT_hM@]vLF`wYrF{VpwXqN{FgT[hyg]cQnMulIneiMuLknqbvf{vMwXrZs]sN{l[M{nqjp^{F{Q{lX\\\\gnqfv^zfCE{jYMWnihs^zfs]{jXl',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@`',\n        mf: 'C24H42',\n        mw: 330.59748,\n        label: 'Cholane',\n    },\n    {\n        idCode: 'fj}@p@@FmxI\\\\dTTTRbTRR~XJSdyhJHBb`JCBDqB`OlHadBc}@hAnqh]t]FPwTvNzVcD[hzg]cIfMwMqnuaMtmIn}e]ulfuwTrYs][Q{mYLgnydv^zVS@',\n        coordinates: '!BbOvw?_y?bOrw?Oy?bGvw_Xc}m?w~@K]}?g~H@oy?bOrw?K\\\\B?`Bw@`',\n        mf: 'C15H14O6',\n        mw: 290.27016000000003,\n        label: 'Flavan-3,4-diol',\n    },\n    {\n        idCode: 'fjc@@@LddTTVbvebQyjUcNBfjjjjjjjj`EATRhy@~qBJPjOtj`N{FCP[lyC]kX[lXg]cSjMt\\\\snqhwFzvDwRtfzfUwXq[S]{F{lYMYnyg]vMf}wXuXO]c]h}vLNSwXs[O]SAb}uMF@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYV@x}@',\n        mf: 'C21H36',\n        mw: 288.51684,\n        label: 'Pregnane',\n    },\n    {\n        idCode: 'fj}@p@@LDhI\\\\bbbbbfqbRvxKUdyZBhb@`JAFEq@~QbNQ~`T`wRrNzVcX[nXg]GQjMvmqniaMvMIncmMul[nqduf{v]wVr[w]SIh}vlfSw\\\\r[O]KI`',\n        coordinates: '!B?`BH@k\\\\B?`BH_[]}?`Bw?Hc|?g~H@k_|bOvw?_x@bOrw?K\\\\B?`Bw@`',\n        mf: 'C15H12O6',\n        mw: 288.25428,\n        label: 'Dihydroflavonol',\n    },\n    {\n        idCode: String.raw `fj}@p@@DEiI\\bbbfbTtQRQXHwhyZdJH@BJ@@OzARC]KH[n[G]KQjMuLsnchwF{VDwXtn{FSJ[hxs][V{kYL{nidwf{vCwZrZO]sIl}tlf@`,\n        coordinates: '!B?`Bw@h`Bmww~@Ox@bGvH?K_|bOs~_x`Bm?w~@Hc}m?rw@hc|?`Bw@`',\n        mf: 'C15H10O6',\n        mw: 286.23839999999996,\n        label: 'Flavonol',\n    },\n    {\n        idCode: 'fbmAP@@Fm{NRJJJIQJYIy`iNbf`h`JHB`PaLPOdHad_hE@MvMCnchrFzfqwRtXc]GT{lYLqnynMvlIneiMwlknmdvnzfSN[kXO]kIh}wLfSwRrX',\n        coordinates: '!BbOvw?_y?bOrw?Oy?bGvw_Xc}m?w~@K]}?g~H@hc|m?rw@ox@mpH',\n        mf: 'C15H14O5',\n        mw: 274.27116,\n        label: 'Flavan-3-ol',\n    },\n    {\n        idCode: 'fbmAP@@\\\\e{NQQQJJKFIKYgEFbehJH`HB``q@~`rOtBdFzVQwRt[C]sD{hzMQnufMuMqnqaMt\\\\inmm]vLfLw^unzvSN{jYLGnudt^{fSI{iYL',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@m?rH?Oy?b@Jw?Hc}m?w~@Hc|m?rw@ox@mpH',\n        mf: 'C15H12O5',\n        mw: 272.25527999999997,\n        label: 'Flavanone',\n    },\n    {\n        idCode: 'fbmAPD@\\\\}GHIrQQQQQHiQItDXKd`PP@ADP@@_tB`F{F`wTrNzNcX[nXg]cIj]tmFXwQpfzVewVrYW]SImMvlYn}k]vlf]w\\\\rXK][I{iYL',\n        coordinates: '!Bm?vH?_y?m?s~_xc|mwvH_[_}?`BH_Xc}m?rw@oy?b@JH?Ox@mpH',\n        mf: 'C15H11O5',\n        mw: 271.24734,\n        label: 'Anthocyanidine',\n    },\n    {\n        idCode: 'fbmAP@@\\\\e{NQQQJJKFIKYgEFbehFH`HB`@C~`T`wRrNzVcX[nXg]GQjMvlqninMvLInceMumknqdqf{vmwVrYw]SI`}vlfcw\\\\rYO]KI`',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@mpJH@oy?b@Jw@hc}m?w~@H`BmpJw@ox@mpH',\n        mf: 'C15H10O5',\n        mw: 270.2394,\n        label: 'Flavone',\n    },\n    {\n        idCode: String.raw `fluhP@DTxIPCQSdTRbbUTRRSNRT{sUKMUUUP@_t\\dIlbcXjqIMR{LbwKMJGJivfMrlinSdmr|ynPVmr@`,\n        coordinates: '!B?oum~QKy?ouBuo{}Dog]aYkMPlg~_ySz^bTT~Rc~?cK~eQKz',\n        mf: 'C10H13N5O4',\n        mw: 267.24422,\n        label: 'deoxyguanosine',\n    },\n    {\n        idCode: 'fbm@`@@HRY[UfUWISrXyZjj@@@H@@heHMv]ancb]v\\\\fiwQrYc]{\\\\{oYLInqi]vLfTwVvfzfMwVrZw]SIgMvmyny`}vlfcw\\\\rYK]KY{iYL',\n        coordinates: '!BFfASFF@ZKAc~@Hc}b@K~_xc}m?vH?_y?b@K~_?y?bOvH?Xc}b@H',\n        mf: 'C18H18O2',\n        mw: 266.33892,\n        label: 'Butyrolactone',\n    },\n    {\n        idCode: 'fb}@`@@FrQQJIIIHsIDiHvgIsUPTE@@T@@_tRdF{vQwYr[C]cD[hzg]GIfMumqniaMv]Kn}drf{Vtw\\\\un{FSN[i[w][I`}uLfcwZrYO]sIl}tlf@',\n        coordinates: String.raw `!Bb@J{UHc}f\\CRtOy?b@KRtIg@bOvH?[mTs}JH@f]SLXCOtl?RLX@`,\n        mf: 'C18H18O2',\n        mw: 266.33892,\n        label: 'Furanofuran lignan',\n    },\n    {\n        idCode: 'fb}@`@@HRY[efuWHrRoIcejjh@@@h@@heHMv]ancb]v\\\\fhw^sNzNS\\\\{kYLInqi]wlfUwXr[W]kIcMumYnig]uLf}wRrXK]kQ[nYO]sIlmtl',\n        coordinates: '!BFfASFF@ZKAbH?_x@b@K~_x`B?`BH?[_}bOvH@h`B?g?~_xc}bOt',\n        mf: 'C18H16O2',\n        mw: 264.32304,\n        label: 'Arylnaphthalene lactone',\n    },\n    {\n        idCode: 'flm@@@LddTTVbvebyjUcNBfjjjjjjj@C~fT@q`tJ\\\\bkXhqFMNiCfLZMr[BbtiLicEmWXsFSVlsfMf|qjpVMvbqarVLv@',\n        coordinates: '!BetK~gzaBM`BWO_z`esvhOZ`}etK~gy]BjDK~hL~esyhqXNLx',\n        mf: 'C19H32',\n        mw: 260.46308,\n        label: 'steroid',\n    },\n    {\n        idCode: 'flm@@@LddTTVbvebyjUcNBfjjjjjjjhAPUDjNPOlPbdJc}LhCnq`tF{NPwZvF{FIwXtzc]GL{lZMqnmaMtmInie]vLVtw^qn{FSV[nYw]cYo]vMVCwXwZO]cCd}vLv@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELX',\n        mf: 'C19H32',\n        mw: 260.46308,\n        label: 'Androstane',\n    },\n    {\n        idCode: 'fle@P@@\\\\\\\\eIfVWyWyZCEhFB@`H@Pi_t|dF{NQwXr[C]GD{jYMSnmdsF{vEw\\\\rZW]kIeMvMknedqfzvlwTwf{VBw\\\\tVzV@',\n        coordinates: '!B?`BH@k\\\\BbGw~@Ox@?g~H@hc|m?s~@K_}?`BH?K_|mpK~@K\\\\B',\n        mf: 'C15H12O4',\n        mw: 256.25628,\n        label: 'Chalcone',\n    },\n    {\n        idCode: 'fluA@@@ISLrrn~QchaSUTDD@A@@G}DiCn}drF{vqwXrXg]GIjMvLqncn]ulfEwTrZW]gIeMuminicMv][nudsn{fS^[mXK]sQ{iYLene`',\n        coordinates: '!BsA_LZNU_HNkeHBCeEOm?VVcSEOa?IfcLyU?eW~T`yRA?VW|f',\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 7-O-7′',\n    },\n    {\n        idCode: 'fluA@@@ISKJn}jRfkQSUPTD@A@@G}DiAn}d]v\\\\fpwXqFzNiwQrYc][\\\\[jXS]gR{oYLinumMwL[nqdufzV]wVr[w]SI`}vlfcw\\\\rYO]KI`',\n        coordinates: String.raw `!BG@\\\\^LE?lEjpIY\\]fOwhw^cBp^?A{~c]fOw~{~cBzMwhw^cB`,\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 7-O-9′',\n    },\n    {\n        idCode: 'fluA@@@IRjkLjo`chaSUUP@@A@@G}DiCnsdrF{NqwQrXc]GT{oYLqn}n]vLfDwXtnzvSJ{jYMinmcMuM[nudsn{fS^[mXK]sQ{iYLene`',\n        coordinates: '!BKA`lYvAeXAjH@ha}bGw~_?y?b@Jw_Xa}bGvH__y??g~H@ha}',\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 9-O-9′',\n    },\n    {\n        idCode: 'fdei`@LZlFHIJrQQQSIQEYDhZw`uUUPHEP@G}GIAc\\\\dI[ebgDTwJcfyLZwKdVECmVXuVm]gR[tvCQ`',\n        coordinates: '!Bj?dT~_x@^bTEI_xrO]ZZtozUDoim~_{|i]Im~fwz?os~?@',\n        mf: 'C10H13N5O3',\n        mw: 251.24521999999996,\n        label: 'deoxyadenosine',\n    },\n    {\n        idCode: 'fdu@@@LddTRtjTrSA\\\\dZpXuUUUUUUT@hJddmHGqHQRIQjOtR`N{FsP{lXlcnqdvN{F{D{lX]Qncf]vMVywXtXW]cMiMv\\\\in}m]vLFLwVuf{V\\\\wXwfzVBwTtV{f@',\n        coordinates: '!B?g~H?A|ZLPBH_Q}ebOuSYx`B?g~H_Xc}?g~H@hc}bGvH?@',\n        mf: 'C18H30',\n        mw: 246.43619999999999,\n        label: 'Estrane',\n    },\n    {\n        idCode: 'fhiQP@DX@IW`yEEDeDdbdsakMUMMUU@ASRPdrJMbsDfuFMrYEnUZRfyFRwJsfyNZwH',\n        coordinates: '!B@yhCi_xl@yk~_pNZ?brT~ghe?bpCfaSyJO{~LozUDoh',\n        mf: 'C10H14N2O5',\n        mw: 242.23016,\n        label: 'deoxythymidine',\n    },\n    {\n        idCode: String.raw `fdy@@@DjU^{yVg@qBBJj@@@@he@]vLfawVrYG]SIl]wlfIwZrZg]sIf]t\\fywRrXS]GR{lyLin}mMv\\YnqkMulynioMvlEnyhmtl`,\n        coordinates: String.raw `!B?g~H@k\\BbOvH?[_}b@K~_{\\BbOvw?_y?m?vH?_y??g~H?P`,\n        mf: 'C18H22',\n        mw: 238.37267999999997,\n        label: 'Dibenzylbutane',\n    },\n    {\n        idCode: String.raw `fde@@@LdbbTRtVRKIBTFHQEDE@D@AQJ@{kYMCnqdrN{VSX[oXg]SIj]wlfYwRr[c]cB[hzW]sIe]t\\ftwVqfzflwYsn{NS^[mXK]sQ[iX`,\n        coordinates: '!B?`BH?[_}b@Jw@h`B?g~w@hc}m?vw?Xc}GvT_Foy??g~H?P',\n        mf: 'C18H20',\n        mw: 236.35679999999996,\n        label: 'Arylnaphthalene',\n    },\n    {\n        idCode: String.raw `fde@@@LdbbbTRVQpcZ][t@DDDUA@AQJ@[kZG]SIdMvManub]vLfiw\\rYc]S\\[oXS]KR{kYLkn}dvnzVSF[nZs]GN{mYM{ncdpV{NcwYrX`,\n        coordinates: '!B?g~[iBAzfyl`AWh`_?yzHGi__?yzWrAzfyl`AYndKwHoCP',\n        mf: 'C18H20',\n        mw: 236.35679999999996,\n        label: 'Dibenzocycloctane',\n    },\n    {\n        idCode: 'fhe@@@LdbbbTReryHQmN|Fjjjjjj`@iE@TzCFCHavFMFIUjTYcFK\\\\npfLfeMeQ[TfLqlufMV]YoL[lEcM`',\n        coordinates: '!BbOvw?_x@?g~H@k\\\\B?g~w@k_}bOvH?_x@GvVH@a|ZTq`',\n        mf: 'C17H28',\n        mw: 232.40931999999998,\n        label: 'steroid core',\n    },\n    {\n        idCode: 'fhe@@@LdbbbTReryHQmN|Fjjjjjjj@TDaLadCz`HaBHYAhRJ@[lzG]cAdMt]cnqhqF{VhwXsN{FK\\\\[oXW]cIiMulinemMuL[nqlun{FkN[n[w]c]`}vLv@',\n        coordinates: '!BbGvw__x@?g~H@k\\\\B?g~w?K_}bOvH__x@GvVH?A|ZTq`',\n        mf: 'C17H28',\n        mw: 232.40931999999998,\n        label: 'Gonane',\n    },\n    {\n        idCode: 'f`qQP@DX@ISoILrl{jsfcMUMMUT@G}MIBSHhvKLR[TXwIdVyUiJ[eiK\\\\cN[eYk\\\\`',\n        coordinates: '!B@yhCi_xl@yk~_pNZ?brT~ghe?bpT~Rc~?cK~eQKz',\n        mf: 'C9H12N2O5',\n        mw: 228.20328,\n        label: 'deoxyuridine',\n    },\n    {\n        idCode: 'f`qpP@DXxBSoYEDhihTdjBtYijjji`@iiHRYEfqQbQZdvXqnPjliS\\\\mI[dYs\\\\kM[d',\n        coordinates: '!B@yk~K@Ne@yhCfoy??bpCiYSz^bTT~Rc~?cK~eQKz',\n        mf: 'C9H13N3O4',\n        mw: 227.21921999999998,\n        label: 'deoxycytidine',\n    },\n    {\n        idCode: 'fhy@`@@BrJJJJIPy[`eV|EhJ`@@`@C~`T`wRrNzVcX[nXg]GQjMvlsnqdwFzfDwXtfzNTwVvnzvSF{jYMYn}g]vlf}w\\\\rXO]KI`',\n        coordinates: '!B?`BH@k\\\\B?`BH_[]}?`Bw@h`Bb@K~_{\\\\BbGvw_[]}mpH',\n        mf: 'C15H12O2',\n        mw: 224.25827999999998,\n        label: 'Isoflavanone',\n    },\n    {\n        idCode: 'fhy@`@@JRYfYU_XhwgAZd@`@H@@hEHMtlanyl]tmFIwXrZc]SL{hzMqnua]ulfewTrYS]cZ[hxs][V{mYL{nydwf{vCwRrX',\n        coordinates: '!B?`Bw@h`Bm?w~@Ox@bOw~_{\\\\Bb@JH@h`Bm?vw?Xc}mpH',\n        mf: 'C15H10O2',\n        mw: 222.24239999999998,\n        label: 'Isoflavone',\n    },\n    {\n        idCode: 'f`i@`@@VRYfYU]`eNMyh@`AB@@OzNrBnsdZ{NcXut]FIkiZMQWXsC]cAhwE]GBuvLFdkiYRnimJ{VLkoYrnyoJzv@',\n        coordinates: '!B?g~w_Xa}?g~w@oy?b@JH_[]}mwvH_Xa}?g~w@h`B',\n        mf: 'C14H8O2',\n        mw: 208.21552,\n        label: 'Anthraquinone',\n    },\n    {\n        idCode: 'foQ@`@@BRYfYWvBUXsf`B@@`@C~cl`klyFnshvM]GQbZzVcTUvLpwXpZMqWQpm]cAiJzVTkj[RnucJ{vlknYrnm`',\n        coordinates: '!B?g~w?Xc}?g~w@oy?b@JH?[_}m?vH?Xc}mpJH@`',\n        mf: 'C13H8O2',\n        mw: 196.20452,\n        label: 'Xanthone',\n    },\n    {\n        idCode: 'foQA@@@YEEEEDdbrRkF\\\\t@D@D@@_t]dE]gHuv]FqkhzLSWRtZbnqfF{FCQnJzNDkiZVnq`re]SZUvlYW^ue]sNUul',\n        coordinates: '!B?g~w?Xc}?g~w@oy?b@Jw?Xc}m?vH?Xc}mpJH@`',\n        mf: 'C14H10O',\n        mw: 194.23239999999998,\n        label: 'Anthrone',\n    },\n    {\n        idCode: 'dg|@@DjU_eZx{BAH@@BJozN`]vLfcnmdr]uLfsnilq]vlfknyds]vMf{nedpmvMK][JwTvmvl[]sVwRp',\n        coordinates: '!B?`Bw?Xc}mpJw?Hc|m?vH?_y?bOrH?Xc}b@H',\n        mf: 'C14H12',\n        mw: 180.24928,\n        label: 'Stilbene',\n    },\n    {\n        idCode: 'fgA@@@DjYU_VByHu`@@@@@@OzNpFnshtM]KQdJ{NpklXfnq`uE]KLut]FxkjXQnq`tZRnyeJzNtkmXrn}kJzv@',\n        coordinates: String.raw `!B?g~H@k\\BbOvw?Xc}m?vH@k\\Bb@JH?Xc}b@H`,\n        mf: 'C14H10',\n        mw: 178.2334,\n        label: 'Anthracene',\n    },\n    {\n        idCode: 'dclD@@UIfV][iuhFAH@OzJdMtlg]KQl[nXnzNcTwZsMuMs]cBwQtmumk]{@',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@mpJH@h`B?`BH?P',\n        mf: 'C10H6O2',\n        mw: 158.15563999999998,\n        label: 'Naphtoquinone',\n    },\n    {\n        idCode: 'dmLD@@QIe[VfeVi@B@C~`iC]SHwXvMwMS]K\\\\wQpmvmK]{JwVp',\n        coordinates: '!Bb@JH?_x@b@JH@ox@bOvH@h`BbOt',\n        mf: 'C9H6O2',\n        mw: 146.14463999999998,\n        label: 'Coumarin',\n    },\n    {\n        idCode: 'dazH`Jx@aJ]nji`dG}JPGJQap|T\\\\MGGBaIppP',\n        coordinates: '!B?g~H@k_}?g~H?[_}?g|',\n        mf: 'C5H11NOS',\n        mw: 133.21434,\n        label: 'methionine',\n    },\n    {\n        idCode: 'detH@@rQQJHtpsPT@`AQTAnqh{hzLc]SYwRtXfzNinyf[i[f{VEn}i[kX',\n        coordinates: '!BbOvw?_y?b@K~_{_}bOvH?X`B',\n        mf: 'C9H8O',\n        mw: 132.16152,\n        label: '2H-Chromene',\n    },\n    {\n        idCode: 'daDD@@qJYnnjjh@htQcIkESUKM[]s@',\n        coordinates: '!Bm?vH?[_|?g?~_x`BbOt',\n        mf: 'C6H12O2',\n        mw: 116.15928000000001,\n        label: 'pyranose',\n    },\n    {\n        idCode: 'gOp`AdifMjj`OzVIcJVMM^Yzp',\n        coordinates: '!BTv]`YW?~KF_~_q`l',\n        mf: 'C5H10O2',\n        mw: 102.1324,\n        label: 'furanose',\n    },\n    {\n        idCode: 'gOp`Adigkjj`OzVIcKVMMYY|p',\n        coordinates: '!Bm?vH?[_|?g?~_xc}',\n        mf: 'C5H10O2',\n        mw: 102.1324,\n        label: 'pyranose core',\n    },\n    {\n        idCode: 'gFp`AdidvjhC~abXrecSWf@',\n        coordinates: '!BTv]`YW?~KF_~_p',\n        mf: 'C4H8O2',\n        mw: 88.10552,\n        label: 'furanose core',\n    },\n];\n//# sourceMappingURL=autoLabelDatabase.js.map","import { applyFragmentLabels } from \"./applyFragmentLabels.js\";\nimport { autoLabelDatabase } from './autoLabelDatabase.js';\n/**\n * In place modification of the molecule to add auto labels to its atoms based on\n * a database of common substructures.\n * @param molecule\n */\nexport function autoLabel(molecule) {\n    const { Molecule } = molecule.getOCL();\n    for (const entry of autoLabelDatabase) {\n        const fragment = Molecule.fromIDCode(entry.idCode);\n        const result = applyFragmentLabels(molecule, fragment, {\n            algorithm: 'separated',\n        });\n        if (result > 0)\n            return;\n    }\n}\n//# sourceMappingURL=autoLabel.js.map","const MAX_R = 10;\n/**\n * Generate molecules and calculate predicted properties form a list of smiles and fragments\n * @param {string} coreSmiles\n * @param {Array} fragments - Array of {smiles,R1,R2,...}\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {object} [options={}] - Options\n * @param {Function} [options.onStep] - method to execute each new molecules\n * @param {boolean} [options.complexity] - returns only the number of molecules to evaluate\n * @returns {Promise<any>} promise that resolves to molecules or complexity as a number\n */\nexport async function combineSmiles(coreSmiles, fragments, OCL, options = {}) {\n    const { complexity = false } = options;\n    const core = getCore(coreSmiles);\n    const rGroups = getRGroups(core, fragments);\n    if (complexity) {\n        return getComplexity(rGroups);\n    }\n    return generate(core, rGroups, OCL, options);\n}\nfunction getComplexity(rGroups) {\n    let complexity = 1;\n    for (const rGroup of rGroups) {\n        complexity *= rGroup.smiles.length;\n    }\n    return complexity;\n}\nasync function generate(core, rGroups, OCL, options = {}) {\n    const { onStep } = options;\n    const molecules = {};\n    const sizes = new Array(rGroups.length);\n    const currents = new Array(rGroups.length);\n    for (let i = 0; i < rGroups.length; i++) {\n        sizes[i] = rGroups[i].smiles.length - 1;\n        currents[i] = 0;\n    }\n    let position = 0;\n    let counter = 0;\n    while (true) {\n        counter++;\n        while (position < currents.length) {\n            if (currents[position] < sizes[position]) {\n                if (onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await onStep(counter);\n                }\n                appendMolecule(molecules, core, rGroups, currents, OCL);\n                currents[position]++;\n                for (let i = 0; i < position; i++) {\n                    currents[i] = 0;\n                }\n                position = 0;\n            }\n            else {\n                position++;\n            }\n        }\n        if ((position = currents.length)) {\n            if (onStep) {\n                // eslint-disable-next-line no-await-in-loop\n                await onStep(counter);\n            }\n            appendMolecule(molecules, core, rGroups, currents, OCL);\n            break;\n        }\n    }\n    const mols = Object.values(molecules);\n    mols.sort((m1, m2) => m1.mw - m2.mw);\n    return mols;\n}\nfunction appendMolecule(molecules, core, rGroups, currents, OCL) {\n    let newSmiles = core.smiles;\n    for (let i = 0; i < currents.length; i++) {\n        newSmiles += `.${rGroups[i].smiles[currents[i]]}`;\n    }\n    const currentMol = OCL.Molecule.fromSmiles(newSmiles);\n    const idCode = currentMol.getIDCode();\n    if (!molecules[idCode]) {\n        const molecule = {};\n        molecules[idCode] = molecule;\n        molecule.smiles = currentMol.toSmiles();\n        molecule.combinedSmiles = newSmiles;\n        molecule.idCode = idCode;\n        molecule.molfile = currentMol.toMolfile();\n        const props = new OCL.MoleculeProperties(currentMol);\n        molecule.nbHAcceptor = props.acceptorCount;\n        molecule.nbHDonor = props.donorCount;\n        molecule.logP = props.logP;\n        molecule.logS = props.logS;\n        molecule.PSA = props.polarSurfaceArea;\n        molecule.nbRottable = props.rotatableBondCount;\n        molecule.nbStereoCenter = props.stereoCenterCount;\n        const mf = currentMol.getMolecularFormula();\n        molecule.mf = mf.formula;\n        molecule.mw = mf.relativeWeight;\n    }\n}\nfunction getCore(coreSmiles) {\n    const core = {\n        originalSmiles: coreSmiles,\n        smiles: updateRPosition(coreSmiles).replaceAll(/\\[R(?<group>[1-4])]/g, '%5$<group>'),\n    };\n    for (let i = 0; i < MAX_R; i++) {\n        if (core.originalSmiles.includes(`[R${i}]`))\n            core[`R${i}`] = true;\n    }\n    return core;\n}\nfunction getRGroups(core, fragments) {\n    const rGroups = {};\n    for (const fragment of fragments) {\n        if (fragment.smiles) {\n            const smiles = updateRPosition(fragment.smiles);\n            for (let i = 0; i < MAX_R; i++) {\n                if (core[`R${i}`] && // we only consider the R that are in the core\n                    fragment[`R${i}`]) {\n                    if (!rGroups[`R${i}`]) {\n                        rGroups[`R${i}`] = {\n                            group: `R${i}`,\n                            smiles: [],\n                        };\n                    }\n                    rGroups[`R${i}`].smiles.push(smiles.replace(/\\[R]/, `(%5${i})`));\n                }\n            }\n        }\n    }\n    return Object.keys(rGroups).map((key) => rGroups[key]);\n}\n/**\n * Repositions an R-group marker when it appears at the beginning of a SMILES string.\n * R-group markers (`[R]`, `[R1]`, `[R2]`, ..., `[R9]`) at position 0 are not valid in\n * SMILES notation, so this function moves them after the first atom at the top level\n * of the molecular graph.\n * @param {string} smiles - SMILES string potentially starting with an R-group marker\n * @returns {string} SMILES string with the R-group marker repositioned if needed\n */\nfunction updateRPosition(smiles) {\n    // Match R group at the beginning: [R], [R1], [R2], ..., [R9]\n    const match = smiles.match(/^\\[R\\d?]/);\n    if (!match)\n        return smiles;\n    const rGroup = match[0];\n    if (smiles.length === rGroup.length)\n        return `[H]${rGroup}`;\n    // we are in trouble ... we need to move the R\n    const newSmiles = smiles.slice(rGroup.length);\n    // we need to check where we should put the R group\n    let level = 0;\n    for (let j = 0; j < newSmiles.length; j++) {\n        const currentChar = newSmiles.charAt(j);\n        const currentSubstring = newSmiles.slice(j);\n        if (currentChar === '(') {\n            level++;\n        }\n        else if (currentChar === ')') {\n            level--;\n        }\n        else if (level === 0) {\n            if (currentSubstring.match(/^[a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}(${rGroup})${newSmiles.slice(j + 1)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z][a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 2))}(${rGroup})${newSmiles.slice(j + 2)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}(${rGroup})${newSmiles.slice(j + 1)}`;\n            }\n        }\n    }\n    return smiles;\n}\n//# sourceMappingURL=combineSmiles.js.map","/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        if (options.encoding) {\n            return new TextDecoder(options.encoding).decode(blob);\n        }\n        else {\n            return decodeText(blob);\n        }\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction decodeText(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 new TextDecoder('utf-16be').decode(uint8);\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return new TextDecoder('utf-16le').decode(uint8);\n        }\n    }\n    try {\n        return new TextDecoder('utf-8', { fatal: true }).decode(uint8);\n    }\n    catch {\n        return new TextDecoder('latin1').decode(uint8);\n    }\n}\n//# sourceMappingURL=index.js.map","/**\n * Converts a string to camel case.\n * @param {string} name\n * @returns {string}\n */\nexport function getCamelCase(name) {\n    return name.replaceAll(/[ -][a-z]/g, (string) => string[1].toUpperCase());\n}\n//# sourceMappingURL=getCamelCase.js.map","import { getCamelCase } from './getCamelCase.js';\nexport function getParts(text) {\n    const lines = text.split(/\\r?\\n/);\n    const parts = { data: [] };\n    let currentPart = parts.data;\n    let currentLabel = '';\n    for (const line of lines) {\n        if (line.startsWith('</')) {\n            // close existing part\n            if (currentLabel !== line.slice(2, -1)) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = '';\n            currentPart = parts.data;\n        }\n        else if (line.startsWith('<') && !line.includes('=')) {\n            // open new part\n            if (currentLabel) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = line.slice(1, -1);\n            const target = getCamelCase(currentLabel);\n            parts[target] = [];\n            currentPart = parts[target];\n        }\n        else if (currentLabel) {\n            // add line to current part\n            currentPart.push(line);\n        }\n        else {\n            //data lines\n            currentPart.push(line);\n        }\n    }\n    return parts;\n}\n//# sourceMappingURL=getParts.js.map","export function parseColumnbProperties(lines) {\n    lines = lines.map((line) => {\n        const [key, value] = line.slice(1, -1).split('=');\n        return { key, value: value.slice(1, -1) };\n    });\n    const columnProperties = {};\n    let currentColumnName = '';\n    for (const line of lines) {\n        switch (line.key) {\n            case 'columnName':\n                currentColumnName = line.value;\n                columnProperties[currentColumnName] = {};\n                break;\n            case 'columnProperty':\n                {\n                    if (!currentColumnName) {\n                        throw new Error('This should not happen');\n                    }\n                    const [key, value] = line.value.split('\\t');\n                    columnProperties[currentColumnName][key] = value;\n                }\n                break;\n            default:\n                throw new Error('This should not happen');\n        }\n    }\n    for (const key in columnProperties) {\n        const columnPropery = columnProperties[key];\n        if (columnProperties[key].parent) {\n            const target = columnProperties[columnPropery.parent];\n            if (!target) {\n                throw new Error('Parent column not found');\n            }\n            if (!target.related) {\n                target.related = {};\n            }\n            target.related[columnPropery.specialType] = key;\n        }\n    }\n    return columnProperties;\n}\n//# sourceMappingURL=parseColumnbProperties.js.map","export function parseData(lines, options = {}) {\n    lines = lines.filter((line) => !line.match(/^\\s*$/));\n    const { columnProperties = {} } = options;\n    const headers = lines\n        .shift()\n        .split('\\t')\n        .map((header) => {\n        if (columnProperties[header]) {\n            return { label: header, ...columnProperties[header] };\n        }\n        return { label: header };\n    });\n    const entries = [];\n    const rawEntries = [];\n    for (const line of lines) {\n        const fields = line.split('\\t');\n        const rawEntry = {};\n        for (const [index, header] of headers.entries()) {\n            rawEntry[header.label] = fields[index];\n        }\n        rawEntries.push(rawEntry);\n        const entry = {};\n        for (const header of headers) {\n            if (header.parent)\n                continue;\n            entry[header.label] = valueEhnhancer(header, rawEntry);\n        }\n        entries.push(entry);\n    }\n    return { entries, rawEntries };\n}\nfunction valueEhnhancer(header, rawEntry) {\n    if (header?.specialType === 'rxncode') {\n        return `${rawEntry[header.label]}#${rawEntry[header.related.atomMapping]}#${rawEntry[header.related.idcoordinates2D]}`;\n    }\n    return rawEntry[header.label];\n}\n/*\nentry.rxnCode =\n*/\n//# sourceMappingURL=parseData.js.map","import { ensureString } from 'ensure-string';\nimport { getParts } from './utils/getParts.js';\nimport { parseColumnbProperties } from './utils/parseColumnbProperties.js';\nimport { parseData } from './utils/parseData.js';\n/**\n * Convert a DataWarrior database into a JSON object\n * @param {string} text\n * @returns\n */\nexport function parseDwar(text) {\n    text = ensureString(text);\n    const parts = getParts(text);\n    improveParts(parts);\n    return parts;\n}\nfunction improveParts(parts) {\n    for (const key in parts) {\n        switch (key) {\n            case 'columnProperties':\n                parts[key] = parseColumnbProperties(parts[key]);\n                break;\n            case 'data':\n                break;\n            default:\n                parts[key] = parseDefault(parts[key]);\n        }\n    }\n    const data = parseData(parts.data, {\n        columnProperties: parts.columnProperties,\n    });\n    parts.data = data.entries;\n    parts.rawData = data.rawEntries;\n}\nfunction parseDefault(lines) {\n    const result = {};\n    for (const line of lines) {\n        const [key, value] = line.slice(1, -1).split('=');\n        result[key] = value.slice(1, -1);\n    }\n    return result;\n}\n//# sourceMappingURL=parseDwar.js.map","import { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs.js';\n/**\n * Returns various information about atoms in the molecule\n * @param {import('openchemlib').Molecule} [molecule]\n */\nexport function getAtomsInfo(molecule) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperRings);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const results = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const result = {\n            oclID: diaIDs[i],\n            extra: {\n                singleBonds: 0,\n                doubleBonds: 0,\n                tripleBonds: 0,\n                aromaticBonds: 0,\n                cnoHybridation: 0, // should be 1 (sp), 2 (sp2) or 3 (sp3)\n            },\n        };\n        const extra = result.extra;\n        results.push(result);\n        result.abnormalValence = molecule.getAtomAbnormalValence(i); // -1 is normal otherwise specified\n        result.charge = molecule.getAtomCharge(i);\n        result.cipParity = molecule.getAtomCIPParity(i);\n        result.color = molecule.getAtomColor(i);\n        result.customLabel = molecule.getAtomCustomLabel(i);\n        //        result.esrGroup=molecule.getAtomESRGroup(i);\n        //        result.esrType=molecule.getAtomESRType(i);\n        result.atomicNo = molecule.getAtomicNo(i);\n        result.label = molecule.getAtomLabel(i);\n        //        result.list=molecule.getAtomList(i);\n        //        result.listString=molecule.getAtomListString(i);\n        //        result.mapNo=molecule.getAtomMapNo(i);\n        result.mass = molecule.getAtomMass(i);\n        //        result.parity=molecule.getAtomParity(i);\n        //        result.pi=molecule.getAtomPi(i);\n        //        result.preferredStereoBond=molecule.getAtomPreferredStereoBond(i);\n        //        result.queryFeatures=molecule.getAtomQueryFeatures(i);\n        result.radical = molecule.getAtomRadical(i);\n        result.ringBondCount = molecule.getAtomRingBondCount(i);\n        //        result.ringCount=molecule.getAtomRingCount(i);\n        result.ringSize = molecule.getAtomRingSize(i);\n        result.x = molecule.getAtomX(i);\n        result.y = molecule.getAtomY(i);\n        result.z = molecule.getAtomZ(i);\n        result.allHydrogens = molecule.getAllHydrogens(i);\n        result.connAtoms = molecule.getConnAtoms(i);\n        result.allConnAtoms = molecule.getAllConnAtoms(i);\n        result.implicitHydrogens =\n            result.allHydrogens + result.connAtoms - result.allConnAtoms;\n        result.isAromatic = molecule.isAromaticAtom(i);\n        result.isAllylic = molecule.isAllylicAtom(i);\n        result.isStereoCenter = molecule.isAtomStereoCenter(i);\n        result.isRing = molecule.isRingAtom(i);\n        result.isSmallRing = molecule.isSmallRingAtom(i);\n        result.isStabilized = molecule.isStabilizedAtom(i);\n        // todo HACK to circumvent bug in OCL that consider than an hydrogen is connected to itself\n        result.extra.singleBonds =\n            result.atomicNo === 1 ? 0 : result.implicitHydrogens;\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const bond = molecule.getConnBond(i, j);\n            const bondOrder = molecule.getBondOrder(bond);\n            if (molecule.isAromaticBond(bond)) {\n                extra.aromaticBonds++;\n            }\n            else if (bondOrder === 1) {\n                // not an hydrogen\n                extra.singleBonds++;\n            }\n            else if (bondOrder === 2) {\n                extra.doubleBonds++;\n            }\n            else if (bondOrder === 3) {\n                extra.tripleBonds++;\n            }\n        }\n        result.extra.totalBonds =\n            result.extra.singleBonds +\n                result.extra.doubleBonds +\n                result.extra.tripleBonds +\n                result.extra.aromaticBonds;\n        if (result.atomicNo === 6) {\n            result.extra.cnoHybridation = result.extra.totalBonds - 1;\n        }\n        else if (result.atomicNo === 7) {\n            result.extra.cnoHybridation = result.extra.totalBonds;\n        }\n        else if (result.atomicNo === 8) {\n            result.extra.cnoHybridation = result.extra.totalBonds + 1;\n        }\n        else if (result.atomicNo === 1) {\n            const connectedAtom = molecule.getAllConnAtoms(i) === 0\n                ? 0\n                : molecule.getAtomicNo(molecule.getConnAtom(i, 0));\n            result.extra.hydrogenOnAtomicNo = connectedAtom;\n            if (connectedAtom === 7 || connectedAtom === 8) {\n                result.extra.labileHydrogen = true;\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getAtomsInfo.js.map","export function getImplicitHydrogensCount(molecule, atomID) {\n    return molecule.getImplicitHydrogens(atomID);\n}\n//# sourceMappingURL=getImplicitHydrogensCount.js.map","import { atomSorter } from 'atom-sorter';\n/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {object}\n */\nexport function getMF(molecule) {\n    const entries = molecule.getFragments();\n    const result = {};\n    let parts = [];\n    const allAtoms = [];\n    for (const entry of entries) {\n        const mf = getFragmentMF(entry, allAtoms);\n        parts.push(mf);\n    }\n    const counts = {};\n    for (const part of parts) {\n        if (!counts[part])\n            counts[part] = 0;\n        counts[part]++;\n    }\n    parts = [];\n    const sortedKeys = Object.keys(counts);\n    sortedKeys.sort();\n    for (const key of sortedKeys) {\n        if (counts[key] > 1) {\n            parts.push(counts[key] + key);\n        }\n        else {\n            parts.push(key);\n        }\n    }\n    result.parts = parts;\n    result.mf = toMFString(allAtoms);\n    return result;\n}\nfunction getFragmentMF(molecule, allAtoms) {\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {\n            charge: molecule.getAtomCharge(i),\n            label: molecule.getAtomLabel(i),\n            mass: molecule.getAtomMass(i),\n            implicitHydrogens: molecule.getImplicitHydrogens(i),\n        };\n        if (atom.label === '?')\n            atom.label = 'R';\n        atoms.push(atom);\n        allAtoms.push(atom);\n    }\n    return toMFString(atoms);\n}\nfunction toMFString(atoms) {\n    let charge = 0;\n    const mfs = {};\n    for (const atom of atoms) {\n        let label = atom.label;\n        charge += atom.charge;\n        if (atom.mass) {\n            label = `[${atom.mass}${label}]`;\n        }\n        const mfAtom = mfs[label];\n        if (!mfAtom) {\n            mfs[label] = 0;\n        }\n        mfs[label] += 1;\n        if (atom.implicitHydrogens) {\n            if (!mfs.H)\n                mfs.H = 0;\n            mfs.H += atom.implicitHydrogens;\n        }\n    }\n    let mf = '';\n    const keys = Object.keys(mfs);\n    keys.sort(atomSorter);\n    for (const key of keys) {\n        mf += key;\n        if (mfs[key] > 1)\n            mf += mfs[key];\n    }\n    if (charge > 0) {\n        mf += `(+${charge > 1 ? charge : ''})`;\n    }\n    else if (charge < 0) {\n        mf += `(${charge < -1 ? charge : '-'})`;\n    }\n    return mf;\n}\n//# sourceMappingURL=getMF.js.map","/**\n * Returns the charge of a molecule\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {number}\n */\nexport function getCharge(molecule) {\n    let charge = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        charge += molecule.getAtomCharge(i);\n    }\n    return charge;\n}\n//# sourceMappingURL=getCharge.js.map","/**\n * We have 2 molfiles and we would like to map the atom number from one to the other.\n * We expect that both molfiles contain the same atoms that can be in a different order.\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} from\n * @param {string} to\n * @returns {{fromTo: number[], toFrom: number[]}} - fromTo is an array of the same length as the number of atoms in the from molfile. Each element is the index of the corresponding atom in the to molfile. toFrom is the opposite.\n */\nexport function getMolfilesMapping(OCL, from, to) {\n    const { Molecule } = OCL;\n    const fromF = from.replaceAll(' H ', ' X ');\n    const toF = to.replaceAll(' H ', ' X ');\n    // we may ignore mapping because we should not have hydrogens anymore\n    const fromMoleculeF = Molecule.fromMolfile(fromF);\n    const toMoleculeF = Molecule.fromMolfile(toF);\n    if (fromMoleculeF.getIDCode() !== toMoleculeF.getIDCode()) {\n        // only a problem of hydrogens ?\n        const fromMolecule = Molecule.fromMolfile(from);\n        const toMolecule = Molecule.fromMolfile(to);\n        if (fromMolecule.getIDCode() === toMolecule.getIDCode()) {\n            throw new Error('Molecules do not have the same explicit hydrogens');\n        }\n        else {\n            throw new Error('Molecules are different');\n        }\n    }\n    const fromFinalRanks = [...fromMoleculeF.getFinalRanks()];\n    const toFinalRanks = [...toMoleculeF.getFinalRanks()];\n    // need now to create the mapping\n    const fromTo = [];\n    const toFrom = [];\n    for (let i = 0; i < fromFinalRanks.length; i++) {\n        const fromRank = fromFinalRanks[i];\n        const toRank = toFinalRanks.indexOf(fromRank);\n        if (toRank === -1) {\n            throw new Error('Rank not found. This should never happen.');\n        }\n        fromTo[i] = toRank;\n        toFrom[toRank] = i;\n    }\n    return { fromTo, toFrom };\n}\n//# sourceMappingURL=getMolfilesMapping.js.map","const unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n};\n/**\n * Simplified version of the calculation in mf-parser\n * @param mf\n * @returns\n */\nexport function getUnsaturation(mf) {\n    // split a molecular formula into its elements\n    const elements = mf.match(/[A-Z][a-z]*\\d*/g);\n    if (!elements || elements.length === 0)\n        return undefined;\n    let unsaturation = 0;\n    for (const element of elements) {\n        const matches = element.match(/([A-Z][a-z]?)(\\d*)/);\n        const symbol = matches[1];\n        const count = matches[2] ? Number.parseInt(matches[2], 10) : 1;\n        const elementObject = unsaturationsObject[symbol];\n        if (elementObject === undefined) {\n            return undefined;\n        }\n        unsaturation += elementObject * count;\n    }\n    return unsaturation / 2 + 1;\n}\n//# sourceMappingURL=getUnsaturation.js.map","// this page allows to debug the hints: https://my.cheminfo.org/?viewURL=https%3A%2F%2Fmyviews.cheminfo.org%2Fdb%2Fvisualizer%2Fentry%2F108024089da99d0cb70a57724486d0c6%2Fview.json\nimport { TopicMolecule } from \"../topic/TopicMolecule.js\";\nimport { getUnsaturation } from \"./getUnsaturation.js\";\nconst defaultPossibleHints = [\n    {\n        idCode: String.raw `eF@Hp\\pcc`,\n        message: 'What about a non-aromatic ring?',\n    },\n    {\n        idCode: 'eF@HpZpk|X`',\n        message: 'You should consider an aromatic ring.',\n    },\n    {\n        idCode: 'gFp@DiTt@@B',\n        message: 'Did you think about benzene derivatives?',\n    },\n    {\n        idCode: 'eFHBLFLYpB@QVE_cD',\n        message: 'An aromatic cycle can be an heterocycle.',\n    },\n    {\n        idCode: 'eMHJN`q[N@PBGN@PBJhjU~JU@',\n        anyMatches: ['gFx@@eJf`@@P', 'gKP@Di\\\\YZ@qas`D@`'],\n        message: 'There could be more than one heteroatom in an aromatic cycle.',\n    },\n    {\n        idCode: 'gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX',\n        anyMatches: ['gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 5 and it is 6',\n    },\n    {\n        idCode: 'gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`',\n        anyMatches: ['gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 6 and it is 5',\n    },\n    {\n        idCode: 'gFx@@eJf`@@P',\n        message: 'Did you think about pyridine derivatives?',\n    },\n    {\n        idCode: 'gNp@LdbLjj@vdrpqSdm_qhXiKT',\n        message: 'I would consider bicyclo products.',\n        remarks: 'One atom bridge',\n    },\n    {\n        idCode: 'eFHBJD',\n        message: 'Adding a carbonyl could help.',\n    },\n    {\n        idCode: 'eMHAIhMi}EqfFBmN?vP',\n        message: 'You should consider an alcohol.',\n    },\n    {\n        idCode: 'eMB@HRZCBKSFXXJt{?Y@',\n        message: 'You should consider a thiol.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`sAUR]g_zlP',\n        message: 'You should consider an ether.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`r`q?EAcuX`',\n        anyMatches: ['gJQ@@eKU@[KFJtLAa`?uX`'],\n        message: 'An ether can be in a cycle.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLpUTgYw~kD',\n        message: 'You should consider a thioether.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLhL_qPX}VH',\n        anyMatches: ['gJPH@DIRuPFrqbmC@XXO}VH'],\n        message: 'A thioether can be in a cycle.',\n    },\n    {\n        idCode: 'eM`AIhLHmLYa`kSo}d',\n        message: 'You should consider a primary amine.',\n        remarks: 'primary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAUIv]?jq@',\n        message: 'You should consider a secondary amine.',\n        remarks: 'secondary',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppUv\\\\WUw~xu`',\n        message: 'You should consider a tertiary amine.',\n        remarks: 'tertiary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAeAcUIv]~JCGjq@',\n        anyMatches: ['gJX@@eKU@XPVVLUhXCCAfBjd{N?uX`'],\n        message: 'A secondary amine can be in a cycle.',\n        remarks: 'secondary cyclic amine',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppYPXuv\\\\WUwxhL^xu`',\n        anyMatches: ['gNx@@eRmUPFDElZxxppVFAppY`j{NKj{?\\\\Zp'],\n        message: 'A tertiary amine can be in a cycle.',\n        remarks: 'tertiary cyclic amine',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppUa]?ju@',\n        message: 'What about an ester?',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGP`@df]j`MekEZFBppUa]?ju@'],\n        message: 'An ester can be in a cycle.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppUa]?ju@',\n        message: 'There is an amide function in the molecule.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGY@DDf]j`MekEZFBppUa]?ju@@'],\n        message: 'An amide can be in a cycle.',\n    },\n    {\n        idCode: 'gCi@DDfZ@~btl',\n        message: 'There is a primary amide in the molecule.',\n    },\n    {\n        idCode: 'gC``@dfZ@~bl',\n        message: 'You should think about carboxylic acids. The OH signal may be very wide.',\n    },\n    {\n        idCode: String.raw `eF@Hh\\q@`,\n        message: 'What about having an olefin?',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CqB^JoV[m', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB^JoV[m'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gGP`@df]j`H',\n        anyMatches: ['gGP`@dfUj`H'],\n        message: 'You should check the orientation of the ester.',\n    },\n    {\n        idCode: String.raw `gOq@@drm\\@@Aa@`,\n        message: 'Alcohols on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: String.raw `gOx@@drm\\@@A}A@`,\n        message: 'NH on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: 'eFHBJGuP',\n        message: 'Hydrogens on a carbonyl have very high chemical shifts.',\n    },\n];\n/**\n *\n * @param correct\n * @param proposed\n * @param options\n * @returns\n */\nexport function getNMRHints(correct, proposed, options = {}) {\n    const hints = [\n        ...checkMF(correct, proposed),\n        ...checkUnsaturation(correct, proposed),\n        ...checkStereoAndTautomer(correct, proposed),\n    ];\n    const { possibleHints = defaultPossibleHints } = options;\n    const OCL = correct.getOCL();\n    const searcherCorrect = new OCL.SSSearcher();\n    searcherCorrect.setMolecule(correct);\n    const searcherAnswer = new OCL.SSSearcher();\n    searcherAnswer.setMolecule(proposed);\n    for (const possibleHint of possibleHints) {\n        const { anyMatches } = possibleHint;\n        if (anyMatches) {\n            // we filter the molecules so they match at least one of the anyMatches\n            let match = false;\n            for (const anyMatch of anyMatches) {\n                const matchFragment = OCL.Molecule.fromIDCode(anyMatch);\n                searcherAnswer.setFragment(matchFragment);\n                if (searcherAnswer.isFragmentInMolecule()) {\n                    match = true;\n                    break;\n                }\n            }\n            if (!match)\n                continue;\n        }\n        const fragment = OCL.Molecule.fromIDCode(possibleHint.idCode);\n        searcherCorrect.setFragment(fragment);\n        searcherAnswer.setFragment(fragment);\n        if (searcherCorrect.isFragmentInMolecule() &&\n            !searcherAnswer.isFragmentInMolecule()) {\n            hints.push(possibleHint);\n        }\n    }\n    // we suggest symmetry only if MF is correct\n    if (isMFCorrect(correct, proposed)) {\n        hints.push(...checkSymmetry(correct, proposed));\n    }\n    return hints.map((hint) => ({\n        ...hint,\n        hash: getHash(JSON.stringify(hint)),\n    }));\n}\nfunction isMFCorrect(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    return mfCorrect === mfAnswer;\n}\nfunction checkMF(correct, answer) {\n    if (isMFCorrect(correct, answer))\n        return [];\n    return [\n        {\n            message: 'You should check the molecular formula.',\n        },\n    ];\n}\nfunction checkUnsaturation(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    if (mfCorrect !== mfAnswer) {\n        const unsaturationCorrect = getUnsaturation(mfCorrect);\n        const unsaturationAnswer = getUnsaturation(mfAnswer);\n        if (unsaturationCorrect === unsaturationAnswer ||\n            unsaturationAnswer === undefined ||\n            unsaturationCorrect === undefined) {\n            return [];\n        }\n        if (unsaturationCorrect > unsaturationAnswer) {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too low.',\n                },\n            ];\n        }\n        else {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too high.',\n                },\n            ];\n        }\n    }\n    return [];\n}\nfunction checkStereoAndTautomer(correct, answer) {\n    if (correct.getIDCode() === answer.getIDCode())\n        return [];\n    if (getNoStereoIDCode(correct) === getNoStereoIDCode(answer)) {\n        return [\n            {\n                message: 'There is only a problem with stereochemistry.',\n            },\n        ];\n    }\n    if (getTautomerIDCode(correct) === getTautomerIDCode(answer)) {\n        return [\n            {\n                message: \"Weird, you didn't draw the expected tautomer.\",\n            },\n        ];\n    }\n    return [];\n}\nfunction checkSymmetry(correct, answer) {\n    const nbCorrectRanks = Object.keys(new TopicMolecule(correct).getDiaIDsObject()).length;\n    const nbAnswerRanks = Object.keys(new TopicMolecule(answer).getDiaIDsObject()).length;\n    if (nbCorrectRanks === nbAnswerRanks)\n        return [];\n    if (nbCorrectRanks > nbAnswerRanks) {\n        return [\n            {\n                message: 'The proposed molecule is too symmetric.',\n            },\n        ];\n    }\n    else {\n        return [\n            {\n                message: 'The proposed molecule is not symmetric enough.',\n            },\n        ];\n    }\n}\nfunction getTautomerIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.TAUTOMER);\n}\nfunction getNoStereoIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.NOSTEREO);\n}\n/*\n    https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js\n    cyrb53a (c) 2023 bryc (github.com/bryc)\n    License: Public domain. Attribution appreciated.\n    The original cyrb53 has a slight mixing bias in the low bits of h1.\n    This shouldn't be a huge problem, but I want to try to improve it.\n    This new version should have improved avalanche behavior, but\n    it is not quite final, I may still find improvements.\n    So don't expect it to always produce the same output.\n*/\nfunction getHash(str, seed = 0) {\n    let h1 = 0xdeadbeef ^ seed;\n    let h2 = 0x41c6ce57 ^ seed;\n    for (let i = 0, ch; i < str.length; i++) {\n        ch = str.codePointAt(i);\n        h1 = Math.imul(h1 ^ ch, 0x85ebca77);\n        h2 = Math.imul(h2 ^ ch, 0xc2b2ae3d);\n    }\n    h1 ^= Math.imul(h1 ^ (h2 >>> 15), 0x735a2d97);\n    h2 ^= Math.imul(h2 ^ (h1 >>> 15), 0xcaf649a9);\n    h1 ^= h2 >>> 16;\n    h2 ^= h1 >>> 16;\n    return 2097152 * (h2 >>> 0) + (h1 >>> 11);\n}\n//# sourceMappingURL=getNMRHints.js.map","import { getNMRHints } from \"./getNMRHints.js\";\n/**\n *\n * @param correct\n * @param proposed\n * @param providedHints\n */\nexport function getNextNMRHint(correct, proposed, providedHints) {\n    const hints = getNMRHints(correct, proposed);\n    const possibleHints = hints.filter((possibleHint) => !providedHints.some((providedHint) => possibleHint.hash === providedHint.hash));\n    if (possibleHints.length === 0)\n        return undefined;\n    return {\n        ...possibleHints[0],\n        idCode: proposed.getIDCode(),\n    };\n}\n//# sourceMappingURL=getNextNMRHint.js.map","let toxicityPredictor;\nlet druglikenessPredictor;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.includeToxicities=false]\n * @param {boolean} [options.includeDruglikeness=false]\n */\nexport function getProperties(molecule, options = {}) {\n    const { includeToxicities = false, includeDruglikeness = false } = options;\n    const OCL = molecule.getOCL();\n    if (!OCL.MoleculeProperties) {\n        throw new Error('OCL.MoleculeProperties is not defined');\n    }\n    const props = new OCL.MoleculeProperties(molecule);\n    const moleculeFormula = molecule.getMolecularFormula();\n    const result = {\n        acceptorCount: props.acceptorCount,\n        donorCount: props.donorCount,\n        logP: props.logP,\n        logS: props.logS,\n        polarSurfaceArea: props.polarSurfaceArea,\n        rotatableBondCount: props.rotatableBondCount,\n        stereoCenterCount: props.stereoCenterCount,\n        mw: moleculeFormula.relativeWeight,\n        mf: moleculeFormula.formula,\n    };\n    if (includeToxicities) {\n        const { ToxicityPredictor } = molecule.getOCL();\n        if (!ToxicityPredictor) {\n            throw new Error('OCL.ToxicityPredictor is not defined');\n        }\n        if (!toxicityPredictor) {\n            toxicityPredictor = new ToxicityPredictor();\n        }\n        result.mutagenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_MUTAGENIC);\n        result.tumorigenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_TUMORIGENIC);\n        result.irritant = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_IRRITANT);\n        result.reproductiveEffective = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_REPRODUCTIVE_EFFECTIVE);\n    }\n    if (includeDruglikeness) {\n        const { DruglikenessPredictor } = molecule.getOCL();\n        if (!DruglikenessPredictor) {\n            throw new Error('OCL.DruglikenessPredictor is not defined');\n        }\n        if (!druglikenessPredictor) {\n            druglikenessPredictor = new DruglikenessPredictor();\n        }\n        result.drugLikeness = druglikenessPredictor.assessDruglikeness(molecule);\n    }\n    if (result.drugLikeness !== undefined && result.mutagenic !== undefined) {\n        result.drugScore = OCL.DrugScoreCalculator.calculate(result.logP, result.polarSurfaceArea, result.mw, result.drugLikeness, [\n            result.mutagenic,\n            result.tumurogenic,\n            result.irritant,\n            result.reproductiveEffective,\n        ]);\n    }\n    return result;\n}\n//# sourceMappingURL=getProperties.js.map","/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {OCL.Molecule} [molecule] - an instance of OCL.Molecule\n * @returns {}\n */\nexport function getAtoms(molecule) {\n    const entries = molecule.getFragments();\n    const atoms = {};\n    const result = { atoms, parts: [] };\n    for (const entry of entries) {\n        const part = {};\n        result.parts.push(part);\n        appendAtomPart(entry, atoms, part);\n    }\n    return result;\n}\nfunction appendAtomPart(molecule, atoms, part) {\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const label = molecule.getAtomLabel(i);\n        if (!atoms[label]) {\n            atoms[label] = 0;\n        }\n        atoms[label] += 1;\n        if (!part[label]) {\n            part[label] = 0;\n        }\n        part[label] += 1;\n        const implicitHydrogens = molecule.getImplicitHydrogens(i);\n        if (implicitHydrogens) {\n            if (!atoms.H) {\n                atoms.H = 0;\n            }\n            atoms.H += implicitHydrogens;\n            if (!part.H) {\n                part.H = 0;\n            }\n            part.H += implicitHydrogens;\n        }\n    }\n}\n//# sourceMappingURL=getAtoms.js.map","/**\n * Return the number of Hydroxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Hydroxyl groups'\n */\nexport function nbOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atome they are not couted as Hydroxyl groups\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is Carbonyl group on the same carbon atom it is not couted as Hydroxyl group\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Hydroxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (!carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbOH.js.map","/**\n * Return the number of Carboxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carboxyl groups'\n */\nexport function nbCOOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atom it is not couted as Carboxyl group\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl in the same carbon atom it is not count as Carboxyl group\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carboxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCOOH.js.map","/**\n * Return the number of Carbonyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carbonyl groups'\n */\nexport function nbCHO(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        // if there is not at least one hydrogen in the carbon atom there can not be a carbonyl group\n        if (molecule.getAtomicNo(i) === 6 && molecule.getAllHydrogens(i) > 0) {\n            let carbonyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl group on the same carbon atom they are not counted as carbonyl groups\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carbonyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCHO.js.map","/**\n * Return the number of Primary amine groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Primary amine groups'\n */\nexport function nbNH2(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let amine = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 1 &&\n                    molecule.getAllHydrogens(neighbourAtom) > 1) {\n                    // If there is more than a Primary amine in the same carbon atom they are not couted as Primary amines groups\n                    if (amine) {\n                        amine = false;\n                        break;\n                    }\n                    amine = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Primary amine group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (amine && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbNH2.js.map","/**\n * Return the number of Nitrile groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Nitrile groups'\n */\nexport function nbCN(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let cn = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 3) {\n                    // If there is more than one Nitrile group in the same carbon atome they are not counted as Nitrile groups\n                    if (cn) {\n                        cn = false;\n                        break;\n                    }\n                    cn = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Nitrile group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (cn && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCN.js.map","/**\n * Return the number of labile protons being either on O, N, Br, Cl, F, I or S\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {Array<number>} [options.atomicNumbers=[7, 8, 9, 16, 17, 35, 53]] - atomic numbers of the labile protons\n * @returns {number} 'Number of labile protons'\n */\nexport function nbLabileH(molecule, options = {}) {\n    const { atomicNumbers = [7, 8, 9, 16, 17, 35, 53] } = options;\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (atomicNumbers.includes(molecule.getAtomicNo(i))) {\n            counter += molecule.getAllHydrogens(i);\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbLabileH.js.map","/**\n * Toggle presence of implicity hydrogens on/off\n * @param molecule\n * @param atomID\n */\nexport function toggleHydrogens(molecule, atomID) {\n    if (molecule.getImplicitHydrogens(atomID) === 0) {\n        const atomsToDelete = [];\n        for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n            const connectedAtom = molecule.getConnAtom(atomID, i);\n            if (molecule.getAtomicNo(connectedAtom) === 1) {\n                atomsToDelete.push(connectedAtom);\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n    }\n    else {\n        molecule.addImplicitHydrogens(atomID);\n    }\n}\n//# sourceMappingURL=toggleHydrogens.js.map","import { getDiastereotopicAtomIDsAndH } from '../diastereotopic/getDiastereotopicAtomIDsAndH.js';\nimport { getGroupedDiastereotopicAtomIDs } from '../diastereotopic/getGroupedDiastereotopicAtomIDs.js';\nexport function toVisualizerMolfile(molecule, options = {}) {\n    const { diastereotopic, heavyAtomHydrogen } = options;\n    let highlight = [];\n    let atoms = {};\n    if (diastereotopic) {\n        const hydrogenInfo = {};\n        const extendedIDs = getDiastereotopicAtomIDsAndH(molecule);\n        for (const line of extendedIDs) {\n            hydrogenInfo[line.oclID] = line;\n        }\n        const diaIDs = getGroupedDiastereotopicAtomIDs(molecule);\n        for (const diaID of diaIDs) {\n            atoms[diaID.oclID] = diaID.atoms;\n            highlight.push(diaID.oclID);\n            if (heavyAtomHydrogen &&\n                hydrogenInfo[diaID.oclID] &&\n                hydrogenInfo[diaID.oclID].nbHydrogens > 0) {\n                for (const id of hydrogenInfo[diaID.oclID].hydrogenOCLIDs) {\n                    highlight.push(id);\n                    atoms[id] = diaID.atoms;\n                }\n            }\n        }\n    }\n    else {\n        const size = molecule.getAllAtoms();\n        highlight = new Array(size).fill(0).map((a, index) => index);\n        atoms = highlight.map((a) => [a]);\n    }\n    const molfile = {\n        type: 'mol2d',\n        value: molecule.toMolfile(),\n        _highlight: highlight,\n        _atoms: atoms,\n    };\n    return molfile;\n}\n//# sourceMappingURL=toVisualizerMolfile.js.map","/**\n * Calculates the path between 2 atoms\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} from - index of the first atom\n * @param {number} to - index of the end atom\n * @param {number} maxLength - maximal length of the path\n */\nexport function getPathAndTorsion(molecule, from, to, maxLength) {\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    return {\n        atoms: originalAtoms,\n        from,\n        to,\n        torsion,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getPathAndTorsion.js.map","import { getHoseCodesForPath } from '../hose/getHoseCodesForPath.js';\nimport { getAtomsInfo } from '../util/getAtomsInfo.js';\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getPathAndTorsion } from './getPathAndTorsion.js';\nlet fragment;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.fromLabel='H']\n * @param {string} [options.toLabel='H']\n * @param {number} [options.minLength=1]\n * @param {number} [options.maxLength=4]\n * @param {boolean} [options.withHOSES=false]\n */\nexport function getPathsInfo(molecule, options = {}) {\n    const { fromLabel = 'H', toLabel = 'H', minLength = 1, maxLength = 4, withHOSES = false, } = options;\n    const OCL = molecule.getOCL();\n    if (!fragment) {\n        fragment = new OCL.Molecule(0, 0);\n    }\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    // we need to find all the atoms 'fromLabel' and 'toLabel'\n    const atomsInfo = getAtomsInfo(molecule);\n    const pathLengthMatrix = getConnectivityMatrix(molecule, {\n        pathLength: true,\n    });\n    for (let from = 0; from < molecule.getAllAtoms(); from++) {\n        atomsInfo[from].paths = [];\n        for (let to = 0; to < molecule.getAllAtoms(); to++) {\n            if (from !== to &&\n                molecule.getAtomicNo(from) === fromAtomicNumber &&\n                molecule.getAtomicNo(to) === toAtomicNumber) {\n                const pathLength = pathLengthMatrix[from][to];\n                if (pathLength >= minLength && pathLength <= maxLength) {\n                    if (withHOSES) {\n                        atomsInfo[from].paths.push(getHoseCodesForPath(molecule, from, to, pathLength));\n                    }\n                    else {\n                        atomsInfo[from].paths.push(getPathAndTorsion(molecule, from, to, pathLength));\n                    }\n                }\n            }\n        }\n    }\n    return atomsInfo;\n}\n//# sourceMappingURL=getPathsInfo.js.map","/**\n * Get the shortest path between each pair of atoms in the molecule\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.fromLabel='H']\n * @param {string} [options.toLabel='H']\n * @param {number} [options.maxLength=4]\n * @returns {Array<Array>} A matrix containing on each cell (i,j) the shortest path from atom i to atom j\n */\nexport function getShortestPaths(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { fromLabel = '', toLabel = '', maxLength = 3 } = options;\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    const nbAtoms = molecule.getAllAtoms();\n    const allShortestPaths = new Array(nbAtoms);\n    for (let i = 0; i < nbAtoms; i++) {\n        allShortestPaths[i] = new Array(nbAtoms);\n    }\n    for (let from = 0; from < nbAtoms; from++) {\n        allShortestPaths[from][from] = [from];\n        for (let to = from + 1; to < nbAtoms; to++) {\n            if ((fromAtomicNumber === 0 ||\n                molecule.getAtomicNo(from) === fromAtomicNumber) &&\n                (toAtomicNumber === 0 || molecule.getAtomicNo(to) === toAtomicNumber)) {\n                const path = [];\n                molecule.getPath(path, from, to, maxLength);\n                if (path.length > 0) {\n                    allShortestPaths[from][to] = path.slice();\n                    allShortestPaths[to][from] = path.toReversed();\n                }\n                else {\n                    allShortestPaths[from][to] = null;\n                    allShortestPaths[to][from] = null;\n                }\n            }\n            else {\n                allShortestPaths[from][to] = null;\n                allShortestPaths[to][from] = null;\n            }\n        }\n    }\n    return allShortestPaths;\n}\n//# sourceMappingURL=getShortestPaths.js.map","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<i){let e=this._config.newline;e||(r=this._config.quoteChar||'\"',e=this._handle.guessLineEndings(t,r)),t=[...t.split(e).slice(i)].join(e)}this.isFirstChunk&&U(this._config.beforeFirstChunk)&&void 0!==(r=this._config.beforeFirstChunk(t))&&(t=r),this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+t,r=(this._partialLine=\"\",this._handle.parse(i,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){t=r.meta.cursor,i=(this._finished||(this._partialLine=i.substring(t-this._baseIndex),this._baseIndex=t),r&&r.data&&(this._rowCount+=r.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(U(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!U(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,t=(this._config.chunkSize&&(t=Math.min(this._start+this._config.chunkSize,this._input.size),e=r.call(e,this._start,t)),i.readAsText(e,this._config.encoding));n||this._chunkLoaded({target:{result:t}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e<p.data.length;e++)p.data[e].forEach(t);p.data.splice(0,1)}else p.data.forEach(t);function t(e,t){U(m.transformHeader)&&(e=m.transformHeader(e,t)),c.push(e)}}function i(e,t){for(var i=m.header?{}:[],r=0;r<e.length;r++){var n=r,s=e[r],s=((e,t)=>(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h<e&&e<o)return 1}})(t)?parseFloat(t):d.test(t)?new Date(t):\"\"===t?null:t):t)(n=m.header?r>=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):r<c.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+c.length+\" fields but parsed \"+r,f+t)),i}var r;p&&(m.header||m.dynamicTyping||m.transform)&&(r=1,!p.data.length||Array.isArray(p.data[0])?(p.data=p.data.map(i),r=p.data.length):p.data=i(p.data,0),m.header&&p.meta&&(p.meta.fields=c),f+=r)}function _(){return m.header&&0===c.length}function k(e,t,i,r){e={type:e,code:t,message:i};void 0!==r&&(e.row=r),p.errors.push(e)}U(m.step)&&(t=m.step,m.step=function(e){p=e,_()?g():(g(),0!==p.data.length&&(r+=e.data.length,m.preview&&r>m.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?U(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u<n.length;u++){for(var d,f=n[u],l=0,c=0,p=0,g=(o=void 0,new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e)),_=0;_<g.data.length;_++)i&&y(g.data[_])?p++:(d=g.data[_].length,c+=d,void 0===o?o=d:0<d&&(l+=Math.abs(d-o),o=d));0<g.data.length&&(c/=g.data.length-p),(void 0===a||l<=a)&&(void 0===h||h<c)&&1.99<c&&(a=l,s=f,h=c)}return{successful:!!(m.delimiter=s),bestDelimiter:s}})(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess)).successful?m.delimiter=r.bestDelimiter:(a=!0,m.delimiter=v.DefaultDelimiter),p.meta.delimiter=m.delimiter),b(m));return m.preview&&m.header&&r.preview++,n=e,s=new E(r),p=s.parse(n,t,i),g(),l?{meta:{paused:!0}}:p||{meta:{paused:!1}}},this.paused=function(){return l},this.pause=function(){l=!0,s.abort(),n=U(m.chunk)?\"\":n.substring(s.getCharIndex())},this.resume=function(){i.streamer._halted?(l=!1,i.streamer.parseChunk(n,!0)):setTimeout(i.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,s.abort(),p.meta.aborted=!0,U(m.complete)&&m.complete(p),n=\"\"},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=new RegExp(P(t)+\"([^]*?)\"+P(t),\"gm\"),i=(e=e.replace(t,\"\")).split(\"\\r\"),t=e.split(\"\\n\"),e=1<t.length&&t[0].length<i[0].length;if(1===i.length||e)return\"\\n\";for(var r=0,n=0;n<i.length;n++)\"\\n\"===i[n][0]&&r++;return r>=i.length/2?\"\\r\\n\":\"\\r\"}}function P(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1<v.BAD_DELIMITERS.indexOf(S))&&(S=\",\"),x===S)throw new Error(\"Comment character same as delimiter\");!0===x?x=\"#\":(\"string\"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=!1),\"\\n\"!==O&&\"\\r\"!==O&&\"\\r\\n\"!==O&&(O=\"\\n\");var z=0,M=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=S.length,s=O.length,a=x.length,o=U(I),h=[],u=[],d=[],f=z=0;if(!i)return w();if(T||!1!==T&&-1===i.indexOf(F)){for(var l=i.split(O),c=0;c<l.length;c++){if(d=l[c],z+=d.length,c!==l.length-1)z+=O.length;else if(r)return w();if(!x||d.substring(0,a)!==x){if(o){if(h=[],k(d.split(S)),R(),M)return w()}else k(d.split(S));if(A&&A<=c)return h=h.slice(0,A),w(!0)}}return w()}for(var p=i.indexOf(S,z),g=i.indexOf(O,z),_=new RegExp(P(j)+P(F),\"g\"),m=i.indexOf(F,z);;)if(i[z]===F)for(m=z,z++;;){if(-1===(m=i.indexOf(F,m+1)))return r||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:z}),E();if(m===n-1)return E(i.substring(z,m).replace(_,F));if(F===j&&i[m+1]===j)m++;else if(F===j||0===m||i[m-1]!==j){-1!==p&&p<m+1&&(p=i.indexOf(S,m+1));var y=v(-1===(g=-1!==g&&g<m+1?i.indexOf(O,m+1):g)?p:Math.min(p,g));if(i.substr(m+1+y,e)===S){d.push(i.substring(z,m).replace(_,F)),i[z=m+1+y+e]!==F&&(m=i.indexOf(F,z)),p=i.indexOf(S,z),g=i.indexOf(O,z);break}y=v(g);if(i.substring(m+1+y,m+1+y+s)===O){if(d.push(i.substring(z,m).replace(_,F)),b(m+1+y+s),p=i.indexOf(S,z),m=i.indexOf(F,z),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p<g||-1===g))d.push(i.substring(z,p)),z=p+e,p=i.indexOf(S,z);else{if(-1===g)break;if(d.push(i.substring(z,g)),b(g+s),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r<s.length;r++){let i=s[r];if(a[i=U(C.transformHeader)?C.transformHeader(i,r):i]){let e,t=a[i];for(;e=i+\"_\"+t,t++,o.has(e););o.add(e),s[r]=e,a[i]++,n=!0,(D=null===D?{}:D)[e]=i}else a[i]=1,s[r]=i;o.add(i)}n&&console.warn(\"Duplicate headers found and renamed.\"),L=!0}return{data:h,errors:u,meta:{delimiter:S,linebreak:O,aborted:M,truncated:!!e,cursor:f+(t||0),renamedHeaders:D}}}function R(){I(w()),h=[],u=[]}},this.abort=function(){M=!0},this.getCharIndex=function(){return z}}function g(e){var t=e.data,i=o[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:m,resume:m};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=o[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete o[e]}function m(){throw new Error(\"Not implemented.\")}function b(e){if(\"object\"!=typeof e||null===e)return e;var t,i=Array.isArray(e)?[]:{};for(t in e)i[t]=b(e[t]);return i}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return\"function\"==typeof e}return v.parse=function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,!t.worker||!v.WORKERS_SUPPORTED)return i=null,v.NODE_STREAM_INPUT,\"string\"==typeof e?(e=(e=>65279!==e.charCodeAt(0)?e:e.slice(1))(e),i=new(t.download?f:c)(t)):!0===e.readable&&U(e.read)&&U(e.on)?i=new p(t):(n.File&&e instanceof File||e instanceof Object)&&(i=new l(t)),i.stream(e);(i=(()=>{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1,h=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(n=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(s=t.quoteChar),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s),t.escapeFormulae instanceof RegExp?o=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(o=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(P(s),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if(\"object\"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=k(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=(n?e:t[o]).length,u=!1,d=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var f=[],l=0;l<h;l++){var c=s?e[l]:l;f.push(t[o][c])}u=\"\"===f.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!d&&(r+=m);var g=n&&s?e[p]:p;r+=k(t[o][g],p)}o<t.length-1&&(!i||0<h&&!d)&&(r+=y)}}return r}function k(e,t){var i,r;return null==e?\"\":e.constructor===Date?JSON.stringify(e).slice(1,25):(r=!1,o&&\"string\"==typeof e&&o.test(e)&&(e=\"'\"+e,r=!0),i=e.toString().replace(h,a),(r=r||!0===n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||((e,t)=>{for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1})(i,v.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1))?s+i+s:i)}},v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK=\"\\ufeff\",v.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!s&&!!n.Worker,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=\",\",v.Parser=E,v.ParserHandle=i,v.NetworkStreamer=f,v.FileStreamer=l,v.StringStreamer=c,v.ReadableStreamStreamer=p,n.jQuery&&((d=n.jQuery).fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&n.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0===h.length)U(o.complete)&&o.complete();else{var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},v.parse(n.file,n.instanceConfig)}}function u(){h.splice(0,1),e()}}),a&&(n.onmessage=function(e){e=e.data;void 0===v.WORKER_ID&&e&&(v.WORKER_ID=e.workerId);\"string\"==typeof e.input?n.postMessage({workerId:v.WORKER_ID,results:v.parse(e.input,e.config),finished:!0}):(n.File&&e.input instanceof File||e.input instanceof Object)&&(e=v.parse(e.input,e.config))&&n.postMessage({workerId:v.WORKER_ID,results:e,finished:!0})}),(f.prototype=Object.create(u.prototype)).constructor=f,(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(c.prototype)).constructor=c,(p.prototype=Object.create(u.prototype)).constructor=p,v});","export default function getMoleculeCreators(OCL) {\n    const fields = new Map([\n        ['oclid', OCL.Molecule.fromIDCode],\n        ['idcode', OCL.Molecule.fromIDCode],\n        ['smiles', OCL.Molecule.fromSmiles],\n        ['molfile', OCL.Molecule.fromMolfile],\n        [\n            'smarts',\n            (smarts) => {\n                const smilesParser = new OCL.SmilesParser({ smartsMode: 'smarts' });\n                return smilesParser.parseMolecule(smarts);\n            },\n        ],\n    ]);\n    return fields;\n}\n//# sourceMappingURL=getMoleculeCreators.js.map","import { ensureString } from 'ensure-string';\nimport Papa from 'papaparse';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nconst defaultCSVOptions = {\n    header: true,\n    dynamicTyping: true,\n    skipEmptyLines: true,\n};\nexport default async function appendCSV(moleculesDB, csv, options = {}) {\n    const { onStep } = options;\n    csv = ensureString(csv);\n    const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n    if (typeof csv !== 'string') {\n        throw new TypeError('csv must be a string');\n    }\n    options = { ...defaultCSVOptions, ...options };\n    const parsed = Papa.parse(csv, options);\n    const fields = parsed.meta.fields;\n    const stats = new Array(fields.length);\n    const firstElement = parsed.data[0];\n    let moleculeCreator, moleculeField;\n    for (let i = 0; i < fields.length; i++) {\n        stats[i] = {\n            label: fields[i],\n            isNumeric: typeof firstElement[fields[i]] === 'number',\n        };\n        const lowerField = fields[i].toLowerCase();\n        if (moleculeCreators.has(lowerField)) {\n            moleculeCreator = moleculeCreators.get(lowerField);\n            moleculeField = fields[i];\n        }\n    }\n    if (!moleculeCreator) {\n        throw new Error('this document does not contain any molecule field');\n    }\n    for (let i = 0; i < parsed.data.length; i++) {\n        moleculesDB.pushEntry(moleculeCreator(parsed.data[i][moleculeField]), parsed.data[i]);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.data.length);\n        }\n    }\n}\n//# sourceMappingURL=appendCSV.js.map","export default function appendColor(moleculesDB, options = {}) {\n    const { dataLabel, propertyLabel, minValue, maxValue, minHue = 0, maxHue = 360, saturation = 65, lightness = 65, colorLabel = 'color', } = options;\n    const db = moleculesDB.getDB();\n    let values;\n    if (dataLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: datum[dataLabel], data: datum })));\n    }\n    else if (propertyLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({\n            value: result.properties[propertyLabel],\n            data: datum,\n        })));\n    }\n    else {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: undefined, data: datum })));\n    }\n    if (minValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value < minValue) {\n                value.value = minValue;\n            }\n        }\n    }\n    if (maxValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value > maxValue) {\n                value.value = maxValue;\n            }\n        }\n    }\n    const definedValues = values.filter((value) => value.value !== undefined);\n    const min = Math.min(...definedValues.map((value) => value.value));\n    const max = Math.max(...definedValues.map((value) => value.value));\n    for (const value of values) {\n        if (value.value !== undefined) {\n            value.data[colorLabel] = `hsl(${Math.floor(((value.value - min) / (max - min)) * (maxHue - minHue) + minHue)},${saturation}%,${lightness}%)`;\n        }\n        else {\n            value.data.color = 'black';\n        }\n    }\n}\n//# sourceMappingURL=appendColor.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// index.ts\nvar isObject = /* @__PURE__ */ __name((v) => v !== null && typeof v === \"object\", \"isObject\");\nvar join = /* @__PURE__ */ __name((segs, joinChar, options) => {\n  if (typeof options.join === \"function\") {\n    return options.join(segs);\n  }\n  return segs[0] + joinChar + segs[1];\n}, \"join\");\nvar split = /* @__PURE__ */ __name((path, splitChar, options) => {\n  if (typeof options.split === \"function\") {\n    return options.split(path);\n  }\n  return path.split(splitChar);\n}, \"split\");\nvar isValid = /* @__PURE__ */ __name((key, target = {}, options) => {\n  if (typeof options?.isValid === \"function\") {\n    return options.isValid(key, target);\n  }\n  return true;\n}, \"isValid\");\nvar isValidObject = /* @__PURE__ */ __name((v) => {\n  return isObject(v) || typeof v === \"function\";\n}, \"isValidObject\");\nvar getValue = /* @__PURE__ */ __name((target, path, options = {}) => {\n  if (!isObject(options)) {\n    options = { default: options };\n  }\n  if (!isValidObject(target)) {\n    return typeof options.default !== \"undefined\" ? options.default : target;\n  }\n  if (typeof path === \"number\") {\n    path = String(path);\n  }\n  const pathIsArray = Array.isArray(path);\n  const pathIsString = typeof path === \"string\";\n  const splitChar = options.separator || \".\";\n  const joinChar = options.joinChar || (typeof splitChar === \"string\" ? splitChar : \".\");\n  if (!pathIsString && !pathIsArray) {\n    return target;\n  }\n  if (target[path] !== void 0) {\n    return isValid(path, target, options) ? target[path] : options.default;\n  }\n  const segs = pathIsArray ? path : split(path, splitChar, options);\n  const len = segs.length;\n  let idx = 0;\n  do {\n    let prop = segs[idx];\n    if (typeof prop !== \"string\") {\n      prop = String(prop);\n    }\n    while (prop && prop.slice(-1) === \"\\\\\") {\n      prop = join([prop.slice(0, -1), segs[++idx] || \"\"], joinChar, options);\n    }\n    if (target[prop] !== void 0) {\n      if (!isValid(prop, target, options)) {\n        return options.default;\n      }\n      target = target[prop];\n    } else {\n      let hasProp = false;\n      let n = idx + 1;\n      while (n < len) {\n        prop = join([prop, segs[n++]], joinChar, options);\n        if (hasProp = target[prop] !== void 0) {\n          if (!isValid(prop, target, options)) {\n            return options.default;\n          }\n          target = target[prop];\n          idx = n - 1;\n          break;\n        }\n      }\n      if (!hasProp) {\n        return options.default;\n      }\n    }\n  } while (++idx < len && isValidObject(target));\n  if (idx === len) {\n    return target;\n  }\n  return options.default;\n}, \"getValue\");\nvar index_default = getValue;\nexport {\n  index_default as default\n};\n/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n//# sourceMappingURL=index.mjs.map","import get from 'get-value';\n/**\n * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n * @param {*} moleculesDB\n * @param {object[]} entries\n * @param {object} [options={}]\n * @param {string} [options.idCodePath='ocl.idCode']\n * @param {string} [options.indexPath='ocl.index']\n * @param {string} [options.coordinatesPath='ocl.coordinates']\n * @param {string} [options.mwPath='mw']\n * @param {string} [options.smilesPath]\n * @param {string} [options.molfilePath]\n * @param {Function} [options.onStep] - call back to execute after each molecule\n * @returns\n */\nexport default async function appendEntries(moleculesDB, entries, options = {}) {\n    const { onStep, idCodePath = 'ocl.idCode', indexPath = 'ocl.index', coordinatesPath = 'ocl.coordinates', mwPath = 'mw', smilesPath, molfilePath, } = options;\n    const Molecule = moleculesDB.OCL.Molecule;\n    for (let i = 0; i < entries.length; i++) {\n        let idCode;\n        const entry = entries[i];\n        let molecule;\n        if (smilesPath) {\n            molecule = Molecule.fromSmiles(get(entry, smilesPath));\n        }\n        if (molfilePath && !molecule) {\n            molecule = Molecule.fromMolfile(get(entry, molfilePath));\n        }\n        if (!molecule) {\n            idCode = get(entry, idCodePath);\n            if (idCode) {\n                const coordinates = get(entry, coordinatesPath);\n                molecule = Molecule.fromIDCode(idCode, coordinates || false);\n            }\n        }\n        const index = get(entry, indexPath);\n        const mw = get(entry, mwPath);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, entries.length);\n        }\n        if (!moleculesDB.keepEmptyMolecules &&\n            (!molecule || molecule.getAllAtoms() === 0)) {\n            continue;\n        }\n        else if (!molecule) {\n            molecule = new moleculesDB.OCL.Molecule(0, 0);\n        }\n        if (molecule) {\n            moleculesDB.pushEntry(molecule, entry, { index, mw });\n        }\n    }\n}\n//# sourceMappingURL=appendEntries.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","/**\n *\n * @param {*} string\n * @param {*} substring\n * @param {*} eol\n * @returns\n */\nexport function getEntriesBoundaries(string, substring, eol) {\n  const res = [];\n  let previous = 0;\n  let next = 0;\n  while (next !== -1) {\n    next = string.indexOf(substring, previous);\n    if (next !== -1) {\n      res.push([previous, next]);\n      const nextMatch = string.indexOf(eol, next + substring.length);\n      if (nextMatch === -1) {\n        next = -1;\n      } else {\n        previous = nextMatch + eol.length;\n        next = previous;\n      }\n    } else {\n      res.push([previous, string.length]);\n    }\n  }\n  return res;\n}\n","/**\n * Parse the molfile and the properties with > < labels >\n * @param {string} sdfPart\n * @param {*} labels\n * @param {*} currentLabels\n * @param {object} options\n * @returns\n */\nexport function getMolecule(sdfPart, labels, currentLabels, options) {\n  let parts = sdfPart.split(`${options.eol}>`);\n  if (parts.length === 0 || parts[0].length <= 5) return;\n  let molecule = {};\n  molecule.molfile = parts[0] + options.eol;\n  for (let j = 1; j < parts.length; j++) {\n    let lines = parts[j].split(options.eol);\n    let from = lines[0].indexOf('<');\n    let to = lines[0].indexOf('>');\n    let label = lines[0].slice(from + 1, to);\n    currentLabels.push(label);\n    if (!labels[label]) {\n      labels[label] = {\n        counter: 0,\n        isNumeric: options.dynamicTyping,\n        keep: false,\n      };\n      if (\n        (!options.exclude || !options.exclude.includes(label)) &&\n        (!options.include || options.include.includes(label))\n      ) {\n        labels[label].keep = true;\n        if (options.modifiers[label]) {\n          labels[label].modifier = options.modifiers[label];\n        }\n        if (options.forEach[label]) {\n          labels[label].forEach = options.forEach[label];\n        }\n      }\n    }\n    if (labels[label].keep) {\n      for (let k = 1; k < lines.length - 1; k++) {\n        if (molecule[label]) {\n          molecule[label] += options.eol + lines[k];\n        } else {\n          molecule[label] = lines[k];\n        }\n      }\n      if (labels[label].modifier) {\n        let modifiedValue = labels[label].modifier(molecule[label]);\n        if (modifiedValue === undefined || modifiedValue === null) {\n          delete molecule[label];\n        } else {\n          molecule[label] = modifiedValue;\n        }\n      }\n      if (\n        labels[label].isNumeric &&\n        (!Number.isFinite(+molecule[label]) || molecule[label].match(/^0[0-9]/))\n      ) {\n        labels[label].isNumeric = false;\n      }\n    }\n  }\n  return molecule;\n}\n","import { ensureString } from 'ensure-string';\n\nimport { getEntriesBoundaries } from './getEntriesBoundaries';\nimport { getMolecule } from './util/getMolecule';\n/**\n *  Parse a SDF file\n * @param {string|ArrayBuffer|Uint8Array} sdf - SDF file to parse\n * @param {object} [options={}]\n * @param {string[]} [options.include] - List of fields to include\n * @param {string[]} [options.exclude] - List of fields to exclude\n * @param {Function} [options.filter] - Callback allowing to filter the molecules\n * @param {boolean} [options.dynamicTyping] - Dynamically type the data\n * @param {object} [options.modifiers] - Object containing callbacks to apply on some specific fields\n * @param {boolean} [options.mixedEOL=false] - Set to true if you know there is a mixture between \\r\\n and \\n\n * @param {string} [options.eol] - Specify the end of line character. Default will be the one found in the file\n * @returns {object} - Object containing the molecules, the labels and the statistics\n */\nexport function parse(sdf, options = {}) {\n  options = { ...options };\n  if (options.modifiers === undefined) options.modifiers = {};\n  if (options.forEach === undefined) options.forEach = {};\n  if (options.dynamicTyping === undefined) options.dynamicTyping = true;\n\n  sdf = ensureString(sdf);\n  if (typeof sdf !== 'string') {\n    throw new TypeError('Parameter \"sdf\" must be a string');\n  }\n\n  if (options.eol === undefined) {\n    options.eol = '\\n';\n    if (options.mixedEOL) {\n      sdf = sdf.replaceAll('\\r\\n', '\\n');\n      sdf = sdf.replaceAll('\\r', '\\n');\n    } else {\n      // we will find the delimiter in order to be much faster and not use regular expression\n      let header = new Set(sdf.slice(0, 1000));\n      if (header.has('\\r\\n')) {\n        options.eol = '\\r\\n';\n      } else if (header.has('\\r')) {\n        options.eol = '\\r';\n      }\n    }\n  }\n\n  let entriesBoundaries = getEntriesBoundaries(\n    sdf,\n    `${options.eol}$$$$`,\n    options.eol,\n  );\n  let molecules = [];\n  let labels = {};\n\n  let start = Date.now();\n\n  for (let i = 0; i < entriesBoundaries.length; i++) {\n    let sdfPart = sdf.slice(...entriesBoundaries[i]);\n    if (sdfPart.length < 40) continue;\n    let currentLabels = [];\n    const molecule = getMolecule(sdfPart, labels, currentLabels, options);\n    if (!molecule) continue;\n    if (!options.filter || options.filter(molecule)) {\n      molecules.push(molecule);\n      // only now we can increase the counter\n      for (let j = 0; j < currentLabels.length; j++) {\n        labels[currentLabels[j]].counter++;\n      }\n    }\n  }\n  // all numeric fields should be converted to numbers\n  for (let label in labels) {\n    let currentLabel = labels[label];\n    if (currentLabel.isNumeric) {\n      currentLabel.minValue = Infinity;\n      currentLabel.maxValue = -Infinity;\n      for (let j = 0; j < molecules.length; j++) {\n        if (molecules[j][label]) {\n          let value = Number.parseFloat(molecules[j][label]);\n          molecules[j][label] = value;\n          if (value > currentLabel.maxValue) {\n            currentLabel.maxValue = value;\n          }\n          if (value < currentLabel.minValue) {\n            currentLabel.minValue = value;\n          }\n        }\n      }\n    }\n  }\n\n  // we check that a label is in all the records\n  for (let key in labels) {\n    if (labels[key].counter === molecules.length) {\n      labels[key].always = true;\n    } else {\n      labels[key].always = false;\n    }\n  }\n\n  let statistics = [];\n  for (let key in labels) {\n    let statistic = labels[key];\n    statistic.label = key;\n    statistics.push(statistic);\n  }\n\n  return {\n    time: Date.now() - start,\n    molecules,\n    labels: Object.keys(labels),\n    statistics,\n  };\n}\n","import { ensureString } from 'ensure-string';\nimport { parse } from 'sdf-parser';\nexport default async function appendSDF(moleculesDB, sdf, options = {}) {\n    const { onStep, dynamicTyping, mixedEOL = true, eol } = options;\n    sdf = ensureString(sdf);\n    if (typeof sdf !== 'string') {\n        throw new TypeError('sdf must be a string');\n    }\n    const parsed = parse(sdf, { dynamicTyping, mixedEOL, eol });\n    for (let i = 0; i < parsed.molecules.length; i++) {\n        const molecule = parsed.molecules[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromMolfile(molecule.molfile), molecule);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.molecules.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSDF.js.map","import { ensureString } from 'ensure-string';\nexport default async function appendSmilesList(moleculesDB, text, options = {}) {\n    const { onStep } = options;\n    text = ensureString(text);\n    if (typeof text !== 'string') {\n        throw new TypeError('text must be a string');\n    }\n    const smilesArray = text\n        .split(/\\r?\\n/)\n        .map((line) => line.trim())\n        .filter(Boolean);\n    for (let i = 0; i < smilesArray.length; i++) {\n        const oneSmiles = smilesArray[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromSmiles(oneSmiles));\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, smilesArray.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSmilesList.js.map","/**\n *\n * @param {MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} data\n * @param {object} [moleculeInfo]\n * @param {string} [moleculeInfo.idCode]\n * @param {number[]} [moleculeInfo.index]\n */\nexport default function pushEntry(moleculesDB, molecule, data = {}, moleculeInfo = {}) {\n    // the following line could be the source of problems if the idCode version\n    // changes\n    const moleculeIDCode = getMoleculeIDCode(molecule, moleculeInfo);\n    const id = moleculeIDCode || crypto.randomUUID();\n    let entry = moleculesDB.db[id];\n    if (!entry) {\n        // a new molecule\n        // ensure helper arrays needed for substructure search\n        molecule.ensureHelperArrays(moleculesDB.OCL.Molecule.cHelperRings);\n        let index;\n        if (!moleculeInfo.index) {\n            index = molecule.getIndex();\n        }\n        else {\n            index = moleculeInfo.index;\n        }\n        const molecularFormula = molecule.getMolecularFormula();\n        entry = {\n            molecule,\n            properties: {\n                mw: molecularFormula.relativeWeight,\n                em: molecularFormula.absoluteWeight,\n                mf: molecularFormula.formula,\n            },\n            data: [],\n            idCode: moleculeIDCode,\n            index,\n        };\n        moleculesDB.db[id] = entry;\n        if (moleculesDB.computeProperties) {\n            const properties = new moleculesDB.OCL.MoleculeProperties(molecule);\n            entry.properties = {\n                ...entry.properties,\n                acceptorCount: properties.acceptorCount,\n                donorCount: properties.donorCount,\n                logP: properties.logP,\n                logS: properties.logS,\n                polarSurfaceArea: properties.polarSurfaceArea,\n                rotatableBondCount: properties.rotatableBondCount,\n                stereoCenterCount: properties.stereoCenterCount,\n            };\n        }\n        updateStatistics(moleculesDB.calculatedStatistics, entry.properties);\n    }\n    entry.data.push(data);\n    updateStatistics(moleculesDB.dataStatistics, data);\n}\nfunction updateStatistics(statistics, data) {\n    for (const key in data) {\n        const value = data[key];\n        if (!statistics.has(key)) {\n            statistics.set(key, {\n                counter: 0,\n                kind: typeof value,\n            });\n        }\n        const stat = statistics.get(key);\n        stat.counter++;\n        if (stat.kind !== typeof value) {\n            stat.kind = 'mixed';\n        }\n    }\n}\nfunction getMoleculeIDCode(molecule, moleculeInfo) {\n    let idCode = moleculeInfo.idCode;\n    if (!idCode) {\n        idCode = molecule.getIDCode();\n    }\n    if (idCode === 'd@')\n        return ''; // empty molecule\n    return idCode;\n}\n//# sourceMappingURL=pushEntry.js.map","export default function pushMoleculeInfo(moleculesDB, moleculeInfo, data = {}) {\n    if (typeof moleculeInfo !== 'object') {\n        throw new Error('pushMoleculeInfo requires an object as first parameter');\n    }\n    const Molecule = moleculesDB.OCL.Molecule;\n    let molecule;\n    if (moleculeInfo.molfile) {\n        molecule = Molecule.fromMolfile(moleculeInfo.molfile);\n    }\n    if (moleculeInfo.smiles)\n        molecule = Molecule.fromSmiles(moleculeInfo.smiles);\n    if (moleculeInfo.idCode) {\n        if (moleculesDB.db[moleculeInfo.idCode]) {\n            molecule = moleculesDB.db[moleculeInfo.idCode].molecule;\n        }\n        else {\n            molecule = Molecule.fromIDCode(moleculeInfo.idCode, moleculeInfo.coordinates || false);\n        }\n    }\n    if (molecule) {\n        moleculesDB.pushEntry(molecule, data, moleculeInfo);\n    }\n}\n//# sourceMappingURL=pushMoleculeInfo.js.map","export async function noWait() {\n    return new Promise((resolve) => {\n        if (typeof setImmediate === 'function') {\n            setImmediate(() => resolve());\n        }\n        else {\n            // didn't find a better way to do it in the browser\n            setTimeout(() => resolve(), 0);\n        }\n    });\n}\n//# sourceMappingURL=noWait.js.map","import { noWait } from '../../util/noWait.js';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nclass AbortError extends Error {\n    name = 'AbortError';\n    code = 20;\n}\nfunction getQuery(moleculesDB, query, options) {\n    const { format = 'idCode' } = options;\n    if (typeof query === 'string') {\n        const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n        query = moleculeCreators.get(format.toLowerCase())(query);\n    }\n    else if (!(query instanceof moleculesDB.OCL.Molecule)) {\n        throw new TypeError('toSearch must be a Molecule or string');\n    }\n    return query;\n}\n/**\n * Internal function to search in the database\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {string} query\n * @param {Record<string, any>} [options={}]\n * @param {'exact'|'substructure'|'substructureOR'|'similarity'} [options.mode='substructure']\n * @returns\n */\nexport function search(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'exactnostereo':\n            result = exactSearchNoStereo(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = substructureSearch(moleculesDB, query);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\nexport async function searchAsync(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'exactnostereo':\n            result = exactSearchNoStereo(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = await subStructureSearchAsync(moleculesDB, query, options);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\n/**\n * Search for an exact match in the database including stereochemistry\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction exactSearch(moleculesDB, query) {\n    query = query.getCompactCopy();\n    query.setFragment(false);\n    const queryIDCode = query.getIDCode();\n    const searchResult = moleculesDB.db[queryIDCode]\n        ? [moleculesDB.db[queryIDCode]]\n        : [];\n    return searchResult;\n}\n/**\n * Search for an exact match without stereo information\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule}  query\n * @returns\n */\nfunction exactSearchNoStereo(moleculesDB, query) {\n    query = query.getCompactCopy();\n    query.setFragment(false);\n    query.stripStereoInformation();\n    const queryIDCode = query.getIDCode();\n    // first filter by molecular weight\n    const mw = query.getMolecularFormula().relativeWeight;\n    const results = [];\n    for (const idCode in moleculesDB.db) {\n        const entry = moleculesDB.db[idCode];\n        if (mw !== entry.properties.mw) {\n            continue;\n        }\n        const candidateMolecule = entry.molecule.getCompactCopy();\n        candidateMolecule.stripStereoInformation();\n        const candidateIDCode = candidateMolecule.getIDCode();\n        if (candidateIDCode !== queryIDCode) {\n            continue;\n        }\n        results.push(entry);\n    }\n    return results;\n}\n/**\n * No atoms in the query, we return all the molecules\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchBegin(moleculesDB, query) {\n    const searchResult = [];\n    if (query.getAllAtoms() === 0) {\n        for (const idCode in moleculesDB.db) {\n            searchResult.push(moleculesDB.db[idCode]);\n        }\n    }\n    return { searchResult };\n}\nfunction substructureSearchEnd(searchResult, queryMW) {\n    searchResult.sort((a, b) => {\n        return (Math.abs(queryMW - a.properties.mw) - Math.abs(queryMW - b.properties.mw));\n    });\n    return searchResult;\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments all the fragments must be present\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearch(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments only one fragment must be present\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchOR(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queries = [];\n        for (const fragment of query.getFragments()) {\n            queries.push({\n                fragment,\n                queryIndex: fragment.getIndex(),\n            });\n        }\n        const searcher = moleculesDB.searcher;\n        molecule: for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            for (const { fragment, queryIndex } of queries) {\n                searcher.setFragment(fragment, queryIndex);\n                if (searcher.isFragmentInMolecule()) {\n                    searchResult.push(entry);\n                    continue molecule;\n                }\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nasync function subStructureSearchAsync(moleculesDB, query, options = {}) {\n    const queryMW = getMW(query); // we\n    query = query.getCompactCopy();\n    query.setFragment(true);\n    const { interval = 100, onStep, controller } = options;\n    let shouldAbort = false;\n    if (controller) {\n        const abortEventListener = () => {\n            shouldAbort = true;\n        };\n        controller.signal.addEventListener('abort', abortEventListener);\n    }\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    let begin = performance.now();\n    if (searchResult.length === 0) {\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        let index = 0;\n        const length = Object.keys(moleculesDB.db).length;\n        for (const idCode in moleculesDB.db) {\n            if (shouldAbort) {\n                throw new AbortError('Query aborted');\n            }\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n            if ((onStep || controller) && performance.now() - begin >= interval) {\n                begin = performance.now();\n                if (onStep) {\n                    onStep(index, length);\n                }\n                if (controller && !onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await noWait();\n                }\n            }\n            index++;\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nfunction similaritySearch(moleculesDB, query) {\n    const queryIndex = query.getIndex();\n    const queryMW = getMW(query);\n    const queryIdCode = query.getIDCode();\n    const searchResult = [];\n    let similarity;\n    for (const idCode in moleculesDB.db) {\n        const entry = moleculesDB.db[idCode];\n        if (entry.idCode === queryIdCode) {\n            similarity = Number.MAX_SAFE_INTEGER;\n        }\n        else {\n            similarity =\n                moleculesDB.OCL.SSSearcherWithIndex.getSimilarityTanimoto(queryIndex, entry.index) *\n                    1000000 -\n                    Math.abs(queryMW - entry.properties.mw) / 10000;\n        }\n        searchResult.push({ similarity, entry });\n    }\n    searchResult.sort((a, b) => {\n        return b.similarity - a.similarity;\n    });\n    return searchResult.map((entry) => entry.entry);\n}\nfunction getMW(query) {\n    const copy = query.getCompactCopy();\n    copy.setFragment(false);\n    return copy.getMolecularFormula().relativeWeight;\n}\nfunction processResult(entries, options = {}) {\n    const { flattenResult = true, keepMolecule = false, limit = Number.MAX_SAFE_INTEGER, } = options;\n    const results = [];\n    if (flattenResult) {\n        for (const entry of entries) {\n            for (const data of entry.data) {\n                const result = {\n                    data,\n                    idCode: entry.idCode,\n                    properties: entry.properties,\n                };\n                if (keepMolecule) {\n                    result.molecule = entry.molecule;\n                }\n                results.push(result);\n            }\n        }\n    }\n    else {\n        for (const entry of entries) {\n            results.push({\n                data: entry.data,\n                idCode: entry.idCode,\n                properties: entry.properties,\n                molecule: keepMolecule ? entry.molecule : undefined,\n            });\n        }\n    }\n    if (limit < results.length)\n        results.length = limit;\n    return results;\n}\n//# sourceMappingURL=search.js.map","import appendCSV from './utils/appendCSV.js';\nimport appendColor from './utils/appendColor.js';\nimport appendEntries from './utils/appendEntries.js';\nimport appendSDF from './utils/appendSDF.js';\nimport appendSmilesList from './utils/appendSmilesList.js';\nimport pushEntry from './utils/pushEntry.js';\nimport pushMoleculeInfo from './utils/pushMoleculeInfo.js';\nimport { search, searchAsync } from './utils/search.js';\n/*\n * @typedef {object} InternalStatistics\n * @property {number} counter - number of entries\n * @property {'number'|'boolean'|'string'|'object'|'mixed'} kind - kind of value\n */\n/**\n * this.db is an object with properties 'oclID' that has as value\n * an object that contains the following properties:\n * molecule: an OCL molecule instance\n * index: OCL index used for substructure searching\n * properties: all the calculates properties\n * data: array containing free data associated with this molecule\n */\nexport class MoleculesDB {\n    /**\n     * Creates an instance of MoleculesDB.\n     * @param {typeof import('openchemlib')} OCL - openchemlib library\n     * @param {object} [options={}] - Options.\n     * @param {boolean} [options.computeProperties=false]\n     * @param {boolean} [options.keepEmptyMolecules=false]\n     */\n    constructor(OCL, options = {}) {\n        const { computeProperties = false, keepEmptyMolecules = false } = options;\n        this.OCL = OCL;\n        this.db = {};\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.dataStatistics = new Map();\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.calculatedStatistics = new Map();\n        this.computeProperties = computeProperties;\n        this.keepEmptyMolecules = keepEmptyMolecules;\n        this.searcher = new OCL.SSSearcherWithIndex();\n    }\n    clear() {\n        this.db = {};\n        this.dataStatistics.clear();\n        this.calculatedStatistics.clear();\n    }\n    get nbMolecules() {\n        return Object.keys(this.db).length;\n    }\n    get nbData() {\n        let number = 0;\n        for (const entry of Object.values(this.db)) {\n            number += entry.data.length;\n        }\n        return number;\n    }\n    get statistics() {\n        const nbData = this.nbData;\n        const nbMolecules = this.nbMolecules;\n        const statistics = {\n            data: [],\n            calculated: [],\n        };\n        for (const [key, value] of this.dataStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbData,\n                isNumber: false,\n            };\n            statistics.data.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    for (const data of entry.data) {\n                        if (data[key] < statistic.minValue) {\n                            statistic.minValue = data[key];\n                        }\n                        if (data[key] > statistic.maxValue) {\n                            statistic.maxValue = data[key];\n                        }\n                    }\n                }\n            }\n        }\n        for (const [key, value] of this.calculatedStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbMolecules,\n                isNumeric: false,\n            };\n            statistics.calculated.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    if (entry.properties[key] < statistic.minValue) {\n                        statistic.minValue = entry.properties[key];\n                    }\n                    if (entry.properties[key] > statistic.maxValue) {\n                        statistic.maxValue = entry.properties[key];\n                    }\n                }\n            }\n        }\n        return statistics;\n    }\n    /**\n     * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n     * @param {*} moleculesDB\n     * @param {object[]} entries\n     * @param {object} [options={}]\n     * @param {string} [options.idCodePath='ocl.idCode']\n     * @param {string} [options.indexPath='ocl.index']\n     * @param {string} [options.coordinatesPath='ocl.coordinates']\n     * @param {string} [options.mwPath='mw']\n     * @param {string} [options.smilesPath]\n     * @param {string} [options.molfilePath]\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendEntries(entries, options) {\n        return appendEntries(this, entries, {\n            computeProperties: this.computeProperties,\n            ...options,\n        });\n    }\n    /**\n     * append to the current database a CSV file\n     * @param {string|ArrayBuffer} csv - text file containing the comma separated value file\n     * @param {object} [options={}] - options.\n     * @param {boolean} [options.header=true] - if the first line of the file is a header\n     * @param {boolean} [options.dynamicTyping=true] - dynamically type the data (convert values to number of boolean if possible)\n     * @param {boolean} [options.skipEmptyLines=true] - skip empty lines\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendCSV(csv, options) {\n        return appendCSV(this, csv, options);\n    }\n    /**\n     * Append a SDF to the current database\n     * @param {string|ArrayBuffer} sdf - text file containing the sdf\n     * @param {object} [options={}] - options\n     * @param {Function} [options.onStep] - callback to execute after each molecule\n     * @param {boolean} [options.dynamicTyping=true] - Dynamically type the data\n     * @param {boolean} [options.mixedEOL=false] - Set to true if you know there is a mixture between \\r\\n and \\n\n     * @param {string} [options.eol] - Specify the end of line character. Default will be the one found in the file\n     * @returns {Promise<void>}\n     */\n    appendSDF(sdf, options) {\n        return appendSDF(this, sdf, options);\n    }\n    /**\n     * Append a list of SMILES to the current database.\n     * @param {string|ArrayBuffer} smiles - text file containing a list of smiles\n     * @param {object} [options={}] - Options\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendSmilesList(smiles, options) {\n        return appendSmilesList(this, smiles, options);\n    }\n    /**\n     * Add a molecule to the current database.\n     * @param {import('openchemlib').Molecule} molecule - The molecule to append.\n     * @param {object} [data={}] - Options.\n     * @param {object} [moleculeInfo={}] - May contain precalculated index and mw.\n     */\n    pushEntry(molecule, data, moleculeInfo) {\n        pushEntry(this, molecule, data, moleculeInfo);\n    }\n    /**\n     * Add an entry in the database.\n     * @param {object} moleculeInfo - a molecule as a JSON that may contain the following properties: molfile, smiles, idCode, mf, index\n     * @param {object} [data={}]\n     */\n    pushMoleculeInfo(moleculeInfo, data) {\n        return pushMoleculeInfo(this, moleculeInfo, data);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idlCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {'substructure'|'substructureOR'|'exact'|'exactNoStereo'|'similarity'} [options.mode='substructure'] - search algorithm\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @returns {Array} array of object of the type {(molecule), idCode, data, properties}\n     */\n    search(query, options) {\n        return search(this, query, options);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options.\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {'substructure'|'substructureOR'|'exact'|'exactNoStereo'|'similarity'} [options.mode='substructure'] - search algorithm\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @param {number} [options.interval=100] - interval in ms to call the onStep callback\n     * @param {Function} [options.onStep] - callback to execute after each interval\n     * @param {AbortController} [options.controler] - callback to execute to check if the search should be aborted\n     * @returns {Promise<Array>} array of object of the type {(molecule), idCode, data, properties}\n     */\n    searchAsync(query, options) {\n        return searchAsync(this, query, options);\n    }\n    /**\n     * Returns an array with the current database\n     * @returns\n     */\n    getDB() {\n        return Object.keys(this.db).map((key) => this.db[key]);\n    }\n    /**\n     * Append the property `data.color` to each entry based on a data or property label\n     * {object} [options={}]\n     * {string} [options.dataLabel] name of the property from `data` to use\n     * {string} [options.propertyLabel] name of the property from `properties` to use\n     * {number} [options.colorLabel='color'] name of the property to add in data that will contain the color\n     * {number} [options.minValue]\n     * {number} [options.maxValue]\n     * {number} [options.minHue=0]\n     * {number} [options.maxHue=360]\n     * {number} [options.saturation=65] percent of color saturation\n     * {number} [options.lightness=65] percent of color lightness\n     * @param options\n     */\n    appendColor(options) {\n        appendColor(this, options);\n    }\n}\n//# sourceMappingURL=MoleculesDB.js.map","import { makeRacemic } from '../util/makeRacemic.js';\nexport function getAtomFeatures(originalMolecule, options = {}) {\n    const OCL = originalMolecule.getOCL();\n    const { sphere = 1 } = options;\n    const fragment = new OCL.Molecule(0, 0);\n    const results = [];\n    for (let rootAtom = 0; rootAtom < originalMolecule.getAllAtoms(); rootAtom++) {\n        let min = 0;\n        let max = 0;\n        const atomMask = new Array(originalMolecule.getAtoms());\n        const atomList = new Array(originalMolecule.getAtoms());\n        const molecule = originalMolecule.getCompactCopy();\n        for (let currentSphere = 0; currentSphere <= sphere; currentSphere++) {\n            if (max === 0) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n            else {\n                let newMax = max;\n                for (let i = min; i < max; i++) {\n                    const atom = atomList[i];\n                    for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                        const connAtom = molecule.getConnAtom(atom, j);\n                        if (!atomMask[connAtom]) {\n                            atomMask[connAtom] = true;\n                            atomList[newMax++] = connAtom;\n                        }\n                    }\n                }\n                min = max;\n                max = newMax;\n            }\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, null);\n            if (currentSphere === sphere) {\n                makeRacemic(fragment);\n                results.push(fragment.getCanonizedIDCode());\n            }\n        }\n    }\n    const atoms = {};\n    for (const result of results) {\n        if (!atoms[result]) {\n            atoms[result] = 1;\n        }\n        else {\n            atoms[result]++;\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=getAtomFeatures.js.map","let rAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getRAtomicNumber(molecule) {\n    if (!rAtomicNumber) {\n        const OCL = molecule.getOCL();\n        rAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('R', OCL.Molecule.cPseudoAtomR);\n    }\n    return rAtomicNumber;\n}\n//# sourceMappingURL=getRAtomicNumber.js.map","import { getMF } from '../util/getMF.js';\nimport { getRAtomicNumber } from '../util/getRAtomicNumber.js';\nexport function fragmentAcyclicSingleBonds(molecule) {\n    const OCL = molecule.getOCL();\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {};\n        atoms.push(atom);\n        atom.i = i;\n        atom.links = []; // we will store connected atoms of broken bonds\n    }\n    const bonds = [];\n    for (let i = 0; i < molecule.getAllBonds(); i++) {\n        const bond = {};\n        bonds.push(bond);\n        bond.i = i;\n        bond.order = molecule.getBondOrder(i);\n        bond.atom1 = molecule.getBondAtom(0, i);\n        bond.atom2 = molecule.getBondAtom(1, i);\n        bond.type = molecule.getBondType(i);\n        bond.isAromatic = molecule.isAromaticBond(i);\n        bond.isRingBond = molecule.isRingBond(i);\n        if (!bond.isAromatic && (bond.type & 0b11) === 1 && !bond.isRingBond) {\n            bond.selected = true;\n            atoms[bond.atom1].links.push(bond.atom2);\n            atoms[bond.atom2].links.push(bond.atom1);\n        }\n    }\n    const brokenMolecule = molecule.getCompactCopy();\n    for (const bond of bonds) {\n        if (bond.selected) {\n            brokenMolecule.markBondForDeletion(bond.i);\n        }\n    }\n    brokenMolecule.deleteMarkedAtomsAndBonds();\n    const fragmentMap = [];\n    const nbFragments = brokenMolecule.getFragmentNumbers(fragmentMap);\n    const results = [];\n    for (let i = 0; i < nbFragments; i++) {\n        const result = { atomMap: [] };\n        const includeAtom = fragmentMap.map((id) => {\n            return id === i;\n        });\n        const fragment = new OCL.Molecule(0, 0);\n        const atomMap = [];\n        brokenMolecule.copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n        // we will add some R groups at the level of the broken bonds\n        for (let j = 0; j < atomMap.length; j++) {\n            if (atomMap[j] > -1) {\n                result.atomMap.push(j);\n                if (atoms[j].links.length > 0) {\n                    for (let k = 0; k < atoms[j].links.length; k++) {\n                        fragment.addBond(atomMap[j], fragment.addAtom(getRAtomicNumber(brokenMolecule)), 1);\n                    }\n                }\n            }\n        }\n        fragment.setFragment(false);\n        result.idCode = fragment.getIDCode();\n        result.mf = getMF(fragment).mf.replace(/R[1-9]?/, '');\n        results.push(result);\n    }\n    return results;\n}\n//# sourceMappingURL=fragmentAcyclicSingleBonds.js.map","/**\n * @description Append the OCL reaction to the reaction object\n * @param {Array} reactions - array of reactions objects with rxnCode and label\n * @param {typeof import('openchemlib')} OCL - OCL object\n * @param {object} [options={}]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @returns {Array} array of reactions objects with rxnCode, label and oclReaction (a decoded version of rxnCode reaction)\n */\nexport function appendOCLReaction(reactions, OCL, options = {}) {\n    const { logger } = options;\n    const newReactions = [];\n    for (const reaction of reactions) {\n        if (reaction.rxnCode) {\n            newReactions.push({\n                ...reaction,\n                oclReaction: OCL.ReactionEncoder.decode(reaction.rxnCode),\n            });\n        }\n        else if (logger) {\n            logger.warn(reaction, 'Reaction without rxnCode');\n        }\n    }\n    return newReactions;\n}\n//# sourceMappingURL=appendOCLReaction.js.map","/**\n *\n * @param {*} processedMolecules\n * @param {import('openchemlib').Molecule|string} molecule\n * @param {*} options\n * @returns\n */\nexport function checkIfExistsOrAddInfo(processedMolecules, molecule, options) {\n    const { moleculeInfoCallback, asReagent, asProduct } = options;\n    const idCode = typeof molecule === 'string' ? idCode : molecule.getIDCode();\n    if (processedMolecules.has(idCode)) {\n        const entry = processedMolecules.get(idCode);\n        let exists = false;\n        if (asReagent) {\n            if (entry.asReagent) {\n                exists = true;\n            }\n            else {\n                entry.asReagent = true;\n            }\n        }\n        if (asProduct) {\n            if (entry.asProduct) {\n                exists = true;\n            }\n            else {\n                entry.asProduct = true;\n            }\n        }\n        return { exists, info: entry };\n    }\n    else {\n        let info = {\n            idCode,\n            asReagent,\n            asProduct,\n            info: {},\n        };\n        if (moleculeInfoCallback) {\n            info.info = moleculeInfoCallback(molecule);\n        }\n        processedMolecules.set(idCode, info);\n        return { exists: false, info };\n    }\n}\n//# sourceMappingURL=checkIfExistsOrAddInfo.js.map","import { checkIfExistsOrAddInfo } from './checkIfExistsOrAddInfo.js';\n/**\n * @description apply one reaction to one reactant\n * @param {import('openchemlib').Molecule[]} reactants\n * @param tree\n * @param {Array<object>} reactions - rxnCode of the reaction\n * @param {object} options - options to apply the reaction\n * @param {number} options.currentDepth - current depth of the recursion\n * @param {number} options.maxDepth - max depth of the recursion\n * @param {number} options.maxCurrentDepth - max depth of the recursion for this set of reactions\n * @param {number} options.limitReactions - limit the number of reactions\n * @param {object} options.stats - stats of the recursion\n * @param {number} options.stats.counter - number of reactions\n * @param {Map} options.processedMolecules - set of processed molecules\n * @param {Array} options.trees - array of trees of previous recursions\n * @param {object} options.OCL - OCL object\n * @returns {Array} array of results\n */\nexport function applyOneReactantReactions(tree, reactions, options) {\n    const { currentDepth, maxDepth, maxCurrentDepth, processedMolecules, OCL, logger, } = options;\n    if (tree.molecules.length !== 1) {\n        logger?.warn('applyOneReactantReactions:tree.reactants.length!==1', tree.reactants.length);\n        return [];\n    }\n    const reactant = OCL.Molecule.fromIDCode(tree.molecules[0].idCode);\n    const todoNextDepth = [];\n    // if the current depth is greater than the max depth, we stop the recursion and return an empty array\n    if (currentDepth > maxCurrentDepth || tree.depth >= maxDepth) {\n        return [];\n    }\n    const existsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactant, {\n        ...options,\n        asReagent: true,\n    });\n    // check if the reactant has already been processed\n    if (existsAndInfo.exists) {\n        return [];\n    }\n    for (const reaction of reactions) {\n        if (options.stats.counter >= options.limitReactions) {\n            return [];\n        }\n        const reactor = new OCL.Reactor(reaction.oclReaction);\n        // isMatching is true if the reactant is matching the reaction else we continue to the next reaction\n        const isMatching = Boolean(reactor.setReactant(0, reactant));\n        if (isMatching) {\n            options.stats.counter++;\n            // get the products of the reaction\n            const oneReactionProducts = reactor.getProducts();\n            for (const oneReactionProduct of oneReactionProducts) {\n                for (const reactionProduct of oneReactionProduct) {\n                    // get the info of the product (idCode, mf)\n                    const productExistsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactionProduct, { ...options, asProduct: true });\n                    // if the product has not been processed yet, we add it to the list of products and we add it to the list of todoNextDepth\n                    if (!productExistsAndInfo.exists) {\n                        // eslint-disable-next-line no-unused-vars\n                        const { oclReaction, needToBeCharged, ...reactionWithoutOCL } = reaction;\n                        const oneReaction = {\n                            reaction: reactionWithoutOCL,\n                            depth: tree.depth + 1,\n                            isValid: true,\n                            currentDepth,\n                            molecules: [\n                                checkIfExistsOrAddInfo(processedMolecules, reactionProduct, options).info,\n                            ],\n                        };\n                        if (!tree.children)\n                            tree.children = [];\n                        tree.children.push(oneReaction);\n                        todoNextDepth.push(() => {\n                            return applyOneReactantReactions(oneReaction, reactions, {\n                                ...options,\n                                currentDepth: options.currentDepth + 1,\n                            });\n                        });\n                    }\n                }\n            }\n        }\n    }\n    // by returning todoNextDepth, we make sure that the recursion will continue\n    return todoNextDepth;\n}\n//# sourceMappingURL=applyOneReactantReactions.js.map","export function getFilteredTrees(reactions, options = {}) {\n    const { filter = () => true } = options;\n    const nodesToKeep = reactions.getNodes().filter(filter);\n    const parentMap = reactions.getParentMap();\n    for (let currentNode of nodesToKeep) {\n        const parent = parentMap.get(currentNode);\n        if (parent && nodesToKeep.includes(parent) === false) {\n            nodesToKeep.push(parent);\n        }\n    }\n    return getValidChildren(reactions.trees, { nodesToKeep });\n}\nfunction getValidChildren(nodes, options) {\n    const { nodesToKeep } = options;\n    const validNodes = nodes\n        .filter((node) => nodesToKeep.includes(node))\n        .map((node) => ({ ...node }));\n    for (const node of validNodes) {\n        if (node.children) {\n            const validChildren = node.children.filter((child) => nodesToKeep.includes(child));\n            if (validChildren.length > 0) {\n                node.children = getValidChildren(validChildren, { nodesToKeep });\n            }\n            else {\n                delete node.children;\n            }\n        }\n    }\n    return validNodes;\n}\n//# sourceMappingURL=getFilteredTrees.js.map","export function getLeaves(trees) {\n    const leaves = [];\n    for (const tree of trees) {\n        appendLeavesSS(leaves, tree);\n    }\n    return leaves;\n}\nfunction appendLeavesSS(leaves, currentBranch) {\n    if (!currentBranch.children || currentBranch.children.length === 0) {\n        leaves.push(currentBranch);\n        return;\n    }\n    for (const child of currentBranch.children) {\n        appendLeavesSS(leaves, child);\n    }\n}\n//# sourceMappingURL=getLeaves.js.map","export function getNodes(trees) {\n    const nodes = [];\n    for (const tree of trees) {\n        getNodesSS(nodes, tree);\n    }\n    return nodes;\n}\nfunction getNodesSS(nodes, currentBranch) {\n    nodes.push(currentBranch);\n    for (const child of currentBranch?.children || []) {\n        getNodesSS(nodes, child);\n    }\n}\n//# sourceMappingURL=getNodes.js.map","import { appendOCLReaction } from './utils/appendOCLReaction.js';\nimport { applyOneReactantReactions } from './utils/applyOneReactantReactions.js';\nimport { checkIfExistsOrAddInfo } from './utils/checkIfExistsOrAddInfo.js';\nimport { getFilteredTrees } from './utils/getFilteredTrees.js';\nimport { getLeaves } from './utils/getLeaves.js';\nimport { getNodes } from './utils/getNodes.js';\nexport class Reactions {\n    /**\n     *\n     * @param OCL\n     * @param {object} [options={}]\n     * @param {import('cheminfo-types').Logger} logger\n     * @param {number} [options.maxDepth=5]\n     * @param {Function} [options.moleculeInfoCallback]\n     * @param {boolean} [options.skipProcessed=true]\n     */\n    constructor(OCL, options = {}) {\n        this.moleculeInfoCallback = options.moleculeInfoCallback;\n        this.maxDepth = options.maxDepth ?? 5;\n        this.limitReactions = options.limitReactions ?? 200;\n        this.skipProcessed = options.skipProcessed ?? true;\n        this.logger = options.logger;\n        this.processedMolecules = new Map();\n        this.OCL = OCL;\n        this.trees = [];\n        this.moleculeInfo = {}; // a cache containing molecule information like mw, etc.\n    }\n    /**\n     * We need to call this method for all the reactants on which we want to apply the reactions.\n     * If there is only one reactant, we call this method with an array of one reactant.\n     * If there are multiple reactants, we call this method with an array of the reactants.\n     * This method has to be called for all the reactants\n     * @param {import('openchemlib').Molecule[]|string[]} molecules\n     * @param moleculesOrIDCodes\n     */\n    appendHead(moleculesOrIDCodes) {\n        if (!Array.isArray(moleculesOrIDCodes)) {\n            throw new TypeError('reactants must be an array');\n        }\n        const molecules = moleculesOrIDCodes.map((molecule) => checkIfExistsOrAddInfo(this.processedMolecules, molecule, {\n            moleculeInfoCallback: this.moleculeInfoCallback,\n        }).info);\n        const tree = {\n            molecules,\n            depth: 0,\n            isValid: true, // this node could be implied in reactions\n        };\n        this.trees.push(tree);\n    }\n    /**\n     * Returns all the leaves of the trees\n     * @returns\n     */\n    getLeaves() {\n        return getLeaves(this.trees);\n    }\n    /**\n     * Returns all the nodes of the trees\n     * @returns\n     */\n    getNodes() {\n        return getNodes(this.trees);\n    }\n    getParentMap() {\n        const parentMap = new Map();\n        const nodes = this.getNodes();\n        for (const node of nodes) {\n            if (node.children) {\n                for (const child of node.children) {\n                    parentMap.set(child, node);\n                }\n            }\n        }\n        return parentMap;\n    }\n    /**\n     * When applying reactions some branches may be dead because it can not be implied in any reaction.\n     * This is the case when we specify a 'min' reaction depth.\n     * This will returno only the valid nodes\n     * @returns\n     */\n    getValidNodes() {\n        return this.getNodes().filter((node) => node.isValid);\n    }\n    /**\n     *\n     * @param {object} [options={}]\n     * @param {(object):boolean} [options.filter] - a function that will be called for each node and return true if the node should be kept\n     */\n    getFilteredReactions(options = {}) {\n        const filteredReactions = new Reactions();\n        filteredReactions.moleculeInfoCallback = this.moleculeInfoCallback;\n        filteredReactions.maxDepth = this.maxDepth;\n        filteredReactions.limitReactions = this.limitReactions;\n        filteredReactions.skipProcessed = this.skipProcessed;\n        filteredReactions.logger = this.logger;\n        filteredReactions.processedMolecules = this.processedMolecules;\n        filteredReactions.OCL = this.OCL;\n        filteredReactions.moleculeInfo = this.moleculeInfo; // a cache containing molecule information like mw, etc.\n        filteredReactions.trees = getFilteredTrees(this, options);\n        return filteredReactions;\n    }\n    /**\n     *\n     * @param {object[]} reactions - array of reactions that should be applied\n     * @param {object} [options={}]\n     * @param {number} [options.min=0] - min depth of the reaction\n     * @param {number} [options.max=3] - max depth of the reaction\n     */\n    applyOneReactantReactions(reactions, options = {}) {\n        const { min = 0, max = 3 } = options;\n        clearAsFromProcessedMolecules(this.processedMolecules);\n        const nodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of nodes) {\n            node.currentDepth = 0;\n        }\n        reactions = appendOCLReaction(reactions, this.OCL);\n        const stats = { counter: 0 };\n        // Start the recursion by applying the first level of reactions\n        for (const node of nodes) {\n            let todoCurrentLevel = applyOneReactantReactions(node, reactions, {\n                OCL: this.OCL,\n                currentDepth: 1,\n                processedMolecules: this.processedMolecules,\n                moleculeInfoCallback: this.moleculeInfoCallback,\n                maxDepth: this.maxDepth,\n                maxCurrentDepth: max,\n                stats,\n                limitReactions: this.limitReactions,\n            });\n            do {\n                const nexts = [];\n                for (const todo of todoCurrentLevel) {\n                    nexts.push(todo());\n                }\n                todoCurrentLevel = nexts.flat();\n            } while (todoCurrentLevel.length > 0);\n        }\n        const newNodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of newNodes) {\n            if (node.currentDepth < min || node.currentDepth > max) {\n                node.isValid = false;\n            }\n            delete node.currentDepth;\n        }\n    }\n}\nfunction clearAsFromProcessedMolecules(processedMolecules) {\n    for (const [, value] of processedMolecules) {\n        if (value.asReagent) {\n            value.asReagent = false;\n        }\n        if (value.asProduct) {\n            value.asProduct = false;\n        }\n    }\n}\n//# sourceMappingURL=Reactions.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentAcyclicBonds = fragmentAcyclicBonds;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\n/**\n * The function performs the fragmentation of all single linear bonds\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {string} [options.parentIDCode=molecule.getIDCode()]\n * @returns Results fragmentation of acyclic bonds\n */\nfunction fragmentAcyclicBonds(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { calculateHoseCodes, parentIDCode = molecule.getIDCode() } = options;\n    let atoms = [];\n    // Prepare object with lenght equal to number of atoms\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        let atom = {};\n        atoms.push(atom);\n        atom.i = i;\n        atom.links = [];\n    }\n    let bonds = [];\n    for (let i = 0; i < molecule.getAllBonds(); i++) {\n        let bond = {\n            index: i,\n            order: molecule.getBondOrder(i),\n            atom1: molecule.getBondAtom(0, i),\n            atom2: molecule.getBondAtom(1, i),\n            type: molecule.getBondType(i),\n            isAromatic: molecule.isAromaticBond(i),\n            isRingBond: molecule.isRingBond(i),\n            selected: false,\n        };\n        // Mapping of bonds to be fragmented, only if they are single bond not aromatic and cyclic the mapping occurs\n        if (bond.isAromatic ||\n            bond.type > 1 ||\n            bond.isRingBond ||\n            bond.order !== 1) {\n            continue;\n        }\n        else {\n            bond.selected = true;\n            atoms[bond.atom1].links.push(bond.atom2);\n            atoms[bond.atom2].links.push(bond.atom1);\n        }\n        bonds.push(bond);\n    }\n    let brokenMolecule = {};\n    let fragmentMap = [];\n    let nbFragments = 0;\n    let results = [];\n    for (let bond of bonds) {\n        if (bond.selected) {\n            // if bond.selected is true (line 46) the molecule will be fragmented\n            brokenMolecule[bond.index] = molecule.getCompactCopy(); // get a copy of the molecule\n            brokenMolecule[bond.index].setAtomCustomLabel(bond.atom1, '*');\n            brokenMolecule[bond.index].setAtomCustomLabel(bond.atom2, '*');\n            brokenMolecule[bond.index].markBondForDeletion(bond.index); //mark bond to be deleted\n            // the function returns an array of map\n            brokenMolecule[bond.index].deleteMarkedAtomsAndBonds(); // delete marked bonds\n        }\n        nbFragments = brokenMolecule[bond.index].getFragmentNumbers(fragmentMap);\n        // only if there are 2 fragments code can continue\n        if (nbFragments === 2) {\n            for (let i = 0; i < nbFragments; i++) {\n                const result = {};\n                if (calculateHoseCodes) {\n                    result.hoses = (0, openchemlib_utils_1.getHoseCodesForAtoms)(molecule, [\n                        bond.atom1,\n                        bond.atom2,\n                    ]);\n                }\n                result.atomMap = [];\n                // assign fragment id to index of for loop\n                let includeAtom = fragmentMap.map((id) => {\n                    return id === i;\n                });\n                let fragment = new Molecule(100, 100);\n                let atomMap = [];\n                brokenMolecule[bond.index].copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n                for (let j = 0; j < atomMap.length; j++) {\n                    if (fragment.getAtomCustomLabel(atomMap[j]) === '*') {\n                        result.atomMap.push(j);\n                        if (atoms[j].links.length > 0) {\n                            fragment.addBond(atomMap[j], fragment.addAtom(154));\n                        }\n                    }\n                }\n                fragment.removeAtomCustomLabels();\n                fragment.setFragment(false);\n                result.idCode = fragment.getIDCode();\n                result.parentIDCode = parentIDCode;\n                result.cleavedBonds = [\n                    {\n                        index: bond.index,\n                        order: bond.order,\n                        atom1: bond.atom1,\n                        atom2: bond.atom2,\n                    },\n                ];\n                result.mfInfo = new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(fragment).mf.replace(/R[1-9]?/, '')).getInfo();\n                result.fragmentType = 'acyclic';\n                results.push(result);\n            }\n        }\n    }\n    // sort result in order fragment 1-2; 3-4; ...\n    results = results.toSorted((a, b) => {\n        return a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass;\n    });\n    return results;\n}\n//# sourceMappingURL=fragmentAcyclicBonds.js.map","\"use strict\";\n/**\n * This function returns ringBond, and object that contains information about the bonds of each ring\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @returns Information of ring bonds for each ring in the molecule\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRingsInfo = getRingsInfo;\nfunction getRingsInfo(molecule) {\n    const ringSet = molecule.getRingSet();\n    let ringBonds = [];\n    // create a new array with the length of the number of bonds in the molecule and fills it with 0\n    let nbRingForBonds = new Array(molecule.getAllBonds()).fill(0);\n    for (let i = 0; i < ringSet.getSize(); i++) {\n        for (let bond of ringSet.getRingBonds(i)) {\n            nbRingForBonds[bond]++;\n        }\n    }\n    for (let i = 0; i < ringSet.getSize(); i++) {\n        ringBonds.push({\n            bonds: ringSet.getRingBonds(i).map((bondIndex) => ({\n                index: bondIndex,\n                ringIndex: i,\n                nbRings: nbRingForBonds[bondIndex], // in how many rings this bond is included\n                order: molecule.getBondOrder(bondIndex),\n                isAromatic: ringSet.isAromatic(i),\n                atom1: molecule.getBondAtom(0, bondIndex),\n                atom2: molecule.getBondAtom(1, bondIndex),\n            })),\n        });\n    }\n    return ringBonds;\n}\n//# sourceMappingURL=getRingsInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentableRings = getFragmentableRings;\nconst getRingsInfo_js_1 = require(\"./getRingsInfo.js\");\n/**\n * This function returns an array of objects with all combination of 2 bonds who can be fragmented in the same ring\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @returns All combination of 2 bonds who can be fragmented in the same ring\n */\nfunction getFragmentableRings(molecule) {\n    let ringsInfo = (0, getRingsInfo_js_1.getRingsInfo)(molecule);\n    let fragmentableRingBonds = [];\n    for (let ring = 0; ring < ringsInfo.length; ring++) {\n        let bonds = ringsInfo[ring].bonds;\n        // we prevent to consecutive bonds to be cleaved\n        for (let first = 0; first < bonds.length; first++) {\n            let end = first === 0 ? bonds.length - 1 : bonds.length;\n            for (let second = first + 2; second < end; second++) {\n                if (bonds[first].order === 1 &&\n                    bonds[second].order === 1 &&\n                    !bonds[first].isAromatic &&\n                    !bonds[second].isAromatic &&\n                    bonds[first].nbRings < 2 &&\n                    bonds[second].nbRings < 2) {\n                    fragmentableRingBonds.push({ bonds: [bonds[first], bonds[second]] });\n                }\n            }\n        }\n    }\n    return fragmentableRingBonds;\n}\n//# sourceMappingURL=getFragmentableRings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentRings = fragmentRings;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst getFragmentableRings_js_1 = require(\"./utils/getFragmentableRings.js\");\n/**\n * The function performs the fragmentation of all single ring bonds not belonging to aromatic rings\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {string} [options.parentIDCode=molecule.getIDCode()]\n * @returns  Array with results for the fragmentation of ring bonds\n */\nfunction fragmentRings(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { calculateHoseCodes, parentIDCode = molecule.getIDCode() } = options;\n    const fragmentableRingBonds = (0, getFragmentableRings_js_1.getFragmentableRings)(molecule);\n    let fragmentationResults = [];\n    for (let ringBonds of fragmentableRingBonds) {\n        const brokenMolecule = molecule.getCompactCopy();\n        let fragmentMap = [];\n        let atoms = [];\n        let rLinks = {};\n        for (let bond of ringBonds.bonds) {\n            brokenMolecule.markBondForDeletion(bond.index);\n            brokenMolecule.setAtomCustomLabel(bond.atom1, '*');\n            brokenMolecule.setAtomCustomLabel(bond.atom2, '*');\n            atoms.push(bond.atom1, bond.atom2);\n            rLinks[bond.atom1] = bond.atom2;\n            rLinks[bond.atom2] = bond.atom1;\n        }\n        brokenMolecule.deleteMarkedAtomsAndBonds();\n        const nbFragments = brokenMolecule.getFragmentNumbers(fragmentMap);\n        for (let i = 0; i < nbFragments; i++) {\n            const result = {};\n            if (calculateHoseCodes) {\n                result.hoses = (0, openchemlib_utils_1.getHoseCodesForAtoms)(molecule, atoms);\n            }\n            result.atomMap = [];\n            let includeAtom = fragmentMap.map((id) => {\n                return id === i;\n            });\n            let fragment = new Molecule(0, 0);\n            let atomMap = [];\n            brokenMolecule.copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n            // if includeAtom has more then 3 true all true should become false and all false should become true\n            for (let j = 0; j < atomMap.length; j++) {\n                if (fragment.getAtomCustomLabel(atomMap[j]) === '*') {\n                    result.atomMap.push(j);\n                    if (rLinks[j] !== undefined) {\n                        fragment.addBond(atomMap[j], fragment.addAtom(154));\n                    }\n                }\n            }\n            fragment.removeAtomCustomLabels();\n            fragment.setFragment(false);\n            //      console.log(fragment.getIDCode(), getMF(fragment).mf);\n            result.idCode = fragment.getIDCode();\n            result.parentIDCode = parentIDCode;\n            result.cleavedBonds = ringBonds.bonds;\n            result.mfInfo = new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(fragment).mf.replace(/R[1-9]?/, '')).getInfo();\n            result.fragmentType = 'cyclic';\n            fragmentationResults.push(result);\n        }\n    }\n    fragmentationResults = fragmentationResults.toSorted((a, b) => {\n        return a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass;\n    });\n    return fragmentationResults;\n}\n//# sourceMappingURL=fragmentRings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragment = fragment;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst fragmentAcyclicBonds_js_1 = require(\"./fragmentAcyclicBonds.js\");\nconst fragmentRings_js_1 = require(\"./fragmentRings.js\");\n/**\n * This function fragment both acyclic and cyclic bonds of the molecule\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {boolean} [options.cyclic=true] - calculate cyclic fragmentation\n * @param {boolean} [options.acyclic=true] - calculate acyclic fragmentation\n * @param {boolean} [options.full=true] - calculate the molecular formula of the full molecule\n * @returns {object} In-Silico fragmentation results\n */\nfunction fragment(molecule, options = {}) {\n    const { cyclic = true, acyclic = true, full = true, calculateHoseCodes = false, } = options;\n    const parentIDCode = molecule.getIDCode();\n    let molecularIon = full\n        ? [\n            {\n                idCode: parentIDCode,\n                parentIDCode,\n                mfInfo: new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(molecule).mf).getInfo(),\n                fragmentType: 'molecule',\n            },\n        ]\n        : [];\n    let acyclicBonds = acyclic\n        ? (0, fragmentAcyclicBonds_js_1.fragmentAcyclicBonds)(molecule, { calculateHoseCodes, parentIDCode })\n        : [];\n    let cyclicBonds = cyclic\n        ? (0, fragmentRings_js_1.fragmentRings)(molecule, { calculateHoseCodes, parentIDCode })\n        : [];\n    let result = [...molecularIon, ...acyclicBonds, ...cyclicBonds];\n    return result.toSorted((a, b) => a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass);\n}\n//# sourceMappingURL=fragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultDatabase = void 0;\nexports.defaultDatabase = [\n    {\n        label: 'alpha cleavage',\n        rxnCode: 'eM``eIhOh`!fH@Oj@ eF``fJD#Qg Qp Qd#!RPNp@@qtJ_@ !RGUi| !R_P@]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1149/1945-7111/abdde7',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eMHJN`pksPqFdD@`!fI@GudYA@H@ eF@HhP#Q^ Qp Qd#!RWrL@@qvrO@ !RG]i| !R@@L]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.7',\n        description: 'Fig. 18 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eFH`fLGtX!fI@Gu` fHT`P#QX QP a`#!R@AL]|gp !RGUi| !RG[i|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 32 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'gCiALAJRu@_HYlgHE@!fI@Gu` eO``fNZ`~cIrE@#qNT qH Qg#!R@BL@[@@cGPj| !RG]i| !Rog~w?Qwzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eMH`eIXOda`!fI@Gu` eF@bXhP#Qy Qp Qd#!R@Fp@XqtJ_@ !RG]i| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGrDZHpypB@P!gCh@@eKHFLv\\\\@`D@ eF``fLGtX#qn\\\\J qfQ qk#!R|Gvw__A|_g?p_Qurw@ !R_wy||G}~GYk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 23',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGrDZHpypB@P!gCh@@eKHFLv\\\\@`D@ eF``fLGtX#qbu_ qj{ Ql#!RlKvwo[@|og~poQurw@ !R_{x|lG~~GYk| !R@BL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 24',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGtDQas`D@`!gJT@AdijdCzZHpypB@P fHT`P#qbqo qJ|h Qp#!R|Gvw__A|_g?p_Qurw@ !Rb@KW@gx@bGt]vhH !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 25',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGtFQas`D@`!gChAAIRfdCF[N@PB@ eF`BLGtX#qj|^ qbs qo#!Rm?wp?[]|_g~w?QvRw@ !R@Fp?[@AcG]k| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 26',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'day@B@HIRigjf`Cy@`hcEYpB@P!gGTAAaJTwTpGrFZHpypB@P eF@HhP#IaLJfxP IaBia q~#!RbGwW_Wx@bOq~O}_|bGt]lcp !R|Gvw__A|_g?p_Qtzw@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 27',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Tropylium rearragement',\n        rxnCode: 'gOpAMJUKua@@Gtt@!gOpAGJTju`@@Gt\\\\@#qgVMX qYoTp#!Ri}w^@Hc]i?rg?Mx@GPhB !Rwg}GED]sw~g_~dvOG]h|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Tropylium fragmentation',\n        rxnCode: 'gOpAGJTju`@@D!gKPACJTnLE@P eF@HxP#qqUcx qMsx Qd#!RkpXxCLvpO`BblClLG[KB !RS|T~@BLXSzh]FhH !R@DL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: 'http://people.whitman.edu/~dunnivfm/C_MS_Ebook/CH6/6_9_5.html',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Tropylium fragmentation',\n        rxnCode: 'gFpAAJTjZ@@A@!gBPAAJTkRpD eF@HxP#qbqk qbu qY#!RdMvww]y?wg~wwQurW@ !R@M{^[}yoGUj| !R@@L]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: 'https://en.wikipedia.org/wiki/Fragmentation_%28mass_spectrometry%29',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphonates fragmentation',\n        rxnCode: 'gJPeE`DSpTiMMPGtT@!gC`eE`DSpdiLtA@ fH@Oj@#qbNh qbN qh#!Rb@I~Owx@bGt]|`H !Ru?sW_Wx@GQjB !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 60',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gGQeLZ@b^@eJZihCzB@!gJQdEb@b^BSTtA}A@ fHT`P#qbqk qbMX Qp#!ROvL@Xvp?OvMc@AtrO@ !RbOq~@Gx?bGt]v`H !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 49',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gNqeLZ@b^@eJZZZ`OhH@!gJQeEb@b^@eIjZ@~`p eF@HhP#qbqkx qbMX q~#!ROvp@[FL?Ovql@@AcGSHB !RbOq~@Gx?bGt]N`H !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 50',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gGQeLZ@b^@eJZihCzB@!gCaiHlO@SGZ@` eFB@HcA}D@#qbqk qQ] Ql#!ROvL@Xvp?OvMc@AwRO@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 51',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gGQeEb@b^BeIiZhCzJ@!gC`eE`DSpdiLtA@ eFHBLGtP#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 45',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gNqeEb@b^BgHiDVj`Ohh@!gJQeEb@b^BeIij@~bp eF@HhP#qbqkx qbqh q_#!R[@@@Xs}l[@@@[@AcGPiB !RbOq~@Gx?bGt]N`H !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 46',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'daxLRDp`BH|DgHiDbuU@GtI@!gGPdE`DSpRYvi@~d` eFH`fLGtX#IaLJfxP IaBka qs#!R[C|?XpAc[@@?[@Al@FL]lmp !RbOrH_Wx@b@JH_Qvz`` !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 47',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gGQeEb@b^BeIiZhCzJ@!gC`eE`DSpdiLtA@ eFHBLGtP#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 48',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gJYIC`DBTijXCzB@!eMhdiRVB eFB@HcA}D@#qbqh qJh Ql#!Rb@KW@gx@bGt]\\\\hH !R@Fp@XqwZ?@ !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 19',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gGYIC`DBTiff`OhH@!gCiIL`DBTff@~`p eF@HhP#IaLJa qbM IG@#!RupJH@m]}_`BH_Qtr`` !RbOq~@Ha}GSjB !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 20',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gNyIC`DF\\\\dTJij@~a`!gJYHC`DISTpGtL@ eF@bXpP#IaLJnD qbqh IxP#!Rb@KW@gx@bGvH?Ha}GWJB !Rb@KW@gx@bGt]NhH !R@FL]Agp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 21',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gGYIC`DB\\\\dTMM@_PP!gCaHL@aJZPH eF``fJGtP#qbqo qbq qo#!R|Gvw_Wy?|Gsp_Qvrw@ !R@Fp?[@AcG]i| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 22',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfoxides fragmentation',\n        rxnCode: 'eMJhBBXvCyH\\\\@!fHT`P eFJHBHh_Q@#Qg Qp Qd#!ROvL@Xqwro@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 65',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfones fragmentation',\n        rxnCode: 'gC`iH`DRXzpGrdZ@!fHT`P eMFI@bM`~f@#qbq qH Qm#!Re{v~@Hb}G[K| !RGYi| !RWrL@Hquzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 66',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfones fragmentation',\n        rxnCode: 'gC`iH`DRXzpGtd@!fHT`P eMFI@bMP~b@#qfQ qH Qm#!R_`CW_Xa}G[K| !RGQi| !R@Gx?_avz_@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 67',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfites fragmentation',\n        rxnCode: 'gJQiHl@aReVu@_QP!gCahHl@bNtA}E@ fHT`P#qbqh qbq qh#!Rmwsp_Gy?|Ot]lkp !RuwvH_Wx@G]k| !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 68',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfides fragmentation',\n        rxnCode: 'eMB`HIchOh`!fHT`P eFB@HcA}D@#Q[ a` Q\\\\#!ROvL@Xqur_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 61',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfides fragmentation',\n        rxnCode: 'gC`I@DBTij@~``!eFB`HIcA}F@ eF@HhP#qrL qq Qd#!RGtL@Pq}lG[I| !R_pp]Vop !R_pp]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 62',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Simple inductive cleavage',\n        rxnCode: 'eM@bXzCKGgW@!fHT`P eF@HpP#Q[ a` Q\\\\#!R_qL@Dqwro@ !RGUi| !R@AL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sigmatropic rearrangement',\n        rxnCode: 'eM@HvCzX@!eM@HvB#Q^ Q[#!ROvL@XquJO@ !ROvL@Xqtzo@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.7',\n        description: 'Fig. 18 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene (McLafferty-type rearrangement)',\n        rxnCode: 'gJP@DkVhCzFHrEpBG`D@!eM@HvCzXcI\\\\@axA@ eF@HhP#qTqh Q^ qM#!ROvL@XpAl@FL]Bcp !R@FL?XqwZO@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene (Claisen rearrangement)',\n        rxnCode: String.raw `daxH@JrRHiMUHAcEHHA@!daxH@NrSRHmUHAcGHHA@#IZaxla@ IhfP^c@#!Ru{vHo[x@u?sWoY_|e{t]Dop !R@BL?Xs|\\[E|cWs}cOqp]vcp`,\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 12 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'daxDBDqIRiubJ`CZN|bPtQqDD@cDD@chXO}c`!gJQ@DeNl`XqHHA@ eFH`fLGtYFDD@`#qqj\\\\x qqkx QX#!RbCtAHN\\\\}b@Kg@cx@yst]xop !R@DL?W@Al@DL]Nop !R@DL]agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig. 13 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'gGY@DDf]j`Odkl@!gCi@DDff@~`l eF@HhP#qrLk qrL qk#!RbOrH_Wx@b@JH_QuJ@` !RbOq~@Ha}GSjB !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig. 13 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'daDLBHSdeJmVfZjh@~QHzHyBB@PbB@QrB@P!gCaAIiRmhCFQA@H@ gC``Eh{PGrTZHiHHAFPPB@#Ikb[HPP I`Tp qky#!R}{rpwKy?lGvpO[y?og|]dep !ROqp@[@@cGUk| !RbKwW_[x@G_k|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 14 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'gGP`MTj}jPOihbl``DUA@H@!eMHJMPqiA@H@ eMHFM`~fHr``D@#qStM qTX qNh#!RbKwWo[x@upKW_QtR?@ !R@Ox?oawZ_@ !R@BL?XqwzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 14 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-ene',\n        rxnCode: 'gJQ@DeZu@_PqFIA@HFB@!eMHJM`qiA@H@ eF@HhP#qeVH qbh qq#!RWrM@XpAl@BL]Bcp !ROvL@HqwZO@ !R@BL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.3',\n        description: 'Fig. 11 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-ene',\n        rxnCode: 'gJP@DkVhCzF@!eM@HvCzX@ eF@HhP#qbqh Qm qM#!ROvL@XpAl@FL]bcp !R@FL?XqwZO@ !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'daDD@DqJg^ffZh@qQDD@cDD@`!gGQ@BeJmJHGFEA@H@ eFHBJFLHHA@#IGmdehp IxakS IeP#!Rog?w_KC\\\\lCvp?[@|lOt]tkp !R|Gw~@OA|mpKp_QwZ`` !R@BL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gFp@DiTujhB!gC`@Die@` eF@HhP#q]aV q]a Q\\\\#!R_g~w_K_}mwvw_AuRO@ !R@Fp?[@AcGUk| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gFx@@eJfuS@P!gC`@Die@` eF`BJD#q]aV qqU q\\\\#!R_g~w_K_}mwvw_AuRO@ !R@Fp?[@AcGUk| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gOu@AReLm]SLAcB``D@!gJY@@TeVTCFEA@H@ eF`BJD#IKJRV` IZDrP qM#!R}xNp?[y?}{r~_{@}GQI\\\\ !R_vq?Dw}l_vp]z`H !R@BL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 d.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: String.raw `didDB@{iRYefxijh@zRhX!gNpaAQJRs\\uBIzQg@ eF@HhP#IwlDdeZ IwlIEh IFP#!RbMvH?Cx_bMt~@Hc]Oa~H?AtJo@ !Rm{vwoSy?musPO[\\}GYh\\ !R@DL]Akp`,\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'fdeA`D@\\\\brTfYY_m]gIZ|DhJB@@h@@~aF@!didHB@BTfUvfZVV@OhB@ didD@@iIYgxUie`B#iup`jXdibCPcXKoI iSxKhvMHP IwbkEYH#!RbCvH?Ky_bCv~@H`}oe~H?Hc|oe~~@H`}esv~W{y_e{v~WquRs@ !RlKvpwKy?lKvpO[y?lKvpOQwZg@ !Rmwvw_[y?msrpo[^}mwvwOAuzG@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'deTDB@{iRYemnJXj`CiJaoQt@!gGPa@QJRmsPbX gC`@DiPDCteZ@#IaLJfxYT IaBxU IriX#!RbGvH?Gx?bGu~@Hb}_c~H?Gx?G[I\\\\ !RbGvH_X`B_`BH_Qtz_@ !R|Gq~_?C}GXX|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Remote Hydrogen rearrangment',\n        rxnCode: 'gC`AEJTu@P!fH@Oj@ eM@fXvB#qVa qH Q^#!R@Fq?[@@SG_HB !RGWi| !R@AM?DqtZO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Remote Hydrogen rearrangement',\n        rxnCode: 'eM@HzCzhcO\\\\@axADQbU`!fH@OjHw\\\\@axADQbU` eF@HhP#Q[ Qp Qd#!ROvL@XqurO@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.1',\n        description: 'Fig. 4.1. a',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Remote Hydrogen rearrangement',\n        rxnCode: 'eM@HzCzhcW\\\\@axADQbU`!fH@Oj@ eF@HhXqw@H^@QDXeX#Q^ a` Qt#!R@FL?XqwrO@ !RGUi| !R_rp]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.1. b',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Rearrangment d',\n        rxnCode: 'gOpAIJUKua@@Gtt@!gOpAMJUKua@@D#q]gJp q\\\\oQp#!Ro`BWoXb}e?rW?I^}GPhB !Resv~@H`}epJW@kx@GShB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.comptc.2016.07.018',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Rearrangment a',\n        rxnCode: 'dnD@BLeJV|jfZih@`!gOpAGJTju`@@D#qTuYx qigSp#!RSF\\\\_iUMg_wy~_wy?G_I\\\\ !RgtXxCJvp_`Cbl@\\\\LG]kB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.comptc.2016.07.018',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Radical resonance',\n        rxnCode: 'gCaA@IRVXROtD_u@`!gCa@@dkPGtD_uD`#qbq qbq#!R_`BH@ha}GXhB !R@FL@[@AcG[i|',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Radical resonance',\n        rxnCode: 'gCaA@IRVdCzCOzdP!gCaA@IRVXROtF_uL`#qbq qbq#!R@FL@[@AcGTj| !R_`BH?Ha}G[hB',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Radical H Rearrangment',\n        rxnCode: 'eM@jXzCzXcV\\\\@`DSc@jd!eM@jXzCFlxA@HgFATh#Qg Qg#!ROvL@XqtJO@ !ROvL@XqtzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gGPiHaxJ\\\\ddKU@_QYFEF@P@!gC`iHaxJX{PGrDKHsHpB@ eF@HhP#qqZl qq] Qd#!R[C|?XpAlXp@@Xqvr_@ !Ruwu~@Ha}G]k| !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 41&42',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gGQiHlOASddeZhCyKM@!gCahHlOBNtA}aBcP eF@bXpP#qVLk qVa qk#!RPpAlGq}C@Fp@Pqvr_@ !RO^\\\\@OcvHG]i| !RY`@]^op',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 43',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gJQiHlOASGmPGrVZ@!gC`iHaxBX{PGtT@ fI@Gu`#qbqh qbM Qp#!Re{v~@Ky_bKt]Lgp !Re{v~@Hb}GYk| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 44',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonates fragmentation',\n        rxnCode: 'gJQiHlOBSGmPGtd@!gCahHlOBOTA}I@ fHT`P#qbqh qbq qh#!Ruwu~@Gx?bGt]Lgp !Ruwu~@Ha}GUk| !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 59',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: String.raw `gNpYHlQxR\\ddqZj@~Tap!gJPYHlQxRX}j@~TaP eF@HhP#qbuKx qbqh q{#!RXs|@Xs}l[@@@[@AcGPi| !Ruwu~@Gx?bGt]vgp !R@FL]Akp`,\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 37A&B',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: 'gGPYHlQxJTjmj`Ohh@!gCaiHlO@SGZ@` eFHBLGtP#IaLJa qbi IpP#!R[C|@[C}cXp@@Xqvr_@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 38',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: 'gGPYHlQxJTjmj`OlhtF@!gJPXHlQxQ{TA}eF`p fHT`P#qqU\\\\ qqUX a`#!R[C|@[C}cXp@@Xqvr_@ !Ruwu~@Gx?bGt]vgp !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 40',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Oxonium Resonance',\n        rxnCode: 'eFH`fJGtQFDD@`!eFHhfLGuQFdD@`#QX Qd#!R@BL]bgp !R_vp]vop',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: 'https://en.wikipedia.org/wiki/Oxonium_ion',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Oxime-ethers fragmentation',\n        rxnCode: 'gCiAHIJTt`_JPh@!eF``fJGtX eFHBJD#qbq qQ Ql#!R@Fp?[@AcGWK| !R@FL]Vgp !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 36',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ketones fragmentation',\n        rxnCode: 'eMH`eIXOh`!fH@Oj@ eFHbfJD#Qg Qp Qd#!R@Fp@Xqwr_@ !RGUi| !R@FL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 31',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ketones fragmentation',\n        rxnCode: 'eMH`eIXOh`!fHT`P eMHAIXOj`#qNP QP qN@#!R@Fp@Xqwr_@ !RGQi| !R@Fp@Xquz?@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 32',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eFBCDcAcBQFIdT!eFBcDIcA}EqaHcD@#QX QX#!R@FL]bgp !R@FL]vgp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '5',\n        description: 'Fig. 10',\n        kind: 'ionization',\n        web: 'https://www.orgchemboulder.com/Spectroscopy/MS/fragmech.shtml',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@HhP!eF@bXp_zi@#Qd Qd#!R@FL]Rkp !R@FL]vkp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'gC`@DkZ@qds`D@`!fH@H eM@fXvCFlxA@H@#qbq qH Qg#!RWvp@[@@cGWHB !RGYi| !RWrL@HqvzO@',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@H`Zp`!eF@bXp_U@#Qd QX#!R@FL]Rkp !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FL``D@!fIRPLYA@HjP#a` a`#!RGPi| !RG]i|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@HpXp``D@!eF@bXpXt``D@#Qd QX#!R@FL]bgp !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eFHBLGtP!gChaHDiRUhCzJ@#Qd QBP#!R@FL]Bgp !R@FL@[@AcGSj|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eFJhrJXpXug@HA@#a` aP#!RGXi| !R@FL]Nkp',\n        ionization: 'esi',\n        reaction: 'Ionisation ',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eFJhtJXpXug@HA@#a` aP#!RGXi| !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'Ionisation ',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!fIRPOjHv\\\\@`D@#a` a`#!RG\\\\i| !RGUi|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@GuD[N@PBO|j!fIS`L[N@PB@#a` a`#!RGZi| !RGUi|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eMjrX@fezN`~SjHug@HA@#a` aP#!RGPi| !R_qL@DquZo@',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavages assisted by adjacent heteroatoms',\n        rxnCode: 'gCaALIRfhCJAxsEpBG`D@!eFH`fJFLEpBG`D@ eF@Hp_Q@#qbq qJ Ql#!R[pL@@v}lGSI| !R@@L]Vgp !R@@L]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavages assisted by β-hydrogen removal',\n        rxnCode: 'dayHBDxDeIYtjj@LhQHdU@!gCi@DDeZ@~b` gChA@IRVdCzB@#IyjH\\\\R@ IyjD qbq#!RtEsP_]A\\\\Og?P_]A\\\\tGt]|kp !R@DL@[@ACGSi| !R@DL@[@ACGXY|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.4',\n        description: 'Fig 23 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavages assisted by β-hydrogen removal',\n        rxnCode: 'gJPAMJTmTAeLhHcBW@H^@QNRO@!gC`AMJUm@_SQFXn@P|@b\\\\d^ fH@H#quQ` quT qH#!R@Fq_[@@cWrL]Lgp !R@BM_Hu}lGUi| !RGPY|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.4',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gChA@Icu@YPOYQ^`bNB\\\\GaHXECAjb@!fJ@FLgAx@ fHT`P#Q`P a` QP#!Rwg~PO[\\\\}G_H| !RGUi| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eFH`fLFTOzLcBB@P!fI@GudYA@H@ fHT`P#Qd a` QP#!R@DL]\\\\gp !RG]i| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eMhdYRRCJW}N@!fJ@D eFH`fND#Qg Qp Qd#!R@Fp@PquJ_@ !RGUi| !R@DL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eMDaYRRCJW}LQeA@H@!fI@FL``D@ eFH`fND#Qg Qp Qd#!R@Fp@@qvJ_@ !RGUi| !R@@L]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'diD@b@|@gIIETjji@NlRrJ@!gC`HAxQz`H eM@fXvB eF@HhP#IaLJfxY qan IF^ qS#!R@FMl@C}lXs|@[@Ac@Fp@Xqvr_@ !Ruwu~@Ha}GYk| !ROvL@XquzO@ !R@FL]Qkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 31',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gGYALMJT}TpGRdX!gJY@DDefXB fHT`P#qnZa qnTH qX#!RbGwW_X`B_`BH_Qur?@ !RbGvH@gx@bGt]Nop !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 32 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gCaA@IRmhCzZHpHHA@!eFH`fJGtQFDD@` eF@HhP#qqT qq Qd#!RWvp@[@@cG_I| !R@BL]vgp !R@BL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.1.3.',\n        description: 'Fig. 7.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gGPiH`DZ\\\\ddJu@XsHp\\\\@!gC`iH`DBXzpD eF@HhXpcAp@#qVLk qVM qc#!R[C}c@@AlOvL@Xqvr_@ !Ruwu~@Ha}GYk| !R_rp]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1002/rcm.9131',\n        section: 'conclusion',\n        description: 'scheme 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eFH`fLG~hP!fI@G~i@ fHT`P#QX QP a`#!R_rp]\\\\gp !RGYi| !RGSi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@jXzCKGgW@!fHT`P eF@HhP#Q[ Qp Qd#!ROvL@Xqwro@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gBPAML^Jj@sfb`!gC`AMJUm@YqQP#qVL qTN#!R@GxBu}\\\\BG_I| !ROvp@[@AcGSi|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@jXzCfh!fHT`P eF@HhP#Q[ Qp Qd#!RGtL@Pqwro@ !RGUi| !R@DL]^kp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@bXzCzhsT!fHT`P eF@HhP#Q^ a` Q\\\\#!R_qL@Dquro@ !RGYi| !R@AL]nkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1093/chromsci/43.2.92',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@IRUhCzB@!eFHbfLGtP eF@HhP#qtQ Qx qQ#!R@FL@[@AcGPi| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eMH`eIhOhp!fH@H eFH`fJGtP#Qg Qp Qd#!R@Fp@XqtJ_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJQA@IRUZ`OhH@!eMH`eIdOhp eF@HhP#qTqh Q[ qM#!R@Fp@XpAl@FL]Bgp !R@Fp@Xqtz_@ !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@IRVhCzC@!eFH`fJGtP eF@HhP#qTq QX qq#!R@FL@[@AcGPi| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJPaAaJTtlA@!eMHAITH eFH`fJGtP#qfUH qnH Qd#!Rb@KW@ha}_`@]lhH !R@Gx@_awZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJQAAIRgjPH!gJQA@IRgeaDp#qTnH qTnH#!ROvL@Xs}lOvL]\\\\kp !RbGwW_X`B_`@]nop',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@iRZhCzB@!fI@Gu` eM@fXvB#qJt qH Q[#!Ru?q~@M]}GSJB !RGUi| !ROvL@XquzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eM@jXzB!fHT`P eF@HhP#Qg QP Qx#!R_qL@DqtJO@ !RGSi| !R@AL]fkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJPAEJUkTA@!eM@bXvB eF@HhP#qVah Q[ qi#!R_qL@DpAl@AL]bcp !R_qL@Dqvz_@ !R@AL]Vkp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eM@jXzCKGgW@!fHT`P eF@HhP#Q[ Qp Qd#!R_qL@Dqwro@ !RGUi| !R@AL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen lost',\n        rxnCode: 'eM@jXzCVd@!eO@bXyjCVT@#Q[ Qg#!R_qL@DquJO@ !R?`Bw@auZ?@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen elimination',\n        rxnCode: 'gFpACJTj[ATA}C`!gFpAAJTjZ@@A@#qbqk qn\\\\J#!Rog~wOK_}m{vwOAurO@ !Rog~wOK_}m{vwOAuZO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Halide Elimination',\n        rxnCode: 'eMBGDchOjbLiDX`!fHfHA}QFRHq@ eF@HhP#Q[ Qp Qd#!ROvL@DqurO@ !RGUi| !R@BL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'H Radical Lost',\n        rxnCode: 'eF@bXp_QDXs`D@c~hP!fHd@AjP eF@bXhXqg@HA@#QX  QX#!R_rp]|gp !RGYi| !R_rp]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gNpaIYJU_MU@_JQXbh``DUA@H@!gCa@IGj@~dbLbB@P eMHjfM`~jHt``D@#qqWeX qqW qeX#!Ru{vHo[x@b@J~@Hb}GSK| !Ruwv~@Hb}GUi| !ROvL@HqwzO@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.5',\n        description: 'Fig. 24 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gNxaLJIRU[jXCzZ@!eMH`eIxH eF`BJGtP eFHBND#q{iV` Qv qM q{#!R_c}~Oxa}b@I~@Ha}G]H\\\\ !R_wy?_awj_@ !R@FL]ngp !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.5',\n        description: 'Fig. 24 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gGPACJTkUPFtlUlxA@HlLG~r`!eN@HdH eF@HhXqg@HA@#qrLh qqh Qd#!R@FL?XpAlOvp@Xquro@ !RJW}yXQuZO@ !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'daF@B@BTeeVz`@@B!gOpAMJUKua@@D fJRPH#IGfbdK@ q\\\\oQp ID#!Rmwrw_Wy?mwrw_[_}mwp]Dcp !Ru{u~@Hb}upKW@gx@GUhB !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'did@BLeJeWk``b@CzAbLMcApB@!gOpAMJUKua@@D eF@HhXqcApB@#IZJyBGI q\\\\oQp IFP#!Rquu^@Ha]q?sG?H`BW`BHWQur@` !Rquu^@Ha]q?sG?Ex@G]hB !R@Gt]Agp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'dif@B@BTeYWaz@@@OhB@!gOpAMJUKua@@D eF`BND#Id^ZJPl q\\\\oQp IdP#!R_`A~@M\\\\Bu{u~@M\\\\BupI~@AuRh` !Ru{u~@Hb}upKW@gx@GUhB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'didHB@BTiyWaj@@@OhB@!gOpAMJUKua@@D eFHBLGtP#IGiZJPl q\\\\oQp IFP#!RuwvH_]_|uwu~@M_|u?q~@Awb@` !Ru{u~@Hb}upKW@gx@GUhB !R_rp]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'dmtDB@PIRY^UeVj@@@OhB@!gOpAMJUKua@@D gC``@deZ@`#IaLJfxYWP I[aJUt qbu#!R_`CW?Hc|uwvH_Xc|_c~H_Xb}_c|]LhH !Ruwu~@Ha}u?sW?Gx@GUhB !R@FL@[@AcGXY|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'eMH`fN`~b@!fHT`P eFHBLGtP#Qg QP Ql#!ROvL@Xqur_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 33',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'gCaA@IRfhCiQs{BIF`!eFH`fLGtX eF@HhP#qVa QX qN#!R@Fp?[@AcGPk| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 34',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'eMH`fN`~RJ@!fH@Oj@ eFH`fJGtP#Q[ Qp QX#!ROvL@Xqvro@ !RGUi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 35',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ether/water elimination',\n        rxnCode: 'gCa@@eMPFtWihb```DJFCX`!fI@GuDYA@H@ eF@HhP#Qdp a` Q\\\\#!R@Fq?[@@SG_K| !RG]i| !R@AL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.3390%2Ftoxins6082580',\n        section: '2.2',\n        description: 'Fig. 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ether/water elimination',\n        rxnCode: 'gCaAHiRfhCZ[tTQTPPBMCAlp!fI@GuDYA@H@ eF@bXhP#Q[@ a` Qt#!R_qL@Xs}lG[J| !RG]i| !R_qp]^op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.3390%2Ftoxins6082580',\n        section: '2.2',\n        description: 'Fig. 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gC`a@aJRm@_PP!eMHAIhOh` eFH`fND#qbq qq@ Qd#!R@FL@[@AcG_I| !R@Fp@XqwZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'http://dx.doi.org/10.1088/1468-6996/10/3/034602',\n        section: 'Results',\n        description: 'Fig. 5',\n        kind: 'reaction',\n        web: 'https://www.researchgate.net/figure/a-Chemical-structure-of-oxidative-reserpine-MW-6077-b-Post-source-decay_fig4_26637371',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gJPa@eJSKTA}E@!eMHbeIXH eFHBLGtX#qrLh Qv qM#!R@W~GKVQuazH]Lep !R@W|LEQvZw@ !R_tP]^op',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 11',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSNuPGtT@!gC`a@eJSM@_QX eF@HhP#satpj satp qi#!RbOrHo[x@b@JHoQtJ`` !RbOrHo[x@GSjB !R_tp]~op',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 12',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSNuPGtT@!gC``@dfZ@~b` eF@bXpP#qbqk qbq qk#!RbOrHo[x@b@JHoQwr`` !RbOrHo[x@GSjB !R@BL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 13',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSJuPGtT@!gC``@deZ@` eF@bXpP#qbqk qbu qK#!Ro`BW?Hc|e{vHoQtr`` !R@BL@[@@cGSi| !R_tp]^gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 14',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gJPa@eJSKTA}E@!eMHAITH eFH`fLGtX#qbqh qbH qu#!R|Gwp_Gy?|Gt]|cp !R_wy?_atZ_@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 15',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination (missing source)',\n        rxnCode: 'eM`AIhOdq`!fJ@Gup eF@HhP#Qv Qp Qd#!R_rq?Dqvr_@ !RG]i| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'To check',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination',\n        rxnCode: 'eMHAIhOdm`!fI@Guh eF@HhP#Qg a` Qt#!R@Fp@HqvJ_@ !RG]i| !R@BL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination',\n        rxnCode: 'gC`@Dij@~b`!eF@Hp_Q@ eF@HhP#qVa qq Qd#!R@Fp?[@AcG_HB !R@FL]vgp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.jpha.2016.04.008',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Electron Sharing',\n        rxnCode: 'gCaAAIRVdCzB@!gCaA@IRUdCzB@#qbq qbq#!R@FL@[@AcGTj| !R@FL@[@AcG[i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gJPaAaJTkTHGyZCDTDD@cHHA@!eMDiicXOfabKHHAB``D@ eF@HhP#qbqh qTH qu#!RepJH@kx@bKt]LhH !ROvL@HqwZO@ !R@BL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gChA@IRmhCzB@!eF``fJGtX eF@HhP#qTq QX qq#!ROvp@[@AcG_I| !R@FL]Vgp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gJXA@IRmZ`OdHL@!eM`bfN`~b@ eF@HhP#qTqh Q^ qi#!ROvL@XpAl@FL]Bkp !ROvL@XqwZo@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gChA@Icu@_PP!fH@H eM``fM`~b@#qTq qH Q[#!Ruwu~@Ha}GWK| !RGYi| !ROvL@Xqvz_@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gJPlLPDSpPPdtu@_QP fHT`P#qbqk qbqh qX#!RXp@@[C}cXp@@XqvrP` !RbOq~@Gx?bGt]v`H !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 52',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gC`eE`DSpdiLtA@ eFB@HcA}D@#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 53',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gJPmLPDSpPQIRZV`H fH@Oj@#q`qk qpeH qX#!RXp@@[C}cXp@@XqtrP` !RbOq~@Gx?bGt]v`H !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 54',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gCaALiRfhCJIxsHHADxH\\\\!fH@H eOH`fNZ`qaA@HgLN#qbq Qp qJ`#!R@Fq_[@@cG_K| !RGUi| !Rog~w?Quzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gJXA@YRgj`LhWmEFJFB\\\\TOlP!fH@H eO`BNZ`sfG@#qJDp Qp qJ`#!RWrL@Hu}lWrL]lkp !RG]i| !Rog~w?QuzO@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gJPACJUkTAeB|YBXN@PBIqQx!gBPAML^Jj@qfI`xA@HgMG` fH@H#qTnH qVl qH#!RWrL@HpAl@BL]|cp !R@K{|ey\\\\BG]i| !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction b.',\n        rxnCode: 'gJXA@IRUjPH!eM@fXvB eF`BLGtP#qlVH qrH ql#!R@Fp@XpAl@FL]Bgp !ROvL@XqwZO@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction b.',\n        rxnCode: 'gJQABYRmZ`LXTD@`!eM@fXvB eFH`fLGtQFDD@`#qMr` qNh Qd#!R@BL?Xs|\\\\OvL]xcp !RWrL@HquZO@ !R@BL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction a.',\n        rxnCode: 'gGYADEJSLuPGtT_nlK|!gChA@Icu@_PP eFHBND#qtSi qQ] Qx#!RbGvH@gx?_`BH_QtJo@ !Ruwu~@Ha}GUk| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7.1.3',\n        description: 'Fig. 22 c. ',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dioxolane fragmentation',\n        rxnCode: 'dclDB@iYRfUw\\\\kahHBj@CzI`!eFHBJD deTHB@RTfU]ih@I`Hz~`H@#IzAQirbWS IdP IzD[JI]L#!RIm~?ck^}|KuMswy?_g?po_B}|GspoQwR{@ !R@FL]fgp !RbOq~@Ha}b@JH@ha}bGvH?Ha}GXZB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1002/jms.1963',\n        section: '',\n        description: 'Fig. 4',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dioxolane fragmentation',\n        rxnCode: 'detDB@jYRfUwJxZB@h@H!eFHBJD daDHB@RTfUVyiZPB#IaLJfxYT Ql IXdziEP#!RIm~?ck^}|KuMswy?_g?po_B}GSKl !R@FL]fgp !RBGvh[AF?HBVDj?Jo@MX]Aep',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C3AY40543E',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'DB rearrangement',\n        rxnCode: 'eM@HvCzX@!eM@HvCzX@#Q[ Q^#!ROvL@XqvJO@ !R@FL?XqtzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.jpha.2016.04.008',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Cycloreversion',\n        rxnCode: 'gFp@DiTvjhB!eF@HhP eF@HhP eF@HhP#qbqk qn qY Qd#!R_g~w_K_}mwvw_AvRO@ !R@FL]Fkp !R@FL]Nkp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Cyclization',\n        rxnCode: 'eM@jXzCNhh!eO@bXyjCNXh#Q[ Qg#!R_qL@DquJO@ !R?g~w?QuZo@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Charge Stabilization',\n        rxnCode: 'gCaAAIRVdCzB@!gCaAAiRVXROtD@#qbq qbq#!R@AL@[@@SGRj| !R?`BH@hc}GShB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Charge Remote Fragmentation',\n        rxnCode: 'gC`@Dij@~RcP!eF@HhP eF@HhP#qqb Ql qJ#!R@Fp?[@AcGXk| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gJXaLDiRYZ`Ohh@!eMhdiRVB eFHBLGtP#qbqh qbH qu#!R|Owp_Gy?|Gt]|mp !R@Fp@XqwZ?@ !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 16A & B',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gJXaLDiRYZ`Ohh@!eMhDRUB eFH`fLGtX#qbqh qbH qu#!R|Gwp_Gy?|Gt]|mp !R_wy?_atZ_@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 17',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gGXaLDiRYvj@~b`!gChaLDiRYhCzK@ eF@HhP#IaLJa qbq IF`#!Rwg~Pw[_]dArP_Qwrw@ !RdKw^_yA\\\\GSk\\\\ !R_wP]^op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 18',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'COOH loss',\n        rxnCode: 'gOxaBDYR[fmjj@pb}C@!gBXA@IReYj@` eMDARVCzX@#qbqkx qi{ Qg#!RbOp~@H`}HMkZK}hoGPhB !RO`@@O`@~GUhB !R_pq?Dqvz?@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1038/s41598-019-42777-8',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO loss',\n        rxnCode: 'gOxaBDYR[fmjj@pb}C@!gJYABCJRkTA}C@ eFHPfzND#qbqkx qq_h Qd#!RypKgOSx@iJSKiLndG^KB !R_pq?Dw|L_qL]zop !R_pp]~op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1038/s41598-019-42777-8',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO elimination',\n        rxnCode: 'gCa@@dsPFRTZ@!eFHPfzND eF@HpYIE@#qJf qJ Ql#!RbOq~@Ha}G_JB !R@FL]Vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.8',\n        kind: 'reaction',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO elimination',\n        rxnCode: 'gOq@@drm[UTA@!gKP@Di\\\\Zj@` eFHBND#qbqkx qY~h Qd#!RbOvH?Oy?bOvH__y?GPi\\\\ !R?g|_Fa}eTv\\\\]fcp !R@AL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.8',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO Elimination',\n        rxnCode: 'gCaA@IRWhCZZLtLG~s@!fHT`P eFHPfzND#Qg@ Qp Qd#!R_g}~_?A}G_H\\\\ !RGYi| !R@FL]nkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Beta Remote Hydrogen rearrangment ',\n        rxnCode: 'gGPACJTkUPD!gJPACJUkTA@ fH@Oj@#qrLk qTqh qX#!R@AM?DpAl_vp@Dqtr_@ !R_qL@DpAl@AL]~cp !RGYi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Aromatic elimination',\n        rxnCode: 'ded@@DiUUeiZ@hTZfh!gFp@DiTt@@B gC`@DiZDC@#IpdjFGiT qcUq IGiT#!RbGvw_X`B?g?~@K]}b@K~_?x@GWJ| !R?g~w@k_}m?vw@avZO@ !Rb@K~_xc}GPZ|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.6',\n        description: 'Fig. 16',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'gGXiMDOCSddajXCFEA@H@!gC`iHaxBX}HFLrB@P eF`BLD#qbqk qbu qK#!RXp@?XpAl[C|@Xqvr_@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 55',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'dazDbLa@|LeJi~ij@OdrNbLD``D@!gC`hHaxQvPOhHcL``D@ eF``fLGtX eF@HxP#IaLJnXP qbu qK IxP#!R@FMc@C}c[@@@[C}l@FL]top !Ruwu~@Ha}GUk| !R@FL]~gp !R@FL]Qkp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 56',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'gNxiMDOCSddauSPGrtNHphHA@!gJXiMDOCSGuHGtvQaPPB@ eF@HhP#qbqkx qbqh q_#!R[@@?[@AcXs|@[@AcG_I| !Ruwu~@Gx?bGt]Ngp !R@FL]Akp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 57',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'gGXiMD@cSddaVhCz[@!gC`iH`DBXzpD eF`BLGtX#qqj\\\\ qqk QX#!R[@ACGq}l@DL_PqwR_@ !RysvHOSx@GYk| !R_pp]^op',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 63',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'gGXiMD@cSddaVhCy[C@!gC`hH`DQuPH eF``fLGt\\\\#qbqk qbu qK#!R[C}c@@AlOvL@Xqvr_@ !Ruwu~@Ha}GYk| !R@FL]^gp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 64',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminodithiophosphate fragmentation',\n        rxnCode: 'gGYMC`DSphPIRfji@~`bLjB@P!gCiEEAxXHDqzPLYdD@` eFB@HcA}D@#qrYl qQl qs#!ROvL@Xs}cXpAlOqwRO@ !R_`BH_]]}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 58',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gChA@IRfhB!eF`BLD eF@bXpP#qLZ qK Qd#!RpDp^_|B]GPj| !R@Kt]Vgp !R_qP]nop',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gChA@IRfhCyBM@!eF``fLGtX eF@HhP#qbq Ql qQ#!R@Fp?[@AcGPi| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 4 ',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gJXA@IRij`OhH@!gChA@Icm@P fH@Oj@#qrM` qri a`#!Ruwu~@Ha}upH]Lop !Ruwu~@Ha}GUk| !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gGYADEJSNuPD!gCiADEJSM@_QP eF@HhP#qbq_ qbq q{#!RbOrH_Wx@b@JH_QvJ@` !RbOq~@Ha}GSjB !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 10',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTAkLh!eMHbeIXH eF`BLFlJ@#qbqh qbH qu#!RxCw`[Ey?xEt]Bcp !R@Fp@?QwZ?@ !R@Gt]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 6',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTAkLh!eMHAITH eF``fLGtQVE@#qbqh qbH qu#!R|Gwp_Gy?|Gt]|cp !R_wy?_atZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gCiADEJSM@P!fHT`P eMhDRVB#qbq qH Qg#!RbOq~@Ha}G_JB !RGQi| !R@Fp@Xquz_@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 8',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTA@!gCi@DDfZ@` fHT`P#qbsH qbs qH#!R|Owp_Gy?|Gt]Bcp !RbOq~@Ha}G]jB !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 9',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'dayDBDpFRTfUfjX@~QLr@!gJU@E`dru@_SX eMHbeIXH#IZbyAr@ IZnHP Qv#!Ro`BW?Hc|e{vHo[y_e?p]ThH !Ro`BH?I_|bKt]vhH !R_tq?Dqwz?@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 28',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'gGTaEaUJSNuHGrVZ@!eMhdYRVCz^@ eMhDRUB#qyuS qZp qyh#!RbOrH_Wx@b@JH_Qur`` !R@Fp@XqwZ_@ !R_wy?_auz_@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 29',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'dayDBDpFRTf[VjX@~QHr@!gGTaEaUJSNuHGrVZ@ eF@HhP#IaLJfEP IaLJa IU`#!Rb@JH_Wx@_c~H@m]}bGt]|gp !RbOrH_Wx@b@JH_Qvz`` !R@FL]Akp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 30',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,5-shift',\n        rxnCode: 'gJP@DiYXRWtL@!gJP@DiYXRWtL@#qbqh qfUH#!ROvp@[C}c@FL]Bop !R@Fp?[@AcOvL]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gC`@Dij@~RcP!eF@HhP eF@HhP#qVa Qd qq#!R@Fp?[@AcGXk| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gC``Adej@~PcP!eFHBJD eFHBJD#qtQ qJ Qx#!R@FL@[@AcGTj| !R@FL]vgp !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gCa@@dmPGrDZ@!eFHBJD eF@HhP#qNT qN Qd#!R_rq?Dw|lGSK| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 d.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,3-shift',\n        rxnCode: 'gJP@DiYXRWtL@!gJP@DkVdCzJ@#qqU` qTqh#!R@Fp?[@AcOvL]\\\\op !ROvL@XpAl@FL]ncp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,3-elimination',\n        rxnCode: 'gCa@@dmPGrDZ@!eFHBJD eF@HhP#qTq QX qq#!R@FL@[@AcGTj| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'α-Elimination',\n        rxnCode: 'eM@ghzCFZXN@P|@`!fHW@P eF@HhXqSApBG`D@#Q^ Qp Qd#!R_qL@DqwrO@ !RG[i| !R@AL]Vgp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.4',\n        kind: 'reaction',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'dcMDbLvD@Hr\\\\ddJfRtjmP@P@_If[@!eF``fLGt\\\\ deVD`Ia@BLdabRwBkRs@D#IaLJf{QVS qK IaLkmEYL#!R@m]}ux`BupJH_]]}_`CW?M\\\\B_`CW?Avb`` !R@FL]fgp !Ruwu~@Ha}bOq~Oxa}bKu~Oxa}GXX|',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 64',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n];\n//# sourceMappingURL=defaultDatabase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDatabase = getDatabase;\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst defaultDatabase_js_1 = require(\"./defaultDatabase.js\");\n/**\n * @description Get the default databases of reactions for positive and negative mode\n * @param {Object} options - Options for database selection\n * @param {('ionization'|'resonance'|'reaction')[]} [options.kind=['ionization','resonance','reaction']] - The kind of database to be used\n * @param {('esi'|'ei')[]} [options.ionizations=['esi','ei']] - The ionization technique to be used\n * @param {('positive'|'negative')[]} [options.modes=['positive','negative']] - The ionization mode to be used\n * @param {string} [options.dwar] - The dwar file to use. Default will use an included mass fragmentation database\n * @returns\n */\nfunction getDatabase(options = {}) {\n    const { kind = ['ionization', 'resonance', 'reaction'], ionizations = ['esi', 'ei'], modes = ['positive', 'negative'], dwar, } = options;\n    const fullDatabase = dwar ? (0, openchemlib_utils_1.parseDwar)(dwar).data : defaultDatabase_js_1.defaultDatabase;\n    const database = fullDatabase.filter((entry) => kind.some((k) => entry.kind.includes(k)) &&\n        ionizations.some((ik) => entry.ionization.split(',').includes(ik)) &&\n        modes.some((m) => entry.mode.split(',').includes(m)));\n    return database;\n}\n//# sourceMappingURL=getDatabase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMasses = getMasses;\n/**\n * @description get array of mz from fragmentation nodes\n * @param {Array} nodes valid nodes of fragmentation process\n * @returns {Array}  array of unique mz values\n\n */\nfunction getMasses(nodes) {\n    let masses = {};\n    for (const node of nodes) {\n        for (let molecule of node.molecules) {\n            if (molecule.info.mz) {\n                if (!masses[molecule.info.mz]) {\n                    masses[molecule.info.mz] = {\n                        ...molecule.info,\n                        molecules: [],\n                        minDepth: node.depth,\n                    };\n                }\n                masses[molecule.info.mz].molecules.push({\n                    idCode: molecule.idCode,\n                    molfile: molecule.molfile,\n                    depth: node.depth,\n                });\n                if (masses[molecule.info.mz].minDepth > node.depth) {\n                    masses[molecule.info.mz].minDepth = node.depth;\n                }\n            }\n        }\n    }\n    return Object.values(masses);\n}\n//# sourceMappingURL=getMasses.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reactionFragmentation = reactionFragmentation;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_1 = __importDefault(require(\"openchemlib\"));\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst getDatabase_1 = require(\"./database/getDatabase\");\nconst getMasses_1 = require(\"./utils/getMasses\");\n/**\n * @description Fragment a molecule by applying reactions from a custom database of reactions\n * @param {import('openchemlib').Molecule} oclMolecule - The OCL molecule to be fragmented\n * @param {Object}  [options={}]\n * @param {('esi'|'ei')[]}  [options.ionizations=['esi']] - The ionization technique to be used\n * @param {('positive'|'negative')[]}  [options.modes=['positive']] - The ionization mode to be used\n * @param {number}  [options.maxDepth=5] - The maximum depth of the overall fragmentation tree\n * @param {number}  [options.limitReactions=200] - The maximum number of reactions to be applied to each branch\n * @param {string}  [options.dwar] - The dwar entry to be used, if not provided, the default one will be used\n * @param {number}  [options.maxIonizations=1] - The maximum depth of the ionization tree\n * @param {number}  [options.minIonizations=1] - The minimum depth of the ionization tree\n * @param {number}  [options.minReactions=0] - The minimum depth of the reaction tree\n * @param {number}  [options.maxReactions=3] - The maximum depth of the reaction tree\n * @returns {object} In-Silico fragmentation results with the following properties:\n * - masses: array of monoisotopic masses\n * - trees: array of fragmentation trees\n * - validNodes: nodes without dead branches\n */\nfunction reactionFragmentation(oclMolecule, options = {}) {\n    const { ionizations = ['esi'], modes = ['positive'], dwar, maxDepth = 5, limitReactions = 200, minIonizations = 1, maxIonizations = 1, minReactions = 0, maxReactions = 3, } = options;\n    const reactions = new openchemlib_utils_1.Reactions(openchemlib_1.default, {\n        moleculeInfoCallback: (molecule) => {\n            // @ts-ignore\n            const mf = (0, openchemlib_utils_1.getMF)(molecule).mf;\n            const mfInfo = new mf_parser_1.MF(mf).getInfo();\n            return {\n                mf,\n                mw: mfInfo.mass,\n                em: mfInfo.monoisotopicMass,\n                mz: mfInfo.observedMonoisotopicMass,\n                charge: mfInfo.charge,\n            };\n        },\n        maxDepth,\n        limitReactions,\n        skipProcessed: true,\n    });\n    reactions.appendHead([oclMolecule]);\n    reactions.applyOneReactantReactions((0, getDatabase_1.getDatabase)({\n        kind: ['ionization'],\n        ionizations,\n        modes,\n        dwar,\n    }), {\n        min: minIonizations,\n        max: maxIonizations,\n    });\n    const reactionDb = (0, getDatabase_1.getDatabase)({\n        kind: ['reaction'],\n        ionizations,\n        modes,\n        dwar,\n    });\n    for (let i = 1; i <= maxReactions; i++) {\n        let min = 1;\n        if (minReactions < i + 1) {\n            min = 0;\n        }\n        reactions.applyOneReactantReactions(reactionDb, {\n            min,\n            max: 1,\n        });\n    }\n    const trees = reactions.trees;\n    const validNodes = reactions.getValidNodes();\n    const masses = (0, getMasses_1.getMasses)(validNodes);\n    return {\n        trees,\n        validNodes,\n        masses,\n        reactions,\n    };\n}\n//# sourceMappingURL=reactionFragmentation.js.map","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n  self = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== self ? self : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(\n    oldElement.type,\n    newKey,\n    void 0,\n    void 0,\n    void 0,\n    oldElement.props\n  );\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction noop$1() {}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop$1, noop$1)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction noop() {}\nexports.Children = {\n  map: mapChildren,\n  forEach: function (children, forEachFunc, forEachContext) {\n    mapChildren(\n      children,\n      function () {\n        forEachFunc.apply(this, arguments);\n      },\n      forEachContext\n    );\n  },\n  count: function (children) {\n    var n = 0;\n    mapChildren(children, function () {\n      n++;\n    });\n    return n;\n  },\n  toArray: function (children) {\n    return (\n      mapChildren(children, function (child) {\n        return child;\n      }) || []\n    );\n  },\n  only: function (children) {\n    if (!isValidElement(children))\n      throw Error(\n        \"React.Children.only expected to receive a single React element child.\"\n      );\n    return children;\n  }\n};\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.act = function () {\n  throw Error(\"act(...) is not supported in production builds of React.\");\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key,\n    owner = void 0;\n  if (null != config)\n    for (propName in (void 0 !== config.ref && (owner = void 0),\n    void 0 !== config.key && (key = \"\" + config.key),\n    config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, void 0, void 0, owner, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, void 0, void 0, null, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    ReactSharedInternals.T = prevTransition;\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n  return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.0.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.0.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0), requestHostCallback();\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return exports.unstable_now() - startTime < frameInterval ? !1 : !0;\n}\nfunction performWorkUntilDeadline() {\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostCallback() {\n  isMessageLoopRunning ||\n    ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n}\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_continueExecution = function () {\n  isHostCallbackScheduled ||\n    isPerformingWork ||\n    ((isHostCallbackScheduled = !0), requestHostCallback());\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_getFirstCallbackNode = function () {\n  return peek(taskQueue);\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_pauseExecution = function () {};\nexports.unstable_requestPaint = function () {};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0), requestHostCallback()));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nvar REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nSymbol.for(\"react.debug_trace_mode\");\nvar REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PORTAL_TYPE:\n      return \"Portal\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        return (type.displayName || \"Context\") + \".Provider\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  assign = Object.assign,\n  prefix,\n  suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$0) {\n                control = x$0;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$1) {\n              control = x$1;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return (fiber = describeNativeComponentFrame(fiber.type, !1)), fiber;\n    case 11:\n      return (\n        (fiber = describeNativeComponentFrame(fiber.type.render, !1)), fiber\n      );\n    case 1:\n      return (fiber = describeNativeComponentFrame(fiber.type, !0)), fiber;\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\";\n    do\n      (info += describeFiber(workInProgress)),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$2 = parentA.child; child$2; ) {\n        if (child$2 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$2 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$2 = child$2.sibling;\n      }\n      if (!didFindChild) {\n        for (child$2 = parentB.child; child$2; ) {\n          if (child$2 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$2 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$2 = child$2.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  fiber = nextRootInstance.nodeType;\n  switch (fiber) {\n    case 9:\n    case 11:\n      nextRootInstance = (nextRootInstance = nextRootInstance.documentElement)\n        ? (nextRootInstance = nextRootInstance.namespaceURI)\n          ? getOwnHostContext(nextRootInstance)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = 8 === fiber ? nextRootInstance.parentNode : nextRootInstance),\n        (nextRootInstance = fiber.tagName),\n        (fiber = fiber.namespaceURI))\n      )\n        (fiber = getOwnHostContext(fiber)),\n          (nextRootInstance = getChildHostContextProd(fiber, nextRootInstance));\n      else\n        switch (nextRootInstance) {\n          case \"svg\":\n            nextRootInstance = 1;\n            break;\n          case \"math\":\n            nextRootInstance = 2;\n            break;\n          default:\n            nextRootInstance = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, nextRootInstance);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction onCommitRoot(root) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n    try {\n      injectedHook.onCommitFiberRoot(\n        rendererID,\n        root,\n        void 0,\n        128 === (root.current.flags & 128)\n      );\n    } catch (err) {}\n}\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionLane = 128,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 4194176;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes,\n    warmLanes = root.warmLanes;\n  root = 0 !== root.finishedLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : root ||\n              ((warmLanes = nonIdlePendingLanes & ~warmLanes),\n              0 !== warmLanes &&\n                (nextLanes = getHighestPriorityLanes(warmLanes)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : root ||\n            ((warmLanes = pendingLanes & ~warmLanes),\n            0 !== warmLanes &&\n              (nextLanes = getHighestPriorityLanes(warmLanes))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (warmLanes = wipLanes & -wipLanes),\n        suspendedLanes >= warmLanes ||\n          (32 === suspendedLanes && 0 !== (warmLanes & 4194176)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 64:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextTransitionLane() {\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n  0 === (nextTransitionLane & 4194176) && (nextTransitionLane = 128);\n  return lane;\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$7 = 31 - clz32(remainingLanes),\n      lane = 1 << index$7;\n    entanglements[index$7] = 0;\n    expirationTimes[index$7] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$7];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$7] = null, index$7 = 0;\n        index$7 < hiddenUpdatesForLane.length;\n        index$7++\n      ) {\n        var update = hiddenUpdatesForLane[index$7];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 4194218);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$8 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$8;\n    (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n      (root[index$8] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentSuspenseInstance(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentSuspenseInstance(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$10 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? \"checked\" : \"value\",\n    descriptor = Object.getOwnPropertyDescriptor(\n      node.constructor.prototype,\n      valueField\n    ),\n    currentValue = \"\" + node[valueField];\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    )\n      return;\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$283;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_418 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_418) {\n      var element$jscomp$inline_419 = document.createElement(\"div\");\n      element$jscomp$inline_419.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_418 =\n        \"function\" === typeof element$jscomp$inline_419.oninput;\n    }\n    JSCompiler_inline_result$jscomp$283 = isSupported$jscomp$inline_418;\n  } else JSCompiler_inline_result$jscomp$283 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$283 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nfunction restoreSelection(priorSelectionInformation, containerInfo) {\n  var curFocusedElem = getActiveElementDeep(containerInfo);\n  containerInfo = priorSelectionInformation.focusedElem;\n  var priorSelectionRange = priorSelectionInformation.selectionRange;\n  if (\n    curFocusedElem !== containerInfo &&\n    containerInfo &&\n    containerInfo.ownerDocument &&\n    containsNode(containerInfo.ownerDocument.documentElement, containerInfo)\n  ) {\n    if (null !== priorSelectionRange && hasSelectionCapabilities(containerInfo))\n      if (\n        ((priorSelectionInformation = priorSelectionRange.start),\n        (curFocusedElem = priorSelectionRange.end),\n        void 0 === curFocusedElem &&\n          (curFocusedElem = priorSelectionInformation),\n        \"selectionStart\" in containerInfo)\n      )\n        (containerInfo.selectionStart = priorSelectionInformation),\n          (containerInfo.selectionEnd = Math.min(\n            curFocusedElem,\n            containerInfo.value.length\n          ));\n      else if (\n        ((curFocusedElem =\n          ((priorSelectionInformation =\n            containerInfo.ownerDocument || document) &&\n            priorSelectionInformation.defaultView) ||\n          window),\n        curFocusedElem.getSelection)\n      ) {\n        curFocusedElem = curFocusedElem.getSelection();\n        var length = containerInfo.textContent.length,\n          start = Math.min(priorSelectionRange.start, length);\n        priorSelectionRange =\n          void 0 === priorSelectionRange.end\n            ? start\n            : Math.min(priorSelectionRange.end, length);\n        !curFocusedElem.extend &&\n          start > priorSelectionRange &&\n          ((length = priorSelectionRange),\n          (priorSelectionRange = start),\n          (start = length));\n        length = getNodeForCharacterOffset(containerInfo, start);\n        var endMarker = getNodeForCharacterOffset(\n          containerInfo,\n          priorSelectionRange\n        );\n        length &&\n          endMarker &&\n          (1 !== curFocusedElem.rangeCount ||\n            curFocusedElem.anchorNode !== length.node ||\n            curFocusedElem.anchorOffset !== length.offset ||\n            curFocusedElem.focusNode !== endMarker.node ||\n            curFocusedElem.focusOffset !== endMarker.offset) &&\n          ((priorSelectionInformation =\n            priorSelectionInformation.createRange()),\n          priorSelectionInformation.setStart(length.node, length.offset),\n          curFocusedElem.removeAllRanges(),\n          start > priorSelectionRange\n            ? (curFocusedElem.addRange(priorSelectionInformation),\n              curFocusedElem.extend(endMarker.node, endMarker.offset))\n            : (priorSelectionInformation.setEnd(\n                endMarker.node,\n                endMarker.offset\n              ),\n              curFocusedElem.addRange(priorSelectionInformation)));\n      }\n    priorSelectionInformation = [];\n    for (\n      curFocusedElem = containerInfo;\n      (curFocusedElem = curFocusedElem.parentNode);\n\n    )\n      1 === curFocusedElem.nodeType &&\n        priorSelectionInformation.push({\n          element: curFocusedElem,\n          left: curFocusedElem.scrollLeft,\n          top: curFocusedElem.scrollTop\n        });\n    \"function\" === typeof containerInfo.focus && containerInfo.focus();\n    for (\n      containerInfo = 0;\n      containerInfo < priorSelectionInformation.length;\n      containerInfo++\n    )\n      (curFocusedElem = priorSelectionInformation[containerInfo]),\n        (curFocusedElem.element.scrollLeft = curFocusedElem.left),\n        (curFocusedElem.element.scrollTop = curFocusedElem.top);\n  }\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll scrollEnd toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  isHidden &&\n    null !== update &&\n    3 === sourceFiber.tag &&\n    ((parent = sourceFiber.stateNode),\n    (isHidden = 31 - clz32(lane)),\n    (parent = parent.hiddenUpdates),\n    (sourceFiber = parent[isHidden]),\n    null === sourceFiber\n      ? (parent[isHidden] = [update])\n      : sourceFiber.push(update),\n    (update.lane = lane | 536870912));\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {},\n  CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(formatProdErrorMessage(418, \"\"));\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      track(instance);\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children),\n        track(instance);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 3:\n      case 27:\n        rootOrSingletonContext = !0;\n        return;\n      case 5:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var shouldClear = !1,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) {\n    if ((JSCompiler_temp = 5 === fiber.tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && (shouldClear = !0);\n  shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === fiber.tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    a: {\n      fiber = fiber.nextSibling;\n      for (shouldClear = 0; fiber; ) {\n        if (8 === fiber.nodeType)\n          if (((JSCompiler_temp = fiber.data), \"/$\" === JSCompiler_temp)) {\n            if (0 === shouldClear) {\n              nextHydratableInstance = getNextHydratable(fiber.nextSibling);\n              break a;\n            }\n            shouldClear--;\n          } else\n            (\"$\" !== JSCompiler_temp &&\n              \"$!\" !== JSCompiler_temp &&\n              \"$?\" !== JSCompiler_temp) ||\n              shouldClear++;\n        fiber = fiber.nextSibling;\n      }\n      nextHydratableInstance = null;\n    }\n  } else\n    nextHydratableInstance = hydrationParentFiber\n      ? getNextHydratable(fiber.stateNode.nextSibling)\n      : null;\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction noop$3() {}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      thenableState = thenable.reason;\n      if (thenableState === SuspenseException)\n        throw Error(formatProdErrorMessage(483));\n      throw thenableState;\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$3, noop$3);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          thenableState = thenable.reason;\n          if (thenableState === SuspenseException)\n            throw Error(formatProdErrorMessage(483));\n          throw thenableState;\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nvar thenableState$1 = null,\n  thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction resolveLazy(lazyType) {\n  var init = lazyType._init;\n  return init(lazyType._payload);\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 33554434), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 33554434;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 33554434);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return createChild(returnFiber, newChild, lanes);\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return updateFromMap(\n            existingChildren,\n            returnFiber,\n            newIdx,\n            newChild,\n            lanes\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter$1 = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState$1 = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  if (22 === fiber.tag) {\n    if (\n      (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary)\n    ) {\n      var current = fiber.alternate;\n      null !== current &&\n        null !== current.memoizedState &&\n        (shellBoundary = fiber);\n    }\n  } else reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state || \"$?\" === state.data || \"$!\" === state.data)\n      )\n        return node;\n    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber$1 = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter = 0,\n  thenableState = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber$1 = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber$1 = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter = 0;\n  thenableState = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber$1 = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n    thenableIndexCounter = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber$1.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber$1 = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter = localIdCounter = 0;\n  thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber$1.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber$1.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber$1.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber$1.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nvar createFunctionComponentUpdateQueue;\ncreateFunctionComponentUpdateQueue = function () {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n};\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  thenable = trackUsedThenable(thenableState, thenable, index);\n  index = currentlyRenderingFiber$1;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber$1.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber$1.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber$1.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$54 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$54 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$54 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber$1.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber$1.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$54 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber$1,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n    subscribe\n  ]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushEffect(\n      9,\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      { destroy: void 0 },\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 60) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber$1.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber$1.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      ReactSharedInternals.T = prevTransition;\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$60) {\n      onActionError(actionQueue, node, error$60);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber$1;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber$1,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber$1,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber$1,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  currentStateHook =\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n      ? useThenable(currentStateHook)\n      : currentStateHook;\n  var actionQueueHook = updateWorkInProgressHook(),\n    actionQueue = actionQueueHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== actionQueueHook.memoizedState &&\n    ((currentlyRenderingFiber$1.flags |= 2048),\n    pushEffect(\n      9,\n      actionStateActionEffect.bind(null, actionQueue, action),\n      { destroy: void 0 },\n      null\n    ));\n  return [currentStateHook, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushEffect(tag, create, inst, deps) {\n  tag = { tag: tag, create: create, inst: inst, deps: deps, next: null };\n  create = currentlyRenderingFiber$1.updateQueue;\n  null === create &&\n    ((create = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber$1.updateQueue = create));\n  inst = create.lastEffect;\n  null === inst\n    ? (create.lastEffect = tag.next = tag)\n    : ((deps = inst.next),\n      (inst.next = tag),\n      (tag.next = deps),\n      (create.lastEffect = tag));\n  return tag;\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  currentlyRenderingFiber$1.flags |= fiberFlags;\n  hook.memoizedState = pushEffect(\n    1 | hookFlags,\n    create,\n    { destroy: void 0 },\n    void 0 === deps ? null : deps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushEffect(hookFlags, create, inst, deps))\n    : ((currentlyRenderingFiber$1.flags |= fiberFlags),\n      (hook.memoizedState = pushEffect(1 | hookFlags, create, inst, deps)));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber$1.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (0 === (renderLanes & 42))\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber$1.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop$2() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop$2\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$63 = enqueueUpdate(provider, fiber, lane);\n        null !== root$63 &&\n          (scheduleUpdateOnFiber(root$63, provider, lane),\n          entangleTransitions(root$63, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber$1 ||\n    (null !== alternate && alternate === currentlyRenderingFiber$1)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194176)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  use: use,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useInsertionEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError,\n  useSyncExternalStore: throwInvalidHookError,\n  useId: throwInvalidHookError\n};\nContextOnlyDispatcher.useCacheRefresh = throwInvalidHookError;\nContextOnlyDispatcher.useMemoCache = throwInvalidHookError;\nContextOnlyDispatcher.useHostTransitionStatus = throwInvalidHookError;\nContextOnlyDispatcher.useFormState = throwInvalidHookError;\nContextOnlyDispatcher.useActionState = throwInvalidHookError;\nContextOnlyDispatcher.useOptimistic = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n  readContext: readContext,\n  use: use,\n  useCallback: function (callback, deps) {\n    mountWorkInProgressHook().memoizedState = [\n      callback,\n      void 0 === deps ? null : deps\n    ];\n    return callback;\n  },\n  useContext: readContext,\n  useEffect: mountEffect,\n  useImperativeHandle: function (ref, create, deps) {\n    deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n    mountEffectImpl(\n      4194308,\n      4,\n      imperativeHandleEffect.bind(null, create, ref),\n      deps\n    );\n  },\n  useLayoutEffect: function (create, deps) {\n    return mountEffectImpl(4194308, 4, create, deps);\n  },\n  useInsertionEffect: function (create, deps) {\n    mountEffectImpl(4, 2, create, deps);\n  },\n  useMemo: function (nextCreate, deps) {\n    var hook = mountWorkInProgressHook();\n    deps = void 0 === deps ? null : deps;\n    var nextValue = nextCreate();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        nextCreate();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n    hook.memoizedState = [nextValue, deps];\n    return nextValue;\n  },\n  useReducer: function (reducer, initialArg, init) {\n    var hook = mountWorkInProgressHook();\n    if (void 0 !== init) {\n      var initialState = init(initialArg);\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          init(initialArg);\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n    } else initialState = initialArg;\n    hook.memoizedState = hook.baseState = initialState;\n    reducer = {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: reducer,\n      lastRenderedState: initialState\n    };\n    hook.queue = reducer;\n    reducer = reducer.dispatch = dispatchReducerAction.bind(\n      null,\n      currentlyRenderingFiber$1,\n      reducer\n    );\n    return [hook.memoizedState, reducer];\n  },\n  useRef: function (initialValue) {\n    var hook = mountWorkInProgressHook();\n    initialValue = { current: initialValue };\n    return (hook.memoizedState = initialValue);\n  },\n  useState: function (initialState) {\n    initialState = mountStateImpl(initialState);\n    var queue = initialState.queue,\n      dispatch = dispatchSetState.bind(null, currentlyRenderingFiber$1, queue);\n    queue.dispatch = dispatch;\n    return [initialState.memoizedState, dispatch];\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = mountWorkInProgressHook();\n    return mountDeferredValueImpl(hook, value, initialValue);\n  },\n  useTransition: function () {\n    var stateHook = mountStateImpl(!1);\n    stateHook = startTransition.bind(\n      null,\n      currentlyRenderingFiber$1,\n      stateHook.queue,\n      !0,\n      !1\n    );\n    mountWorkInProgressHook().memoizedState = stateHook;\n    return [!1, stateHook];\n  },\n  useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n    var fiber = currentlyRenderingFiber$1,\n      hook = mountWorkInProgressHook();\n    if (isHydrating) {\n      if (void 0 === getServerSnapshot)\n        throw Error(formatProdErrorMessage(407));\n      getServerSnapshot = getServerSnapshot();\n    } else {\n      getServerSnapshot = getSnapshot();\n      if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n      0 !== (workInProgressRootRenderLanes & 60) ||\n        pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n    }\n    hook.memoizedState = getServerSnapshot;\n    var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n    hook.queue = inst;\n    mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n      subscribe\n    ]);\n    fiber.flags |= 2048;\n    pushEffect(\n      9,\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        inst,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      { destroy: void 0 },\n      null\n    );\n    return getServerSnapshot;\n  },\n  useId: function () {\n    var hook = mountWorkInProgressHook(),\n      identifierPrefix = workInProgressRoot.identifierPrefix;\n    if (isHydrating) {\n      var JSCompiler_inline_result = treeContextOverflow;\n      var idWithLeadingBit = treeContextId;\n      JSCompiler_inline_result =\n        (\n          idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n        ).toString(32) + JSCompiler_inline_result;\n      identifierPrefix =\n        \":\" + identifierPrefix + \"R\" + JSCompiler_inline_result;\n      JSCompiler_inline_result = localIdCounter++;\n      0 < JSCompiler_inline_result &&\n        (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n      identifierPrefix += \":\";\n    } else\n      (JSCompiler_inline_result = globalClientIdCounter++),\n        (identifierPrefix =\n          \":\" +\n          identifierPrefix +\n          \"r\" +\n          JSCompiler_inline_result.toString(32) +\n          \":\");\n    return (hook.memoizedState = identifierPrefix);\n  },\n  useCacheRefresh: function () {\n    return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n      null,\n      currentlyRenderingFiber$1\n    ));\n  }\n};\nHooksDispatcherOnMount.useMemoCache = useMemoCache;\nHooksDispatcherOnMount.useHostTransitionStatus = useHostTransitionStatus;\nHooksDispatcherOnMount.useFormState = mountActionState;\nHooksDispatcherOnMount.useActionState = mountActionState;\nHooksDispatcherOnMount.useOptimistic = function (passthrough) {\n  var hook = mountWorkInProgressHook();\n  hook.memoizedState = hook.baseState = passthrough;\n  var queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: null,\n    lastRenderedState: null\n  };\n  hook.queue = queue;\n  hook = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber$1,\n    !0,\n    queue\n  );\n  queue.dispatch = hook;\n  return [passthrough, hook];\n};\nvar HooksDispatcherOnUpdate = {\n  readContext: readContext,\n  use: use,\n  useCallback: updateCallback,\n  useContext: readContext,\n  useEffect: updateEffect,\n  useImperativeHandle: updateImperativeHandle,\n  useInsertionEffect: updateInsertionEffect,\n  useLayoutEffect: updateLayoutEffect,\n  useMemo: updateMemo,\n  useReducer: updateReducer,\n  useRef: updateRef,\n  useState: function () {\n    return updateReducer(basicStateReducer);\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = updateWorkInProgressHook();\n    return updateDeferredValueImpl(\n      hook,\n      currentHook.memoizedState,\n      value,\n      initialValue\n    );\n  },\n  useTransition: function () {\n    var booleanOrThenable = updateReducer(basicStateReducer)[0],\n      start = updateWorkInProgressHook().memoizedState;\n    return [\n      \"boolean\" === typeof booleanOrThenable\n        ? booleanOrThenable\n        : useThenable(booleanOrThenable),\n      start\n    ];\n  },\n  useSyncExternalStore: updateSyncExternalStore,\n  useId: updateId\n};\nHooksDispatcherOnUpdate.useCacheRefresh = updateRefresh;\nHooksDispatcherOnUpdate.useMemoCache = useMemoCache;\nHooksDispatcherOnUpdate.useHostTransitionStatus = useHostTransitionStatus;\nHooksDispatcherOnUpdate.useFormState = updateActionState;\nHooksDispatcherOnUpdate.useActionState = updateActionState;\nHooksDispatcherOnUpdate.useOptimistic = function (passthrough, reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n};\nvar HooksDispatcherOnRerender = {\n  readContext: readContext,\n  use: use,\n  useCallback: updateCallback,\n  useContext: readContext,\n  useEffect: updateEffect,\n  useImperativeHandle: updateImperativeHandle,\n  useInsertionEffect: updateInsertionEffect,\n  useLayoutEffect: updateLayoutEffect,\n  useMemo: updateMemo,\n  useReducer: rerenderReducer,\n  useRef: updateRef,\n  useState: function () {\n    return rerenderReducer(basicStateReducer);\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = updateWorkInProgressHook();\n    return null === currentHook\n      ? mountDeferredValueImpl(hook, value, initialValue)\n      : updateDeferredValueImpl(\n          hook,\n          currentHook.memoizedState,\n          value,\n          initialValue\n        );\n  },\n  useTransition: function () {\n    var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n      start = updateWorkInProgressHook().memoizedState;\n    return [\n      \"boolean\" === typeof booleanOrThenable\n        ? booleanOrThenable\n        : useThenable(booleanOrThenable),\n      start\n    ];\n  },\n  useSyncExternalStore: updateSyncExternalStore,\n  useId: updateId\n};\nHooksDispatcherOnRerender.useCacheRefresh = updateRefresh;\nHooksDispatcherOnRerender.useMemoCache = useMemoCache;\nHooksDispatcherOnRerender.useHostTransitionStatus = useHostTransitionStatus;\nHooksDispatcherOnRerender.useFormState = rerenderActionState;\nHooksDispatcherOnRerender.useActionState = rerenderActionState;\nHooksDispatcherOnRerender.useOptimistic = function (passthrough, reducer) {\n  var hook = updateWorkInProgressHook();\n  if (null !== currentHook)\n    return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n  hook.baseState = passthrough;\n  return [passthrough, hook.queue.dispatch];\n};\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  isMounted: function (component) {\n    return (component = component._reactInternals)\n      ? getNearestMountedFiber(component) === component\n      : !1;\n  },\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$67 in Component)\n      void 0 === newProps[propName$67] &&\n        (newProps[propName$67] = Component[propName$67]);\n  }\n  return newProps;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$68) {\n    setTimeout(function () {\n      throw e$68;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$69) {\n    setTimeout(function () {\n      throw e$69;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    nextChildren = nextProps.children,\n    nextIsDetached = 0 !== (workInProgress.stateNode._pendingVisibility & 2),\n    prevState = null !== current ? current.memoizedState : null;\n  markRef(current, workInProgress);\n  if (\"hidden\" === nextProps.mode || nextIsDetached) {\n    if (0 !== (workInProgress.flags & 128)) {\n      nextProps =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextChildren = workInProgress.child = current.child;\n        for (nextIsDetached = 0; null !== nextChildren; )\n          (nextIsDetached =\n            nextIsDetached | nextChildren.lanes | nextChildren.childLanes),\n            (nextChildren = nextChildren.sibling);\n        workInProgress.childLanes = nextIsDetached & ~nextProps;\n      } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        nextProps,\n        renderLanes\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (workInProgress.lanes = workInProgress.childLanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  return null;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 2097664);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 2097664;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = { dehydrated: null, treeContext: null, retryLane: 0 };\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      if (isHydrating) {\n        var nextInstance = nextHydratableInstance,\n          JSCompiler_temp$jscomp$0;\n        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {\n          c: {\n            JSCompiler_temp$jscomp$0 = nextInstance;\n            for (\n              nextInstance = rootOrSingletonContext;\n              8 !== JSCompiler_temp$jscomp$0.nodeType;\n\n            ) {\n              if (!nextInstance) {\n                nextInstance = null;\n                break c;\n              }\n              JSCompiler_temp$jscomp$0 = getNextHydratable(\n                JSCompiler_temp$jscomp$0.nextSibling\n              );\n              if (null === JSCompiler_temp$jscomp$0) {\n                nextInstance = null;\n                break c;\n              }\n            }\n            nextInstance = JSCompiler_temp$jscomp$0;\n          }\n          null !== nextInstance\n            ? ((workInProgress.memoizedState = {\n                dehydrated: nextInstance,\n                treeContext:\n                  null !== treeContextProvider\n                    ? { id: treeContextId, overflow: treeContextOverflow }\n                    : null,\n                retryLane: 536870912\n              }),\n              (JSCompiler_temp$jscomp$0 = createFiberImplClass(\n                18,\n                null,\n                null,\n                0\n              )),\n              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),\n              (JSCompiler_temp$jscomp$0.return = workInProgress),\n              (workInProgress.child = JSCompiler_temp$jscomp$0),\n              (hydrationParentFiber = workInProgress),\n              (nextHydratableInstance = null),\n              (JSCompiler_temp$jscomp$0 = !0))\n            : (JSCompiler_temp$jscomp$0 = !1);\n        }\n        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);\n      }\n      nextInstance = workInProgress.memoizedState;\n      if (\n        null !== nextInstance &&\n        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)\n      )\n        return (\n          \"$!\" === nextInstance.data\n            ? (workInProgress.lanes = 16)\n            : (workInProgress.lanes = 536870912),\n          null\n        );\n      popSuspenseHandler(workInProgress);\n    }\n    nextInstance = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextInstance = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextInstance },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextInstance.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextInstance.sibling = nextProps),\n        (workInProgress.child = nextInstance),\n        (showFallback = workInProgress.child),\n        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        nextProps\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextInstance);\n  }\n  JSCompiler_temp$jscomp$0 = current.memoizedState;\n  if (\n    null !== JSCompiler_temp$jscomp$0 &&\n    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),\n    null !== nextInstance)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (showFallback = nextProps.fallback),\n            (nextInstance = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              nextInstance\n            )),\n            (showFallback = createFiberFromFragment(\n              showFallback,\n              nextInstance,\n              renderLanes,\n              null\n            )),\n            (showFallback.flags |= 2),\n            (nextProps.return = workInProgress),\n            (showFallback.return = workInProgress),\n            (nextProps.sibling = showFallback),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = showFallback));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      \"$!\" === nextInstance.data)\n    ) {\n      JSCompiler_temp =\n        nextInstance.nextSibling && nextInstance.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (null !== JSCompiler_temp) {\n        nextProps = renderLanes & -renderLanes;\n        if (0 !== (nextProps & 42)) nextProps = 1;\n        else\n          switch (nextProps) {\n            case 2:\n              nextProps = 1;\n              break;\n            case 8:\n              nextProps = 4;\n              break;\n            case 32:\n              nextProps = 16;\n              break;\n            case 128:\n            case 256:\n            case 512:\n            case 1024:\n            case 2048:\n            case 4096:\n            case 8192:\n            case 16384:\n            case 32768:\n            case 65536:\n            case 131072:\n            case 262144:\n            case 524288:\n            case 1048576:\n            case 2097152:\n            case 4194304:\n            case 8388608:\n            case 16777216:\n            case 33554432:\n              nextProps = 64;\n              break;\n            case 268435456:\n              nextProps = 134217728;\n              break;\n            default:\n              nextProps = 0;\n          }\n        nextProps =\n          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))\n            ? 0\n            : nextProps;\n        if (0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)\n          throw (\n            ((JSCompiler_temp$jscomp$0.retryLane = nextProps),\n            enqueueConcurrentRenderForLane(current, nextProps),\n            scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n            SelectiveHydrationException)\n          );\n      }\n      \"$?\" === nextInstance.data || renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      \"$?\" === nextInstance.data\n        ? ((workInProgress.flags |= 128),\n          (workInProgress.child = current.child),\n          (workInProgress = retryDehydratedSuspenseBoundary.bind(\n            null,\n            current\n          )),\n          (nextInstance._reactRetry = workInProgress),\n          (workInProgress = null))\n        : ((current = JSCompiler_temp$jscomp$0.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextInstance.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            ((idStack[idStackIndex++] = treeContextId),\n            (idStack[idStackIndex++] = treeContextOverflow),\n            (idStack[idStackIndex++] = treeContextProvider),\n            (treeContextId = current.id),\n            (treeContextOverflow = current.overflow),\n            (treeContextProvider = workInProgress)),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (showFallback = nextProps.fallback),\n      (nextInstance = workInProgress.mode),\n      (JSCompiler_temp$jscomp$0 = current.child),\n      (digest = JSCompiler_temp$jscomp$0.sibling),\n      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags =\n        JSCompiler_temp$jscomp$0.subtreeFlags & 31457280),\n      null !== digest\n        ? (showFallback = createWorkInProgress(digest, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            nextInstance,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      (nextProps = showFallback),\n      (showFallback = workInProgress.child),\n      (nextInstance = current.child.memoizedState),\n      null === nextInstance\n        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))\n        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),\n          null !== JSCompiler_temp$jscomp$0\n            ? ((digest = CacheContext._currentValue),\n              (JSCompiler_temp$jscomp$0 =\n                JSCompiler_temp$jscomp$0.parent !== digest\n                  ? { parent: digest, pool: digest }\n                  : JSCompiler_temp$jscomp$0))\n            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),\n          (nextInstance = {\n            baseLanes: nextInstance.baseLanes | renderLanes,\n            cachePool: JSCompiler_temp$jscomp$0\n          })),\n      (showFallback.memoizedState = nextInstance),\n      (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      nextProps\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  return createFiberFromOffscreen(offscreenProps, mode, 0, null);\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n  nextProps = suspenseStackCursor.current;\n  if (0 !== (nextProps & 2))\n    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n  else {\n    if (null !== current && 0 !== (current.flags & 128))\n      a: for (current = workInProgress.child; null !== current; ) {\n        if (13 === current.tag)\n          null !== current.memoizedState &&\n            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (19 === current.tag)\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (null !== current.child) {\n          current.child.return = current;\n          current = current.child;\n          continue;\n        }\n        if (current === workInProgress) break a;\n        for (; null === current.sibling; ) {\n          if (null === current.return || current.return === workInProgress)\n            break a;\n          current = current.return;\n        }\n        current.sibling.return = current.return;\n        current = current.sibling;\n      }\n    nextProps &= 1;\n  }\n  push(suspenseStackCursor, nextProps);\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode\n      );\n      break;\n    case \"backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 13:\n      var state = workInProgress.memoizedState;\n      if (null !== state) {\n        if (null !== state.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state = 0 !== (renderLanes & workInProgress.childLanes);\n      state ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state) break;\n      else return null;\n    case 22:\n    case 23:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(current, workInProgress, renderLanes)\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        current = workInProgress.pendingProps;\n        var lazyComponent = workInProgress.elementType,\n          init = lazyComponent._init;\n        lazyComponent = init(lazyComponent._payload);\n        workInProgress.type = lazyComponent;\n        if (\"function\" === typeof lazyComponent)\n          shouldConstruct(lazyComponent)\n            ? ((current = resolveClassComponentProps(lazyComponent, current)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== lazyComponent && null !== lazyComponent)\n            if (\n              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)\n            ) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            } else if (init === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            }\n          workInProgress =\n            getComponentNameFromType(lazyComponent) || lazyComponent;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (lazyComponent = workInProgress.type),\n        (init = resolveClassComponentProps(\n          lazyComponent,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          lazyComponent,\n          init,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        var nextProps = workInProgress.pendingProps;\n        init = workInProgress.memoizedState;\n        lazyComponent = init.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, nextProps, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        nextProps = nextState.cache;\n        pushProvider(workInProgress, CacheContext, nextProps);\n        nextProps !== init.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        nextProps = nextState.element;\n        if (init.isDehydrated)\n          if (\n            ((init = {\n              element: nextProps,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = init),\n            (workInProgress.memoizedState = init),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              nextProps,\n              renderLanes\n            );\n            break a;\n          } else if (nextProps !== lazyComponent) {\n            lazyComponent = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError(lazyComponent);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              nextProps,\n              renderLanes\n            );\n            break a;\n          } else\n            for (\n              nextHydratableInstance = getNextHydratable(\n                workInProgress.stateNode.containerInfo.firstChild\n              ),\n                hydrationParentFiber = workInProgress,\n                isHydrating = !0,\n                hydrationErrors = null,\n                rootOrSingletonContext = !0,\n                renderLanes = mountChildFibers(\n                  workInProgress,\n                  null,\n                  nextProps,\n                  renderLanes\n                ),\n                workInProgress.child = renderLanes;\n              renderLanes;\n\n            )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n        else {\n          resetHydrationState();\n          if (nextProps === lazyComponent) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, nextProps, renderLanes);\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (lazyComponent = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (lazyComponent[internalInstanceKey] = workInProgress),\n              (lazyComponent[internalPropsKey] = current),\n              setInitialProperties(lazyComponent, renderLanes, current),\n              markNodeAsHoistable(lazyComponent),\n              (workInProgress.stateNode = lazyComponent))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((lazyComponent = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          (nextHydratableInstance = getNextHydratable(\n            lazyComponent.firstChild\n          ))),\n        (lazyComponent = workInProgress.pendingProps.children),\n        null !== current || isHydrating\n          ? reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            )\n          : (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            )),\n        markRef(current, workInProgress),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if ((init = lazyComponent = nextHydratableInstance))\n          (lazyComponent = canHydrateInstance(\n            lazyComponent,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== lazyComponent\n              ? ((workInProgress.stateNode = lazyComponent),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(\n                  lazyComponent.firstChild\n                )),\n                (rootOrSingletonContext = !1),\n                (init = !0))\n              : (init = !1);\n        init || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      init = workInProgress.type;\n      nextProps = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      lazyComponent = nextProps.children;\n      shouldSetTextContent(init, nextProps)\n        ? (lazyComponent = null)\n        : null !== nextState &&\n          shouldSetTextContent(init, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        ((init = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = init));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (lazyComponent = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            ))\n          : reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            ),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),\n        reconcileChildren(\n          current,\n          workInProgress,\n          lazyComponent.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        (init = workInProgress.type._context),\n        (lazyComponent = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        (init = readContext(init)),\n        (lazyComponent = lazyComponent(init)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 22:\n      return updateOffscreenComponent(current, workInProgress, renderLanes);\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (lazyComponent = readContext(CacheContext)),\n        null === current\n          ? ((init = peekCacheFromPool()),\n            null === init &&\n              ((init = workInProgressRoot),\n              (nextProps = createCache()),\n              (init.pooledCache = nextProps),\n              nextProps.refCount++,\n              null !== nextProps && (init.pooledCacheLanes |= renderLanes),\n              (init = nextProps)),\n            (workInProgress.memoizedState = {\n              parent: lazyComponent,\n              cache: init\n            }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, init))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            (init = current.memoizedState),\n            (nextProps = workInProgress.memoizedState),\n            init.parent !== lazyComponent\n              ? ((init = { parent: lazyComponent, cache: lazyComponent }),\n                (workInProgress.memoizedState = init),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      init),\n                pushProvider(workInProgress, CacheContext, lazyComponent))\n              : ((lazyComponent = nextProps.cache),\n                pushProvider(workInProgress, CacheContext, lazyComponent),\n                lazyComponent !== init.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194176))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0;\n            try {\n              destroy();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      var instance = current.stateNode;\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = instance;\n          break;\n        default:\n          instanceToUse = instance;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$112) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$112);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    27 === fiber.tag ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag &&\n      6 !== fiber.tag &&\n      27 !== fiber.tag &&\n      18 !== fiber.tag;\n\n    ) {\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? 8 === parent.nodeType\n          ? parent.parentNode.insertBefore(node, before)\n          : parent.insertBefore(node, before)\n        : (8 === parent.nodeType\n            ? ((before = parent.parentNode), before.insertBefore(node, parent))\n            : ((before = parent), before.appendChild(node)),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (4 !== tag && 27 !== tag && ((node = node.child), null !== node))\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (4 !== tag && 27 !== tag && ((node = node.child), null !== node))\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null,\n  shouldFireAfterActiveInstanceBlur = !1;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset,\n                  JSCompiler_temp.elementType === JSCompiler_temp.type\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n  resolvedPrevProps = shouldFireAfterActiveInstanceBlur;\n  shouldFireAfterActiveInstanceBlur = !1;\n  return resolvedPrevProps;\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$111) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$111\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 64 && ((flags = finishedWork.updateQueue), null !== flags)) {\n        finishedRoot = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              finishedRoot = finishedWork.child.stateNode;\n              break;\n            case 1:\n              finishedRoot = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(flags, finishedRoot);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 26:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 27:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 22:\n      prevProps =\n        null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!prevProps) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n          prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = prevProps;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      flags & 512 &&\n        (\"manual\" === finishedWork.memoizedProps.mode\n          ? safelyAttachRef(finishedWork, finishedWork.return)\n          : safelyDetachRef(finishedWork, finishedWork.return));\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber = deletedFiber.stateNode;\n      for (\n        nearestMountedAncestor = deletedFiber.attributes;\n        nearestMountedAncestor.length;\n\n      )\n        deletedFiber.removeAttributeNode(nearestMountedAncestor[0]);\n      detachDeletedInstance(deletedFiber);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParentIsContainer = hostParent;\n      var prevHostParentIsContainer$119 = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParentIsContainer;\n      hostParentIsContainer = prevHostParentIsContainer$119;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (finishedRoot = hostParent),\n              (prevHostParent = deletedFiber.stateNode),\n              8 === finishedRoot.nodeType\n                ? finishedRoot.parentNode.removeChild(prevHostParent)\n                : finishedRoot.removeChild(prevHostParent);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((nearestMountedAncestor = hostParent),\n            (deletedFiber = deletedFiber.stateNode),\n            8 === nearestMountedAncestor.nodeType\n              ? clearSuspenseBoundary(\n                  nearestMountedAncestor.parentNode,\n                  deletedFiber\n                )\n              : 1 === nearestMountedAncestor.nodeType &&\n                clearSuspenseBoundary(nearestMountedAncestor, deletedFiber),\n            retryIfBlockedOn(nearestMountedAncestor))\n          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n    retryCache.has(wakeable) ||\n      (retryCache.add(wakeable), wakeable.then(retry, retry));\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13878)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href ? null : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      if (flags & 4 && null === finishedWork.alternate) {\n        hoistableRoot = finishedWork.stateNode;\n        currentResource = finishedWork.memoizedProps;\n        try {\n          for (var node = hoistableRoot.firstChild; node; ) {\n            var nextNode = node.nextSibling,\n              nodeName = node.nodeName;\n            node[internalHoistableMarker] ||\n              \"HEAD\" === nodeName ||\n              \"BODY\" === nodeName ||\n              \"SCRIPT\" === nodeName ||\n              \"STYLE\" === nodeName ||\n              (\"LINK\" === nodeName &&\n                \"stylesheet\" === node.rel.toLowerCase()) ||\n              hoistableRoot.removeChild(node);\n            node = nextNode;\n          }\n          for (\n            var type = finishedWork.type, attributes = hoistableRoot.attributes;\n            attributes.length;\n\n          )\n            hoistableRoot.removeAttributeNode(attributes[0]);\n          setInitialProperties(hoistableRoot, type, currentResource);\n          hoistableRoot[internalInstanceKey] = finishedWork;\n          hoistableRoot[internalPropsKey] = currentResource;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      node = null !== finishedWork.memoizedState;\n      nextNode = null !== current && null !== current.memoizedState;\n      nodeName = offscreenSubtreeIsHidden;\n      type = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = nodeName || node;\n      offscreenSubtreeWasHidden = type || nextNode;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = type;\n      offscreenSubtreeIsHidden = nodeName;\n      commitReconciliationEffects(finishedWork);\n      root = finishedWork.stateNode;\n      root._current = finishedWork;\n      root._visibility &= -3;\n      root._visibility |= root._pendingVisibility & 2;\n      if (\n        flags & 8192 &&\n        ((root._visibility = node\n          ? root._visibility & -2\n          : root._visibility | 1),\n        node &&\n          ((root = offscreenSubtreeIsHidden || offscreenSubtreeWasHidden),\n          null === current ||\n            nextNode ||\n            root ||\n            recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n        null === finishedWork.memoizedProps ||\n          \"manual\" !== finishedWork.memoizedProps.mode)\n      )\n        a: for (current = null, root = finishedWork; ; ) {\n          if (5 === root.tag || 26 === root.tag || 27 === root.tag) {\n            if (null === current) {\n              nextNode = current = root;\n              try {\n                if (((hoistableRoot = nextNode.stateNode), node))\n                  (currentResource = hoistableRoot.style),\n                    \"function\" === typeof currentResource.setProperty\n                      ? currentResource.setProperty(\n                          \"display\",\n                          \"none\",\n                          \"important\"\n                        )\n                      : (currentResource.display = \"none\");\n                else {\n                  maybeNodes = nextNode.stateNode;\n                  i = nextNode.memoizedProps.style;\n                  var display =\n                    void 0 !== i && null !== i && i.hasOwnProperty(\"display\")\n                      ? i.display\n                      : null;\n                  maybeNodes.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(nextNode, nextNode.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              nextNode = root;\n              try {\n                nextNode.stateNode.nodeValue = node\n                  ? \"\"\n                  : nextNode.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(nextNode, nextNode.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      if (27 !== finishedWork.tag) {\n        a: {\n          for (var parent = finishedWork.return; null !== parent; ) {\n            if (isHostParent(parent)) {\n              var JSCompiler_inline_result = parent;\n              break a;\n            }\n            parent = parent.return;\n          }\n          throw Error(formatProdErrorMessage(160));\n        }\n        switch (JSCompiler_inline_result.tag) {\n          case 27:\n            var parent$jscomp$0 = JSCompiler_inline_result.stateNode,\n              before = getHostSibling(finishedWork);\n            insertOrAppendPlacementNode(finishedWork, before, parent$jscomp$0);\n            break;\n          case 5:\n            var parent$113 = JSCompiler_inline_result.stateNode;\n            JSCompiler_inline_result.flags & 32 &&\n              (setTextContent(parent$113, \"\"),\n              (JSCompiler_inline_result.flags &= -33));\n            var before$114 = getHostSibling(finishedWork);\n            insertOrAppendPlacementNode(finishedWork, before$114, parent$113);\n            break;\n          case 3:\n          case 4:\n            var parent$115 = JSCompiler_inline_result.stateNode.containerInfo,\n              before$116 = getHostSibling(finishedWork);\n            insertOrAppendPlacementNodeIntoContainer(\n              finishedWork,\n              before$116,\n              parent$115\n            );\n            break;\n          default:\n            throw Error(formatProdErrorMessage(161));\n        }\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 26:\n      case 27:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 26:\n      case 27:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 4\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 4\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 4),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256)\n            ));\n      flags & 2048 &&\n        commitOffscreenPassiveMountEffects(\n          finishedWork.alternate,\n          finishedWork\n        );\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 4\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 4),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(parentFiber) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(fiber),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(fiber));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 4 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -5),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 4 &&\n          ((i._visibility &= -5),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 31457280;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 31457282;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_OFFSCREEN_TYPE:\n        return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_PROVIDER_TYPE:\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n  pendingProps = createFiberImplClass(22, pendingProps, key, mode);\n  pendingProps.elementType = REACT_OFFSCREEN_TYPE;\n  pendingProps.lanes = lanes;\n  var primaryChildInstance = {\n    _visibility: 1,\n    _pendingVisibility: 1,\n    _pendingMarkers: null,\n    _retryCache: null,\n    _transitions: null,\n    _current: null,\n    detach: function () {\n      var fiber = primaryChildInstance._current;\n      if (null === fiber) throw Error(formatProdErrorMessage(456));\n      if (0 === (primaryChildInstance._pendingVisibility & 2)) {\n        var root = enqueueConcurrentRenderForLane(fiber, 2);\n        null !== root &&\n          ((primaryChildInstance._pendingVisibility |= 2),\n          scheduleUpdateOnFiber(root, fiber, 2));\n      }\n    },\n    attach: function () {\n      var fiber = primaryChildInstance._current;\n      if (null === fiber) throw Error(formatProdErrorMessage(456));\n      if (0 !== (primaryChildInstance._pendingVisibility & 2)) {\n        var root = enqueueConcurrentRenderForLane(fiber, 2);\n        null !== root &&\n          ((primaryChildInstance._pendingVisibility &= -3),\n          scheduleUpdateOnFiber(root, fiber, 2));\n      }\n    }\n  };\n  pendingProps.stateNode = primaryChildInstance;\n  return pendingProps;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {\n    resource = suspenseHandlerStackCursor.current;\n    if (\n      null !== resource &&\n      ((workInProgressRootRenderLanes & 4194176) ===\n      workInProgressRootRenderLanes\n        ? null !== shellBoundary\n        : ((workInProgressRootRenderLanes & 62914560) !==\n            workInProgressRootRenderLanes &&\n            0 === (workInProgressRootRenderLanes & 536870912)) ||\n          resource !== shellBoundary)\n    )\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n    workInProgress.flags |= 8192;\n  }\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$131 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$131 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$131\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$131.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$132 = completedWork.child; null !== child$132; )\n      (newChildLanes |= child$132.lanes | child$132.childLanes),\n        (subtreeFlags |= child$132.subtreeFlags & 31457280),\n        (subtreeFlags |= child$132.flags & 31457280),\n        (child$132.return = completedWork),\n        (child$132 = child$132.sibling);\n  else\n    for (child$132 = completedWork.child; null !== child$132; )\n      (newChildLanes |= child$132.lanes | child$132.childLanes),\n        (subtreeFlags |= child$132.subtreeFlags),\n        (subtreeFlags |= child$132.flags),\n        (child$132.return = completedWork),\n        (child$132 = child$132.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            null !== hydrationErrors &&\n              (queueRecoverableErrors(hydrationErrors),\n              (hydrationErrors = null)));\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      return (\n        (renderLanes = workInProgress.memoizedState),\n        null === current\n          ? (markUpdate(workInProgress),\n            null !== renderLanes\n              ? (bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217)))\n          : renderLanes\n            ? renderLanes !== current.memoizedState\n              ? (markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217))\n            : (current.memoizedProps !== newProps && markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217)),\n        null\n      );\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      var type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      renderLanes = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, current);\n        else {\n          type = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (current) {\n            case 1:\n              current = type.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                renderLanes\n              );\n              break;\n            case 2:\n              current = type.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                renderLanes\n              );\n              break;\n            default:\n              switch (renderLanes) {\n                case \"svg\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    renderLanes\n                  );\n                  break;\n                case \"math\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    renderLanes\n                  );\n                  break;\n                case \"script\":\n                  current = type.createElement(\"div\");\n                  current.innerHTML = \"<script>\\x3c/script>\";\n                  current = current.removeChild(current.firstChild);\n                  break;\n                case \"select\":\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(\"select\", { is: newProps.is })\n                      : type.createElement(\"select\");\n                  newProps.multiple\n                    ? (current.multiple = !0)\n                    : newProps.size && (current.size = newProps.size);\n                  break;\n                default:\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(renderLanes, { is: newProps.is })\n                      : type.createElement(renderLanes);\n              }\n          }\n          current[internalInstanceKey] = workInProgress;\n          current[internalPropsKey] = newProps;\n          a: for (type = workInProgress.child; null !== type; ) {\n            if (5 === type.tag || 6 === type.tag)\n              current.appendChild(type.stateNode);\n            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {\n              type.child.return = type;\n              type = type.child;\n              continue;\n            }\n            if (type === workInProgress) break a;\n            for (; null === type.sibling; ) {\n              if (null === type.return || type.return === workInProgress)\n                break a;\n              type = type.return;\n            }\n            type.sibling.return = type.return;\n            type = type.sibling;\n          }\n          workInProgress.stateNode = current;\n          a: switch (\n            (setInitialProperties(current, renderLanes, newProps), renderLanes)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              current = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              current = !0;\n              break a;\n            default:\n              current = !1;\n          }\n          current && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.flags &= -16777217;\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          null !== hydrationErrors &&\n            (queueRecoverableErrors(hydrationErrors), (hydrationErrors = null)),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      if (renderLanes) {\n        newProps = workInProgress.child;\n        type = null;\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool);\n        var cache$144 = null;\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (cache$144 = newProps.memoizedState.cachePool.pool);\n        cache$144 !== type && (newProps.flags |= 2048);\n      }\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      type = workInProgress.memoizedState;\n      if (null === type) return bubbleProperties(workInProgress), null;\n      newProps = 0 !== (workInProgress.flags & 128);\n      cache$144 = type.rendering;\n      if (null === cache$144)\n        if (newProps) cutOffTailIfNeeded(type, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              cache$144 = findFirstSuspended(current);\n              if (null !== cache$144) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(type, !1);\n                current = cache$144.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== type.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (newProps = !0),\n            cutOffTailIfNeeded(type, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!newProps)\n          if (((current = findFirstSuspended(cache$144)), null !== current)) {\n            if (\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(type, !0),\n              null === type.tail &&\n                \"hidden\" === type.tailMode &&\n                !cache$144.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - type.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              cutOffTailIfNeeded(type, !1),\n              (workInProgress.lanes = 4194304));\n        type.isBackwards\n          ? ((cache$144.sibling = workInProgress.child),\n            (workInProgress.child = cache$144))\n          : ((current = type.last),\n            null !== current\n              ? (current.sibling = cache$144)\n              : (workInProgress.child = cache$144),\n            (type.last = cache$144));\n      }\n      if (null !== type.tail)\n        return (\n          (workInProgress = type.tail),\n          (type.rendering = workInProgress),\n          (type.tail = workInProgress.sibling),\n          (type.renderingStartTime = now()),\n          (workInProgress.sibling = null),\n          (current = suspenseStackCursor.current),\n          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n          workInProgress\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  rootDoesHavePassiveEffects = !1,\n  rootWithPendingPassiveEffects = null,\n  pendingPassiveEffectsLanes = 0,\n  pendingPassiveEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)\n    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n  if (null !== ReactSharedInternals.T) {\n    var actionScopeLane = currentEntangledLane;\n    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();\n  }\n  return resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  0 === workInProgressDeferredLane &&\n    (workInProgressDeferredLane =\n      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n        ? claimNextTransitionLane()\n        : 536870912);\n  var suspenseHandler = suspenseHandlerStackCursor.current;\n  null !== suspenseHandler && (suspenseHandler.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot && 2 === workInProgressSuspendedReason) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 60) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else if (6 === exitStatus)\n      markRootSuspended(\n        root$jscomp$0,\n        lanes,\n        0,\n        !workInProgressRootDidSkipSuspendedSiblings\n      );\n    else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                queueRecoverableErrors(renderWasConcurrent);\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        switch (exitStatus) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194176) === lanes) {\n              markRootSuspended(\n                shouldTimeSlice,\n                lanes,\n                workInProgressDeferredLane,\n                !workInProgressRootDidSkipSuspendedSiblings\n              );\n              break a;\n            }\n            break;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        shouldTimeSlice.finishedWork = forceSync;\n        shouldTimeSlice.finishedLanes = lanes;\n        if (\n          (lanes & 62914560) === lanes &&\n          ((renderWasConcurrent = globalMostRecentFallbackTime + 300 - now()),\n          10 < renderWasConcurrent)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0)) break a;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              2,\n              -0,\n              0\n            ),\n            renderWasConcurrent\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          0,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction queueRecoverableErrors(errors) {\n  null === workInProgressRootRecoverableErrors\n    ? (workInProgressRootRecoverableErrors = errors)\n    : workInProgressRootRecoverableErrors.push.apply(\n        workInProgressRootRecoverableErrors,\n        errors\n      );\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  var subtreeFlags = finishedWork.subtreeFlags;\n  if (subtreeFlags & 8192 || 16785408 === (subtreeFlags & 16785408))\n    if (\n      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n      accumulateSuspenseyCommitOnFiber(finishedWork),\n      (finishedWork = waitForCommitToBeReady()),\n      null !== finishedWork)\n    ) {\n      root.cancelPendingCommit = finishedWork(\n        commitRoot.bind(\n          null,\n          root,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          1,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  commitRoot(\n    root,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes,\n    suspendedCommitReason,\n    completedRenderStartTime,\n    completedRenderEndTime\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$6 = 31 - clz32(lanes),\n      lane = 1 << index$6;\n    didAttemptEntireTree[index$6] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState$1 = null),\n        (thenableIndexCounter$1 = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  root.finishedWork = null;\n  root.finishedLanes = 0;\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      lanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194176) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$164) {\n      handleThrow(root, thrownValue$164);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              2 === workInProgressSuspendedReason &&\n                workInProgressRoot === root &&\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (resource ? preloadResource(resource) : 1) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrent();\n      break;\n    } catch (thrownValue$166) {\n      handleThrow(root, thrownValue$166);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrent() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState$1 = null;\n  thenableIndexCounter$1 = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason || 3 === suspendedReason || 6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  var prevTransition = ReactSharedInternals.T,\n    previousUpdateLanePriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      (ReactSharedInternals.T = null),\n      commitRootImpl(\n        root,\n        recoverableErrors,\n        transitions,\n        didIncludeRenderPhaseUpdate,\n        previousUpdateLanePriority,\n        spawnedLane,\n        updatedLanes,\n        suspendedRetryLanes,\n        suspendedCommitReason,\n        completedRenderStartTime,\n        completedRenderEndTime\n      );\n  } finally {\n    (ReactSharedInternals.T = prevTransition),\n      (ReactDOMSharedInternals.p = previousUpdateLanePriority);\n  }\n}\nfunction commitRootImpl(\n  root,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  renderPriorityLevel,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  do flushPassiveEffects();\n  while (null !== rootWithPendingPassiveEffects);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var finishedWork = root.finishedWork;\n  didIncludeRenderPhaseUpdate = root.finishedLanes;\n  if (null === finishedWork) return null;\n  root.finishedWork = null;\n  root.finishedLanes = 0;\n  if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n  root.callbackNode = null;\n  root.callbackPriority = 0;\n  root.cancelPendingCommit = null;\n  var remainingLanes = finishedWork.lanes | finishedWork.childLanes;\n  remainingLanes |= concurrentlyUpdatedLanes;\n  markRootFinished(\n    root,\n    didIncludeRenderPhaseUpdate,\n    remainingLanes,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n  root === workInProgressRoot &&\n    ((workInProgress = workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0));\n  (0 === (finishedWork.subtreeFlags & 10256) &&\n    0 === (finishedWork.flags & 10256)) ||\n    rootDoesHavePassiveEffects ||\n    ((rootDoesHavePassiveEffects = !0),\n    (pendingPassiveEffectsRemainingLanes = remainingLanes),\n    (pendingPassiveTransitions = transitions),\n    scheduleCallback$1(NormalPriority$1, function () {\n      flushPassiveEffects(!0);\n      return null;\n    }));\n  transitions = 0 !== (finishedWork.flags & 15990);\n  0 !== (finishedWork.subtreeFlags & 15990) || transitions\n    ? ((transitions = ReactSharedInternals.T),\n      (ReactSharedInternals.T = null),\n      (spawnedLane = ReactDOMSharedInternals.p),\n      (ReactDOMSharedInternals.p = 2),\n      (updatedLanes = executionContext),\n      (executionContext |= 4),\n      commitBeforeMutationEffects(root, finishedWork),\n      commitMutationEffectsOnFiber(finishedWork, root),\n      restoreSelection(selectionInformation, root.containerInfo),\n      (_enabled = !!eventsEnabled),\n      (selectionInformation = eventsEnabled = null),\n      (root.current = finishedWork),\n      commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork),\n      requestPaint(),\n      (executionContext = updatedLanes),\n      (ReactDOMSharedInternals.p = spawnedLane),\n      (ReactSharedInternals.T = transitions))\n    : (root.current = finishedWork);\n  rootDoesHavePassiveEffects\n    ? ((rootDoesHavePassiveEffects = !1),\n      (rootWithPendingPassiveEffects = root),\n      (pendingPassiveEffectsLanes = didIncludeRenderPhaseUpdate))\n    : releaseRootPooledCache(root, remainingLanes);\n  remainingLanes = root.pendingLanes;\n  0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n  onCommitRoot(finishedWork.stateNode, renderPriorityLevel);\n  ensureRootIsScheduled(root);\n  if (null !== recoverableErrors)\n    for (\n      renderPriorityLevel = root.onRecoverableError, finishedWork = 0;\n      finishedWork < recoverableErrors.length;\n      finishedWork++\n    )\n      (remainingLanes = recoverableErrors[finishedWork]),\n        renderPriorityLevel(remainingLanes.value, {\n          componentStack: remainingLanes.stack\n        });\n  0 !== (pendingPassiveEffectsLanes & 3) && flushPassiveEffects();\n  remainingLanes = root.pendingLanes;\n  0 !== (didIncludeRenderPhaseUpdate & 4194218) && 0 !== (remainingLanes & 42)\n    ? root === rootWithNestedUpdates\n      ? nestedUpdateCount++\n      : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n    : (nestedUpdateCount = 0);\n  flushSyncWorkAcrossRoots_impl(0, !1);\n  return null;\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPassiveEffects() {\n  if (null !== rootWithPendingPassiveEffects) {\n    var root$170 = rootWithPendingPassiveEffects,\n      remainingLanes = pendingPassiveEffectsRemainingLanes;\n    pendingPassiveEffectsRemainingLanes = 0;\n    var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes),\n      prevTransition = ReactSharedInternals.T,\n      previousPriority = ReactDOMSharedInternals.p;\n    try {\n      ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n      ReactSharedInternals.T = null;\n      if (null === rootWithPendingPassiveEffects)\n        var JSCompiler_inline_result = !1;\n      else {\n        renderPriority = pendingPassiveTransitions;\n        pendingPassiveTransitions = null;\n        var root = rootWithPendingPassiveEffects,\n          lanes = pendingPassiveEffectsLanes;\n        rootWithPendingPassiveEffects = null;\n        pendingPassiveEffectsLanes = 0;\n        if (0 !== (executionContext & 6))\n          throw Error(formatProdErrorMessage(331));\n        var prevExecutionContext = executionContext;\n        executionContext |= 4;\n        commitPassiveUnmountOnFiber(root.current);\n        commitPassiveMountOnFiber(root, root.current, lanes, renderPriority);\n        executionContext = prevExecutionContext;\n        flushSyncWorkAcrossRoots_impl(0, !1);\n        if (\n          injectedHook &&\n          \"function\" === typeof injectedHook.onPostCommitFiberRoot\n        )\n          try {\n            injectedHook.onPostCommitFiberRoot(rendererID, root);\n          } catch (err) {}\n        JSCompiler_inline_result = !0;\n      }\n      return JSCompiler_inline_result;\n    } finally {\n      (ReactDOMSharedInternals.p = previousPriority),\n        (ReactSharedInternals.T = prevTransition),\n        releaseRootPooledCache(root$170, remainingLanes);\n    }\n  }\n  return !1;\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0),\n    scheduleImmediateTask(processRootScheduleInMicrotask));\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$172 = firstScheduledRoot; null !== root$172; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$172.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$172.suspendedLanes,\n                pingedLanes = root$172.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326677\n                  ? (JSCompiler_inline_result & 201326677) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$172, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$172,\n                root$172 === workInProgressRoot ? JSCompiler_inline_result : 0\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$172, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$172, JSCompiler_inline_result));\n        root$172 = root$172.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    (shouldAttemptEagerTransition() &&\n      (syncTransitionLanes = currentEventTransitionLane),\n    (currentEventTransitionLane = 0));\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$5 = 31 - clz32(lanes),\n      lane = 1 << index$5,\n      expirationTime = expirationTimes[index$5];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime && 2 === workInProgressSuspendedReason) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  var originalCallbackNode = root.callbackNode;\n  if (flushPassiveEffects() && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPassiveEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateTask(cb) {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(ImmediatePriority, cb)\n      : cb();\n  });\n}\nfunction requestTransitionLane() {\n  0 === currentEventTransitionLane &&\n    (currentEventTransitionLane = claimNextTransitionLane());\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1439 = 0;\n  i$jscomp$inline_1439 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1439++\n) {\n  var eventName$jscomp$inline_1440 =\n      simpleEventPluginEvents[i$jscomp$inline_1439],\n    domEventName$jscomp$inline_1441 =\n      eventName$jscomp$inline_1440.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1442 =\n      eventName$jscomp$inline_1440[0].toUpperCase() +\n      eventName$jscomp$inline_1440.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1441,\n    \"on\" + capitalizedEvent$jscomp$inline_1442\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (\n          container === targetContainer ||\n          (8 === container.nodeType && container.parentNode === targetContainer)\n        )\n          break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (3 === grandTag || 4 === grandTag)\n              if (\n                ((grandTag = nodeTag.stateNode.containerInfo),\n                grandTag === targetContainer ||\n                  (8 === grandTag.nodeType &&\n                    grandTag.parentNode === targetContainer))\n              )\n                return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = SyntheticEventCtor;\n                reactEventName = reactEventType;\n                instance = 0;\n                for (\n                  lastHostComponent = inCapturePhase;\n                  lastHostComponent;\n                  lastHostComponent = getParent(lastHostComponent)\n                )\n                  instance++;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = getParent(_instance)\n                )\n                  lastHostComponent++;\n                for (; 0 < instance - lastHostComponent; )\n                  (inCapturePhase = getParent(inCapturePhase)), instance--;\n                for (; 0 < lastHostComponent - instance; )\n                  (reactEventName = getParent(reactEventName)),\n                    lastHostComponent--;\n                for (; instance--; ) {\n                  if (\n                    inCapturePhase === reactEventName ||\n                    (null !== reactEventName &&\n                      inCapturePhase === reactEventName.alternate)\n                  )\n                    break b;\n                  inCapturePhase = getParent(inCapturePhase);\n                  reactEventName = getParent(reactEventName);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    targetFiber = targetFiber.return;\n  }\n  return listeners;\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction noop$1() {}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$186 = props[hasSrc];\n          if (null != propValue$186)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$186;\n                break;\n              case \"type\":\n                propValue = propValue$186;\n                break;\n              case \"checked\":\n                checked = propValue$186;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$186;\n                break;\n              case \"value\":\n                propKey = propValue$186;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$186;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$186)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$186, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      track(domElement);\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      track(domElement);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$186 in props)\n          props.hasOwnProperty(propValue$186) &&\n            ((hasSrc = props[propValue$186]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$186,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$203 in nextProps) {\n        var propKey = nextProps[propKey$203];\n        lastProp = lastProps[propKey$203];\n        if (\n          nextProps.hasOwnProperty(propKey$203) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$203) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$203,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$203 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$203 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$203\n        ? updateOptions(domElement, !!lastProps, propKey$203, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$203 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$203 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$203, propKey);\n      return;\n    case \"option\":\n      for (var propKey$219 in lastProps)\n        if (\n          ((propKey$203 = lastProps[propKey$219]),\n          lastProps.hasOwnProperty(propKey$219) &&\n            null != propKey$203 &&\n            !nextProps.hasOwnProperty(propKey$219))\n        )\n          switch (propKey$219) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$219,\n                null,\n                nextProps,\n                propKey$203\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$203 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$203 !== propKey &&\n            (null != propKey$203 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$203 &&\n                \"function\" !== typeof propKey$203 &&\n                \"symbol\" !== typeof propKey$203;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$203,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$224 in lastProps)\n        (propKey$203 = lastProps[propKey$224]),\n          lastProps.hasOwnProperty(propKey$224) &&\n            null != propKey$203 &&\n            !nextProps.hasOwnProperty(propKey$224) &&\n            setProp(domElement, tag, propKey$224, null, nextProps, propKey$203);\n      for (checked in nextProps)\n        if (\n          ((propKey$203 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$203 !== propKey &&\n            (null != propKey$203 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$203)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$203,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$229 in lastProps)\n          (propKey$203 = lastProps[propKey$229]),\n            lastProps.hasOwnProperty(propKey$229) &&\n              void 0 !== propKey$203 &&\n              !nextProps.hasOwnProperty(propKey$229) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$229,\n                void 0,\n                nextProps,\n                propKey$203\n              );\n        for (defaultChecked in nextProps)\n          (propKey$203 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$203 === propKey ||\n              (void 0 === propKey$203 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$203,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$234 in lastProps)\n    (propKey$203 = lastProps[propKey$234]),\n      lastProps.hasOwnProperty(propKey$234) &&\n        null != propKey$203 &&\n        !nextProps.hasOwnProperty(propKey$234) &&\n        setProp(domElement, tag, propKey$234, null, nextProps, propKey$203);\n  for (lastProp in nextProps)\n    (propKey$203 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$203 === propKey ||\n        (null == propKey$203 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$203, nextProps, propKey);\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        }\n        depth--;\n      } else (\"$\" !== node && \"$?\" !== node && \"$!\" !== node) || depth++;\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href ? null : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nfunction getParentSuspenseInstance(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\"$\" === data || \"$!\" === data || \"$?\" === data) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else \"/$\" === data && depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$242 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$243 = styles$242.get(type);\n        resource$243 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$243 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$242.set(type, resource$243),\n          (styles$242 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$242._p &&\n            ((resource$243.instance = styles$242),\n            (resource$243.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$242 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$243.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$243;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$248 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$248)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$248),\n            markNodeAsHoistable(instance$248),\n            instance$248\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$248 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$248);\n        var linkInstance = instance$248;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$248, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$248, props.precedence, hoistableRoot);\n        return (resource.instance = instance$248);\n      case \"script\":\n        instance$248 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$248)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$248)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nvar suspendedState = null;\nfunction noop() {}\nfunction suspendResource(hoistableRoot, resource, props) {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nfunction waitForCommitToBeReady() {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4);\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count)\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.finishedWork =\n    this.pingCache =\n    this.current =\n    this.pendingChildren =\n      null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.finishedLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  transitionCallbacks,\n  formState\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            if (13 === nearestMounted.tag) {\n              var lane = requestUpdateLane(),\n                root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n              null !== root &&\n                scheduleUpdateOnFiber(root, nearestMounted, lane);\n              markRetryLaneIfNotHydrated(nearestMounted, lane);\n            }\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      0 === root.tag && flushPassiveEffects();\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1686 = React.version;\nif (\n  \"19.0.0\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1686\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1686,\n      \"19.0.0\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2165 = {\n  bundleType: 0,\n  version: \"19.0.0\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  findFiberByHostInstance: getClosestInstanceFromNode,\n  reconcilerVersion: \"19.0.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2166 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2166.isDisabled &&\n    hook$jscomp$inline_2166.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2166.inject(\n        internals$jscomp$inline_2165\n      )),\n        (injectedHook = hook$jscomp$inline_2166);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    null\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(\n    8 === container.nodeType ? container.parentNode : container\n  );\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    formState\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  initialChildren.current.lanes = isStrictMode;\n  markRootUpdated$1(initialChildren, isStrictMode);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.0.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","export function calculatePosition(data, options = {}) {\n    const { x = 0, y = 22, spacingVertical = 30, spacingHorizontal = 140, } = options;\n    calculateInnerBoxSize(data, {\n        x,\n        y,\n        spacingVertical,\n        spacingHorizontal,\n    });\n    calculatePositionSS(data, {\n        x,\n        y,\n        spacingVertical,\n        spacingHorizontal,\n    });\n}\nfunction calculateInnerBoxSize(data, options) {\n    for (const datum of data) {\n        if (datum.children) {\n            calculateInnerBoxSize(datum.children, options);\n            datum.childrenBoxSize = {\n                width: datum.position.width +\n                    options.spacingHorizontal +\n                    Math.max(...datum.children.map((d) => d.childrenBoxSize.width)),\n                height: Math.max(datum.position.height, options.spacingVertical * (datum.children.length - 1) +\n                    datum.children\n                        .map((d) => d.childrenBoxSize.height)\n                        .reduce((a, b) => a + b, 0)),\n            };\n        }\n        else {\n            datum.childrenBoxSize = {\n                width: datum.position.width,\n                height: datum.position.height,\n            };\n        }\n    }\n}\nfunction calculatePositionSS(data, options) {\n    let y = options.y;\n    for (const datum of data) {\n        if (datum.children) {\n            calculatePositionSS(datum.children, {\n                ...options,\n                x: options.x + datum.position.width + options.spacingHorizontal,\n                y,\n            });\n        }\n        datum.position.x = options.x;\n        datum.position.y =\n            datum.childrenBoxSize.height / 2 - datum.position.height / 2 + y;\n        y += datum.childrenBoxSize.height + options.spacingVertical;\n        datum.anchor = {\n            left: {\n                x: datum.position.x,\n                y: datum.position.y + datum.position.height / 2,\n            },\n            right: {\n                x: datum.position.x + datum.position.width,\n                y: datum.position.y + datum.position.height / 2,\n            },\n        };\n        datum.childrenBoxSize.height =\n            datum.childrenBoxSize.height + options.spacingVertical;\n    }\n}\n//# sourceMappingURL=calculatePosition.js.map","export const refX = 10;\n//# sourceMappingURL=MarkerDef.utils.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nexport function MultilineText(props) {\n    const { label, verticalPosition } = props;\n    if (!label)\n        return;\n    const lines = label.split(/\\r?\\n/);\n    const firstDX = verticalPosition === 'top'\n        ? 1\n        : verticalPosition === 'center'\n            ? -lines.length / 2 + 0.5\n            : -lines.length;\n    return (_jsx(_Fragment, { children: lines.map((line, index) => (_jsx(\"tspan\", { x: \"0\", dy: index === 0 ? `${firstDX}em` : '1em', children: line }, index))) }));\n}\n//# sourceMappingURL=MultilineText.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { MultilineText } from './MultilineText';\nexport function Text(props) {\n    const { x, y, label, verticalPosition, horizontalPosition } = props;\n    const transform = `translate(${x},${y})`;\n    let textAnchor;\n    switch (horizontalPosition) {\n        case 'left':\n            textAnchor = 'start';\n            break;\n        case 'center':\n            textAnchor = 'middle';\n            break;\n        case 'right':\n            textAnchor = 'end';\n            break;\n        default:\n            textAnchor = 'middle';\n    }\n    return (_jsxs(_Fragment, { children: [_jsx(\"text\", { textAnchor: textAnchor, transform: transform, stroke: \"rgba(255,255,255,0.5)\", strokeWidth: \"0.5em\", fill: \"none\", fontSize: \"14\", children: _jsx(MultilineText, { label: label, verticalPosition: verticalPosition }) }), _jsx(\"text\", { textAnchor: textAnchor, transform: transform, stroke: \"none\", fontSize: \"14\", fill: \"black\", children: _jsx(MultilineText, { label: label, verticalPosition: verticalPosition }) })] }));\n}\n//# sourceMappingURL=Text.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { refX } from './MarkerDef.utils';\nimport { Text } from './Text';\n/**\n * Creates a simple arrow between 2 points. The arrow has one inflection point, which is the middle of the line.\n * The SVG must define a marker with id=\"arrowhead\" for this to work.\n * @param props\n * @returns\n */\nexport function Arrow(props) {\n    const { id, from, to, label, horizontalPosition = 'center', verticalPosition = 'center', } = props;\n    const middle = { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };\n    const headInflectionPoint = {\n        x: to.x - refX * 2, // refX attribute of the marker element in the Arrow component shifts the arrow head to the left, and that the vertices of the arrow head are set to refX, which means that the beginning of the arrow head is refX * 2 to the left.\n        y: to.y,\n    };\n    const d = `M ${from.x} ${from.y} C ${middle.x} ${from.y}  ${middle.x} ${to.y}  ${headInflectionPoint.x} ${to.y} Q ${headInflectionPoint.x} ${to.y}  ${to.x} ${to.y} `;\n    return (_jsxs(\"g\", { id: id, children: [_jsx(\"path\", { d: d, style: {\n                    fill: 'none',\n                    strokeWidth: '2',\n                    stroke: 'black',\n                    markerEnd: 'url(#arrowhead)',\n                } }), horizontalPosition === 'center' && (_jsx(Text, { x: middle.x, y: middle.y, label: label, horizontalPosition: horizontalPosition, verticalPosition: verticalPosition })), horizontalPosition === 'right' && (_jsx(Text, { x: to.x - 12, y: to.y - 8, label: label, horizontalPosition: \"right\", verticalPosition: verticalPosition })), horizontalPosition === 'left' && (_jsx(Text, { x: from.x + 12, y: from.y + 8, label: label, horizontalPosition: \"left\", verticalPosition: verticalPosition }))] }));\n}\n//# sourceMappingURL=Arrow.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Arrow } from '../components/Arrow';\nexport function getArrows(nodes, options = {}) {\n    const status = { level: 0 };\n    const arrows = [];\n    getArrowsSS(nodes, arrows, status, options);\n    return arrows;\n}\nfunction getArrowsSS(nodes, arrows, status, options = {}) {\n    const { getLabel, horizontalPosition, getID, verticalPosition } = options;\n    for (const node of nodes) {\n        if (node.children) {\n            for (const child of node.children) {\n                arrows.push(_jsx(Arrow, { id: getID ? getID(node) : undefined, from: node.anchor.right, to: child.anchor.left, label: getLabel?.(child), horizontalPosition: horizontalPosition, verticalPosition: verticalPosition }, arrows.length));\n            }\n            getArrowsSS(node.children, arrows, {\n                ...status,\n                level: status.level + 1,\n            }, options);\n        }\n    }\n}\n//# sourceMappingURL=getArrows.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function getBoxes(nodes, options) {\n    const boxes = [];\n    appendBoxes(nodes, boxes, options);\n    return boxes;\n}\nfunction appendBoxes(nodes, boxes, options = {}) {\n    const { getID } = options;\n    for (const node of nodes) {\n        boxes.push(_jsx(\"g\", { id: getID ? getID(node) : undefined, transform: `translate(${node.position.x} ${node.position.y})`, children: node.element }, boxes.length));\n        if (node.children) {\n            appendBoxes(node.children, boxes, options);\n        }\n    }\n}\n//# sourceMappingURL=getBoxes.js.map","/**\n * Will calculate the SVG of all the node\n * @param data\n */\nexport function prepareTree(data, options) {\n    data = structuredClone(data);\n    prepareTreeSS(data, options);\n    return data;\n}\nfunction prepareTreeSS(data, options) {\n    const { nodeRenderer, nodeRendererOptions = {}, shouldSkipBranch } = options;\n    for (const datum of data) {\n        if (options.parent) {\n            datum.parent = options.parent;\n        }\n        const elementAndSize = nodeRenderer(datum, nodeRendererOptions);\n        datum.position = {\n            x: 0,\n            y: 0,\n            width: elementAndSize.width,\n            height: elementAndSize.height,\n        };\n        datum.element = elementAndSize.element;\n        if (datum.children && datum.children.length === 0) {\n            delete datum.children;\n        }\n        if (datum.children) {\n            if (shouldSkipBranch) {\n                const parents = [datum];\n                let parent = datum.parent;\n                while (parent) {\n                    parents.push(parent);\n                    parent = parent.parent;\n                }\n                datum.children = datum.children.filter((child) => !shouldSkipBranch(child, parents));\n            }\n            prepareTreeSS(datum.children, {\n                ...options,\n                parent: datum,\n            });\n        }\n    }\n}\n//# sourceMappingURL=prepareTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { refX } from './MarkerDef.utils';\nexport function MarkerDef() {\n    return (_jsx(\"defs\", { children: _jsx(\"marker\", { id: \"arrowhead\", markerWidth: \"10\", markerHeight: \"7\", refX: refX, refY: \"3.5\", orient: \"auto\", children: _jsx(\"polygon\", { points: \"0 0, 10 3.5, 0 7\" }) }) }));\n}\n//# sourceMappingURL=MarkerDef.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { calculatePosition } from '../data/calculatePosition';\nimport { getArrows } from '../data/getArrows';\nimport { getBoxes } from '../data/getBoxes';\nimport { prepareTree } from '../data/prepareTree';\nimport { MarkerDef } from './MarkerDef';\nexport function SVGBoxesTree(props) {\n    const { tree, ...options } = props;\n    const { arrowRendererOptions, nodeRendererOptions, positionOptions } = options;\n    const data = prepareTree(tree, options);\n    calculatePosition(data, positionOptions);\n    const boxes = getBoxes(data, nodeRendererOptions);\n    const arrows = getArrows(data, arrowRendererOptions);\n    const svgSize = {\n        width: 0,\n        height: 0,\n    };\n    const width = [];\n    for (const datum of data) {\n        width.push(datum.childrenBoxSize.width);\n        svgSize.height += datum.childrenBoxSize.height;\n    }\n    svgSize.width = Math.max(...width);\n    return (_jsxs(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${svgSize.width} ${svgSize.height}`, children: [_jsx(MarkerDef, {}), boxes, arrows] }));\n}\n//# sourceMappingURL=SVGBoxesTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { flushSync } from 'react-dom';\nimport { createRoot } from 'react-dom/client';\nimport { SVGBoxesTree } from './components/SVGBoxesTree';\nexport function render(tree, options) {\n    const element = _jsx(SVGBoxesTree, { tree: tree, ...options });\n    const div = document.createElement('div');\n    const root = createRoot(div);\n    flushSync(() => {\n        root.render(element);\n    });\n    return div.innerHTML;\n}\n//# sourceMappingURL=render.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function Rectangle(props) {\n    return _jsx(\"rect\", { ...props });\n}\n//# sourceMappingURL=Rectangle.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function SVG(props) {\n    if (!props.svg)\n        return null;\n    return (_jsx(\"g\", { dangerouslySetInnerHTML: {\n            __html: props.svg,\n        } }));\n}\n//# sourceMappingURL=SVG.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Rectangle } from '../components/Rectangle';\nimport { SVG } from '../components/SVG';\nexport function moleculeRenderer(node, nodeRendererOptions) {\n    const molecules = getMolecules(node, nodeRendererOptions);\n    const topLabel = getTopLabel(node, nodeRendererOptions);\n    const width = Math.max(molecules.width, topLabel.width);\n    const height = Math.max(molecules.height, topLabel.height);\n    return {\n        width,\n        height,\n        element: (_jsxs(\"g\", { children: [_jsx(Rectangle, { width: width, height: height, style: {\n                        ...{ stroke: 'black', fill: 'white' },\n                        ...(node.style || {}),\n                        ...(nodeRendererOptions.getBoxStyle?.(node) || {}),\n                    } }), molecules.element, topLabel.element] })),\n    };\n}\nfunction getTopLabel(node, options = {}) {\n    const label = options.getTopLabel?.(node) || node.label;\n    if (!label) {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    return {\n        width: 200,\n        height: 20,\n        element: (_jsx(\"text\", { x: 0, y: -6, textAnchor: \"left\", stroke: \"none\", fontSize: \"14\", fill: \"black\", children: label })),\n    };\n}\n/**\n * This code is designed to also allow reactions for which we have many molecules\n * @param node\n * @param options\n * @returns\n */\nfunction getMolecules(node, options) {\n    const { maxWidth = 200, maxHeight = 150, getMolecules, getMoleculeStyle, } = options;\n    if (!getMolecules) {\n        throw new Error('getMolecules is not defined');\n    }\n    const molecules = getMolecules(node);\n    if (!molecules) {\n        return {\n            width: 0,\n            height: 0,\n            element: undefined,\n        };\n    }\n    const svgs = molecules\n        .filter((molecule) => molecule)\n        .map((molecule, index) => {\n        const svg = molecule.toSVG(maxWidth, maxHeight, undefined, {\n            autoCrop: true,\n            autoCropMargin: 10,\n            suppressChiralText: true,\n        });\n        if (getMoleculeStyle) {\n            return addStyleToSVG(svg, getMoleculeStyle(molecule, node, index));\n        }\n        return svg;\n    });\n    const { svg, width, height } = joinSVGs(svgs);\n    return {\n        width,\n        height,\n        element: _jsx(SVG, { svg: svg }),\n    };\n}\nfunction getPlus(options = {}) {\n    const { size = 11, padding = 5, strokeWidth = 2 } = options;\n    const x1 = padding + size / 2;\n    const y1 = padding;\n    const x2 = padding + size / 2;\n    const y2 = padding + size;\n    return {\n        svg: `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" stroke=\"rgb(0,0,0)\" stroke-width=\"${strokeWidth}\"></line>` +\n            `<line x1=\"${y1}\" y1=\"${x1}\" x2=\"${y2}\" y2=\"${x2}\" stroke=\"rgb(0,0,0)\" stroke-width=\"${strokeWidth}\"></line>`,\n        width: size + padding * 2,\n        height: size + padding * 2,\n    };\n}\nfunction joinSVGs(svgs) {\n    const results = [];\n    let maxHeight = 0;\n    for (const svg of svgs) {\n        const size = getSVGViewBox(svg);\n        if (results.length) {\n            results.push(getPlus());\n        }\n        results.push({ svg, width: size.width, height: size.height });\n        maxHeight = Math.max(maxHeight, size.height);\n    }\n    let currentWidth = 0;\n    for (const result of results) {\n        const shiftX = currentWidth;\n        const shiftY = (maxHeight - result.height) / 2;\n        result.shiftedSVG = `<g transform=\"translate(${shiftX},${shiftY})\">${result.svg}</g>`;\n        currentWidth += result.width;\n    }\n    return {\n        width: currentWidth,\n        height: maxHeight,\n        svg: results.map((result) => result.shiftedSVG).join('\\n'),\n    };\n}\nfunction getSVGViewBox(svg) {\n    const match = svg.match(/.*viewBox=\"(?<minX>-?\\d+) (?<minY>-?\\d+) (?<width>\\d+) (?<height>\\d+)\".*/);\n    if (!match?.groups) {\n        throw new Error('ViewBox not found');\n    }\n    // convert to numbers and return the object\n    return {\n        minX: Number(match.groups.minX),\n        minY: Number(match.groups.minY),\n        width: Number(match.groups.width),\n        height: Number(match.groups.height),\n    };\n}\nfunction styleObjectToString(style) {\n    const styleArray = [];\n    for (const property in style) {\n        if (Object.hasOwn(style, property)) {\n            const kebabCaseProperty = property\n                .replace(/([A-Z])/g, '-$1')\n                .toLowerCase();\n            styleArray.push(`${kebabCaseProperty}: ${style[property]}`);\n        }\n    }\n    return styleArray.join('; ');\n}\nfunction addStyleToSVG(svg, style) {\n    if (!style)\n        return svg;\n    const size = getSVGViewBox(svg);\n    const match = svg.match(/<svg.*>/);\n    if (!match) {\n        throw new Error('SVG tag not found');\n    }\n    const svgTag = match[0];\n    const styleString = styleObjectToString(style);\n    const styleRectange = `<rect x=\"${size.minX}\" y=\"${size.minY}\" width=\"${size.width}\" height=\"${size.height}\" style=\"${styleString}\"></rect>`;\n    return svg.replace(svgTag, `${svgTag}${styleRectange}`);\n}\n//# sourceMappingURL=moleculeRenderer.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Rectangle } from '../components/Rectangle';\nexport function taxonomyRenderer(node) {\n    const minSize = { width: 120, height: 20 };\n    const taxonomy = getTaxonomy(node, minSize);\n    const label = getLabel(node, minSize);\n    const width = Math.max(taxonomy.width, label.width);\n    const height = Math.max(taxonomy.height, label.height);\n    const nbTaxonomies = getNbTaxonomies(node, width, minSize);\n    return {\n        width,\n        height,\n        element: (_jsxs(\"g\", { children: [_jsx(Rectangle, { width: width, height: height, style: {\n                        ...{ stroke: 'black', fill: 'white' },\n                        ...(node.style || {}),\n                    } }), label.element, taxonomy.element, nbTaxonomies.element] })),\n    };\n}\nfunction getNbTaxonomies(node, width, minSize) {\n    return {\n        width: minSize.width,\n        height: minSize.height,\n        element: (_jsx(\"text\", { x: width, y: -5, textAnchor: \"end\", stroke: \"none\", fontSize: \"14\", fill: \"#00008B\" // dark blue\n            , fontStyle: 'bold', fontFamily: \"Arial, Helvetica, sans-serif\", children: node.nbTaxonomies })),\n    };\n}\nfunction getLabel(node, minSize, options = {}) {\n    const { spacingHorizontal } = {\n        spacingHorizontal: 8,\n        ...options,\n    };\n    if (node.rank === '') {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    return {\n        width: minSize.width,\n        height: minSize.height,\n        element: (_jsx(\"text\", { x: spacingHorizontal / 2, y: -6, textAnchor: \"start\", stroke: \"none\", fontSize: \"14\", fill: \"grey\", fontStyle: 'italic', fontFamily: \"Arial, Helvetica, sans-serif\", children: node.rank })),\n    };\n}\nfunction getTaxonomy(node, minSize, options = {}) {\n    const { font, fontSize, spacingHorizontal } = {\n        font: 'Arial, Helvetica, sans-serif',\n        fontSize: 16,\n        spacingHorizontal: 8,\n        ...options,\n    };\n    if (node.name === '') {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    let { width, height } = getStringSize(node.name, {\n        font,\n        fontSize,\n        spacingHorizontal,\n    });\n    const textWith = width;\n    let positionX = spacingHorizontal / 2;\n    if (height <= minSize.height) {\n        height = minSize.height;\n    }\n    if (width <= minSize.width) {\n        width = minSize.width;\n        positionX = (width - textWith + spacingHorizontal) / 2;\n    }\n    return {\n        width,\n        height,\n        element: (_jsx(\"g\", { height: height, width: width, dominantBaseline: \"central\", children: _jsx(\"text\", { x: positionX, y: height / 2, stroke: \"none\", fontSize: fontSize, fill: \"black\", ...(node.url ? { 'data-url': node.url } : {}), fontFamily: font, children: node.name }) })),\n    };\n}\nfunction getStringSize(text, options) {\n    const { font = 'Arial, Helvetica, sans-serif', fontSize = 16, spacingHorizontal = 8, } = options;\n    const tempElement = document.createElement('span');\n    tempElement.style.font = `${fontSize}px ${font}`;\n    tempElement.style.visibility = 'hidden';\n    tempElement.style.position = 'absolute';\n    tempElement.style.top = '-9999px';\n    tempElement.style.left = '-9999px';\n    tempElement.textContent = text;\n    document.body.appendChild(tempElement);\n    const { height, width } = tempElement.getBoundingClientRect();\n    document.body.removeChild(tempElement);\n    return { width: width + spacingHorizontal, height };\n}\n//# sourceMappingURL=taxonomyRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentationSVG = getFragmentationSVG;\nconst react_tree_svg_1 = require(\"react-tree-svg\");\n/**\n * @typedef {object} MassPeak\n * @property {number} mass\n * @property {number} intensity\n */\n/**\n * @param {object[]} trees\n * @param {object} [options={}]\n * @param {object} [options.OCL]\n * @param {number} [options.accuracy]\n * @param {MassPeak[]} [options.peaks]\n * @returns\n */\nfunction getFragmentationSVG(trees, options = {}) {\n    const { OCL, accuracy, peaks = [] } = options;\n    const maxIntensity = peaks?.length > 0\n        ? Math.log(Math.max(...peaks.map((peak) => peak.intensity)) + 1)\n        : 0;\n    const rendererOptions = {\n        nodeRenderer: react_tree_svg_1.moleculeRenderer,\n        arrowRendererOptions: {\n            getLabel: (node) => {\n                return node?.reaction?.label;\n            },\n            labelPosition: 'center',\n        },\n        nodeRendererOptions: {\n            getTopLabel: (node) => {\n                const mz = node?.molecules[0]?.info?.mz;\n                if (mz === undefined)\n                    return;\n                return `${mz.toFixed(4)} m/z`;\n            },\n            getBoxStyle: (node) => {\n                for (const molecule of node.molecules) {\n                    const peak = getPeakInRange(peaks, molecule?.info?.mz, accuracy);\n                    if (peak) {\n                        return {\n                            fillOpacity: maxIntensity\n                                ? (0.2 * Math.log(peak.intensity + 1)) / maxIntensity\n                                : 0.2,\n                            fill: 'red',\n                        };\n                    }\n                }\n            },\n            getMolecules: (node) => {\n                return node.molecules.map((molecule) => OCL.Molecule.fromIDCode(molecule.idCode));\n            },\n        },\n        positionOptions: {\n            spacingHorizontal: 150,\n        },\n    };\n    return (0, react_tree_svg_1.render)(trees, rendererOptions);\n}\nfunction getPeakInRange(peaks, mass, accuracy) {\n    if (!mass || !Array.isArray(peaks)) {\n        return undefined;\n    }\n    const massAccuracy = (accuracy * mass) / 1e6;\n    for (const peak of peaks) {\n        if (Math.abs(peak.mass - mass) <= massAccuracy) {\n            return peak;\n        }\n    }\n    return undefined;\n}\n//# sourceMappingURL=getFragmentationSVG.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMolecules = fromMolecules;\nconst mass_fragmentation_1 = require(\"mass-fragmentation\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/** * Generates a database 'monoisotopic' from a monoisotopic mass and various options\n * @param {{smiles?:string,molecule?:string,idCode?:string}[]}    entries - Array of object containing a property to recreate the molecule\n * @param {typeof import('openchemlib')} OCL - The OCL library\n * @param {object}    [options={}]\n * @param {function}  [options.onStep] - Callback to do after each step\n * @param {boolean}   [options.allowNeutral=true]\n * @param {string}    [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number}    [options.precision=100] - Allowed mass range based on precision\n * @param {boolean}   [options.groupResults=false] - Should we group the results if they have the same monoisotopic mass and experimental mass\n * @param {object}    [options.fragmentation={}]\n * @param {object}    [options.fragmentation.acyclic=false]\n * @param {object}    [options.fragmentation.cyclic=false]\n * @param {object}    [options.fragmentation.full=true]\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @returns {Promise}\n */\nasync function fromMolecules(entries, OCL, options = {}) {\n    let { onStep, ionizations, filter, fragmentation = { acyclic: false, cyclic: false, full: true }, groupResults = false, } = options;\n    ionizations = (0, mf_utilities_1.preprocessIonizations)(ionizations);\n    let results = [];\n    for (let i = 0; i < entries.length; i++) {\n        const entry = entries[i];\n        const molecule = getMolecule(entry, OCL);\n        if (!molecule)\n            continue;\n        const { acyclic = false, cyclic = false, full = true } = fragmentation;\n        const allFragments = (0, mass_fragmentation_1.fragment)(molecule, {\n            acyclic,\n            cyclic,\n            full,\n        });\n        for (const oneFragment of allFragments) {\n            appendResults(results, oneFragment, {\n                entry,\n                ionizations,\n                filter,\n            });\n            if (onStep)\n                onStep(i);\n        }\n    }\n    if (groupResults) {\n        results = groupFragmentationResults(results);\n    }\n    return results.toSorted((a, b) => a.em - b.em);\n}\n/**\n * We could group the results and replace the property 'fragment' by 'fragments'\n * @param {*} results\n */\nfunction groupFragmentationResults(results) {\n    const sortedResults = results.slice().toSorted((a, b) => {\n        if (a.em !== b.em) {\n            return a.em - b.em;\n        }\n        if (a.ms.em !== b.ms.em) {\n            return a.ms.em - b.ms.em;\n        }\n        if (a.fragment.idCode < b.fragment.idCode)\n            return -1;\n        return 1;\n    });\n    const groupedResults = [];\n    let currentResult = {};\n    for (let result of sortedResults) {\n        if (result.em !== currentResult.em ||\n            result.ms.em !== currentResult.ms.em) {\n            currentResult = {\n                ...result,\n                fragments: [\n                    {\n                        idCode: result.fragment.idCode,\n                        type: result.fragment.type,\n                        count: 1,\n                        parents: [{ ...result.fragment.parent, count: 1 }],\n                    },\n                ],\n            };\n            delete currentResult.fragment;\n            groupedResults.push(currentResult);\n        }\n        else {\n            const lastFragment = currentResult.fragments.at(-1);\n            if (lastFragment.idCode === result.fragment.idCode) {\n                lastFragment.count++;\n                if (lastFragment.parents.at(-1).idCode === result.fragment.parent.idCode) {\n                    lastFragment.parents.at(-1).count++;\n                }\n                else {\n                    lastFragment.parents.push({ ...result.fragment.parent, count: 1 });\n                }\n            }\n            else {\n                currentResult.fragments.push({\n                    idCode: result.fragment.idCode,\n                    type: result.fragment.type,\n                    count: 1,\n                    parents: [{ ...result.fragment.parent, count: 1 }],\n                });\n            }\n        }\n    }\n    for (let group of groupedResults) {\n        group.fragments = group.fragments.toSorted((a, b) => b.count - a.count);\n    }\n    return groupedResults;\n}\n/**\n *\n * @param {object} entry\n * @param {typeof import('openchemlib')} OCL - The OCL library\n */\nfunction getMolecule(entry, OCL) {\n    if (entry.idCode) {\n        return OCL.Molecule.fromIDCode(entry.idCode);\n    }\n    if (entry.ocl && entry.ocl.idCode) {\n        return OCL.Molecule.fromIDCode(entry.ocl.idCode);\n    }\n    if (entry.smiles) {\n        return OCL.Molecule.fromSmiles(entry.smiles);\n    }\n    if (entry.molfile) {\n        return OCL.Molecule.fromMolfile(entry.molfile);\n    }\n    return undefined;\n}\nfunction appendResults(results, oneFragment, options) {\n    const mf = oneFragment.mfInfo.mf;\n    const { ionizations, filter, entry } = options;\n    const mfInfo = new mf_parser_1.MF(mf).getInfo();\n    for (let ionization of ionizations) {\n        const result = {\n            charge: mfInfo.charge,\n            em: mfInfo.monoisotopicMass,\n            mw: mfInfo.mass,\n            mf: mfInfo.mf,\n            ionization,\n            unsaturation: mfInfo.unsaturation,\n            atoms: mfInfo.atoms,\n            fragment: {\n                parent: {\n                    ...entry,\n                    idCode: oneFragment.parentIDCode,\n                },\n                idCode: oneFragment.idCode,\n                type: oneFragment.fragmentType,\n            },\n        };\n        let match = (0, mf_matcher_1.msemMatcher)(result, filter);\n        if (!match)\n            continue;\n        result.ms = match.ms;\n        result.ionization = match.ionization;\n        results.push(result);\n    }\n}\n//# sourceMappingURL=fromMolecules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceToMF = sequenceToMF;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/**\n * Convert a nucleic sequence to a MF\n * @param {String} sequence\n * @param {object} [options={}]\n * @param {string} [options.kind] - rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.circular=false]\n */\nfunction sequenceToMF(sequence, options = {}) {\n    let fivePrimeTerminal = 'HO';\n    let threePrimeTerminal = 'H';\n    sequence = sequence.replace(/^HO/, '');\n    sequence = sequence.replace(/H$/, '');\n    sequence = sequence.trim();\n    if (sequence === '')\n        return '';\n    sequence = (0, mf_utilities_1.ensureUppercaseSequence)(sequence);\n    // if the sequence is in lowercase but the parenthesis we should convert it to uppercase\n    if (sequence.match(/^[a-z]+$/)) {\n        sequence = sequence.toUpperCase();\n    }\n    let { kind, circular, fivePrime = 'monophosphate' } = options;\n    fivePrime = fivePrime.replaceAll(/[^A-Za-z]/g, '').toLowerCase();\n    if (!kind) {\n        if (sequence.includes('U')) {\n            kind = 'rna';\n        }\n        else {\n            kind = 'ds-dna';\n        }\n    }\n    kind = kind.replaceAll(/[^A-Za-z]/g, '').toLowerCase();\n    if (sequence.includes('(') && kind === 'dsdna') {\n        throw new Error('Nucleotide sequenceToMF: modifications not allowed for ds-DNA');\n    }\n    let results = [[]];\n    if (kind === 'dsdna')\n        results.push([]);\n    let parenthesisCounter = 0;\n    for (let i = 0; i < sequence.length; i++) {\n        let currentSymbol = sequence[i];\n        while (sequence[i + 1] && sequence[i + 1].match(/[a-z]/)) {\n            i++;\n            currentSymbol += sequence[i];\n        }\n        if (currentSymbol.length > 1) {\n            results[0].push(currentSymbol);\n            continue;\n        }\n        if (currentSymbol === '(' ||\n            currentSymbol === ')' ||\n            parenthesisCounter > 0) {\n            if (currentSymbol === '(') {\n                parenthesisCounter++;\n                if (i === 0)\n                    fivePrimeTerminal = '';\n            }\n            if (currentSymbol === ')') {\n                parenthesisCounter--;\n                if (i === sequence.length - 1)\n                    threePrimeTerminal = '';\n            }\n            switch (kind) {\n                case 'dna':\n                case 'rna':\n                    results[0].push(currentSymbol);\n                    break;\n                default:\n                    // eslint-disable-next-line no-console\n                    console.warn(`Nucleotide sequenceToMF with modification: unknown kind: ${kind}`);\n            }\n            continue;\n        }\n        let nucleotideType = i === 0 ? fivePrime : 'monophosphate';\n        currentSymbol = currentSymbol.replace(/[\\t\\n\\r ]/, '');\n        if (!currentSymbol)\n            continue;\n        switch (kind) {\n            case 'dna':\n                results[0].push(desoxyNucleotides[nucleotideType][currentSymbol]);\n                break;\n            case 'rna':\n                results[0].push(oxyNucleotides[nucleotideType][currentSymbol]);\n                break;\n            case 'dsdna':\n                results[0].push(desoxyNucleotides[nucleotideType][currentSymbol]);\n                results[1].unshift(desoxyNucleotides[nucleotideType][complementary[currentSymbol]]);\n                break;\n            default:\n                // eslint-disable-next-line no-console\n                console.warn(`Nucleotide sequenceToMF: unknown kind: ${kind}`);\n        }\n    }\n    if (!circular) {\n        for (const result of results)\n            result.unshift(fivePrimeTerminal);\n        for (const result of results)\n            result.push(threePrimeTerminal);\n    }\n    return results.map((result) => result.join('')).join('.');\n}\nconst complementary = {\n    A: 'T',\n    T: 'A',\n    C: 'G',\n    G: 'C',\n};\nconst desoxyNucleotides = {\n    alcohol: {},\n    monophosphate: {},\n    diphosphate: {},\n    triphosphate: {},\n};\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNA')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.alcohol[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNAp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'NucleotideP')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNApp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.diphosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNAppp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.triphosphate[group.oneLetter] = group.symbol;\n    }\n}\nconst oxyNucleotides = {\n    alcohol: {},\n    monophosphate: {},\n    diphosphate: {},\n    triphosphate: {},\n};\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNA')) {\n    if (group.oneLetter) {\n        oxyNucleotides.alcohol[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNAp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'NucleotideP')) {\n    if (group.oneLetter) {\n        oxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNApp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.diphosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNAppp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.triphosphate[group.oneLetter] = group.symbol;\n    }\n}\n//# sourceMappingURL=sequenceToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.furanThreeTerm = furanThreeTerm;\nfunction furanThreeTerm(nucleotide) {\n    // last residue should become a furan\n    let parts = nucleotide\n        .replaceAll(' ', '')\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let last = parts.pop();\n    if (!last.match(/D[acgt]mp(.*)$/)) {\n        // eslint-disable-next-line no-console\n        console.warn(`furanThreeTerm can not remove a non monophosphate nucleic acid: ${last}`);\n        return parts.join('') + last;\n    }\n    return parts.join('') + last.replace(/D[acgt]mp(.*)$/, 'Furp');\n}\n//# sourceMappingURL=furanThreeTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addFiveTerm = addFiveTerm;\nconst furanThreeTerm_js_1 = require(\"./furanThreeTerm.js\");\nfunction addFiveTerm(mfs, fiveTerm, i, options) {\n    if (options.a)\n        mfs.push(`${fiveTerm}O-1H-1$a${i}`); // neutral ok\n    if (options.ab && i > 1)\n        mfs.push(`${(0, furanThreeTerm_js_1.furanThreeTerm)(fiveTerm)}$a${i}-B`); // A minus base\n    if (options.b)\n        mfs.push(`${fiveTerm}H$b${i}`); // need to add an hydrogen, see: https://books.google.ch/books?id=B57e37bJjqAC&pg=PA172&lpg=PA172&dq=oligonucleotide+b+fragmentation&source=bl&ots=mRr29Pexx2&sig=1NUQcWV-wuj6o9q81my86AVoRto&hl=fr&sa=X&ved=2ahUKEwjI5M3yn-7fAhUJMewKHQR6Bcs4ChDoATADegQIBhAB#v=onepage&q&f=true\n    if (options.c)\n        mfs.push(`${fiveTerm}PO2$c${i}`); // neutral ok\n    if (options.d)\n        mfs.push(`${fiveTerm}PO3H2$d${i}`);\n    if (options.dh2o)\n        mfs.push(`${fiveTerm}PO2$d${i}-H2O`);\n}\n//# sourceMappingURL=addFiveTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.baseLoss = baseLoss;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst mfLosses = {};\nfor (const nucleotide of ['Amp', 'Tmp', 'Cmp', 'Gmp', 'Ump']) {\n    mfLosses[nucleotide] = {\n        code: nucleotide.charAt(0),\n        diff: (0, mf_utilities_1.mfDiff)('Rmp', nucleotide),\n    };\n}\nfor (const nucleotide of ['Damp', 'Dtmp', 'Dcmp', 'Dgmp', 'Dump']) {\n    mfLosses[nucleotide] = {\n        code: nucleotide.charAt(1).toUpperCase(),\n        diff: (0, mf_utilities_1.mfDiff)('Drmp', nucleotide),\n    };\n}\nfunction baseLoss(nucleotide) {\n    // any residue can loose a base\n    let results = [];\n    for (let key in mfLosses) {\n        const base = mfLosses[key];\n        if (nucleotide.includes(key)) {\n            results.push(`${nucleotide}(${base.diff})$${base.code}*`);\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=baseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addFiveTermBaseLoss = addFiveTermBaseLoss;\nconst baseLoss_js_1 = require(\"./baseLoss.js\");\nfunction addFiveTermBaseLoss(mfs, fiveTerm, i, options) {\n    if (!options.abcdBaseLoss)\n        return;\n    let loss = (0, baseLoss_js_1.baseLoss)(fiveTerm);\n    for (const mf of loss) {\n        if (options.a) {\n            mfs.push(`${mf}`.replace('$', `O-1H-1$a${i} `));\n        }\n        if (options.b) {\n            mfs.push(`${mf}`.replace('$', `H-1$b${i} `));\n        }\n        if (options.c) {\n            mfs.push(`${mf}`.replace('$', `PO2$c${i} `));\n        }\n        if (options.d) {\n            mfs.push(`${mf}`.replace('$', `PO3H2$d${i} `));\n        }\n    }\n}\n//# sourceMappingURL=addFiveTermBaseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addInternalTerm = addInternalTerm;\nconst furanThreeTerm_js_1 = require(\"./furanThreeTerm.js\");\n// https://books.google.ch/books?id=B57e37bJjqAC&pg=PA172&lpg=PA172&dq=oligonucleotide+b+fragmentation&source=bl&ots=mRr29Pexx2&sig=1NUQcWV-wuj6o9q81my86AVoRto&hl=fr&sa=X&ved=2ahUKEwjI5M3yn-7fAhUJMewKHQR6Bcs4ChDoATADegQIBhAB#v=onepage&q=oligonucleotide%20b%20fragmentation&f=false\nfunction addInternalTerm(mfs, internal, ter3, ter5, options = {}) {\n    if (options.aw) {\n        // without base loss\n        mfs.push(`HO${internal}O-1H-1$w${ter3}:a${ter5}`); // A W\n    }\n    if (options.bw) {\n        // without base loss\n        mfs.push(`HO${internal}H$w${ter3}:b${ter5}`); // B W\n    }\n    if (options.abw) {\n        // with base loss\n        let fragment = (0, furanThreeTerm_js_1.furanThreeTerm)(internal);\n        mfs.push(`HO${fragment}$w${ter3}:a${ter5}-B`); // A minus base - W\n    }\n    if (options.aby) {\n        // with base loss\n        let fragment = (0, furanThreeTerm_js_1.furanThreeTerm)(internal);\n        mfs.push(`O-2P-1${fragment}$y${ter3}:a${ter5}-B`); // A minus base - Y\n    }\n}\n//# sourceMappingURL=addInternalTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addThreeTerm = addThreeTerm;\nfunction addThreeTerm(mfs, threeTerm, i, options) {\n    if (options.w)\n        mfs.push(`HO${threeTerm}$w${i}`); // neutral ok\n    if (options.x)\n        mfs.push(`H-1${threeTerm}$x${i}`); // neutral ok\n    if (options.y)\n        mfs.push(`O-2P-1${threeTerm}$y${i}`); // neutral ok\n    if (options.z)\n        mfs.push(`O-3H-2P-1${threeTerm}$z${i}`); // neutral ok\n    if (options.zch2)\n        mfs.push(`O-3H-4C-1P-1${threeTerm}$z${i}-CH2`); // TODO to confirm\n}\n//# sourceMappingURL=addThreeTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addThreeTermBaseLoss = addThreeTermBaseLoss;\nconst baseLoss_js_1 = require(\"./baseLoss.js\");\nfunction addThreeTermBaseLoss(mfs, threeTerm, i, options) {\n    if (!options.wxyzBaseLoss)\n        return;\n    let loss = (0, baseLoss_js_1.baseLoss)(threeTerm);\n    for (const mf of loss) {\n        if (options.w) {\n            mfs.push(`HO${mf}`.replace('$', `$w${i} `));\n        }\n        if (options.x) {\n            mfs.push(`H-1${mf}`.replace('$', `$x${i} `));\n        }\n        if (options.y) {\n            mfs.push(`O-2P-1${mf}`.replace('$', `$y${i} `));\n        }\n        if (options.z) {\n            mfs.push(`O-3H-1P-1(+)${mf}`.replace('$', `$z${i} `));\n        }\n    }\n}\n//# sourceMappingURL=addThreeTermBaseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateFragments = generateFragments;\nconst addFiveTerm_1 = require(\"./addFiveTerm\");\nconst addFiveTermBaseLoss_1 = require(\"./addFiveTermBaseLoss\");\nconst addInternalTerm_1 = require(\"./addInternalTerm\");\nconst addThreeTerm_1 = require(\"./addThreeTerm\");\nconst addThreeTermBaseLoss_1 = require(\"./addThreeTermBaseLoss\");\nfunction generateFragments(mf, options) {\n    if (options === undefined) {\n        options = {\n            a: false,\n            ab: false,\n            b: false,\n            c: false,\n            d: false,\n            dh2o: false,\n            w: false,\n            x: false,\n            y: false,\n            z: false,\n            zch2: false,\n            aw: false,\n            bw: false,\n            abw: false,\n            aby: false,\n            abcdBaseLoss: false,\n            wxyzBaseLoss: false,\n        };\n    }\n    let mfs = [];\n    // need to allow 0-9 to deal with neutral loss\n    let mfparts = mf\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let fiveTerm = '';\n    let threeTerm = '';\n    if (mfparts[0].startsWith('(')) {\n        fiveTerm += mfparts[0];\n        mfparts = mfparts.splice(1);\n    }\n    if (mfparts.at(-1).includes('(')) {\n        threeTerm += mfparts.at(-1).replace(/^[^()]*/, '');\n        mfparts[mfparts.length - 1] = mfparts.at(-1).replace(/\\(.*/, '');\n    }\n    for (let ter5 = 1; ter5 < mfparts.length; ter5++) {\n        fiveTerm += mfparts[ter5 - 1];\n        threeTerm = mfparts[mfparts.length - ter5] + threeTerm;\n        (0, addFiveTerm_1.addFiveTerm)(mfs, fiveTerm, ter5, options);\n        (0, addFiveTermBaseLoss_1.addFiveTermBaseLoss)(mfs, fiveTerm, ter5, options);\n        (0, addThreeTerm_1.addThreeTerm)(mfs, threeTerm, ter5, options);\n        (0, addThreeTermBaseLoss_1.addThreeTermBaseLoss)(mfs, threeTerm, ter5, options);\n    }\n    for (let i = 1; i < mfparts.length - 1; i++) {\n        let internal = '';\n        for (let j = i; j < mfparts.length - 1; j++) {\n            internal += mfparts[j];\n            if (j > i) {\n                (0, addInternalTerm_1.addInternalTerm)(mfs, internal, mfparts.length - i, j + 1, options);\n            }\n        }\n    }\n    return mfs;\n}\n//# sourceMappingURL=generateFragments.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromNucleicSequence = fromNucleicSequence;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst nucleotide_1 = require(\"nucleotide\");\n/**\n * Add a database starting from a peptidic sequence\n *\n * @param {string} [sequencesString] Sequence as a string of 1 letter or 3 letters code. Could also be a correct molecular formula respecting uppercase, lowercase\n * @param {object} [options={}]\n * @param {boolean} [options.estimate=false] - estimate the number of MF without filters\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {number} [options.limit=100000]\n * @param {string} [options.ionizations='']\n * @param {object} [options.info={}]\n * @param {string} [options.info.kind] - rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.info.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.info.circular=false]\n * @param {array}   [options.mfsArray=[]]\n * @param {object}  [options.fragmentation={}] Object defining options for fragmentation\n * @param {boolean} [options.fragmentation.a=false] If true allow fragments of type 'a'\n * @param {boolean} [options.fragmentation.ab=false] If true allow fragments of type 'a' minus base\n * @param {boolean} [options.fragmentation.b=false] If true allow fragments of type 'b'\n * @param {boolean} [options.fragmentation.c=false] If true allow fragments of type 'c'\n * @param {boolean} [options.fragmentation.d=false] If true allow fragments of type 'd'\n * @param {boolean} [options.fragmentation.dh2o=false] If true allow fragments of type 'd' with water loss\n * @param {boolean} [options.fragmentation.w=false] If true allow fragments of type 'w'\n * @param {boolean} [options.fragmentation.x=false] If true allow fragments of type 'x'\n * @param {boolean} [options.fragmentation.y=false] If true allow fragments of type 'y'\n * @param {boolean} [options.fragmentation.z=false] If true allow fragments of type 'z'\n * @param {boolean} [options.baseLoss=false] If true allow base loss at all the positions\n *\n * @param {object} [options.filter={}] Object defining options for molecular formula filter\n * @param {number} [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number} [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number} [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number} [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number} [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number} [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number} [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number} [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object} [options.filter.unsaturation={}]\n * @param {number} [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number} [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @returns {Promise}\n */\nasync function fromNucleicSequence(sequencesString, options = {}) {\n    const { mfsArray = [], fragmentation = {}, filter = {}, ionizations = '', info = {}, estimate = false, limit = 100000, onStep, } = options;\n    let sequences = (0, nucleotide_1.sequenceToMF)(sequencesString, info).split('.');\n    let fragmentsArray = sequences.slice();\n    // calculate fragmentation\n    for (let i = 0; i < sequences.length; i++) {\n        let sequence = sequences[i];\n        let fragments = (0, nucleotide_1.generateFragments)(sequence, fragmentation);\n        if (i === 1) {\n            // complementary sequence\n            fragments = fragments.map((fragment) => fragment.replaceAll('$', '$cmp-'));\n        }\n        fragmentsArray = fragmentsArray.concat(fragments);\n        if (fragmentation.baseLoss) {\n            fragmentsArray = fragmentsArray.concat((0, nucleotide_1.baseLoss)(sequence));\n        }\n    }\n    mfsArray.push(fragmentsArray);\n    let combined = await (0, mf_generator_1.generateMFs)(mfsArray, {\n        ionizations,\n        filter,\n        uniqueMFs: false,\n        estimate,\n        onStep,\n        limit,\n    });\n    if (Array.isArray(combined)) {\n        // not an estimation\n        for (const result of combined) {\n            result.sequence = (0, chemical_groups_1.groupsToSequence)(result.parts.filter(Boolean).join(' '));\n        }\n    }\n    return combined;\n}\n//# sourceMappingURL=fromNucleicSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aminoAcids = void 0;\n// SOURCE: https://en.wikipedia.org/wiki/Amino_acid\n// Link for UTF8 code for modified: https://codepoints.net/search?sc=Grek\nexports.aminoAcids = [\n    // Standard amino acids\n    {\n        name: 'Alanine',\n        aa3: 'Ala',\n        aa1: 'A',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.33,\n        pKaN: 9.71,\n    },\n    {\n        name: 'Arginine',\n        aa3: 'Arg',\n        aa1: 'R',\n        sc: {\n            type: 'positive',\n            pKa: 12.1,\n        },\n        pKaC: 2.03,\n        pKaN: 9,\n    },\n    {\n        name: 'Asparagine',\n        aa3: 'Asn',\n        aa1: 'N',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.13,\n        pKaN: 9.05,\n    },\n    {\n        name: 'Aspartic acid',\n        aa3: 'Asp',\n        aa1: 'D',\n        sc: {\n            type: 'negative',\n            pKa: 3.71,\n        },\n        pKaC: 1.95,\n        pKaN: 9.66,\n    },\n    {\n        name: 'Cysteine',\n        aa3: 'Cys',\n        aa1: 'C',\n        sc: {\n            type: 'special',\n            pKa: 8.14,\n        },\n        pKaC: 1.91,\n        pKaN: 10.28,\n    },\n    {\n        name: 'Glutamic acid',\n        aa3: 'Glu',\n        aa1: 'E',\n        sc: {\n            type: 'negative',\n            pKa: 4.15,\n        },\n        pKaC: 2.16,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Glutamine',\n        aa3: 'Gln',\n        aa1: 'Q',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.18,\n        pKaN: 9,\n    },\n    {\n        name: 'Glycine',\n        aa3: 'Gly',\n        aa1: 'G',\n        sc: {\n            type: 'special',\n        },\n        pKaC: 2.34,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Histidine',\n        aa3: 'His',\n        aa1: 'H',\n        sc: {\n            type: 'positive',\n            pKa: 6.04,\n        },\n        pKaC: 1.7,\n        pKaN: 9.09,\n    },\n    {\n        name: 'Isoleucine',\n        aa3: 'Ile',\n        aa1: 'I',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.26,\n        pKaN: 9.6,\n    },\n    {\n        name: 'Leucine',\n        aa3: 'Leu',\n        aa1: 'L',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.32,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Lysine',\n        aa3: 'Lys',\n        aa1: 'K',\n        sc: {\n            type: 'positive',\n            pKa: 10.67,\n        },\n        pKaC: 2.15,\n        pKaN: 9.16,\n    },\n    {\n        name: 'Methionine',\n        aa3: 'Met',\n        aa1: 'M',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.16,\n        pKaN: 9.08,\n    },\n    {\n        name: 'Phenylalanine',\n        aa3: 'Phe',\n        aa1: 'F',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.18,\n        pKaN: 9.09,\n    },\n    {\n        name: 'Proline',\n        aa3: 'Pro',\n        aa1: 'P',\n        sc: {\n            type: 'special',\n        },\n        pKaC: 1.95,\n        pKaN: 10.47,\n    },\n    {\n        name: 'Serine',\n        aa3: 'Ser',\n        aa1: 'S',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.13,\n        pKaN: 9.05,\n    },\n    {\n        name: 'Threonine',\n        aa3: 'Thr',\n        aa1: 'T',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.2,\n        pKaN: 8.96,\n    },\n    {\n        name: 'Tryptophan',\n        aa3: 'Trp',\n        aa1: 'W',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.38,\n        pKaN: 9.34,\n    },\n    {\n        name: 'Tyrosine',\n        aa3: 'Tyr',\n        aa1: 'Y',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.24,\n        pKaN: 9.04,\n    },\n    {\n        name: 'Valine',\n        aa3: 'Val',\n        aa1: 'V',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.27,\n        pKaN: 9.52,\n    },\n    // Additional\n    {\n        name: 'Selenocysteine',\n        aa3: 'Sec',\n        aa1: 'U',\n    },\n    {\n        name: 'Pyrrolysine',\n        aa3: 'Pyl',\n        aa1: 'O',\n    },\n    // Ambiguous\n    {\n        name: 'Asparagine or aspartic acid',\n        aa3: 'Asx',\n        aa1: 'B',\n    },\n    {\n        name: 'Glutamine or glutamic acid',\n        aa3: 'Glx',\n        aa1: 'Z',\n    },\n    {\n        name: 'Leucine or isoleucine',\n        aa3: 'Xle',\n        aa1: 'J',\n    },\n    {\n        name: 'Unspecified or unknown',\n        aa3: 'Xaa',\n        aa1: 'X',\n    },\n];\n//# sourceMappingURL=aminoAcids.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.calculateCharge = calculateCharge;\nexports.calculateIEP = calculateIEP;\nexports.calculateChart = calculateChart;\nexports.getColor = getColor;\nconst aminoAcids_1 = require(\"./aminoAcids\");\n// we will convert the data to an object to be much faster\nlet aaObject = {};\nfor (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n    aaObject[aminoAcids_1.aminoAcids[i].aa3] = aminoAcids_1.aminoAcids[i];\n}\nfunction calculateCharge(aas, pH = 7) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let charge = calculateForPh(combined, pH);\n    return Math.round(charge * 1000) / 1000;\n}\n// this methods required an array of aas\nfunction calculateIEP(aas) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let first = 0;\n    let last = 14;\n    let current = 14;\n    let previous = 0;\n    let currentCharge;\n    while (Math.abs(current - previous) > 0.0001) {\n        previous = current;\n        current = (last + first) / 2;\n        currentCharge = calculateForPh(combined, current);\n        if (currentCharge > 0) {\n            first = current;\n        }\n        else if (currentCharge < 0) {\n            last = current;\n        }\n        else {\n            previous = current;\n        }\n    }\n    return Math.round(current * 1000) / 1000;\n}\nfunction calculateChart(aas) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let y = [];\n    let x = [];\n    let yAbs = [];\n    for (let i = 0; i <= 14; i = i + 0.01) {\n        let charge = calculateForPh(combined, i);\n        x.push(i);\n        y.push(charge);\n        yAbs.push(Math.abs(charge));\n    }\n    combined.x = x;\n    combined.y = y;\n    combined.yAbs = yAbs;\n    return combined;\n}\nfunction calculateForPh(combined, pH) {\n    let total = 0;\n    total += 1 / (1 + 10 ** (pH - combined.first));\n    total += -1 / (1 + 10 ** (combined.last - pH));\n    for (let key in combined.acid) {\n        total += -combined.acid[key] / (1 + 10 ** (aaObject[key].sc.pKa - pH));\n    }\n    for (let key in combined.basic) {\n        total += combined.basic[key] / (1 + 10 ** (pH - aaObject[key].sc.pKa));\n    }\n    return total;\n}\n// we will combine the amino acids\nfunction combine(aas) {\n    let combined = {};\n    if (aaObject[aas[0]]) {\n        combined.first = aaObject[aas[0]].pKaN;\n    }\n    else {\n        return;\n    }\n    if (aaObject[aas.at(-1)]) {\n        combined.last = aaObject[aas.at(-1)].pKaC;\n    }\n    else {\n        return;\n    }\n    combined.basic = {};\n    combined.acid = {};\n    for (let i = 0; i < aas.length; i++) {\n        let currentAA = aas[i];\n        if (!aaObject[currentAA])\n            return;\n        if (aaObject[currentAA].sc && aaObject[currentAA].sc.type) {\n            if (aaObject[currentAA].sc.type === 'positive') {\n                if (!combined.basic[currentAA]) {\n                    combined.basic[currentAA] = 0;\n                }\n                combined.basic[currentAA]++;\n            }\n            else if (aaObject[currentAA].sc.type === 'negative') {\n                if (!combined.acid[currentAA]) {\n                    combined.acid[currentAA] = 0;\n                }\n                combined.acid[currentAA]++;\n            }\n        }\n    }\n    return combined;\n}\n/*\n We can generate a color based on iep\n 0 -> 7 means that at pH 7 it is charged negatively (blue)\n 7 -> 14 means that at pH7 it is charged positively (red)\n */\nfunction getColor(iep) {\n    if (iep < 7) {\n        if (iep < 3)\n            iep = 3;\n        let white = Math.round(255 - (7 - iep) * (200 / 4));\n        return `rgb(${white},${white},255)`;\n    }\n    else if (iep > 7) {\n        if (iep > 11)\n            iep = 11;\n        let white = Math.round(255 - (iep - 7) * (200 / 4));\n        return `rgb(255,${white},${white})`;\n    }\n    return 'rgb(255,255,255)';\n}\n//# sourceMappingURL=isoElectricPoint.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitPeptide = splitPeptide;\nfunction splitPeptide(sequence) {\n    let aas = sequence.replaceAll(/([A-Z])/g, ' $1').split(/ /);\n    let begin = 0;\n    while (aas[begin] === '' || aas[begin] === 'H') {\n        begin++;\n    }\n    let end = aas.length - 1;\n    while (aas[end] === 'O' || aas[end] === 'H') {\n        end--;\n    }\n    aas = aas.slice(begin, end + 1);\n    return aas;\n}\n//# sourceMappingURL=splitPeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.allowNeutralLoss = allowNeutralLoss;\n/**\n * Add neutral loss on natural amino acids\n * @param {*} mf\n * @returns\n */\nfunction allowNeutralLoss(mf) {\n    if (Array.isArray(mf)) {\n        for (let i = 0; i < mf.length; i++) {\n            mf[i] = allowOneNeutralLoss(mf[i]);\n        }\n        return mf;\n    }\n    else {\n        return allowOneNeutralLoss(mf);\n    }\n}\nfunction allowOneNeutralLoss(mf) {\n    mf = mf.replaceAll(/(Ser|Thr|Asp|Glu)(?!\\()/g, '$1(H-2O-1)0-1');\n    mf = mf.replaceAll(/(Arg|Lys|Asn|Gln)(?!\\()/g, '$1(N-1H-3)0-1');\n    return mf;\n}\n//# sourceMappingURL=allowNeutralLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAA = getAA;\nconst aminoAcids_1 = require(\"./aminoAcids\");\nfunction getAA(code) {\n    if (code.length === 1) {\n        for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n            if (aminoAcids_1.aminoAcids[i].aa1 === code) {\n                return aminoAcids_1.aminoAcids[i];\n            }\n        }\n    }\n    if (code.length === 3) {\n        for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n            if (aminoAcids_1.aminoAcids[i].aa3 === code) {\n                return aminoAcids_1.aminoAcids[i];\n            }\n        }\n    }\n}\n//# sourceMappingURL=getAA.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.chargePeptide = chargePeptide;\nconst getAA_1 = require(\"./getAA\");\n// SOURCE: https://en.wikipedia.org/wiki/Amino_acid\nfunction chargePeptide(mf, options = {}) {\n    if (Array.isArray(mf)) {\n        for (let i = 0; i < mf.length; i++) {\n            mf[i] = chargeOnePeptide(mf[i], options);\n        }\n        return mf;\n    }\n    else {\n        return chargeOnePeptide(mf, options);\n    }\n}\nfunction chargeOnePeptide(mf, options) {\n    const { pH = 0 } = options;\n    // we will allow to charge the peptide at a specific pH\n    // first amino acids (N-terminal)\n    if (mf.match(/^H[A-Z][a-z]{2}/)) {\n        let firstAA = mf.replace(/^H([A-Z][a-z]{2}).*/, '$1');\n        if ((0, getAA_1.getAA)(firstAA) && pH < (0, getAA_1.getAA)(firstAA).pKaN) {\n            mf = mf.replace(/^H([^+])/, 'H+H$1');\n        }\n    }\n    // last amino acids (C-terminal)\n    if (mf.match(/[A-Z][a-z]{2}OH$/)) {\n        let lastAA = mf.replace(/.*([A-Z][a-z]{2})OH$/, '$1');\n        if ((0, getAA_1.getAA)(lastAA) && pH > (0, getAA_1.getAA)(lastAA).pKaC) {\n            mf = mf.replace(/OH$/, 'O-');\n        }\n    }\n    // basic AA\n    if (pH < (0, getAA_1.getAA)('Arg').sc.pKa)\n        mf = mf.replaceAll(/(Arg)(?!\\()/g, '$1(H+)');\n    if (pH < (0, getAA_1.getAA)('His').sc.pKa)\n        mf = mf.replaceAll(/(His)(?!\\()/g, '$1(H+)');\n    if (pH < (0, getAA_1.getAA)('Lys').sc.pKa)\n        mf = mf.replaceAll(/(Lys)(?!\\()/g, '$1(H+)');\n    // acid AA\n    if (pH > (0, getAA_1.getAA)('Asp').sc.pKa)\n        mf = mf.replaceAll(/(Asp)(?!\\()/g, '$1(H-1-)');\n    if (pH > (0, getAA_1.getAA)('Glu').sc.pKa)\n        mf = mf.replaceAll(/(Glu)(?!\\()/g, '$1(H-1-)');\n    if (pH > (0, getAA_1.getAA)('Cys').sc.pKa)\n        mf = mf.replaceAll(/(Cys)(?!\\()/g, '$1(H-1-)');\n    return mf;\n}\n//# sourceMappingURL=chargePeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceToMF = sequenceToMF;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst aminoAcids_1 = require(\"./aminoAcids\");\nfunction sequenceToMF(mf) {\n    if (mf === '')\n        return '';\n    mf = (0, mf_utilities_1.ensureUppercaseSequence)(mf);\n    // this function will check if it is a sequence of aa in 1 letter or 3 letters and convert them if it is the case\n    // it could be a multiline mf !\n    // if it is a multiline we could make some \"tricks\" ...\n    let newMF = mf;\n    // SEQRES   1 B  256  MET PRO VAL GLU ILE THR VAL LYS GLU LEU LEU GLU ALA\n    // SEQRES   2 B  256  GLY VAL HIS PHE GLY HIS GLU ARG LYS ARG TRP ASN PRO\n    // or\n    // MET PRO VAL GLU ILE THR VAL LYS GLU LEU LEU GLU ALA\n    // GLY VAL HIS PHE GLY HIS GLU ARG LYS ARG TRP ASN PRO\n    if (mf.search(/(?:[A-Z]{3} ){2}[A-Z]{3}/) > -1) {\n        // this is a PDB !\n        let tmpmf = mf.replaceAll(/[\\n\\r]+/g, ' ');\n        tmpmf = tmpmf.replaceAll(/(SEQRES|\\d+| [A-Z] | [\\dA-Z]{4-50})/g, '');\n        // we need to correct the uppercase / lowercase\n        let parts = tmpmf.split(' ');\n        newMF = 'H';\n        for (let i = 0; i < parts.length; i++) {\n            newMF += parts[i].slice(0, 1) + parts[i].slice(1).toLowerCase();\n        }\n        newMF += 'OH';\n    }\n    else if (mf.includes('(') && isOneLetterCode(mf)) {\n        // we expect one-letter code with modification\n        newMF = '';\n        let nTerminal = 'H';\n        let cTerminal = 'OH';\n        let parenthesisCounter = 0;\n        for (let i = 0; i < mf.length; i++) {\n            let currentSymbol = mf[i];\n            if (currentSymbol === '(' ||\n                currentSymbol === ')' ||\n                parenthesisCounter > 0) {\n                if (currentSymbol === '(') {\n                    parenthesisCounter++;\n                    if (i === 0)\n                        nTerminal = '';\n                }\n                if (currentSymbol === ')') {\n                    parenthesisCounter--;\n                    if (i === mf.length - 1)\n                        cTerminal = '';\n                }\n                newMF += currentSymbol;\n                continue;\n            }\n            newMF += convertAA1To3(currentSymbol);\n        }\n        newMF = nTerminal + newMF + cTerminal;\n    }\n    else if (mf.search(/[A-Za-z][\\da-z]/) === -1) {\n        // UNIPROT\n        //   370        380        390        400        410        420\n        //GFKPNLRKTF VSGLFRESCG AHFYRGVDVK PFYIKKPVDN LFALMLILNR LRGWGVVGGM\n        //\n        //    430        440        450        460        470        480\n        //SDPRLYKVWV RLSSQVPSMF FGGTDLAADY YVVSPPTAVS VYTKTPYGRL LADTRTSGFR\n        // We remove all the number, all the spaces, etc\n        newMF = `H${convertAA1To3(newMF.replaceAll(/[^A-Z]/g, ''))}OH`;\n    }\n    return newMF;\n}\nfunction convertAA1To3(mf) {\n    let newmf = '';\n    for (let i = 0; i < mf.length; i++) {\n        newmf += aa1To3(mf.charAt(i));\n    }\n    return newmf;\n}\nfunction aa1To3(code) {\n    for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n        if (aminoAcids_1.aminoAcids[i].aa1 === code) {\n            return aminoAcids_1.aminoAcids[i].aa3;\n        }\n    }\n    throw new Error(`Invalid 1 letter code: ${code}`);\n}\n// mf can contain as well parenthesis. We need to check if it is not yet a correct molecular formula\nfunction isOneLetterCode(mf) {\n    let parenthesisLevel = 0;\n    for (let char of mf) {\n        if (parenthesisLevel === 0 && char.match(/[a-z]/))\n            return false;\n        if (char === '(')\n            parenthesisLevel++;\n        if (char === ')')\n            parenthesisLevel--;\n    }\n    return true;\n}\n//# sourceMappingURL=sequenceToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generatePeptideFragments = generatePeptideFragments;\nfunction generatePeptideFragments(mf, options) {\n    if (options === undefined) {\n        options = {\n            a: false,\n            b: true,\n            c: false,\n            x: false,\n            y: true,\n            z: false,\n            i: false,\n            ya: false,\n            yb: false,\n            yc: false,\n            zc: false,\n        };\n    }\n    options.maxInternal = options.maxInternal || Number.MAX_VALUE;\n    options.minInternal = options.minInternal || 0;\n    let mfs = [];\n    // need to allow 0-9 to deal with neutral loss\n    let mfparts = mf\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let nTerm = '';\n    let cTerm = '';\n    if (mfparts[0].startsWith('(')) {\n        nTerm += mfparts[0];\n        mfparts = mfparts.splice(1);\n    }\n    if (mfparts.at(-1).includes('(')) {\n        cTerm += mfparts.at(-1).replace(/^[^()]*/, '');\n        mfparts[mfparts.length - 1] = mfparts.at(-1).replace(/\\(.*/, '');\n    }\n    for (let i = 1; i < mfparts.length; i++) {\n        nTerm += mfparts[i - 1];\n        cTerm = mfparts[mfparts.length - i] + cTerm;\n        addNTerm(mfs, nTerm, i, options);\n        addCTerm(mfs, cTerm, i, options);\n        if (options.i)\n            mfs.push(`${mfparts[i]}HC-1O-1(+1)$i:${mfparts[i]}`);\n        if (options.ya || options.yb || options.yc || options.zc) {\n            // we have double fragmentations\n            for (let j = i + 1; j < Math.min(mfparts.length, options.maxInternal + i + 1); j++) {\n                let iTerm = '';\n                if (j - i >= options.minInternal) {\n                    for (let k = i; k < j; k++) {\n                        iTerm += mfparts[k];\n                    }\n                    addITerm(mfs, iTerm, mfparts.length - i, j, options);\n                }\n            }\n        }\n    }\n    // todo does this make sense ??? I think we should remote those 3 lines\n    if (mfs.length === 0) {\n        mfs = mfs.concat([mf]);\n    }\n    return mfs;\n}\nfunction addNTerm(mfs, nTerm, i, options) {\n    if (options.a)\n        mfs.push(`${nTerm}C-1O-1(+1)$a${i}`);\n    if (options.b)\n        mfs.push(`${nTerm}(+1)$b${i}`);\n    if (options.c)\n        mfs.push(`${nTerm}NH3(+1)$c${i}`);\n}\nfunction addITerm(mfs, iTerm, i, j, options) {\n    if (options.ya)\n        mfs.push(`H${iTerm}C-1O-1(+1)$a${j}y${i}`);\n    if (options.yb)\n        mfs.push(`H${iTerm}(+1)$b${j}y${i}`);\n    if (options.yc)\n        mfs.push(`H${iTerm}NH3(+1)$c${j}y${i}`);\n    if (options.zc)\n        mfs.push(`N-1${iTerm}NH3(+1)$c${j}z${i}`);\n}\nfunction addCTerm(mfs, cTerm, i, options) {\n    if (options.x)\n        mfs.push(`CO(+1)${cTerm}$x${i}`);\n    if (options.y)\n        mfs.push(`H2(+1)${cTerm}$y${i}`);\n    if (options.z)\n        mfs.push(`N-1H-1(+1)${cTerm}$z${i}`);\n}\n//# sourceMappingURL=generatePeptideFragments.js.map","\"use strict\";\n/*\nIotuibs:\n* minMissed (default: 0)\n* maxMissed (default: 0)\n* minResidue: 0;\n* maxResidue: infinity\n* enzyme: chymotrypsin, trypsin, glucph4, glucph8, thermolysin, cyanogenbromide : Mandatory, no default value !\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.digestPeptide = digestPeptide;\nfunction digestPeptide(sequence, options = {}) {\n    sequence = sequence.replace(/^H([^a-z])/, '$1').replace(/OH$/, '');\n    options.enzyme = options.enzyme || 'trypsin';\n    if (options.minMissed === undefined)\n        options.minMissed = 0;\n    if (options.maxMissed === undefined)\n        options.maxMissed = 0;\n    if (options.minResidue === undefined)\n        options.minResidue = 0;\n    if (options.maxResidue === undefined)\n        options.maxResidue = Number.MAX_VALUE;\n    let regexp = getRegexp(options.enzyme);\n    let fragments = sequence.replace(regexp, '$1 ').split(/ /).filter(Boolean);\n    {\n        let from = 0;\n        for (let i = 0; i < fragments.length; i++) {\n            let nbResidue = fragments[i]\n                .replaceAll(/([A-Z][a-z]{2})/g, ' $1')\n                .split(/ /)\n                .filter(Boolean).length;\n            fragments[i] = {\n                sequence: fragments[i],\n                nbResidue,\n                from,\n                to: from + nbResidue - 1,\n            };\n            from += nbResidue;\n        }\n    }\n    let results = [];\n    for (let i = 0; i < fragments.length - options.minMissed; i++) {\n        for (let j = options.minMissed; j <= Math.min(options.maxMissed, fragments.length - i - 1); j++) {\n            let fragment = '';\n            let nbResidue = 0;\n            for (let k = i; k <= i + j; k++) {\n                fragment += fragments[k].sequence;\n                nbResidue += fragments[k].nbResidue;\n            }\n            let from = fragments[i].from + 1;\n            let to = fragments[i + j].to + 1;\n            if (fragment &&\n                nbResidue >= options.minResidue &&\n                nbResidue <= options.maxResidue) {\n                results.push(`H${fragment}OH$D${from}>${to}`);\n            }\n        }\n    }\n    return results;\n}\nfunction getRegexp(enzyme) {\n    switch (enzyme.toLowerCase().replaceAll(/[^\\da-z]/g, '')) {\n        case 'chymotrypsin':\n            return /(Phe|Tyr|Trp)(?!Pro)/g;\n        case 'trypsin':\n            return /(Lys|Arg)(?!Pro)/g;\n        case 'lysc':\n            return /(Lys)(?!Pro)/g;\n        case 'glucph4':\n            return /(Glu)(?!Pro|Glu)/g;\n        case 'glucph8':\n            return /(Asp|Glu)(?!Pro|Glu)/g;\n        case 'thermolysin': // N-term of  Leu, Phe, Val, Ile, Ala, Met\n            return /()(?=Ile|Leu|Val|Ala|Met|Phe)/g;\n        case 'cyanogenbromide':\n            return /(Met)/g;\n        case 'any':\n            return /()(?=[A-Z][a-z]{2})/g;\n        default:\n            throw new Error(`Digestion enzyme: ${enzyme} is unknown`);\n    }\n}\n//# sourceMappingURL=digestPeptide.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfo = getInfo;\nexports.calculateIEP = calculateIEP;\nexports.calculateIEPChart = calculateIEPChart;\nexports.getColorForIEP = getColorForIEP;\nexports.calculateCharge = calculateCharge;\nconst aminoAcids_1 = require(\"./aminoAcids\");\nconst IEP = __importStar(require(\"./isoElectricPoint\"));\nconst splitPeptide_js_1 = require(\"./splitPeptide.js\");\n__exportStar(require(\"./allowNeutralLoss.js\"), exports);\n__exportStar(require(\"./chargePeptide.js\"), exports);\n__exportStar(require(\"./sequenceToMF.js\"), exports);\n__exportStar(require(\"./generatePeptideFragments.js\"), exports);\n__exportStar(require(\"./digestPeptide.js\"), exports);\n__exportStar(require(\"./splitPeptide.js\"), exports);\nfunction getInfo() {\n    return aminoAcids_1.aminoAcids;\n}\n// sequence should be in the \"right\" format like HAlaGlyProOH\nfunction calculateIEP(sequence) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    let result = IEP.calculateIEP(aas);\n    return result;\n}\nfunction calculateIEPChart(sequence) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    let result = IEP.calculateChart(aas);\n    return result;\n}\nfunction getColorForIEP(iep) {\n    return IEP.getColor(iep);\n}\nfunction calculateCharge(sequence, ph) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    return IEP.calculateCharge(aas, ph);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentPeptide = fragmentPeptide;\nconst peptide_1 = require(\"peptide\");\nfunction fragmentPeptide(sequence, options = {}) {\n    const { digestion = {}, protonation, fragmentation, protonationPH } = options;\n    sequence = (0, peptide_1.sequenceToMF)(sequence);\n    let fragmentsArray = [sequence];\n    // do we also have some digest fragments ?\n    if (digestion.enzyme) {\n        let digests = (0, peptide_1.digestPeptide)(sequence, digestion);\n        if (options.protonation) {\n            digests = (0, peptide_1.chargePeptide)(digests, {\n                pH: options.protonationPH,\n            });\n        }\n        fragmentsArray = fragmentsArray.concat(digests);\n    }\n    // allow neutral loss\n    if (options.allowNeutralLoss) {\n        sequence = (0, peptide_1.allowNeutralLoss)(sequence);\n    }\n    // apply protonation\n    if (protonation) {\n        sequence = (0, peptide_1.chargePeptide)(sequence, { pH: protonationPH });\n    }\n    // calculate fragmentation\n    let fragments = (0, peptide_1.generatePeptideFragments)(sequence, fragmentation);\n    fragmentsArray = fragmentsArray.concat(fragments);\n    return fragmentsArray;\n}\n//# sourceMappingURL=fragmentPeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromPeptidicSequence = fromPeptidicSequence;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst fragmentPeptide_1 = require(\"./util/fragmentPeptide\");\n/**\n * Add a database starting from a peptidic sequence\n *\n * @param {string}         [sequences] Sequence as a string of 1 letter or 3 letters code. Could also be a correct molecular formula respecting uppercase, lowercase. It can be comma separated if you have many peptide sequences\n * @param {object}         [options={}]\n * @param {boolean}        [options.estimate=false] - estimate the number of MF without filters\n * @param {string}         [options.ionizations='']\n * @param {function}       [options.onStep] - Callback to do after each step\n * @param {array}          [options.mfsArray=[]]\n * @param {boolean}        [options.protonation=false]\n * @param {number}         [options.protonationPH=7]\n * @param {boolean}        [options.allowNeutralLoss=false]\n * @param {number}         [options.limit=100000]\n *\n * @param {object}         [options.digestion={}] Object defining options for digestion\n * @param {number}         [options.digestion.minMissed=0] Minimal number of allowed missed cleavage\n * @param {number}         [options.digestion.maxMissed=0] Maximal number of allowed missed cleavage\n * @param {number}         [options.digestion.minResidue=0] Minimal number of residues\n * @param {number}         [options.digestion.maxResidue=+Infinity] Maximal number of residues\n * @param {string}         [options.digestion.enzyme] Mandatory field containing the name of the enzyme among: chymotrypsin, trypsin, glucph4, glucph8, thermolysin, cyanogenbromide\n *\n * @param {object}         [options.fragmentation={}] Object defining options for fragmentation\n * @param {boolean}        [options.fragmentation.a=false] If true allow fragments of type 'a'\n * @param {boolean}        [options.fragmentation.b=false] If true allow fragments of type 'b'\n * @param {boolean}        [options.fragmentation.c=false] If true allow fragments of type 'c'\n * @param {boolean}        [options.fragmentation.x=false] If true allow fragments of type 'x'\n * @param {boolean}        [options.fragmentation.y=false] If true allow fragments of type 'y'\n * @param {boolean}        [options.fragmentation.z=false] If true allow fragments of type 'z'\n * @param {boolean}        [options.fragmentation.ya=false] If true allow fragments of type 'ya'\n * @param {boolean}        [options.fragmentation.yb=false] If true allow fragments of type 'yb'\n * @param {boolean}        [options.fragmentation.yc=false] If true allow fragments of type 'yc'\n * @param {boolean}        [options.fragmentation.zc=false] If true allow fragments of type 'zc'\n * @param {number}         [options.fragmentation.minInternal=0] Minimal internal fragment length\n * @param {number}         [options.fragmentation.maxInternal=+Infinity] Maximal internal fragment length\n *\n * @param {object}         [options.filter={}] Object defining options for molecular formula filter\n * @param {number}         [options.filter.precision=1000] - The precision on the experimental mass\n * @param {number}         [options.filter.targetMass] - Target mass, allows to calculate error and filter results\n * @param {number[]}       [options.filter.targetMasses] - Target masses: SORTED array of numbers\n * @param {number[]}       [options.filter.targetIntensities] - Target intensities: SORTED array of numbers\n * @param {number}         [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number}         [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number}         [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number}         [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number}         [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}         [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}        [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}         [options.filter.unsaturation={}]\n * @param {number}         [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}         [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}        [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}        [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {function}       [options.filter.callback] - a function to filter the MF\n * @returns {Promise}\n */\nasync function fromPeptidicSequence(sequences, options = {}) {\n    const { digestion = {}, mfsArray: originalMFsArray = [], allowNeutralLoss = false, protonation = false, protonationPH = 7, fragmentation = {}, filter = {}, ionizations = '', limit = 100000, estimate = false, onStep, links = {}, } = options;\n    const hasLinked = sequences.includes('#');\n    const mfsArrayLinked = structuredClone(originalMFsArray);\n    const mfsArrayUnlinked = structuredClone(originalMFsArray);\n    const unlinked = [];\n    mfsArrayUnlinked.push(unlinked);\n    for (const sequence of sequences.split(/[,:]/)) {\n        let fragmentsArray = (0, fragmentPeptide_1.fragmentPeptide)(sequence, {\n            digestion,\n            protonation,\n            fragmentation,\n            protonationPH,\n            allowNeutralLoss,\n        });\n        mfsArrayLinked.push(fragmentsArray.filter((fragment) => fragment.includes('#')));\n        unlinked.push(...fragmentsArray.filter((fragment) => !fragment.includes('#')));\n    }\n    let combined = await (0, mf_generator_1.generateMFs)(mfsArrayUnlinked, {\n        ionizations,\n        filter,\n        estimate,\n        limit,\n        onStep,\n        links,\n    });\n    if (hasLinked) {\n        combined.push(...(await (0, mf_generator_1.generateMFs)(mfsArrayLinked, {\n            ionizations,\n            filter,\n            estimate,\n            limit,\n            onStep,\n            links,\n        })));\n    }\n    if (!estimate) {\n        for (const result of combined) {\n            result.sequence = (0, chemical_groups_1.groupsToSequence)(result.parts.filter(Boolean).join(' '));\n        }\n    }\n    return combined;\n}\n//# sourceMappingURL=fromPeptidicSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromRange = fromRange;\nconst mf_generator_1 = require(\"mf-generator\");\n/**\n * Generates a database 'generated' from an array of molecular formula\n * @param {string} rangesString - a string representing the range to search\n * @param {object} [options={}]\n * @param {boolean} [options.estimate=false] - estimate the number of MF without filters\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {string} [options.databaseName='generated']\n * @param {number} [options.limit=100000] - Maximum number of results\n * @param {boolean} [options.canonizeMF=true] - Canonize molecular formula\n * @param {boolean} [options.uniqueMFs=true] - Force canonization and make MF unique\n * @param {string} [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {object} [options.filter={}]\n * @param {number} [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number} [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number} [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number} [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number} [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number} [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number} [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number} [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}   [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object} [options.filter.unsaturation={}]\n * @param {number} [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number} [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {function} [options.filter.callback] - a function to filter the MF\n * @param {object} [options.filter.atoms] - object of atom:{min, max}\n *\n * @returns {Promise} - list of possible molecular formula\n *\n * @example\n * const {EMDB} = require('emdb');\n * let emdb = new EMDB();\n * // semi-columns separated for combination, comma for 'or'\n * emdb.fromRange('C1-10, H1-10; Cl0-1 Br0-1'); // create a database 'generated' combining all possibilies\n * console.log(emdb.get('generated').length); // 80\n */\nasync function fromRange(rangesString, options = {}) {\n    let ranges = rangesString.split(/ *[\\n\\r;] */);\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        if (range.includes(',')) {\n            ranges[i] = range.split(/ *, */);\n        }\n    }\n    return (0, mf_generator_1.generateMFs)(ranges, options);\n}\n//# sourceMappingURL=fromRange.js.map","/*!\n\nJSZip v3.10.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/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,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(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.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 i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||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)+c,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(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),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 e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,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(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.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(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;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 e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),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&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.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 n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./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(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,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(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"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}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),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 e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},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 e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){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},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,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 n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.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,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):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,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},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 e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);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 e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,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 e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);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 e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<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(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=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(e),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 n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.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===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];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 i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(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(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(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++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.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,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.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=c.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||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.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&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},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(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.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(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=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(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&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<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(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),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}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 c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.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 c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.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(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+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 c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.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(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,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 c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,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,e.next_in=o,e.input=h,e.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(e,t,r){\"use strict\";t.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(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=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)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[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(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<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(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,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(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[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){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.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){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.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 e;o--,u+=n[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 e;o--,u+=n[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 e;o--,u+=n[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<(d=r.length)&&(d=o),d&&(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,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[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!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.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 e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[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){e.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 e;o--,u+=n[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){e.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 e;o--,u+=n[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 e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.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){e.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){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.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 e;o--,u+=n[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 e;o--,u+=n[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){e.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 e;o--,u+=n[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 e;o--,u+=n[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 e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.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 e;o--,u+=n[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){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.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 e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(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(e,t,r){\"use strict\";var D=e(\"../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];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,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<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[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===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(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=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.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(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=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));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,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,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.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(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchArrayBuffer = fetchArrayBuffer;\nasync function fetchArrayBuffer(url) {\n    const result = await fetch(url);\n    return result.arrayBuffer();\n}\n//# sourceMappingURL=fetchArrayBuffer.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadCommercials = loadCommercials;\nconst jszip_1 = __importDefault(require(\"jszip\"));\nconst fetchArrayBuffer_1 = require(\"./util/fetchArrayBuffer\");\nconst loadingPromises = {};\nasync function loadCommercials(options = {}) {\n    const { url = 'https://couch.cheminfo.org/cheminfo-public/d2eb480198c80275a1d05dd3609414f9/upload/commercials.zip', } = options;\n    if (!loadingPromises[url]) {\n        loadingPromises[url] = (0, fetchArrayBuffer_1.fetchArrayBuffer)(url);\n    }\n    const buffer = await loadingPromises[url];\n    const jsZip = new jszip_1.default();\n    let zip = await jsZip.loadAsync(buffer);\n    let fileData = await zip.files['commercials.json'].async('string');\n    let data = JSON.parse(fileData);\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadCommercials.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchText = fetchText;\nasync function fetchText(url) {\n    const result = await fetch(url);\n    if (result.status !== 200) {\n        throw new Error(String(result.status));\n    }\n    return result.text();\n}\n//# sourceMappingURL=fetchText.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromGoogleSheet = mfFromGoogleSheet;\nconst mf_generator_1 = require(\"mf-generator\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst papaparse_1 = __importDefault(require(\"papaparse\"));\nconst fetchText_js_1 = require(\"./util/fetchText.js\");\nasync function mfFromGoogleSheet(url, options = {}) {\n    let { urlReferences } = options;\n    if (urlReferences) {\n        let results = await Promise.all([(0, fetchText_js_1.fetchText)(url), (0, fetchText_js_1.fetchText)(urlReferences)]);\n        return parse(results[0], results[1]);\n    }\n    else {\n        let result = await (0, fetchText_js_1.fetchText)(url);\n        return parse(result);\n    }\n}\nasync function parse(tsv, tsvReferences) {\n    let parsed = papaparse_1.default.parse(tsv, {\n        delimiter: '\\t',\n        header: true,\n    });\n    let fields = parsed.meta.fields;\n    let infoFields = fields.filter((a) => !['mf', 'modif', 'ESI', 'MALDI', 'positive', 'negative'].includes(a));\n    let formulas = parsed.data;\n    let references = {};\n    if (tsvReferences) {\n        let referencesArray = papaparse_1.default.parse(tsvReferences, {\n            delimiter: '\\t',\n            header: true,\n        }).data;\n        for (const r of referencesArray) {\n            references[r.label] = r;\n        }\n    }\n    let results = [];\n    for (let formula of formulas) {\n        if (tsvReferences) {\n            // we add references\n            let refs = formula.references.split(/[ ,]+/);\n            formula.references = [];\n            for (let ref of refs) {\n                formula.references.push(references[ref]);\n            }\n        }\n        // we need to calculate all the possibilities\n        try {\n            let mfs = await (0, mf_generator_1.generateMFs)([formula.mf], {\n                ionizations: formula.modif,\n            });\n            for (let mf of mfs) {\n                mf.info = {};\n                for (let infoField of infoFields) {\n                    mf.info[infoField] = formula[infoField];\n                }\n                if (!formula.ESI &&\n                    !formula.MALDI &&\n                    !formula.positive &&\n                    !formula.negative) {\n                    mf.filter = {\n                        ESI: true,\n                        MALDI: true,\n                        positive: true,\n                        negative: true,\n                    };\n                }\n                else {\n                    mf.filter = {\n                        ESI: formula.ESI === 'X',\n                        MALDI: formula.MALDI === 'X',\n                        positive: formula.positive === 'X',\n                        negative: formula.negative === 'X',\n                    };\n                }\n                mf.mf = new mf_parser_1.MF(mf.mf).toMF();\n                results.push(mf);\n            }\n        }\n        catch (error) {\n            // eslint-disable-next-line no-console\n            console.warn('Non parsable molecular formula:', formula.mf, formula.modif, error.toString());\n        }\n    }\n    results = results.filter((a) => {\n        return a.ms.em !== 0;\n    });\n    results.sort((a, b) => {\n        return a.ms.em - b.ms.em;\n    });\n    let uniqueResults = [results[0]];\n    for (let i = 1; i < results.length; i++) {\n        if (results[i - 1].ms.em !== results[i].ms.em) {\n            uniqueResults.push(results[i]);\n        }\n    }\n    return uniqueResults;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadGoogleSheet = loadGoogleSheet;\nconst mf_from_google_sheet_1 = require(\"mf-from-google-sheet\");\nasync function loadGoogleSheet(options = {}) {\n    let { refUUID = '1C_H9aiJyu9M9in7sHMOaz-d3Sv758rE72oLxEKH9ioA', uuid = '1LrJCl9-xSZKhGA9Y8nKVkYwB-mEOHBkTXg5qYXeFpZY', } = options;\n    if (options.uuid && !options.refUUID)\n        refUUID = '';\n    let url = `https://googledocs.cheminfo.org/spreadsheets/d/${uuid}/export?format=tsv`;\n    let refURL = refUUID\n        ? `https://googledocs.cheminfo.org/spreadsheets/d/${refUUID}/export?format=tsv`\n        : '';\n    let data = await (0, mf_from_google_sheet_1.mfFromGoogleSheet)(url, refURL);\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadGoogleSheet.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadKnapSack = loadKnapSack;\nconst jszip_1 = __importDefault(require(\"jszip\"));\nconst fetchArrayBuffer_1 = require(\"./util/fetchArrayBuffer\");\nconst loadingPromises = {};\nasync function loadKnapSack(options = {}) {\n    const { url = 'https://couch.cheminfo.org/cheminfo-public/d2eb480198c80275a1d05dd3609414f9/upload/ms.zip', } = options;\n    if (!loadingPromises[url]) {\n        loadingPromises[url] = (0, fetchArrayBuffer_1.fetchArrayBuffer)(url);\n    }\n    const buffer = await loadingPromises[url];\n    const jsZip = new jszip_1.default();\n    let zip = await jsZip.loadAsync(buffer);\n    let fileData = await zip.files['ms.json'].async('string');\n    let data = JSON.parse(fileData);\n    for (const d of data) {\n        d.url = `http://kanaya.naist.jp/knapsack_jsp/information.jsp?word=${d.id}`;\n    }\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadKnapSack.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.search = search;\nconst mf_matcher_1 = require(\"mf-matcher\");\n/**\n    Searching by various criteria. This mass will not take into account the mass\n    of the mass of the electron\n* @param {object}   [filter={}]\n* @param {number}   [filter.minMW=0] - Minimal molecular weight\n* @param {number}   [filter.maxMW=+Infinity] - Maximal molecular weight\n* @param {number}   [filter.minEM=0] - Minimal monoisotopic mass\n* @param {number}   [filter.maxEM=+Infinity] - Maximal monoisotopic mass\n* @param {number}   [filter.minCharge=-Infinity] - Minimal charge\n* @param {number}   [filter.maxCharge=+Infinity] - Maximal charge\n* @param {boolean}   [filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n* @param {object}   [filter.unsaturation={}]\n* @param {number}   [filter.unsaturation.min=-Infinity] - Minimal unsaturation\n* @param {number}   [filter.unsaturation.max=+Infinity] - Maximal unsaturation\n* @param {boolean}   [filter.unsaturation.onlyInteger=false] - Integer unsaturation\n* @param {boolean}   [filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n* @param {object}   [filter.atoms] - object of atom:{min, max}\n\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten=false] - should we return the array as a flat result\n*/\nfunction search(emdb, filter, options = {}) {\n    let { databases = Object.keys(emdb.databases), flatten = false } = options;\n    let results = {};\n    for (let database of databases) {\n        results[database] = emdb.databases[database].filter((entry) => (0, mf_matcher_1.generalMatcher)(entry, filter));\n    }\n    if (flatten) {\n        let flattenResults = [];\n        for (let database of databases) {\n            for (let entry of results[database]) {\n                entry.database = database;\n                flattenResults.push(entry);\n            }\n        }\n        return flattenResults;\n    }\n    else {\n        return results;\n    }\n}\n//# sourceMappingURL=search.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchMSEM = searchMSEM;\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/**\nSearch for an experimental monoisotopic mass\n* @param {number}   msem - The observed monoisotopic mass\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten=false] - should we return the array as a flat result\n* @param {string}   [options.ionizations] - list the allowed ionizations possibilities\n* @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n*/\nfunction searchMSEM(emdb, msem, options = {}) {\n    let filter = { ...options.filter, targetMass: msem };\n    let { databases = Object.keys(emdb.databases), flatten = false } = options;\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    let results = {};\n    for (let database of databases) {\n        results[database] = [];\n    }\n    for (let ionization of ionizations) {\n        filter.ionization = ionization;\n        for (let database of databases) {\n            for (let entry of emdb.databases[database]) {\n                let match = (0, mf_matcher_1.msemMatcher)(entry, filter);\n                if (match) {\n                    results[database].push({\n                        ...entry,\n                        ms: match.ms,\n                        ionization: match.ionization,\n                    });\n                }\n            }\n        }\n    }\n    if (flatten) {\n        let flattenResults = [];\n        for (let database of databases) {\n            for (let entry of results[database]) {\n                entry.database = database;\n                flattenResults.push(entry);\n            }\n        }\n        flattenResults.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n        return flattenResults;\n    }\n    else {\n        for (const k of Object.keys(results)) {\n            results[k].sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n        }\n        return results;\n    }\n}\n//# sourceMappingURL=searchMSEM.js.map","/**\n * Adds a baseline to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param baselineFct - Function that generates the baseline value for a given x.\n * @returns The modified spectrum data.\n */\nexport default function addBaseline(data, baselineFct) {\n    if (!baselineFct)\n        return data;\n    const xs = data.x;\n    const 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","import { xMaxValue, xAdd, createRandomArray } from 'ml-spectra-processing';\n/**\n * Adds noise to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param options - Configuration for noise generation.\n * @returns The modified spectrum data.\n */\nexport default function addNoise(data, options = {}) {\n    const { seed = 0, distribution = 'normal', percent = 1 } = options;\n    const range = (xMaxValue(data.y) * percent) / 100;\n    const noise = createRandomArray({\n        distribution,\n        seed,\n        mean: 0,\n        standardDeviation: range,\n        range,\n        length: data.x.length,\n    });\n    data.y = xAdd(data.y, noise);\n    return data;\n}\n//# sourceMappingURL=addNoise.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport addBaseline from \"./util/addBaseline.js\";\nimport addNoise from \"./util/addNoise.js\";\nexport class SpectrumGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    peakWidthFct;\n    maxPeakHeight;\n    shape;\n    data;\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct, shape = { kind: 'gaussian', fwhm: 5 }, } = 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 shapeGenerator = getShape1D(shape);\n        this.shape = shapeGenerator;\n        assertNumber(this.from, 'from');\n        assertNumber(this.to, 'to');\n        assertInteger(this.nbPoints, 'nbPoints');\n        if (this.to <= this.from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (this.peakWidthFct && 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     * @param options - Options for adding peaks.\n     * @returns The generator instance.\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     * A peak may be either defined as [x,y,fwhm,...] or as {x, y, shape}\n     * @param peak - The peak to add, defined as array or object.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 2) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            (peak.x === undefined || peak.y === undefined)) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        let xPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            intensity = peak.y;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape1D(shapeOptions)\n            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), this.shape);\n        const { width } = options;\n        let { widthLeft, widthRight } = options;\n        /*\n         if we don't force the fwhm we just take the one from the shape\n         however we have many way to force it:\n         - use [x,y,fwhm]\n         - define `width` that will be converted to fwhm\n         - define `widthLeft` and `widthRight` to define asymmetric peaks\n         - have a callback `peakWidthFct`\n         This should evolve in the future because we will not always have `fwhm`\n         */\n        const fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? shape.widthToFWHM(peakWidth)\n                : this.peakWidthFct\n                    ? this.peakWidthFct(xPosition)\n                    : width !== undefined\n                        ? width\n                        : shape.fwhm;\n        if (!widthLeft)\n            widthLeft = fwhm;\n        if (!widthRight)\n            widthRight = fwhm;\n        if (!widthLeft || !widthRight) {\n            throw new Error('Width left or right is undefined or zero');\n        }\n        const factor = options.factor === undefined ? 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        shape.fwhm = widthLeft;\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] +=\n                intensity * shape.fct(this.data.x[index] - xPosition);\n        }\n        // we calculate the right part of the gaussian\n        shape.fwhm = widthRight;\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] +=\n                intensity * 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     * @returns The generator instance.\n     */\n    addBaseline(baselineFct) {\n        addBaseline(this.data, baselineFct);\n        return this;\n    }\n    /**\n     * Add noise to the spectrum.\n     * @param options - Configuration for noise generation.\n     * @returns The generator instance.\n     */\n    addNoise(options) {\n        addNoise(this.data, options);\n        return this;\n    }\n    /**\n     * Get the generated spectrum.\n     * @param options - Options for getting the spectrum.\n     * @returns The generated spectrum data.\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            const minPeakHeight = this.maxPeakHeight * threshold;\n            const x = [];\n            const 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: Float64Array.from(x), y: Float64Array.from(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     * @returns The generator instance.\n     */\n    reset() {\n        if (this.nbPoints === 1) {\n            this.data.x[0] = (this.from + this.to) / 2;\n        }\n        else {\n            for (let i = 0; i < this.nbPoints; i++) {\n                this.data.x[i] = this.from + i * this.interval;\n            }\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 - Configuration for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum(peaks, options = {}) {\n    const { generator: generatorOptions, noise, baseline, threshold, peakOptions, } = options;\n    const generator = new SpectrumGenerator(generatorOptions);\n    generator.addPeaks(peaks, peakOptions);\n    if (baseline)\n        generator.addBaseline(baseline);\n    if (noise) {\n        generator.addNoise(noise);\n    }\n    return generator.getSpectrum({\n        threshold,\n    });\n}\n//# sourceMappingURL=SpectrumGenerator.js.map","import { getShape2D } from 'ml-peak-shape-generator';\nimport { matrixCreateEmpty, matrixMinMaxZ } from 'ml-spectra-processing';\nconst axis2D = ['x', 'y'];\nconst peakCoordinates = ['x', 'y', 'z'];\n/**\n * Converts a width value to full width at half maximum (FWHM).\n * @param shape - The 2D shape to use for conversion.\n * @param width - The width value to convert.\n * @returns The converted FWHM value as an XYNumber object.\n */\nconst convertWidthToFWHM = (shape, width) => {\n    const widthData = ensureXYNumber(width);\n    for (const key of axis2D) {\n        widthData[key] = shape.widthToFWHM(widthData[key]);\n    }\n    return widthData;\n};\nexport class Spectrum2DGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    data;\n    maxPeakHeight;\n    shape;\n    peakWidthFct;\n    constructor(options = {}) {\n        const { peakWidthFct = () => 5, shape = {\n            kind: 'gaussian',\n        }, } = options;\n        let { from = 0, to = 100, nbPoints = 1001 } = options;\n        from = ensureXYNumber(from);\n        to = ensureXYNumber(to);\n        nbPoints = ensureXYNumber(nbPoints);\n        for (const axis of axis2D) {\n            assertNumber(from[axis], `from-${axis}`);\n            assertNumber(to[axis], `to-${axis}`);\n            assertInteger(nbPoints[axis], `nbPoints-${axis}`);\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = calculeIntervals(from, to, nbPoints);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        const shapeGenerator = getShape2D(shape);\n        this.shape = shapeGenerator;\n        this.data = {\n            x: new Float64Array(nbPoints.x),\n            y: new Float64Array(nbPoints.y),\n            z: matrixCreateEmpty({\n                nbRows: this.nbPoints.y,\n                nbColumns: this.nbPoints.x,\n            }),\n        };\n        for (const axis of axis2D) {\n            if (this.to[axis] <= this.from[axis]) {\n                throw new RangeError('to option must be larger than from');\n            }\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    /**\n     * Adds multiple peaks to the 2D spectrum.\n     * @param peaks - Array of peaks or peak series to add.\n     * @param options - Options for adding peaks.\n     * @returns The generator instance.\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            if (!Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                !Array.isArray(peaks.z)) {\n                throw new TypeError('x, y, z must all be arrays');\n            }\n            const nbPeaks = peaks.x.length;\n            if (peaks.y.length !== nbPeaks || peaks.z.length !== nbPeaks) {\n                throw new Error('x, y, z should have the same length');\n            }\n            for (let i = 0; i < nbPeaks; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i], peaks.z[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Adds a single peak to the 2D spectrum.\n     * @param peak - Peak to add, can be array or object format.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 3) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            peakCoordinates.some((e) => peak[e] === undefined)) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        let xPosition;\n        let yPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, yPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            yPosition = peak.y;\n            intensity = peak.z;\n            peakFWHM = peak.fwhm;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        const position = { x: xPosition, y: yPosition };\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        const { width } = options;\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape2D(shapeOptions)\n            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), structuredClone(this.shape));\n        let { fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? convertWidthToFWHM(shape, peakWidth)\n                : width\n                    ? convertWidthToFWHM(shape, width)\n                    : this.peakWidthFct(xPosition, yPosition), } = options;\n        fwhm = ensureXYNumber(fwhm);\n        let factor = options.factor === undefined ? shape.getFactor() : options.factor;\n        factor = ensureXYNumber(factor);\n        const firstPoint = { x: 0, y: 0 };\n        const lastPoint = { x: 0, y: 0 };\n        for (const axis of axis2D) {\n            const first = position[axis] - (fwhm[axis] / 2) * factor[axis];\n            const last = position[axis] + (fwhm[axis] / 2) * factor[axis];\n            firstPoint[axis] = Math.max(0, Math.floor((first - this.from[axis]) / this.interval[axis]));\n            lastPoint[axis] = Math.min(this.nbPoints[axis], Math.ceil((last - this.from[axis]) / this.interval[axis]));\n        }\n        shape.fwhm = fwhm;\n        for (let xIndex = firstPoint.x; xIndex < lastPoint.x; xIndex++) {\n            for (let yIndex = firstPoint.y; yIndex < lastPoint.y; yIndex++) {\n                const value = intensity *\n                    shape.fct(this.data.x[xIndex] - position.x, this.data.y[yIndex] - position.y);\n                if (Math.abs(value) > 1e-6) {\n                    this.data.z[yIndex][xIndex] += value;\n                }\n            }\n        }\n        return this;\n    }\n    /**\n     * Gets the generated 2D spectrum data.\n     * @param options - Options for getting the spectrum.\n     * @returns The spectrum data object.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true } = options;\n        const minMaxZ = matrixMinMaxZ(this.data.z);\n        return {\n            minX: this.from.x,\n            maxX: this.to.x,\n            maxY: this.to.y,\n            minY: this.from.y,\n            minZ: minMaxZ.min,\n            maxZ: minMaxZ.max,\n            z: copy ? this.data.z.slice() : this.data.z,\n        };\n    }\n    /**\n     * Resets the generator to initial state.\n     * @returns The generator instance.\n     */\n    reset() {\n        const spectrum = this.data;\n        for (const axis of axis2D) {\n            for (let i = 0; i < this.nbPoints[axis]; i++) {\n                spectrum[axis][i] = this.from[axis] + i * this.interval[axis];\n            }\n        }\n        for (const row of spectrum.z) {\n            for (let j = 0; j < row.length; j++) {\n                row[j] = 0;\n            }\n        }\n        return this;\n    }\n}\n/**\n * Generates a 2D spectrum with the given peaks.\n * @param peaks - Peaks to include in the spectrum.\n * @param options - Options for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum2D(peaks, options = {}) {\n    const { generator: generatorOptions, peaks: addPeaksOptions } = options;\n    const generator = new Spectrum2DGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    return generator.getSpectrum();\n}\n/**\n * Ensures the input is an XYNumber object.\n * @param input - Number or XYNumber to process.\n * @returns An XYNumber object.\n */\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\n/**\n * Calculates the intervals between points for both x and y axes.\n * @param from - Starting point coordinates.\n * @param to - Ending point coordinates.\n * @param nbPoints - Number of points in each dimension.\n * @returns The calculated intervals as an XYNumber object.\n */\nfunction calculeIntervals(from, to, nbPoints) {\n    return {\n        x: (to.x - from.x) / (nbPoints.x - 1),\n        y: (to.y - from.y) / (nbPoints.y - 1),\n    };\n}\n/**\n * Validates if a value is an integer.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not an integer.\n */\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\n/**\n * Validates if a value is a finite number.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not a finite number.\n */\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n//# sourceMappingURL=Spectrum2DGenerator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.closestPointX = closestPointX;\nfunction closestPointX(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].x < target) {\n            low = middle;\n        }\n        else if (array[middle].x > target) {\n            high = middle;\n        }\n        else {\n            return array[middle];\n        }\n    }\n    if (low < array.length - 1) {\n        if (Math.abs(target - array[low].x) < Math.abs(array[low + 1].x - target)) {\n            return array[low];\n        }\n        else {\n            return array[low + 1];\n        }\n    }\n    else {\n        return array[low];\n    }\n}\n//# sourceMappingURL=closestPointX.js.map","\"use strict\";\n/**\n * Join x values if there are similar\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinX = joinX;\nfunction joinX(self, threshold = Number.EPSILON) {\n    // when we join we will use the center of mass\n    if (self.array.length === 0)\n        return [];\n    self.sortX();\n    let current = self.array[0];\n    let result = [current];\n    for (let i = 1; i < self.array.length; i++) {\n        const item = self.array[i];\n        if (item.x - current.x <= threshold) {\n            // weighted sum\n            current.x =\n                (item.y / (current.y + item.y)) * (item.x - current.x) + current.x;\n            current.y += item.y;\n        }\n        else {\n            current = { ...item };\n            result.push(current);\n        }\n    }\n    self.array = result;\n    self.ySorted = false;\n    return self;\n}\n//# sourceMappingURL=joinX.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.multiply = multiply;\nfunction multiply(a, b, options = {}) {\n    const { minY = 1e-8, maxLines = 5000, deltaX = 1e-2 } = options;\n    const result = new a.constructor();\n    a.sortY();\n    b.sortY();\n    for (let entryA of a.array) {\n        for (let entryB of b.array) {\n            let y = entryA.y * entryB.y;\n            if (y > minY) {\n                const composition = calculateComposition(entryA, entryB);\n                if (composition) {\n                    result.push({ x: entryA.x + entryB.x, y, composition });\n                }\n                else {\n                    result.push({ x: entryA.x + entryB.x, y });\n                }\n            }\n            if (result.length > maxLines * 2) {\n                result.joinX(deltaX);\n                result.topY(maxLines);\n            }\n        }\n    }\n    result.joinX(deltaX);\n    result.topY(maxLines);\n    a.move(result);\n    return a;\n}\nfunction calculateComposition(entryA, entryB) {\n    if (!entryA.composition || !entryB.composition)\n        return;\n    let toReturn = {};\n    const keys = [\n        ...new Set(Object.keys(entryA.composition).concat(Object.keys(entryB.composition))),\n    ];\n    for (let key of keys) {\n        toReturn[key] =\n            (entryA.composition[key] || 0) + (entryB.composition[key] || 0);\n    }\n    return toReturn;\n}\n//# sourceMappingURL=multiply.js.map","\"use strict\";\n// https://en.wikipedia.org/wiki/Exponentiation_by_squaring\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.power = power;\nfunction power(array, p, options = {}) {\n    if (p <= 0)\n        throw new Error('power must be larger than 0');\n    if (p === 1)\n        return array;\n    if (p === 2) {\n        return array.square();\n    }\n    p--;\n    let base = array.copy(); // linear time\n    while (p !== 0) {\n        if ((p & 1) !== 0) {\n            array.multiply(base, options); // executed <= log2(p) times\n        }\n        p >>= 1;\n        if (p !== 0)\n            base.square(options); // executed <= log2(p) times\n    }\n    return array;\n}\n//# sourceMappingURL=power.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Distribution = void 0;\nconst closestPointX_js_1 = require(\"./utils/closestPointX.js\");\nconst joinX_js_1 = require(\"./utils/joinX.js\");\nconst multiply_js_1 = require(\"./utils/multiply.js\");\nconst power_js_1 = require(\"./utils/power.js\");\n/**\n * Internal class to deal with isotopic distribution calculations\n */\nclass Distribution {\n    constructor(array = []) {\n        this.array = array;\n        this.cache = getEmptyCache();\n    }\n    emptyCache() {\n        if (this.cache.isEmpty)\n            return;\n        this.cache = getEmptyCache();\n    }\n    get length() {\n        return this.array.length;\n    }\n    get xs() {\n        return this.array.map((p) => p.x);\n    }\n    get ys() {\n        return this.array.map((p) => p.y);\n    }\n    get sumY() {\n        if (!Number.isNaN(this.cache.sumY))\n            return this.cache.sumY;\n        let sumY = 0;\n        for (let item of this.array) {\n            sumY += item.y;\n        }\n        this.cache.sumY = sumY;\n        this.cache.isEmpty = false;\n        return sumY;\n    }\n    get minX() {\n        if (!Number.isNaN(this.cache.minX))\n            return this.cache.minX;\n        let minX = Number.POSITIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.x < minX) {\n                minX = item.x;\n            }\n        }\n        this.cache.minX = minX;\n        this.cache.isEmpty = false;\n        return minX;\n    }\n    get maxX() {\n        if (!Number.isNaN(this.cache.maxX))\n            return this.cache.maxX;\n        let maxX = Number.NEGATIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.x > maxX) {\n                maxX = item.x;\n            }\n        }\n        this.cache.maxX = maxX;\n        this.cache.isEmpty = false;\n        return maxX;\n    }\n    get minY() {\n        if (!Number.isNaN(this.cache.minY))\n            return this.cache.minY;\n        let minY = Number.POSITIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.y < minY) {\n                minY = item.y;\n            }\n        }\n        this.cache.minY = minY;\n        this.cache.isEmpty = false;\n        return minY;\n    }\n    get maxY() {\n        if (!Number.isNaN(this.cache.maxY))\n            return this.cache.maxY;\n        let maxY = Number.NEGATIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.y > maxY) {\n                maxY = item.y;\n            }\n        }\n        this.cache.maxY = maxY;\n        this.cache.isEmpty = false;\n        return maxY;\n    }\n    multiplyY(value) {\n        for (const item of this.array) {\n            item.y *= value;\n        }\n    }\n    setArray(array) {\n        this.array = array;\n        this.emptyCache();\n    }\n    move(other) {\n        this.array = other.array;\n        this.emptyCache();\n    }\n    push(...points) {\n        this.array.push(...points);\n        this.emptyCache();\n    }\n    /**\n     * Sort by ASCENDING x values\n     * @returns {Distribution}\n     */\n    sortX() {\n        this.cache.ySorted = false;\n        if (this.cache.xSorted)\n            return this;\n        this.array.sort((a, b) => a.x - b.x);\n        this.cache.xSorted = true;\n        this.cache.isEmpty = false;\n        return this;\n    }\n    /**\n     * Sort by DESCENDING y values\n     * @returns {Distribution}\n     */\n    sortY() {\n        this.cache.xSorted = false;\n        if (this.cache.ySorted)\n            return this;\n        this.array.sort((a, b) => b.y - a.y);\n        this.cache.ySorted = true;\n        this.cache.isEmpty = false;\n        return this;\n    }\n    normalize() {\n        const sum = this.sumY;\n        for (let item of this.array) {\n            item.y /= sum;\n        }\n        return this;\n    }\n    /**\n     * Only keep a defined number of peaks\n     * @param {number} limit\n     * @returns\n     */\n    topY(limit) {\n        if (!limit)\n            return this;\n        if (this.array.length <= limit)\n            return this;\n        this.sortY();\n        this.array.splice(limit);\n        return this;\n    }\n    /**\n     * remove all the peaks under a defined relative threshold\n     * @param {number} [relativeValue=0] Should be between 0 and 1. 0 means no peak will be removed, 1 means all peaks will be removed\n     */\n    threshold(relativeValue = 0) {\n        if (!relativeValue)\n            return this;\n        const maxY = this.maxY;\n        const threshold = maxY * relativeValue;\n        this.array = this.array.filter((point) => point.y >= threshold);\n    }\n    square(options = {}) {\n        return this.multiply(this, options);\n    }\n    multiply(b, options) {\n        return (0, multiply_js_1.multiply)(this, b, options);\n    }\n    power(p, options) {\n        return (0, power_js_1.power)(this, p, options);\n    }\n    copy() {\n        let distCopy = new Distribution();\n        distCopy.cache = { ...this.cache };\n        distCopy.array = structuredClone(this.array);\n        return distCopy;\n    }\n    maxToOne() {\n        if (this.array.length === 0)\n            return this;\n        let currentMax = this.maxY;\n        for (let item of this.array) {\n            item.y /= currentMax;\n        }\n        return this;\n    }\n    joinX(threshold) {\n        return (0, joinX_js_1.joinX)(this, threshold);\n    }\n    append(distribution) {\n        for (let item of distribution.array) {\n            this.array.push(item);\n        }\n        this.emptyCache();\n    }\n    closestPointX(target) {\n        this.sortX();\n        return (0, closestPointX_js_1.closestPointX)(this.array, target);\n    }\n}\nexports.Distribution = Distribution;\nfunction getEmptyCache() {\n    return {\n        isEmpty: true,\n        xSorted: false,\n        ySorted: false,\n        minX: Number.NaN,\n        maxX: Number.NaN,\n        minY: Number.NaN,\n        maxY: Number.NaN,\n        sumY: Number.NaN,\n    };\n}\n//# sourceMappingURL=Distribution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDerivedCompositionInfo = getDerivedCompositionInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\n/**\n * Calcultes informations about the isotopic composition explaining a specific mass\n * @param {Record<string, number>} composition\n * @returns\n */\nfunction getDerivedCompositionInfo(composition) {\n    const shortComposition = {};\n    let label = '';\n    let shortLabel = '';\n    for (let key in composition) {\n        let isotopeLabel = '';\n        for (let i = 0; i < key.length; i++) {\n            if (mf_parser_1.superscript[key[i]]) {\n                isotopeLabel += mf_parser_1.superscript[key[i]];\n            }\n            else {\n                isotopeLabel += key[i];\n            }\n        }\n        if (composition[key] > 1) {\n            const number = String(composition[key]);\n            for (let i = 0; i < number.length; i++) {\n                isotopeLabel += mf_parser_1.subscript[number[i]];\n            }\n        }\n        label += isotopeLabel;\n        if (chemical_elements_1.stableIsotopesObject[key].mostAbundant)\n            continue;\n        shortLabel += isotopeLabel;\n        shortComposition[key] = composition[key];\n    }\n    return { label, shortComposition, shortLabel };\n}\n//# sourceMappingURL=getDerivedCompositionInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IsotopicDistribution = void 0;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst spectrum_generator_1 = require(\"spectrum-generator\");\nconst Distribution_1 = require(\"./Distribution\");\nconst getDerivedCompositionInfo_1 = require(\"./utils/getDerivedCompositionInfo\");\nconst MINIMAL_FWHM = 1e-8;\nconst MINIMAL_Y = 1e-8;\n/** @typedef {import('mf-parser').IsotopesInfo} IsotopesInfo */\n/** @typedef {import('mf-parser').MFInfo} MFInfo */\n/** @typedef {import('./IsotopicDistribution.types').XY} XY */\n/** @typedef {import('./IsotopicDistribution.types').IsotopicDistributionPart} IsotopicDistributionPart */\n/** @typedef {import('./IsotopicDistribution.types').IsotopicDistributionOptions} IsotopicDistributionOptions */\n/**\n * A class that allows to manage isotopic distribution\n */\nclass IsotopicDistribution {\n    /**\n     * Class that manages isotopic distribution\n     * @param {string|Array<any>} value - Molecular formula or an array of parts.\n     * @param {IsotopicDistributionOptions} [options]\n     */\n    constructor(value, options = {}) {\n        this.threshold = options.threshold;\n        this.limit = options.limit;\n        if (Array.isArray(value)) {\n            this.parts = structuredClone(value);\n            for (let part of this.parts) {\n                part.confidence = 0;\n                part.isotopesInfo = new mf_parser_1.MF(`${part.mf}(${part.ionization.mf})`).getIsotopesInfo();\n            }\n        }\n        else {\n            let mf = new mf_parser_1.MF(value, { ensureCase: options.ensureCase });\n            let mfInfo = mf.getInfo();\n            const ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n            /** @type {MFInfo} */\n            const parts = 'parts' in mfInfo ? mfInfo.parts : [mfInfo];\n            this.parts = [];\n            for (let partOriginal of parts) {\n                // we calculate information for each part\n                for (const ionization of ionizations) {\n                    let part = structuredClone(partOriginal);\n                    part.em = part.monoisotopicMass; // TODO: To remove !!! we change the name !?\n                    part.isotopesInfo = new mf_parser_1.MF(`${part.mf}(${ionization.mf})`).getIsotopesInfo();\n                    part.confidence = 0;\n                    let msInfo = (0, mf_utilities_1.getMsInfo)(part, {\n                        ionization,\n                    });\n                    part.ionization = msInfo.ionization;\n                    part.ms = msInfo.ms;\n                    this.parts.push(part);\n                }\n            }\n        }\n        this.cachedDistribution = undefined;\n        this.fwhm = options.fwhm === undefined ? 0.01 : options.fwhm;\n        // if fwhm is under 1e-8 there are some artifacts in the spectra\n        if (this.fwhm < MINIMAL_FWHM)\n            this.fwhm = MINIMAL_FWHM;\n        this.minY = options.minY === undefined ? MINIMAL_Y : options.minY;\n        this.maxLines = options.maxLines || 5000;\n        this.allowNeutral =\n            options.allowNeutral === undefined ? true : options.allowNeutral;\n    }\n    /**\n     * @returns {Array<IsotopicDistributionPart>}\n     */\n    getParts() {\n        return this.parts;\n    }\n    /**\n     * @return {Distribution} returns the total distribution (for all parts)\n     */\n    getDistribution() {\n        if (this.cachedDistribution)\n            return this.cachedDistribution;\n        let options = {\n            maxLines: this.maxLines,\n            minY: this.minY,\n            deltaX: this.fwhm,\n        };\n        let finalDistribution = new Distribution_1.Distribution();\n        this.confidence = 0;\n        // TODO need to cache each part without ionization\n        // in case of many ionization we don't need to recalculate everything !\n        for (let part of this.parts) {\n            let totalDistribution = new Distribution_1.Distribution([\n                {\n                    x: 0,\n                    y: 1,\n                    composition: this.fwhm === MINIMAL_FWHM ? {} : undefined, // should we calculate composition in isotopes of each peak\n                },\n            ]);\n            let charge = part.ms.charge;\n            let absoluteCharge = Math.abs(charge);\n            if (charge || this.allowNeutral) {\n                for (let isotope of part.isotopesInfo.isotopes) {\n                    if (isotope.number < 0)\n                        return { array: [] };\n                    if (isotope.number > 0) {\n                        const newDistribution = structuredClone(isotope.distribution);\n                        if (this.fwhm === MINIMAL_FWHM) {\n                            // add composition\n                            for (const entry of newDistribution) {\n                                entry.composition = { [Math.round(entry.x) + isotope.atom]: 1 };\n                            }\n                        }\n                        let distribution = new Distribution_1.Distribution(newDistribution);\n                        distribution.power(isotope.number, options);\n                        totalDistribution.multiply(distribution, options);\n                    }\n                }\n                this.confidence = 0;\n                for (const item of totalDistribution.array) {\n                    this.confidence += item.y;\n                }\n                // we finally deal with the charge\n                if (charge) {\n                    for (const e of totalDistribution.array) {\n                        e.x = (e.x - chemical_elements_1.ELECTRON_MASS * charge) / absoluteCharge;\n                    }\n                }\n                if (totalDistribution.array && totalDistribution.array.length > 0) {\n                    totalDistribution.sortX();\n                    part.fromX = totalDistribution.array[0].x;\n                    part.toX = totalDistribution.array.at(-1).x;\n                }\n                if (part?.ms.similarity?.factor) {\n                    totalDistribution.multiplyY(part.ms.similarity.factor);\n                }\n                else if (part.ms?.target?.intensity &&\n                    part.ms?.target?.intensity !== 1) {\n                    // intensity is the value of the monoisotopic mass !\n                    // need to find the intensity of the peak corresponding\n                    // to the monoisotopic mass\n                    if (part.ms.target.mass) {\n                        let target = totalDistribution.closestPointX(part.ms.target.mass);\n                        totalDistribution.multiplyY(part.ms.target.intensity / target.y);\n                    }\n                    else {\n                        totalDistribution.multiplyY(part.ms.target.intensity);\n                    }\n                }\n                else if (part?.intensity && part?.intensity !== 1) {\n                    totalDistribution.multiplyY(part.intensity);\n                }\n                part.isotopicDistribution = totalDistribution.array;\n                const absoluteChargeOrOne = absoluteCharge || 1;\n                for (let entry of totalDistribution.array) {\n                    if (!entry.composition)\n                        continue;\n                    const deltaNeutrons = Math.round(entry.x * absoluteChargeOrOne - part.monoisotopicMass) +\n                        0; // +0 to avoid -0\n                    Object.assign(entry, {\n                        ...(0, getDerivedCompositionInfo_1.getDerivedCompositionInfo)(entry.composition),\n                        deltaNeutrons,\n                    });\n                }\n                if (finalDistribution.array.length === 0) {\n                    finalDistribution = totalDistribution;\n                }\n                else {\n                    finalDistribution.append(totalDistribution);\n                }\n            }\n        }\n        if (finalDistribution)\n            finalDistribution.joinX(this.fwhm);\n        // if there is a threshold we will deal with it\n        // and we will correct the confidence\n        if (this.threshold || this.limit) {\n            const sumBefore = finalDistribution.sumY;\n            if (this.threshold)\n                finalDistribution.threshold(this.threshold);\n            if (this.limit) {\n                finalDistribution.topY(this.limit);\n                finalDistribution.sortX();\n            }\n            const sumAfter = finalDistribution.sumY;\n            this.confidence = (this.confidence * sumAfter) / sumBefore;\n        }\n        this.confidence /= this.parts.length;\n        this.cachedDistribution = finalDistribution;\n        return finalDistribution;\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter=', ']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getCSV(options) {\n        return this.getText({ ...options, delimiter: ', ' });\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter='\\t']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getTSV(options) {\n        return this.getText({ ...options, delimiter: '\\t' });\n    }\n    getTable(options = {}) {\n        const { maxValue, xLabel = 'x', yLabel = 'y' } = options;\n        let points = this.getDistribution().array;\n        if (points.length === 0)\n            return [];\n        let factor = 1;\n        if (maxValue) {\n            let maxY = this.getMaxY(points);\n            factor = maxValue / maxY;\n        }\n        return points.map((point) => {\n            let newPoint = { [xLabel]: point.x, [yLabel]: point.y * factor };\n            return newPoint;\n        });\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter='\\t']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getText(options = {}) {\n        const { delimiter = '\\t', numberXDecimals = 5, numberYDecimals = 3, } = options;\n        let points = this.getDistribution().array;\n        let csv = [];\n        for (let point of points) {\n            csv.push(`${point.x.toFixed(numberXDecimals)}${delimiter}${(point.y * 100).toFixed(numberYDecimals)}`);\n        }\n        return csv.join('\\n');\n    }\n    getMaxY(points) {\n        let maxY = points[0].y;\n        for (let point of points) {\n            if (point.y > maxY)\n                maxY = point.y;\n        }\n        return maxY;\n    }\n    getSumY(points) {\n        let sumY = 0;\n        for (let point of points) {\n            sumY += point.y;\n        }\n        return sumY;\n    }\n    /**\n     * Returns the isotopic distribution as an array of peaks\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {Array<{x:number,y:number}|{x:number,y:number,label:string,shortComposition:string,shortLabel:string,deltaNeutrons:number}>}\n     */\n    getPeaks(options = {}) {\n        const { maxValue = 100, sumValue } = options;\n        let peaks = this.getDistribution().array;\n        if (peaks.length === 0)\n            return [];\n        let factor = 1;\n        if (sumValue) {\n            let sumY = this.getSumY(peaks);\n            factor = sumY / sumValue;\n            if (factor !== 1) {\n                peaks = structuredClone(peaks);\n                for (const peak of peaks) {\n                    peak.y = peak.y / factor;\n                }\n            }\n        }\n        else if (maxValue) {\n            let maxY = this.getMaxY(peaks);\n            if (maxValue !== maxY) {\n                // we need to copy the array because we prefer no side effects\n                peaks = structuredClone(peaks);\n                for (const peak of peaks) {\n                    // we rescale the Y values by first dividing by maxY and then multiplying by maxValue in order to avoid approximation errors\n                    peak.y = (peak.y / maxY) * maxValue;\n                }\n            }\n        }\n        return peaks;\n    }\n    /**\n     * Returns the isotopic distirubtion\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {{x:number[],y:number[]}|{x:number[],y:number[],label:string[],shortComposition:string[],shortLabel:string[],deltaNeutrons:[]}}\n     */\n    getXY(options = {}) {\n        let peaks = this.getPeaks(options);\n        if (peaks.length === 0) {\n            return { x: [], y: [] };\n        }\n        const result = {\n            x: peaks.map((a) => a.x),\n            y: peaks.map((a) => a.y),\n        };\n        for (let key of Object.keys(peaks[0]).filter((k) => k !== 'x' && k !== 'y')) {\n            result[key] = peaks.map((a) => a[key]);\n        }\n        return result;\n    }\n    /**\n     * Returns the isotopic distirubtion\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {import('cheminfo-types').MeasurementXYVariables} an object containing at least the 2 properties: x:[] and y:[]\n     */\n    getVariables(options = {}) {\n        const xy = this.getXY(options);\n        return {\n            x: { data: xy.x, label: 'm/z', units: 'u' },\n            y: { data: xy.y, label: 'Relative intensity', units: '%' },\n        };\n    }\n    /**\n     * Returns the isotopic distribution as the sum of gaussian\n     * @param {object} [options={}]\n     * @param {number} [options.gaussianWidth=10] // how good should look the gaussian ? By default we take 10 times the fwhm as number of points\n     * @param {number} [options.threshold=0.00001] // minimal height to return point\n     * @param {number} [options.maxLength=1e6] // minimal height to return point\n     * @param {number} [options.maxValue] // rescale Y to reach maxValue\n     * @param {number} [options.from] // minimal x value, default to the first point - 2\n     * @param {number} [options.to] // maximal x value, default to the last point + 2\n     * @param {function} [options.peakWidthFct=(mz)=>(this.fwhm)]\n     * @return {XY} isotopic distribution as an object containing 2 properties: x:[] and y:[]\n     */\n    getGaussian(options = {}) {\n        const { peakWidthFct = () => this.fwhm, threshold = 0.00001, gaussianWidth = 10, maxValue, maxLength = 1e6, } = options;\n        let points = this.getTable({ maxValue });\n        if (points.length === 0)\n            return { x: [], y: [] };\n        const from = options.from || points[0].x - 2;\n        const to = options.to || points.at(-1).x + 2;\n        const nbPoints = Math.round(((to - from) * gaussianWidth) / this.fwhm + 1);\n        if (nbPoints > maxLength) {\n            throw new Error(`Number of points is over the maxLength: ${nbPoints}>${maxLength}`);\n        }\n        let gaussianOptions = {\n            from,\n            to,\n            nbPoints,\n            peakWidthFct,\n        };\n        let spectrumGenerator = new spectrum_generator_1.SpectrumGenerator(gaussianOptions);\n        for (let point of points) {\n            spectrumGenerator.addPeak([point.x, point.y]);\n        }\n        let spectrum = spectrumGenerator.getSpectrum({ threshold });\n        if (maxValue) {\n            spectrum.y = (0, ml_spectra_processing_1.xNormed)(spectrum.y, {\n                algorithm: 'max',\n                value: maxValue,\n                output: spectrum.y,\n            });\n        }\n        return spectrum;\n    }\n}\nexports.IsotopicDistribution = IsotopicDistribution;\n//# sourceMappingURL=IsotopicDistribution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchSimilarity = searchSimilarity;\nconst isotopic_distribution_1 = require(\"isotopic-distribution\");\nconst peaks_similarity_1 = require(\"peaks-similarity\");\n/**\nSearch for an experimental monoisotopic mass and calculate the similarity\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten] - should we return the array as a flat result\n* @param {function} [options.onStep] - Callback to do after each step\n* @param {string}   [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n* @param {object}   [options.minSimilarity=0.5] - min similarity value\n\n* @param {object}   [options.filter={}]\n* @param {boolean}  [options.filter.forceIonization=false] - If true ignore existing ionizations\n* @param {number}   [options.filter.msem] - Observed monoisotopic mass in mass spectrometer\n* @param {number}   [options.filter.precision=1000] - The precision on the experimental mass\n* @param {number}   [options.filter.minCharge=-Infinity] - Minimal charge\n* @param {number}   [options.filter.maxCharge=+Infinity] - Maximal charge\n* @param {boolean}  [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n* @param {object}   [options.filter.unsaturation={}]\n* @param {number}   [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n* @param {number}   [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n* @param {boolean}  [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n* @param {boolean}  [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n* @param {object}   [options.filter.atoms] - object of atom:{min, max}\n* @param {object}   [options.filter.callback] - a function to filter the MF\n* @param {object}   [options.similarity={}]\n* @param {number}   [options.similarity.widthBottom]\n* @param {number}   [options.similarity.widthTop]\n* @param {object}   [options.similarity.widthFunction] - function called with mass that should return an object width containing top and bottom\n* @param {object}   [options.similarity.zone={}]\n* @param {number}   [options.similarity.zone.low=-0.5] - window shift based on observed monoisotopic mass\n* @param {number}   [options.similarity.zone.high=2.5] - to value for the comparison window\n* @param {boolean}  [options.similarity.zone.auto=false] - if true, low / high is determined based on the isotopic distribution and the threshold\n* @param {string}   [options.similarity.common]\n* @param {number}   [options.similarity.threshold=0.001] - when calculating similarity we only use the isotopic distribution with peaks over this relative threshold\n* @param {number}   [options.similarity.limit] - We may define the maximum number of peaks to keep\n* @returns {Promise}\n*/\nasync function searchSimilarity(emdb, options = {}) {\n    const { similarity = {}, minSimilarity = 0.5, filter = {}, onStep } = options;\n    let width = {\n        bottom: similarity.widthBottom,\n        top: similarity.widthTop,\n    };\n    if (!emdb.experimentalSpectrum ||\n        emdb.experimentalSpectrum.data.x.length === 0) {\n        throw new Error('You need to add an experimental spectrum first using setMassSpectrum');\n    }\n    let experimentalData = emdb.experimentalSpectrum.data;\n    let sumY = emdb.experimentalSpectrum.sumY();\n    // the result of emdb query will be stored in a property 'ms'\n    let results = emdb.searchMSEM(filter.msem, options);\n    let flatEntries = [];\n    if (!options.flatten) {\n        for (let database of Object.keys(results)) {\n            for (let entry of results[database]) {\n                flatEntries.push(entry);\n            }\n        }\n    }\n    else {\n        flatEntries = results;\n    }\n    let { widthFunction, zone = {}, threshold = 0.001, limit } = similarity;\n    if (widthFunction && typeof widthFunction === 'string') {\n        // eslint-disable-next-line no-new-func\n        widthFunction = new Function('mass', widthFunction);\n        let checkTopBottom = widthFunction(123);\n        if (!checkTopBottom.bottom || !checkTopBottom.top) {\n            throw new Error('widthFunction should return an object with bottom and top properties');\n        }\n    }\n    const { low = -0.5, high = 2.5, auto } = zone;\n    // we need to calculate the similarity of the isotopic distribution\n    let similarityProcessor = new peaks_similarity_1.Comparator(similarity);\n    similarityProcessor.setPeaks1([experimentalData.x, experimentalData.y]);\n    for (let i = 0; i < flatEntries.length; i++) {\n        const entry = flatEntries[i];\n        if (onStep)\n            await onStep(i);\n        if (widthFunction) {\n            width = widthFunction(entry.ms.em);\n        }\n        let isotopicDistribution = new isotopic_distribution_1.IsotopicDistribution(entry.mf, {\n            allowNeutral: false,\n            ionizations: [entry.ionization],\n            fwhm: width.top / 2,\n            threshold,\n            limit,\n        });\n        let distribution = isotopicDistribution.getDistribution();\n        // we need to define the comparison zone that depends of the charge\n        let from, to;\n        if (auto) {\n            from = distribution.minX - 0.5;\n            to = distribution.maxX + 0.5;\n            similarityProcessor.setFromTo(from, to);\n        }\n        else {\n            from = entry.ms.em + low / Math.abs(entry.ms.charge);\n            to = entry.ms.em + high / Math.abs(entry.ms.charge);\n            similarityProcessor.setFromTo(from, to);\n        }\n        if (widthFunction) {\n            similarityProcessor.setTrapezoid(width.bottom, width.top);\n        }\n        similarityProcessor.setPeaks2([distribution.xs, distribution.ys]);\n        let result = similarityProcessor.getSimilarity();\n        result.extractInfo1.from = from;\n        result.extractInfo1.to = to;\n        if (result.similarity > minSimilarity) {\n            entry.ms.similarity = {\n                value: result.similarity,\n                experimental: result.extract1,\n                theoretical: result.extract2,\n                difference: result.diff,\n                experimentalInfo: result.extractInfo1,\n                thereoticalInfo: result.extractInfo2,\n                quantity: result.extractInfo1.sum / sumY,\n                factor: result.extractInfo1.max / result.extractInfo2.max, // by how much we should mulitply the extrat2 to reach the spectrum\n                width,\n            };\n        }\n    }\n    if (!options.flatten) {\n        for (let database of Object.keys(results)) {\n            results[database] = results[database]\n                .filter((entry) => entry.ms.similarity)\n                .toSorted((a, b) => b.ms.similarity.value - a.ms.similarity.value);\n            for (let entry of results[database]) {\n                flatEntries.push(entry);\n            }\n        }\n    }\n    else {\n        results = results\n            .filter((entry) => entry.ms.similarity)\n            .toSorted((a, b) => b.ms.similarity.value - a.ms.similarity.value);\n    }\n    return results;\n}\n//# sourceMappingURL=searchSimilarity.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import median from 'ml-array-median';\nimport {\n  BaseRegression,\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\n\nexport class TheilSenRegression extends BaseRegression {\n  /**\n   * Theil–Sen estimator\n   * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n   * @param {Array<number>|boolean} x\n   * @param {Array<number>|object} y\n   * @constructor\n   */\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // loads the model\n      this.slope = y.slope;\n      this.intercept = y.intercept;\n      this.coefficients = y.coefficients;\n    } else {\n      // creates the model\n      checkArrayLength(x, y);\n      theilSen(this, x, y);\n    }\n  }\n\n  toJSON() {\n    return {\n      name: 'TheilSenRegression',\n      slope: this.slope,\n      intercept: this.intercept,\n    };\n  }\n\n  _predict(input) {\n    return this.slope * input + this.intercept;\n  }\n\n  computeX(input) {\n    return (input - this.intercept) / this.slope;\n  }\n\n  toString(precision) {\n    let result = 'f(x) = ';\n    if (this.slope) {\n      let xFactor = maybeToPrecision(this.slope, precision);\n      result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n      if (this.intercept) {\n        let absIntercept = Math.abs(this.intercept);\n        let operator = absIntercept === this.intercept ? '+' : '-';\n        result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n      }\n    } else {\n      result += maybeToPrecision(this.intercept, precision);\n    }\n    return result;\n  }\n\n  toLaTeX(precision) {\n    return this.toString(precision);\n  }\n\n  static load(json) {\n    if (json.name !== 'TheilSenRegression') {\n      throw new TypeError('not a Theil-Sen model');\n    }\n    return new TheilSenRegression(true, json);\n  }\n}\n\nfunction theilSen(regression, x, y) {\n  let len = x.length;\n  let slopes = new Array(len * len);\n  let count = 0;\n  for (let i = 0; i < len; ++i) {\n    for (let j = i + 1; j < len; ++j) {\n      if (x[i] !== x[j]) {\n        slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n      }\n    }\n  }\n  slopes.length = count;\n  let medianSlope = median(slopes);\n\n  let cuts = new Array(len);\n  for (let i = 0; i < len; ++i) {\n    cuts[i] = y[i] - medianSlope * x[i];\n  }\n\n  regression.slope = medianSlope;\n  regression.intercept = median(cuts);\n  regression.coefficients = [regression.intercept, regression.slope];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.massShifts = massShifts;\nconst ml_regression_theil_sen_1 = require(\"ml-regression-theil-sen\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Calculates a function that allows post-calibration on mass spectra based on the error in assignment\n * @param {*} similarities\n * @param {object} [options={}]\n * @returns\n */\nfunction massShifts(similarities, options = {}) {\n    const { minSimilarity = 0.95, minLength = 10 } = options;\n    let results = [];\n    if (!Array.isArray(similarities)) {\n        for (let key of results) {\n            for (let entry of results[key]) {\n                results.push(entry);\n            }\n        }\n    }\n    else {\n        results = similarities;\n    }\n    results = results.filter((result) => result.ms &&\n        result.ms.similarity &&\n        result.ms.similarity.value > minSimilarity);\n    if (results.length < minLength) {\n        throw new Error(`X rescale can not be applied. We need at least ${minLength} peaks with over ${Math.round(minSimilarity * 100)}% similarity`);\n    }\n    const data = results\n        .map((result) => {\n        return {\n            em: result.ms.em,\n            delta: result.ms.delta,\n        };\n    })\n        .toSorted((a, b) => a.em - b.em);\n    let shifts = { x: [], y: [] };\n    for (const datum of data) {\n        shifts.x.push(Number(datum.em));\n        shifts.y.push(Number(datum.delta));\n    }\n    const regression = new ml_regression_theil_sen_1.TheilSenRegression(shifts.x, shifts.y);\n    let minX = (0, ml_spectra_processing_1.xMinValue)(shifts.x);\n    let maxX = (0, ml_spectra_processing_1.xMaxValue)(shifts.x);\n    let shiftsPPM = { x: shifts.x, y: [] };\n    for (const datum of data) {\n        shiftsPPM.y.push(Number((datum.delta / datum.em) * 1e6));\n    }\n    let regressionChart = { x: [], y: [] };\n    for (let i = minX; i < maxX; i += (maxX - minX) / 1000) {\n        regressionChart.x.push(i);\n        regressionChart.y.push(regression.predict(i));\n    }\n    return {\n        shifts,\n        shiftsPPM,\n        fit: regressionChart,\n        score: regression.score(shifts.x, shifts.y),\n        predictFct: regression.predict.bind(regression),\n        tex: regression.toLaTeX(3),\n        slope: regression.slope,\n        intercept: regression.intercept,\n        predictFctString: `${regression.slope} * mass + ${regression.intercept}`,\n    };\n}\n//# sourceMappingURL=massShifts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchJSON = fetchJSON;\nasync function fetchJSON(url) {\n    const result = await fetch(url);\n    return result.json();\n}\n//# sourceMappingURL=fetchJSON.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMDB = void 0;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst appendFragmentsInfo_js_1 = require(\"./append/appendFragmentsInfo.js\");\nconst fromArray_js_1 = require(\"./from/fromArray.js\");\nconst fromMolecules_js_1 = require(\"./from/fromMolecules.js\");\nconst fromNucleicSequence_js_1 = require(\"./from/fromNucleicSequence.js\");\nconst fromPeptidicSequence_js_1 = require(\"./from/fromPeptidicSequence.js\");\nconst fromRange_js_1 = require(\"./from/fromRange.js\");\nconst loadCommercials_js_1 = require(\"./loadCommercials.js\");\nconst loadGoogleSheet_js_1 = require(\"./loadGoogleSheet.js\");\nconst loadKnapSack_js_1 = require(\"./loadKnapSack.js\");\nconst search_js_1 = require(\"./search.js\");\nconst searchMSEM_js_1 = require(\"./searchMSEM.js\");\nconst searchSimilarity_js_1 = require(\"./searchSimilarity.js\");\n__exportStar(require(\"./massShifts.js\"), exports);\n__exportStar(require(\"./util/fetchJSON.js\"), exports);\n/**\n * A class that deals with database of monoisotopic mass and molecular formula\n */\nclass EMDB {\n    constructor() {\n        this.databases = {};\n        this.experimentalSpectrum = undefined;\n    }\n    /**\n     *\n     * @param {*} data\n     * @param {object} [options={}]\n     * @param {boolean} [options.normed=true] Should we normed (sum Y to 1) the experimental spectrum ?\n     * @param {number} [options.threshold=0.00025] Threshold used for peak picking\n     */\n    setExperimentalSpectrum(data, options = {}) {\n        const { normed = true, threshold = 0.00025 } = options;\n        this.experimentalSpectrum = new ms_spectrum_1.Spectrum(data, { threshold });\n        if (normed) {\n            this.experimentalSpectrum.normedY();\n        }\n        return this.experimentalSpectrum;\n    }\n    /**\n     * Add a new database using the KnapSack content\n     * @param {*} options\n     */\n    async loadKnapSack(options = {}) {\n        const { databaseName = 'knapSack', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadKnapSack_js_1.loadKnapSack)();\n    }\n    /**\n     * Add a new database of 12000 commercial products\n     * @param {*} options\n     */\n    async loadCommercials(options = {}) {\n        const { databaseName = 'commercials', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadCommercials_js_1.loadCommercials)();\n    }\n    get(databaseName) {\n        return this.databases[databaseName];\n    }\n    /**\n     * Load the contaminants database from a google sheet document\n     * @param {object} [options={}]\n     * @param {string} [options.databaseName='contaminants']\n     * @param {string} [options.forceReload=false]\n     */\n    async loadContaminants(options = {}) {\n        const { databaseName = 'contaminants', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadGoogleSheet_js_1.loadGoogleSheet)();\n    }\n    /**\n     * Load a google sheet containing MF information\n     * @param {object} [options={}]\n     * @param {string} [options.databaseName='sheet']\n     * @param {string} [options.forceReload=false]\n     */\n    async loadGoogleSheet(options = {}) {\n        const { databaseName = 'sheet', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadGoogleSheet_js_1.loadGoogleSheet)();\n    }\n    async loadTest() {\n        await this.fromArray(['C1-100'], {\n            databaseName: 'test',\n            ionizations: '+',\n        });\n    }\n    async loadNeutralTest(options = {}) {\n        const { maxC = 100 } = options;\n        await this.fromArray([`C1-${maxC}`], { databaseName: 'test' });\n    }\n    async fromMonoisotopicMass(mass, options = {}) {\n        const { databaseName = 'monoisotopic', append = false } = options;\n        let result = await (0, ms_spectrum_1.fromMonoisotopicMass)(mass, options);\n        replaceOrAppend(this, databaseName, result.mfs, append);\n        return result;\n    }\n    async fromArray(sequence, options = {}) {\n        const { databaseName = 'generated', append = false, estimate } = options;\n        const results = await (0, fromArray_js_1.fromArray)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromMolecules(entries, ocl, options = {}) {\n        const { databaseName = 'molecules', append = false } = options;\n        const results = await (0, fromMolecules_js_1.fromMolecules)(entries, ocl, options);\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromRange(sequence, options = {}) {\n        const { databaseName = 'generated', append = false, estimate } = options;\n        const results = await (0, fromRange_js_1.fromRange)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromPeptidicSequence(sequence, options = {}) {\n        const { databaseName = 'peptidic', append = false, estimate } = options;\n        const results = await (0, fromPeptidicSequence_js_1.fromPeptidicSequence)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    /**\n     *\n     * @param {string} databaseName\n     * @param {object} [options={}]\n     * @param {number} [options.precision=100]\n     * @param {string} [options.ionizations='']\n     * @returns\n     */\n    async appendFragmentsInfo(databaseName, options = {}) {\n        const database = this.databases[databaseName];\n        await (0, appendFragmentsInfo_js_1.appendFragmentsInfo)(this.experimentalSpectrum, database, options);\n        return database;\n    }\n    async fromNucleicSequence(sequence, options = {}) {\n        const { databaseName = 'nucleic', append = false, estimate } = options;\n        const results = await (0, fromNucleicSequence_js_1.fromNucleicSequence)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    listDatabases() {\n        return Object.keys(this.databases).toSorted();\n    }\n    getInfo() {\n        return {\n            databases: Object.keys(this.databases)\n                .toSorted()\n                .map((key) => {\n                return { name: key, nbEntries: this.databases[key].length };\n            }),\n        };\n    }\n    search(filter, options = {}) {\n        return (0, search_js_1.search)(this, filter, options);\n    }\n    searchMSEM(filter, options = {}) {\n        return (0, searchMSEM_js_1.searchMSEM)(this, filter, options);\n    }\n    searchSimilarity(options = {}) {\n        return (0, searchSimilarity_js_1.searchSimilarity)(this, options);\n    }\n}\nexports.EMDB = EMDB;\nfunction replaceOrAppend(emdb, databaseName, results, append = false) {\n    if (!emdb.databases[databaseName] || !append) {\n        emdb.databases[databaseName] = results;\n        return;\n    }\n    emdb.databases[databaseName] = emdb.databases[databaseName].concat(results);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessEARanges = preprocessEARanges;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessEARanges(ranges, targetEA) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        let current = {\n            mf: '',\n            min: 1,\n            max: 1,\n        };\n        // example ClBr2(CH2)0-2NO\n        // the idea is that has long as we don't have a range we don't really care\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF + item.value;\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            current.mf += currentMF;\n        }\n        if (current.mf) {\n            newRanges.push(current);\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        let min = range.min === undefined ? 0 : range.min;\n        let max = range.max === undefined ? 1 : range.max;\n        let possibility = {\n            mf: range.mf,\n            minCount: min, // value defined by the user\n            maxCount: max, // value defined by the user\n            targetEA: targetEA[range.mf],\n            mw: 0, // mw till this level\n            aw: 0, // atomic weight (mass * currentCount)\n            maxRatio: 0, // maximum ratio possible if all next elements are 0\n            currentValue: 0,\n            currentCount: min - 1,\n            currentUnsaturation: 0,\n            initialOrder: i,\n        };\n        possibilities.push(possibility);\n        let info = new mf_parser_1.MF(range.mf).getInfo();\n        possibility.mass = info.mass;\n        possibility.unsaturation =\n            range.unsaturation === undefined\n                ? (info.unsaturation - 1) * 2\n                : range.unsaturation;\n        if (possibility.mf !== info.mf)\n            possibility.isGroup = true;\n    }\n    possibilities = possibilities.filter((r) => r.minCount !== 0 || r.maxCount !== 0);\n    possibilities.sort((a, b) => {\n        return b.targetEA - a.targetEA;\n    });\n    return possibilities;\n}\n//# sourceMappingURL=preprocessEARanges.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromEA = mfFromEA;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst preprocessEARanges_1 = require(\"./preprocessEARanges\");\n/**\n * Returns possible combinations\n * @param {object} [targetEA]\n * @param {object} [options={}]\n * @param {string} [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number} [options.maxElementError=0.003]\n * @param {number} [options.maxTotalError=0.01]\n * @param {number} [options.minMW=0] minimal molecular weight\n * @param {number} [options.maxMW=+Infinity] maximal molecular weight\n * @param {object} [options.unsaturation={}]\n * @param {number} [options.unsaturation.min=-Infinity] Minimal unsaturation\n * @param {number} [options.unsaturation.max=+Infinity] Maximal unsaturation\n * @param {boolean} [options.unsaturation.onlyInteger=false] Integer unsaturation\n * @param {boolean} [options.unsaturation.onlyNonInteger=false] Non integer unsaturation\n * @return {Array<object>}\n */\nfunction mfFromEA(targetEA, options = {}) {\n    const { unsaturation = {}, maxIterations = 1e8, minMW = 0, maxMW = +Infinity, ranges = [\n        { mf: 'C', min: 0, max: 100 },\n        { mf: 'H', min: 0, max: 100 },\n        { mf: 'O', min: 0, max: 100 },\n        { mf: 'N', min: 0, max: 100 },\n    ], maxElementError = 0.003, maxTotalError = 0.01, } = options;\n    let filterUnsaturation = !!unsaturation;\n    // we calculate not the real unsaturation but the one before dividing by 2 + 1\n    let fakeMinUnsaturation = unsaturation.min === undefined\n        ? Number.MIN_SAFE_INTEGER\n        : (unsaturation.min - 1) * 2;\n    let fakeMaxUnsaturation = unsaturation.max === undefined\n        ? Number.MAX_SAFE_INTEGER\n        : (unsaturation.max - 1) * 2;\n    let results = {\n        mfs: [],\n        info: {\n            numberMFEvaluated: 0,\n            numberResults: 0,\n        },\n    };\n    let orderMapping = []; // used to sort the atoms\n    let possibilities = (0, preprocessEARanges_1.preprocessEARanges)(ranges, targetEA, maxElementError);\n    orderMapping = getOrderMapping(possibilities);\n    if (possibilities.length === 0)\n        return { mfs: [] };\n    let currentPosition = 0;\n    let currentAtom;\n    //  if (DEBUG) console.log('possibilities', possibilities.map((a) => `${a.mf + a.originalMinCount}-${a.originalMaxCount}`));\n    mfWhile: while (true) {\n        while (currentPosition < possibilities.length && currentPosition >= 0) {\n            let previousAtom = currentPosition === 0 ? { mw: 0 } : possibilities[currentPosition - 1];\n            currentAtom = possibilities[currentPosition];\n            if (currentAtom.currentCount < currentAtom.maxCount) {\n                currentAtom.currentCount++;\n                currentAtom.aw = currentAtom.mass * currentAtom.currentCount;\n                currentAtom.mw = currentAtom.aw + previousAtom.mw;\n                currentAtom.maxRatio = currentAtom.aw / currentAtom.mw;\n                // we should check if we can reach the target\n                if (currentAtom.targetEA &&\n                    currentAtom.aw / currentAtom.mw - currentAtom.targetEA <\n                        -maxElementError) {\n                    // we already don't have enough quantity of this element and it can only become worse\n                    continue;\n                }\n                if (currentPosition < possibilities.length - 1) {\n                    currentPosition++;\n                }\n                else {\n                    break;\n                }\n            }\n            else {\n                currentAtom.currentCount = currentAtom.minCount - 1;\n                currentPosition--;\n            }\n        }\n        if (currentPosition < 0) {\n            break;\n        }\n        if (results.info.numberMFEvaluated++ > maxIterations) {\n            throw new Error(`Iteration number is over the current maximum of: ${maxIterations}`);\n        }\n        if (filterUnsaturation) {\n            let unsaturationValue = 0;\n            for (const possibility of possibilities) {\n                unsaturationValue +=\n                    possibility.unsaturation * possibility.currentCount;\n            }\n            let isOdd = Math.abs(unsaturationValue % 2);\n            if ((unsaturation.onlyInteger && isOdd === 1) ||\n                (unsaturation.onlyNonInteger && isOdd === 0) ||\n                fakeMinUnsaturation > unsaturationValue ||\n                fakeMaxUnsaturation < unsaturationValue) {\n                continue;\n            }\n        }\n        let mw = currentAtom.mw;\n        if (mw < minMW || mw > maxMW)\n            continue;\n        let totalError = 0;\n        for (let i = 0; i < possibilities.length; i++) {\n            const possibility = possibilities[i];\n            let ratio = (possibility.mass * possibility.currentCount) / mw;\n            if (possibility.targetEA !== undefined) {\n                let error = Math.abs(possibility.targetEA - ratio);\n                if (error > maxElementError) {\n                    continue mfWhile;\n                }\n                totalError += error;\n            }\n            possibility.currentValue = ratio;\n        }\n        if (Number.isNaN(totalError) || totalError > maxTotalError)\n            continue;\n        results.mfs.push(getResult(possibilities, totalError, orderMapping));\n        results.info.numberResults++;\n    }\n    results.mfs.sort((a, b) => Math.abs(a.totalError) - Math.abs(b.totalError));\n    return results;\n}\nfunction getResult(possibilities, totalError, orderMapping) {\n    const result = { mf: '', totalError };\n    // we check that the first time we meet the ionization group it does not end\n    // in the final result\n    for (let i = 0; i < possibilities.length; i++) {\n        let possibility = possibilities[orderMapping[i]];\n        if (possibility.currentCount !== 0) {\n            if (possibility.isGroup) {\n                result.mf += `(${possibility.mf})`;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n            else {\n                result.mf += possibility.mf;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n        }\n        result.ea = possibilities.map((current) => ({\n            mf: current.mf,\n            value: current.currentValue,\n            expected: current.targetEA,\n            error: current.targetEA === undefined\n                ? undefined\n                : Math.abs(current.targetEA - current.currentValue),\n        }));\n    }\n    return result;\n}\nfunction getOrderMapping(possibilities) {\n    let mapping = possibilities.map((p, i) => ({ atom: p.mf, index: i }));\n    mapping.sort((a, b) => {\n        return (0, atom_sorter_1.atomSorter)(a.atom, b.atom);\n    });\n    return mapping.map((a) => a.index);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromAtomicRatio = mfFromAtomicRatio;\nconst mf_generator_1 = require(\"mf-generator\");\nconst mf_parser_1 = require(\"mf-parser\");\n/**\n * @typedef {object} AtomicRatioMF\n * @property {number} em\n * @property {number} mw\n * @property {string} mf\n * @property {Array<MFAtomicComposition>} mfAtomicComposition\n * @property {Array<AtomicRatio>} atomicRatios\n * @property {number} totalError\n */\n/**\n * @typedef {object} MFAtomicComposition\n * @property {string} element\n * @property {number} count\n * @property {number} theoretical\n * @property {number} experimental\n * @property {number} error\n */\n/**\n * @typedef {object} AtomicRatio\n * @property {string} element\n * @property {number} count\n * @property {number} theoretical\n */\n/**\n * Returns possible combinations\n * @param {object} [ratios]\n * @param {object} [options={}]\n * @param {string} [options.ranges='C0-10 H0-10 O0-10 N0-10'] - range of mfs to search\n * @param {number} [options.maxElementError=0.05]\n * @param {number} [options.maxTotalError=0.1]\n * @param {number} [options.minMW=0] minimal molecular weight\n * @param {number} [options.maxMW=+Infinity] maximal molecular weight\n * @param {object} [options.unsaturation={}]\n * @param {number} [options.unsaturation.min=-Infinity] Minimal unsaturation\n * @param {number} [options.unsaturation.max=+Infinity] Maximal unsaturation\n * @param {boolean} [options.unsaturation.onlyInteger=false] Integer unsaturation\n * @param {boolean} [options.unsaturation.onlyNonInteger=false] Non integer unsaturation\n * @return {Promise<AtomicRatioMF[]>}\n */\nasync function mfFromAtomicRatio(ratios, options = {}) {\n    const { unsaturation = {}, minMW = 0, maxMW = +Infinity, ranges = 'C0-10 H0-10 O0-10 N0-10', maxElementError = 0.05, maxTotalError = 0.1, } = options;\n    const elements = Object.keys(ratios);\n    const mfs = await (0, mf_generator_1.generateMFs)([ranges], {\n        limit: 1e7,\n        filter: {\n            minMW,\n            maxMW,\n            unsaturation,\n        },\n    });\n    let sumComposition = 0;\n    for (const element of elements) {\n        sumComposition += ratios[element];\n    }\n    const relativeComposition = {};\n    for (const element of elements) {\n        relativeComposition[element] = ratios[element] / sumComposition;\n    }\n    for (const mf of mfs) {\n        appendInfo(mf, elements);\n    }\n    const filteredMFs = [];\n    mfFor: for (const mf of mfs) {\n        if (mf.nbCompositionAtoms === 0) {\n            continue;\n        }\n        mf.totalError = 0;\n        const atomicRatios = [];\n        for (const element of elements) {\n            const error = mf.atomicRatio[element] - relativeComposition[element];\n            let absError = Math.abs(error);\n            if (absError > maxElementError) {\n                continue mfFor;\n            }\n            mf.totalError += absError;\n            atomicRatios.push({\n                element,\n                experimental: mf.atomicRatio[element],\n                count: mf.atoms[element] || 0,\n                theoretical: relativeComposition[element],\n                error,\n            });\n        }\n        if (mf.totalError > maxTotalError) {\n            continue;\n        }\n        filteredMFs.push({\n            em: mf.em,\n            mw: mf.mw,\n            mf: mf.mf,\n            mfAtomicComposition: getMFAtomicComposition(mf.atoms),\n            atomicRatios,\n            totalError: mf.totalError,\n        });\n    }\n    filteredMFs.sort((a, b) => Math.abs(a.totalError) - Math.abs(b.totalError));\n    return filteredMFs;\n}\nfunction getMFAtomicComposition(atoms) {\n    const nbAtoms = Object.values(atoms).reduce((acc, val) => acc + val, 0);\n    const composition = [];\n    for (const [element, count] of Object.entries(atoms)) {\n        composition.push({\n            element,\n            count,\n            theoretical: count / nbAtoms,\n        });\n    }\n    return composition;\n}\nfunction appendInfo(mf, elements) {\n    const mfInfo = new mf_parser_1.MF(mf.mf).getInfo();\n    let nbCompositionAtoms = 0;\n    for (const element of elements) {\n        nbCompositionAtoms += mfInfo.atoms[element] || 0;\n    }\n    mf.nbCompositionAtoms = nbCompositionAtoms;\n    mf.atomicRatio = {};\n    for (const element of elements) {\n        mf.atomicRatio[element] = (mfInfo.atoms[element] || 0) / nbCompositionAtoms;\n    }\n}\n//# sourceMappingURL=mfFromAtomicRatio.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendAllDBRefs = appendAllDBRefs;\nfunction appendAllDBRefs(object, allDBRefs) {\n    if (Array.isArray(object)) {\n        for (let item of object) {\n            appendAllDBRefs(item, allDBRefs);\n        }\n    }\n    else if (typeof object === 'object' && object !== null) {\n        if (object.$ref && object.$id) {\n            allDBRefs.push(object);\n        }\n        for (let key of Object.keys(object)) {\n            appendAllDBRefs(object[key], allDBRefs);\n        }\n    }\n}\n//# sourceMappingURL=appendAllDBRefs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendURLs = appendURLs;\nconst appendAllDBRefs_js_1 = require(\"./appendAllDBRefs.js\");\nasync function appendURLs(object, options = {}) {\n    const { collections, force = false } = options;\n    let allDBRefs = [];\n    (0, appendAllDBRefs_js_1.appendAllDBRefs)(object, allDBRefs);\n    if (collections) {\n        allDBRefs = allDBRefs.filter((dbRef) => collections.includes(dbRef.$ref));\n    }\n    if (!force) {\n        allDBRefs = allDBRefs.filter((dbRef) => !dbRef.url);\n    }\n    const unknowns = {};\n    for (const entry of allDBRefs) {\n        switch (entry.$ref) {\n            case 'compounds':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/compound/${entry.$id}`;\n                break;\n            case 'pubmeds':\n                entry.url = `https://pubmed.ncbi.nlm.nih.gov/${entry.$id}`;\n                break;\n            case 'gnps':\n                entry.url = `https://gnps.ucsd.edu/ProteoSAFe/gnpslibraryspectrum.jsp?SpectrumID=${entry.$id}`;\n                break;\n            case 'patents':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/patent/${entry.$id}`;\n                break;\n            case 'bioassays':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/bioassay/${entry.$id.replace(/.*_/, '')}`;\n                break;\n            case 'npasses':\n                entry.url = `http://bidd.group/NPASS/compound.php?compoundID=${entry.$id}`;\n                break;\n            case 'cmaups':\n                entry.url = `http://bidd.group/CMAUP/ingredient.php?ingredient=${entry.$id}`;\n                break;\n            case 'coconuts':\n                entry.url = `https://coconut.naturalproducts.net/compound/coconut_id/${entry.$id}`;\n                break;\n            case 'lotuses':\n                entry.url = `https://lotus.naturalproducts.net/compound/lotus_id/${entry.$id}`;\n                break;\n            case 'npAtlases':\n                entry.url = `https://www.npatlas.org/explore/compounds/${entry.$id}`;\n                break;\n            case 'massBank':\n                entry.url = `https://massbank.eu/MassBank/RecordDisplay?id=${entry.$id}`;\n                break;\n            default:\n                unknowns[entry.$ref] = true;\n                break;\n        }\n    }\n    if (Object.keys(unknowns).length > 0) {\n        // eslint-disable-next-line no-console\n        console.error('Unknown url to original data for the following collections:', unknowns);\n    }\n}\n//# sourceMappingURL=appendURLs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchJSON = fetchJSON;\nasync function fetchJSON(url, data) {\n    if (data) {\n        try {\n            const searchParams = new URLSearchParams(data);\n            const result = await fetch(`${url}?${searchParams.toString()}`);\n            return result.json();\n        }\n        catch {\n            const searchParams = new URLSearchParams(data);\n            const result = await fetch(`${url}?${searchParams.toString()}`);\n            return result.json();\n        }\n    }\n    else {\n        const result = await fetch(url);\n        return result.json();\n    }\n}\n//# sourceMappingURL=fetchJSON.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.postFetchJSON = postFetchJSON;\nasync function postFetchJSON(url, data = {}) {\n    const formData = new FormData();\n    for (const name in data) {\n        formData.append(name, data[name]);\n    }\n    const result = await fetch(url, {\n        method: 'POST',\n        body: formData,\n    });\n    return result.json();\n}\n//# sourceMappingURL=postFetchJSON.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.includeDBRefs = includeDBRefs;\nconst appendAllDBRefs_js_1 = require(\"./appendAllDBRefs.js\");\nconst postFetchJSON_js_1 = require(\"./postFetchJSON.js\");\n/**\n * Load the DBrefs and create a new property `data` for each DBRef\n * @param {any} object\n * @param {object} [options={}]\n * @param {string[]} [options.collections] - List of collections to include\n * @param {string[]} [options.excludedCollections] - List of collections to include\n * @param {boolean} [options.force=false] - Force the inclusion of the data even if it is already present\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function includeDBRefs(object, options = {}) {\n    const { collections, excludedCollections, force = false, baseURL = 'https://octochemdb.cheminfo.org/', } = options;\n    let allDBRefs = [];\n    (0, appendAllDBRefs_js_1.appendAllDBRefs)(object, allDBRefs);\n    if (collections) {\n        allDBRefs = allDBRefs.filter((dbRef) => collections.includes(dbRef.$ref));\n    }\n    if (excludedCollections) {\n        allDBRefs = allDBRefs.filter((dbRef) => !excludedCollections.includes(dbRef.$ref));\n    }\n    if (!force) {\n        allDBRefs = allDBRefs.filter((dbRef) => !dbRef.data);\n    }\n    const groups = groupsByCollection(allDBRefs);\n    const promises = [];\n    for (const [collection, entries] of Object.entries(groups)) {\n        promises.push(addDataForOneCollection(collection, baseURL, entries));\n    }\n    await Promise.allSettled(promises);\n}\nasync function addDataForOneCollection(collection, baseURL, entries) {\n    const url = new URL(`${collection}/v1/ids`, baseURL).toString();\n    const searchParams = {\n        ids: entries.map((entry) => entry.$id).join(','),\n    };\n    const data = {};\n    const result = await (0, postFetchJSON_js_1.postFetchJSON)(url, searchParams);\n    if (!result.data) {\n        throw new Error(`No data for ${url}`);\n    }\n    for (const entry of result.data) {\n        data[entry._id] = entry.data;\n    }\n    for (let datum of entries) {\n        datum.data = data[datum.$id];\n    }\n}\nfunction groupsByCollection(allDBRefs) {\n    const groups = {};\n    for (let dbRef of allDBRefs) {\n        if (!groups[dbRef.$ref])\n            groups[dbRef.$ref] = [];\n        groups[dbRef.$ref].push(dbRef);\n    }\n    return groups;\n}\n//# sourceMappingURL=includeDBRefs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeActivities = normalizeActivities;\n/**\n * @description This function normalizes the activities of an entry of ActivesOrNaturals collection.\n * @param {Object} activeOrNatural - an entry of ActivesOrNaturals collection\n * @returns - ActiveOrNatural entry with normalized activities\n */\nfunction normalizeActivities(activeOrNatural) {\n    activeOrNatural = { ...activeOrNatural };\n    let activities = [];\n    for (let activity of activeOrNatural.data.activities) {\n        if (activity?.data?.activities !== undefined) {\n            for (let activityEntry of activity.data.activities) {\n                let normalizedActivity = {\n                    $ref: activity.$ref,\n                    $id: activity.$id,\n                    data: {\n                        assay: activityEntry.assay,\n                        ocl: activity.data.ocl,\n                    },\n                    url: activity.url,\n                };\n                if (activityEntry?.targetTaxonomies !== undefined) {\n                    normalizedActivity.data.targetTaxonomies = [\n                        activityEntry.targetTaxonomies,\n                    ];\n                }\n                activities.push(normalizedActivity);\n            }\n        }\n        else {\n            activities.push(activity);\n        }\n    }\n    activeOrNatural.data.activities = activities;\n    return activeOrNatural;\n}\n//# sourceMappingURL=normalizeActivities.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activeOrNaturalDetails = activeOrNaturalDetails;\nconst appendURLs_js_1 = require(\"./utils/appendURLs.js\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\nconst normalizeActivities_js_1 = require(\"./utils/normalizeActivities.js\");\n/**\n * Search for a specific natural or active compound using its ID\n * @param {object} [options={}]\n * @param {string} [options.fields='_id,data'] - List of fields to retrieve\n * @param {string} [options.route='activesOrNaturals/v1/id'] - URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function activeOrNaturalDetails(id, options = {}) {\n    const { route = 'activesOrNaturals/v1/id', baseURL = 'https://octochemdb.cheminfo.org/', fields = '_id,data', } = options;\n    const activeOrNatural = await fetchActiveOrNatural(id, {\n        url: new URL(route, baseURL).toString(),\n        fields,\n    });\n    await (0, includeDBRefs_js_1.includeDBRefs)(activeOrNatural, { baseURL });\n    ensureArray(activeOrNatural);\n    (0, appendURLs_js_1.appendURLs)(activeOrNatural);\n    (0, normalizeActivities_js_1.normalizeActivities)(activeOrNatural);\n    return activeOrNatural;\n}\nfunction ensureArray(activeOrNatural) {\n    if (!activeOrNatural.data.activities) {\n        activeOrNatural.data.activities = [];\n    }\n    if (!activeOrNatural.data.pubmeds) {\n        activeOrNatural.data.pubmeds = [];\n    }\n    if (!activeOrNatural.data.patents) {\n        activeOrNatural.data.patents = [];\n    }\n    if (!activeOrNatural.data.taxonomies) {\n        activeOrNatural.data.taxonomies = [];\n    }\n}\nasync function fetchActiveOrNatural(id, options) {\n    const { fields, url } = options;\n    const searchParams = { id };\n    if (fields) {\n        searchParams.fields = fields;\n    }\n    const results = await (0, fetchJSON_js_1.fetchJSON)(url, searchParams);\n    return results.data;\n}\n//# sourceMappingURL=activeOrNaturalDetails.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseMasses = parseMasses;\nfunction parseMasses(masses) {\n    if (!masses)\n        return [];\n    if (Array.isArray(masses))\n        return masses;\n    if (typeof masses === 'number') {\n        return [masses];\n    }\n    if (typeof masses === 'string') {\n        return masses\n            .split(/[\\t\\n\\r ,;]+/)\n            .filter(Boolean)\n            .map(Number);\n    }\n    throw new Error('Cannot parse masses');\n}\n//# sourceMappingURL=parseMasses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAllowedEMs = getAllowedEMs;\nconst mf_finder_1 = require(\"mf-finder\");\nasync function getAllowedEMs(options) {\n    const { ranges, masses, precision, ionizations } = options;\n    if (!ranges)\n        return;\n    const allowedEMs = [];\n    for (let mass of masses) {\n        const { mfs } = await (0, mf_finder_1.findMFs)(mass, {\n            ionizations,\n            precision,\n            ranges,\n            limit: 100000,\n        });\n        for (const mf of mfs) {\n            allowedEMs.push(mf.em);\n        }\n    }\n    return Float64Array.from(allowedEMs).toSorted();\n}\n//# sourceMappingURL=getAllowedEMs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchWithIonizations = searchWithIonizations;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst fetchJSON_js_1 = require(\"./fetchJSON.js\");\nconst getAllowedEMs_js_1 = require(\"./getAllowedEMs.js\");\nconst parseMasses_js_1 = require(\"./parseMasses.js\");\nasync function searchWithIonizations(options) {\n    const { realURL, fields, precision = 100, limit = 1000, searchParams = {}, ranges, } = options;\n    searchParams.precision = String(precision);\n    searchParams.limit = String(limit);\n    if (fields)\n        searchParams.fields = fields;\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses || [0]);\n    // if we have ranges we need to filter the allowed EMs\n    const allowedEMs = await (0, getAllowedEMs_js_1.getAllowedEMs)({\n        ranges,\n        masses,\n        precision,\n        ionizations,\n    });\n    const promises = [];\n    for (let ionization of ionizations) {\n        for (let mass of masses) {\n            if (mass !== 0) {\n                const realMass = mass * Math.abs(ionization.charge || 1) -\n                    ionization.em +\n                    chemical_elements_1.ELECTRON_MASS * ionization.charge;\n                searchParams.em = String(realMass);\n            }\n            promises.push((0, fetchJSON_js_1.fetchJSON)(realURL, searchParams));\n        }\n    }\n    const results = await Promise.all(promises);\n    const entries = [];\n    let counter = 0;\n    for (const result of results) {\n        const ionization = ionizations[Math.floor(counter / masses.length)];\n        const targetMass = masses[counter % masses.length];\n        counter++;\n        for (const entry of result.data) {\n            if (allowedEMs &&\n                !allowedEMs.some((em) => Math.abs(em - entry.data.em) < 0.0000001)) {\n                continue;\n            }\n            try {\n                entry.mfInfo = new mf_parser_1.MF(entry.data?.mf || entry._id).getInfo({\n                    emFieldName: 'em',\n                    msemFieldName: 'msem',\n                });\n                entry.ionization = ionization;\n                entry.ms = (0, mf_utilities_1.getMsInfo)(entry.mfInfo, {\n                    targetMass,\n                    ionization,\n                }).ms;\n                entries.push(entry);\n            }\n            catch (error) {\n                // eslint-disable-next-line no-console\n                console.warn(`${error}`);\n            }\n        }\n    }\n    if (entries.length > limit) {\n        entries.length = limit;\n    }\n    return entries;\n}\n//# sourceMappingURL=searchWithIonizations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activesOrNaturals = activesOrNaturals;\nconst appendURLs_js_1 = require(\"./utils/appendURLs.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\nconst parseMasses_js_1 = require(\"./utils/parseMasses.js\");\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * Search for natural or active compounds using various criteria\n * @param {object} [options={}]\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {string} [options.noStereoTautomerID=''] - ID of the compound to search from the results\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string} [options.ranges=''] - Allows to filter by a range of molecular formula\n * @param {string} [options.mf=''] - Search by molecular formula\n * @param {number} [options.precision=1000] - Precision of the monoisotopic mass in ppm\n * @param {string} [options.fields] - List of fields to retrieve\n * @param {string} [options.kwTaxonomies=''] - Comma separated list of taxonomies family, genus or species of the product source\n * @param {string} [options.kwActiveAgainst=''] - Comma separated list of taxonomies family, genus or species of the bioactivity target\n * @param {string} [options.kwBioassays=''] - Comma separated list of keyword from the description of the bioassay\n * @param {string} [options.kwMeshTerms=''] - Comma separated list of keyword from the medline MeshTerms\n * @param {string} [options.kwTitles=''] - Comma separated list of keyword from the compound title\n * @param {string} [options.minNbMassSpectra] - Minimal number of mass spectra\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.route='activesOrNaturals/v1/search'] - Route to this specific webservice\n * @param {string[]|undefined} [options.includes] - Array of DBref collections to include\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - Base URL of the webservice\n */\nasync function activesOrNaturals(options = {}) {\n    const { route = 'activesOrNaturals/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', includes, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = prepareSearchParams(options);\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses || [0]);\n    const entries = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        ...options,\n        masses,\n        realURL,\n        searchParams,\n    });\n    if (options.includes) {\n        await (0, includeDBRefs_js_1.includeDBRefs)(entries, { baseURL, collections: includes });\n    }\n    (0, appendURLs_js_1.appendURLs)(entries);\n    entries.sort((a, b) => {\n        if (a.data.nbMassSpectra > b.data.nbMassSpectra)\n            return -1;\n        if (a.data.nbMassSpectra < b.data.nbMassSpectra)\n            return 1;\n        if (a.data.nbPubmeds > b.data.nbPubmeds)\n            return -1;\n        if (a.data.nbPubmeds < b.data.nbPubmeds)\n            return 1;\n        if (a.data.nbPatents > b.data.nbPatents)\n            return -1;\n        if (a.data.nbPatents < b.data.nbPatents)\n            return 1;\n        return 0;\n    });\n    return entries;\n}\nfunction prepareSearchParams(options) {\n    const { noStereoTautomerID, kwTaxonomies, kwActiveAgainst, kwBioassays, kwMeshTerms, kwTitles, mf, minNbMassSpectra, } = options;\n    const searchParams = {};\n    if (noStereoTautomerID) {\n        searchParams.noStereoTautomerID = noStereoTautomerID;\n    }\n    if (kwTaxonomies) {\n        searchParams.kwTaxonomies = kwTaxonomies;\n    }\n    if (kwActiveAgainst) {\n        searchParams.kwActiveAgainst = kwActiveAgainst;\n    }\n    if (kwBioassays) {\n        searchParams.kwBioassays = kwBioassays;\n    }\n    if (kwMeshTerms) {\n        searchParams.kwMeshTerms = kwMeshTerms;\n    }\n    if (kwTitles) {\n        searchParams.kwTitles = kwTitles;\n    }\n    if (mf) {\n        searchParams.mf = mf;\n    }\n    if (minNbMassSpectra) {\n        searchParams.minNbMassSpectra = minNbMassSpectra;\n    }\n    return searchParams;\n}\n//# sourceMappingURL=activesOrNaturals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activesOrNaturalsByMF = activesOrNaturalsByMF;\nconst activesOrNaturals_js_1 = require(\"./activesOrNaturals.js\");\n/**\n * Search for natural or active compounds and group them by molecular formula\n * @param {object} [options={}]\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string} [options.ranges=''] - Allows to filter by a range of molecular formula\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.fields='data.noStereoOcl,data.em,data.mf'] - List of fields to retrieve\n * @param {string} [options.kwTaxonomies=''] - Comma separated list of taxonomies family, genus or species of the product source\n * @param {string} [options.kwActiveAgainst=''] - Comma separated list of taxonomies family, genus or species of the bioactivity target\n * @param {string} [options.kwBioassays=''] - Comma separated list of keyword from the description of the bioassay\n * @param {string} [options.kwMeshTerms=''] - Comma separated list of keyword from the medline MeshTerms\n * @param {string} [options.kwTitles=''] - Comma separated list of keyword from compound title\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.route='activesOrNaturals/v1/search'] - URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function activesOrNaturalsByMF(options = {}) {\n    const fields = 'data.noStereoOcl,data.mf,data.em,data.nbPatents,data.nbPubmeds,data.nbActivities,data.bioactive,data.nbMassSpectra,data.naturalProduct'.split(',');\n    if (options.fields)\n        fields.push(...options.fields.split(/[ ,]+/));\n    const entries = await (0, activesOrNaturals_js_1.activesOrNaturals)({\n        ...options,\n        fields: fields.join(','),\n    });\n    // we will now group the data per mf\n    const grouped = {};\n    for (const entry of entries) {\n        if (!grouped[entry.data.mf]) {\n            grouped[entry.data.mf] = {\n                mfInfo: entry.mfInfo,\n                ms: entry.ms,\n                ionization: entry.ionization,\n                nbNaturals: 0,\n                nbBioactives: 0,\n                nbPatents: 0,\n                nbPubmeds: 0,\n                nbMassSpectra: 0,\n            };\n        }\n        const currentGroup = grouped[entry.data.mf];\n        if (entry.data.naturalProduct)\n            currentGroup.nbNaturals++;\n        if (entry.data.bioactive)\n            currentGroup.nbBioactives++;\n        if (entry.data.nbMassSpectra) {\n            currentGroup.nbMassSpectra += entry.data.nbMassSpectra;\n        }\n        if (entry.data.nbPubmeds)\n            currentGroup.nbPubmeds += entry.data.nbPubmeds;\n        if (entry.data.nbPatents)\n            currentGroup.nbPatents += entry.data.nbPatents;\n    }\n    const groupedArray = Object.keys(grouped).map((key) => grouped[key]);\n    // because we can combine many ionizations we should resort the data\n    groupedArray.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    return groupedArray;\n}\n//# sourceMappingURL=activesOrNaturalsByMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compoundsFromMF = compoundsFromMF;\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst postFetchJSON_js_1 = require(\"./utils/postFetchJSON.js\");\n/**\n * Retrieve a list of molecular formulas from one or many monoisotopic mass that are present in pubchem compound.\n * in the database and a monoisotopic mass.\n * @param {string} mf - Observed monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.fields] - Fields to retrieve from the database\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.route='mfs/v1/fromMF'] - URL of the webservice\n * @param {string} [options.titleCompoundsURL='titleCompounds/v1/ids'] - URL of the webservice\n * @param {number} [options.limit=50000] - Maximal number of entries to return\n */\nasync function compoundsFromMF(mf, options = {}) {\n    const { route = 'compounds/v1/fromMF', baseURL = 'https://octochemdb.cheminfo.org/', limit = 50000, fields = 'data.ocl.idCode,data.ocl.index,data.iupac', } = options;\n    const searchParams = {\n        limit,\n        fields,\n        mf,\n    };\n    const realURL = new URL(route, baseURL).toString();\n    const { data } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    const ids = data.map((datum) => datum._id);\n    const titles = await getTitles(ids, options);\n    for (const datum of data) {\n        if (titles[datum._id])\n            datum.data.title = titles[datum._id];\n    }\n    data.sort((a, b) => (a.data.title?.length || Number.MAX_SAFE_INTEGER) -\n        (b.data.title?.length || Number.MAX_SAFE_INTEGER));\n    return data;\n}\nasync function getTitles(ids, options) {\n    let { titleCompoundsURL = 'titleCompounds/v1/ids', baseURL = 'https://octochemdb.cheminfo.org/', } = options;\n    if (process.env.NODE_ENV === 'test') {\n        baseURL = 'https://octochemdb.cheminfo.org/';\n    }\n    const titlesURL = new URL(titleCompoundsURL, baseURL).toString();\n    const { data: titlesArray } = await (0, postFetchJSON_js_1.postFetchJSON)(titlesURL, { ids });\n    const titles = {};\n    for (const entry of titlesArray) {\n        if (entry.data.title.match(/CID /))\n            continue;\n        titles[entry._id] = entry.data.title;\n    }\n    return titles;\n}\n//# sourceMappingURL=compoundsFromMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchMasses = searchMasses;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst parseMasses_js_1 = require(\"./utils/parseMasses.js\");\n/**\n *\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number|string|number[]} [options.masses] - Observed fragment masses\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.modifications=''] - Comma separated list of allowed modifications\n * @param {string} [options.route='massBank/v1/search'] - Route to use\n * @param {string} [options.link='https://massbank.eu/MassBank/RecordDisplay?id='] - Link to the database source\n */\nasync function searchMasses(options = {}) {\n    const { route = 'massBank/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 1000, mf = '', link = '', } = options;\n    if (route === '') {\n        throw new Error('route is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses);\n    const modifications = (0, mf_utilities_1.preprocessIonizations)(options.modifications);\n    const allResults = [];\n    for (let modification of modifications) {\n        const massShift = modification.em;\n        const searchParams = {\n            masses: masses.map((mass) => mass + massShift).join(','),\n            precision,\n            limit,\n            mf,\n        };\n        const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n        for (const result of results) {\n            const modifiedResult = {\n                ...result,\n                modification,\n            };\n            if (link !== '') {\n                modifiedResult.url = link + result._id;\n            }\n            allResults.push(modifiedResult);\n        }\n    }\n    return allResults;\n}\n//# sourceMappingURL=searchMasses.js.map","\"use strict\";\n/**\n * This method will retrieve similar mass spectra\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.modifications=''] - Comma\n * @param {('massBank'|'gnps'|'inSilicoFragments')[]} [options.databases=['massBank','gnps']] - List of databases to search for mass spectra\n * @param {object} [options.routes] - Object that contains the routes to use for each database\n * @param {boolean} [options.uniqueMolecules=true] - If true, only one molecule per entry is returned\n * @param {object} [options.similarity={}]\n * @param {number} [options.similarity.nbPeaks=5] - Number of peaks to use for the similarity\n * @param {number} [options.similarity.massPower=1] - Power to use for the mass\n * @param {number} [options.similarity.minSimilarity=0.2] - Minimal similarity to return\n * @param {number} [options.similarity.intensityPower=0.6] - Power to use for the intensity\n * @param {number} [options.similarity.minNbCommonPeaks=0] - Minimal number of common peaks\n * @param {{x:number[],y:number[]}} [options.similarity.experimental=[]] - Experimental mass spectra to compare to\n *\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.massSpectra = massSpectra;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst searchMasses_js_1 = require(\"./searchMasses.js\");\nconst defaultRoutes = [\n    {\n        name: 'massBank',\n        url: 'https://octochemdb.cheminfo.org/massBank/v1/search',\n        link: 'https://massbank.eu/MassBank/RecordDisplay?id=',\n    },\n    {\n        name: 'gnps',\n        url: 'https://octochemdb.cheminfo.org/gnps/v1/search',\n        link: 'https://gnps.ucsd.edu/ProteoSAFe/gnpslibraryspectrum.jsp?SpectrumID=',\n    },\n    {\n        name: 'inSilicoFragments',\n        url: 'https://octochemdb.cheminfo.org/inSilicoFragments/v1/search',\n    },\n];\nasync function massSpectra(options = {}) {\n    const { uniqueMolecules = true, databases = ['massBank', 'gnps'], routes = defaultRoutes, } = options;\n    const promises = [];\n    for (const route of routes) {\n        if (databases && databases.includes(route.name)) {\n            promises.push((0, searchMasses_js_1.searchMasses)({\n                ...options,\n                route: route.url,\n                link: route.link,\n            }).then((entries) => entries.map((entry) => ({ ...entry, database: route.name }))));\n        }\n    }\n    const allResults = await Promise.all(promises);\n    let results = allResults.flat();\n    results = appendAndFilterSimilarity(results, options);\n    if (uniqueMolecules) {\n        results = uniqueMol(results);\n    }\n    return results;\n}\nfunction uniqueMol(results) {\n    const unique = {};\n    for (const result of results) {\n        if (!result.data?.ocl?.idCode)\n            continue;\n        if (!unique[result.data.ocl.idCode]) {\n            unique[result.data.ocl.idCode] = result;\n        }\n    }\n    return Object.values(unique);\n}\nfunction appendAndFilterSimilarity(results, options = {}) {\n    const { similarity } = options;\n    if (!similarity || !similarity.experimental)\n        return results;\n    const { experimental, nbPeaks = 5, massPower = 1, minSimilarity = 0.2, intensityPower = 0.6, minNbCommonPeaks = 0, } = similarity;\n    const precision = Number(options.precision) / 1e6;\n    const comparator = new ms_spectrum_1.MSComparator({\n        nbPeaks,\n        massPower,\n        intensityPower,\n        delta: (mass) => mass * precision,\n        minNbCommonPeaks,\n    });\n    for (const result of results) {\n        result.similarity = comparator.getSimilarity(experimental, structuredClone(result.data.spectrum.data));\n    }\n    results = results.filter((a) => a.similarity.cosine >= minSimilarity);\n    results.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return results;\n}\n//# sourceMappingURL=massSpectra.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfsFromEMs = mfsFromEMs;\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * Retrieve a list of molecular formulas from one or many monoisotopic mass that are present in pubchem compound.\n * in the database and a monoisotopic mass.\n * @param {number|string|number[]} masses - Observed monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.ranges=''] - Range of allowed molecular formula\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.minCount=5] - Minimal number of molecules having a specific MF\n * @param {number} [options.fields] - Fields to retrieve from the database\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.route='mfs/v1/fromEM'] - URL of the webservice\n * @param {string} [options.compoundsURL='mfs/v1/fromMF'] - URL to retrieve corresponding compounds\n */\nasync function mfsFromEMs(masses, options = {}) {\n    const { route = 'mfs/v1/fromEM', compoundsURL = 'compounds/v1/fromMF', baseURL = 'https://octochemdb.cheminfo.org/', minCount = 5, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        minCount: String(minCount),\n    };\n    const entries = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        ...options,\n        masses,\n        realURL,\n        searchParams,\n    });\n    const realCompoundsURL = new URL(compoundsURL, baseURL).toString();\n    const searchParamsCompounds = new URLSearchParams();\n    for (const entry of entries) {\n        searchParamsCompounds.set('mf', String(entry._id));\n        entry.compoundsURL = `${realCompoundsURL}?${searchParamsCompounds.toString()}`;\n    }\n    // because we can combine many ionizations we should resort the data\n    entries.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    return entries;\n}\n//# sourceMappingURL=mfsFromEMs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pubmedCompounds = pubmedCompounds;\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\n/**\n * Retrieve the compounds from a pubmedID\n * @param {string} pubmedID\n * @param {object} [options={}]\n * @param {string} [options.route='pubmeds/v1/id'] - relative URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @returns\n */\nasync function pubmedCompounds(pubmedID, options = {}) {\n    const { route = 'pubmeds/v1/id', baseURL = 'https://octochemdb.cheminfo.org/', limit = 1000, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        id: pubmedID,\n        fields: 'data.compounds',\n        limit,\n    };\n    const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    await (0, includeDBRefs_js_1.includeDBRefs)(results, { baseURL });\n    return results.data.compounds;\n}\n//# sourceMappingURL=pubmedCompounds.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchInSilicoSpectraByMF = searchInSilicoSpectraByMF;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\n/**\n * @param {object} spectrum - The experimental spectrum to compare to\n * @param {string} mf - Molecular formula of the non ionized molecule\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n * @param {string} [options.route='inSilicoFragments/v1/search'] - Route to use\n */\nasync function searchInSilicoSpectraByMF(spectrum, mf, options = {}) {\n    const { route = 'inSilicoFragments/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 1000, massPower = 3, intensityPower = 0.6, } = options;\n    if (!route) {\n        throw new Error('route is mandatory');\n    }\n    if (!mf) {\n        throw new Error('mf is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        limit,\n        mf,\n    };\n    const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    const msComparator = new ms_spectrum_1.MSComparator({\n        delta: (mass) => mass * 1e-6 * precision,\n        massPower,\n        intensityPower,\n    });\n    const finals = [];\n    for (const result of results) {\n        const similarity = msComparator.getSimilarityToMasses(spectrum, result.data.spectrum.data.x);\n        if (similarity.cosine > 0) {\n            finals.push({\n                ...result,\n                similarity,\n            });\n        }\n    }\n    finals.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return finals;\n}\n//# sourceMappingURL=searchInSilicoSpectraByMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchInSilicoSpectraByMasses = searchInSilicoSpectraByMasses;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * @param {object} spectrum - The experimental spectrum to compare to\n * @param {number|string|number[]} [masses] - List of experimental monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.ionizations=\"H+\"] - Comma separated list of allowed ionizations\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n * @param {string} [options.route='inSilicoFragments/v1/search'] - Route to use\n * @param {object} [options.technique={}] - Technique used to generate the spectrum\n * @param {string} [options.technique.mode=\"positive\"] - Mode of the acquisition\n * @param {string} [options.technique.ionization=\"esi\"] - Ionization of the acquisition\n */\nasync function searchInSilicoSpectraByMasses(spectrum, masses, options = {}) {\n    const { route = 'inSilicoFragments/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 10000, massPower = 3, intensityPower = 0.6, ionizations = 'H+', technique = {}, } = options;\n    const { mode = 'positive', ionization = 'esi' } = technique;\n    if (!route) {\n        throw new Error('route is mandatory');\n    }\n    if (!masses) {\n        throw new Error('masses is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    let results = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        precision,\n        realURL,\n        masses,\n        limit,\n        ionizations,\n        searchParams: {\n            mode,\n            ionization,\n        },\n    });\n    const msComparator = new ms_spectrum_1.MSComparator({\n        delta: (mass) => mass * 1e-6 * precision,\n        massPower,\n        intensityPower,\n    });\n    const finals = [];\n    // filter MDMA\n    // results = results.filter(result => result.data.ocl.idCode === 'dg~D@MBdie]v\\\\kahHBjh@@')\n    for (const result of results) {\n        const similarity = msComparator.getSimilarityToMasses(spectrum, result.data.spectrum.data.x);\n        if (similarity.cosine > 0) {\n            finals.push({\n                ...result,\n                similarity,\n            });\n        }\n    }\n    finals.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return finals;\n}\n//# sourceMappingURL=searchInSilicoSpectraByMasses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OctoChemDB = void 0;\nconst activeOrNaturalDetails_js_1 = require(\"./activeOrNaturalDetails.js\");\nconst activesOrNaturals_js_1 = require(\"./activesOrNaturals.js\");\nconst activesOrNaturalsByMF_js_1 = require(\"./activesOrNaturalsByMF.js\");\nconst compoundsFromMF_js_1 = require(\"./compoundsFromMF.js\");\nconst massSpectra_js_1 = require(\"./massSpectra.js\");\nconst mfsFromEMs_js_1 = require(\"./mfsFromEMs.js\");\nconst pubmedCompounds_js_1 = require(\"./pubmedCompounds.js\");\nconst searchInSilicoSpectraByMF_js_1 = require(\"./searchInSilicoSpectraByMF.js\");\nconst searchInSilicoSpectraByMasses_js_1 = require(\"./searchInSilicoSpectraByMasses.js\");\nconst searchMasses_js_1 = require(\"./searchMasses.js\");\nclass OctoChemDB {\n    /**\n     *\n     * @param {*} options\n     */\n    constructor(options = {}) {\n        this.baseURL = options.baseURL ?? 'https://octochemdb.cheminfo.org/';\n    }\n    async mfsFromEMs(masses, options = {}) {\n        return (0, mfsFromEMs_js_1.mfsFromEMs)(masses, { baseURL: this.baseURL, ...options });\n    }\n    async compoundsFromMF(mf, options = {}) {\n        return (0, compoundsFromMF_js_1.compoundsFromMF)(mf, { baseURL: this.baseURL, ...options });\n    }\n    async activesOrNaturals(options = {}) {\n        return (0, activesOrNaturals_js_1.activesOrNaturals)({ baseURL: this.baseURL, ...options });\n    }\n    async activesOrNaturalsByMF(options = {}) {\n        return (0, activesOrNaturalsByMF_js_1.activesOrNaturalsByMF)({ baseURL: this.baseURL, ...options });\n    }\n    async activeOrNaturalDetails(id, options = {}) {\n        return (0, activeOrNaturalDetails_js_1.activeOrNaturalDetails)(id, { baseURL: this.baseURL, ...options });\n    }\n    async searchMasses(options = {}) {\n        return (0, searchMasses_js_1.searchMasses)({ baseURL: this.baseURL, ...options });\n    }\n    async massSpectra(options = {}) {\n        return (0, massSpectra_js_1.massSpectra)({ baseURL: this.baseURL, ...options });\n    }\n    async searchInSilicoSpectraByMF(spectrum, mf, options = {}) {\n        return (0, searchInSilicoSpectraByMF_js_1.searchInSilicoSpectraByMF)(spectrum, mf, {\n            baseURL: this.baseURL,\n            ...options,\n        });\n    }\n    async searchInSilicoSpectraByMasses(spectrum, masses, options = {}) {\n        return (0, searchInSilicoSpectraByMasses_js_1.searchInSilicoSpectraByMasses)(spectrum, masses, {\n            baseURL: this.baseURL,\n            ...options,\n        });\n    }\n    async pubmedCompounds(pubmedID, options = {}) {\n        return (0, pubmedCompounds_js_1.pubmedCompounds)(pubmedID, { baseURL: this.baseURL, ...options });\n    }\n}\nexports.OctoChemDB = OctoChemDB;\n//# sourceMappingURL=OctoChemDB.js.map","export const STEMMERS = {\n    arabic: 'ar',\n    armenian: 'am',\n    bulgarian: 'bg',\n    czech: 'cz',\n    danish: 'dk',\n    dutch: 'nl',\n    english: 'en',\n    finnish: 'fi',\n    french: 'fr',\n    german: 'de',\n    greek: 'gr',\n    hungarian: 'hu',\n    indian: 'in',\n    indonesian: 'id',\n    irish: 'ie',\n    italian: 'it',\n    lithuanian: 'lt',\n    nepali: 'np',\n    norwegian: 'no',\n    portuguese: 'pt',\n    romanian: 'ro',\n    russian: 'ru',\n    serbian: 'rs',\n    slovenian: 'ru',\n    spanish: 'es',\n    swedish: 'se',\n    tamil: 'ta',\n    turkish: 'tr',\n    ukrainian: 'uk',\n    sanskrit: 'sk'\n};\nexport const SPLITTERS = {\n    dutch: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    english: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    french: /[^a-z0-9äâàéèëêïîöôùüûœç-]+/gim,\n    italian: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    norwegian: /[^a-z0-9_æøåÆØÅäÄöÖüÜ]+/gim,\n    portuguese: /[^a-z0-9à-úÀ-Ú]/gim,\n    russian: /[^a-z0-9а-яА-ЯёЁ]+/gim,\n    spanish: /[^a-z0-9A-Zá-úÁ-ÚñÑüÜ]+/gim,\n    swedish: /[^a-z0-9_åÅäÄöÖüÜ-]+/gim,\n    german: /[^a-z0-9A-ZäöüÄÖÜß]+/gim,\n    finnish: /[^a-z0-9äöÄÖ]+/gim,\n    danish: /[^a-z0-9æøåÆØÅ]+/gim,\n    hungarian: /[^a-z0-9áéíóöőúüűÁÉÍÓÖŐÚÜŰ]+/gim,\n    romanian: /[^a-z0-9ăâîșțĂÂÎȘȚ]+/gim,\n    serbian: /[^a-z0-9čćžšđČĆŽŠĐ]+/gim,\n    turkish: /[^a-z0-9çÇğĞıİöÖşŞüÜ]+/gim,\n    lithuanian: /[^a-z0-9ąčęėįšųūžĄČĘĖĮŠŲŪŽ]+/gim,\n    arabic: /[^a-z0-9أ-ي]+/gim,\n    nepali: /[^a-z0-9अ-ह]+/gim,\n    irish: /[^a-z0-9áéíóúÁÉÍÓÚ]+/gim,\n    indian: /[^a-z0-9अ-ह]+/gim,\n    armenian: /[^a-z0-9ա-ֆ]+/gim,\n    greek: /[^a-z0-9α-ωά-ώ]+/gim,\n    indonesian: /[^a-z0-9]+/gim,\n    ukrainian: /[^a-z0-9а-яА-ЯіїєІЇЄ]+/gim,\n    slovenian: /[^a-z0-9čžšČŽŠ]+/gim,\n    bulgarian: /[^a-z0-9а-яА-Я]+/gim,\n    tamil: /[^a-z0-9அ-ஹ]+/gim,\n    sanskrit: /[^a-z0-9A-Zāīūṛḷṃṁḥśṣṭḍṇṅñḻḹṝ]+/gim,\n    czech: /[^A-Z0-9a-zěščřžýáíéúůóťďĚŠČŘŽÝÁÍÉÓÚŮŤĎ-]+/gim\n};\nexport const SUPPORTED_LANGUAGES = Object.keys(STEMMERS);\nexport function getLocale(language) {\n    return language !== undefined && SUPPORTED_LANGUAGES.includes(language) ? STEMMERS[language] : undefined;\n}\n//# sourceMappingURL=languages.js.map","import { createError } from './errors.js';\nconst baseId = Date.now().toString().slice(5);\nlet lastId = 0;\nconst k = 1024;\nconst nano = BigInt(1e3);\nconst milli = BigInt(1e6);\nconst second = BigInt(1e9);\nexport const isServer = typeof window === 'undefined';\n/**\n * This value can be increased up to 100_000\n * But i don't know if this value change from nodejs to nodejs\n * So I will keep a safer value here.\n */\nexport const MAX_ARGUMENT_FOR_STACK = 65535;\n/**\n * This method is needed to used because of issues like: https://github.com/oramasearch/orama/issues/301\n * that issue is caused because the array that is pushed is huge (>100k)\n *\n * @example\n * ```ts\n * safeArrayPush(myArray, [1, 2])\n * ```\n */\nexport function safeArrayPush(arr, newArr) {\n    if (newArr.length < MAX_ARGUMENT_FOR_STACK) {\n        Array.prototype.push.apply(arr, newArr);\n    }\n    else {\n        const newArrLength = newArr.length;\n        for (let i = 0; i < newArrLength; i += MAX_ARGUMENT_FOR_STACK) {\n            Array.prototype.push.apply(arr, newArr.slice(i, i + MAX_ARGUMENT_FOR_STACK));\n        }\n    }\n}\nexport function sprintf(template, ...args) {\n    return template.replace(/%(?:(?<position>\\d+)\\$)?(?<width>-?\\d*\\.?\\d*)(?<type>[dfs])/g, function (...replaceArgs) {\n        const groups = replaceArgs[replaceArgs.length - 1];\n        const { width: rawWidth, type, position } = groups;\n        const replacement = position ? args[Number.parseInt(position) - 1] : args.shift();\n        const width = rawWidth === '' ? 0 : Number.parseInt(rawWidth);\n        switch (type) {\n            case 'd':\n                return replacement.toString().padStart(width, '0');\n            case 'f': {\n                let value = replacement;\n                const [padding, precision] = rawWidth.split('.').map((w) => Number.parseFloat(w));\n                if (typeof precision === 'number' && precision >= 0) {\n                    value = value.toFixed(precision);\n                }\n                return typeof padding === 'number' && padding >= 0 ? value.toString().padStart(width, '0') : value.toString();\n            }\n            case 's':\n                return width < 0\n                    ? replacement.toString().padEnd(-width, ' ')\n                    : replacement.toString().padStart(width, ' ');\n            default:\n                return replacement;\n        }\n    });\n}\nexport function formatBytes(bytes, decimals = 2) {\n    if (bytes === 0) {\n        return '0 Bytes';\n    }\n    const dm = decimals < 0 ? 0 : decimals;\n    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\nexport function isInsideWebWorker() {\n    // @ts-expect-error - WebWorker global scope\n    return typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n}\nexport function isInsideNode() {\n    return typeof process !== 'undefined' && process.release && process.release.name === 'node';\n}\nexport function getNanosecondTimeViaPerformance() {\n    return BigInt(Math.floor(performance.now() * 1e6));\n}\nexport function formatNanoseconds(value) {\n    if (typeof value === 'number') {\n        value = BigInt(value);\n    }\n    if (value < nano) {\n        return `${value}ns`;\n    }\n    else if (value < milli) {\n        return `${value / nano}μs`;\n    }\n    else if (value < second) {\n        return `${value / milli}ms`;\n    }\n    return `${value / second}s`;\n}\nexport function getNanosecondsTime() {\n    if (isInsideWebWorker()) {\n        return getNanosecondTimeViaPerformance();\n    }\n    if (isInsideNode()) {\n        return process.hrtime.bigint();\n    }\n    if (typeof process !== 'undefined' && typeof process?.hrtime?.bigint === 'function') {\n        return process.hrtime.bigint();\n    }\n    if (typeof performance !== 'undefined') {\n        return getNanosecondTimeViaPerformance();\n    }\n    // @todo: fallback to V8 native method to get microtime\n    return BigInt(0);\n}\nexport function uniqueId() {\n    return `${baseId}-${lastId++}`;\n}\nexport function getOwnProperty(object, property) {\n    // Checks if `hasOwn` method is defined avoiding errors with older Node.js versions\n    if (Object.hasOwn === undefined) {\n        return Object.prototype.hasOwnProperty.call(object, property) ? object[property] : undefined;\n    }\n    return Object.hasOwn(object, property) ? object[property] : undefined;\n}\nexport function getTokenFrequency(token, tokens) {\n    let count = 0;\n    for (const t of tokens) {\n        if (t === token) {\n            count++;\n        }\n    }\n    return count;\n}\nexport function insertSortedValue(arr, el, compareFn = sortTokenScorePredicate) {\n    let low = 0;\n    let high = arr.length;\n    let mid;\n    while (low < high) {\n        mid = (low + high) >>> 1;\n        if (compareFn(el, arr[mid]) < 0) {\n            high = mid;\n        }\n        else {\n            low = mid + 1;\n        }\n    }\n    arr.splice(low, 0, el);\n    return arr;\n}\nexport function sortTokenScorePredicate(a, b) {\n    if (b[1] === a[1]) {\n        return a[0] - b[0];\n    }\n    return b[1] - a[1];\n}\n// Intersection function taken from https://github.com/lovasoa/fast_array_intersect.\n// MIT Licensed at the time of writing.\nexport function intersect(arrays) {\n    if (arrays.length === 0) {\n        return [];\n    }\n    else if (arrays.length === 1) {\n        return arrays[0];\n    }\n    for (let i = 1; i < arrays.length; i++) {\n        if (arrays[i].length < arrays[0].length) {\n            const tmp = arrays[0];\n            arrays[0] = arrays[i];\n            arrays[i] = tmp;\n        }\n    }\n    const set = new Map();\n    for (const elem of arrays[0]) {\n        set.set(elem, 1);\n    }\n    for (let i = 1; i < arrays.length; i++) {\n        let found = 0;\n        for (const elem of arrays[i]) {\n            const count = set.get(elem);\n            if (count === i) {\n                set.set(elem, count + 1);\n                found++;\n            }\n        }\n        if (found === 0)\n            return [];\n    }\n    return arrays[0].filter((e) => {\n        const count = set.get(e);\n        if (count !== undefined)\n            set.set(e, 0);\n        return count === arrays.length;\n    });\n}\nexport function getDocumentProperties(doc, paths) {\n    const properties = {};\n    const pathsLength = paths.length;\n    for (let i = 0; i < pathsLength; i++) {\n        const path = paths[i];\n        const pathTokens = path.split('.');\n        let current = doc;\n        const pathTokensLength = pathTokens.length;\n        for (let j = 0; j < pathTokensLength; j++) {\n            current = current[pathTokens[j]];\n            // We found an object but we were supposed to be done\n            if (typeof current === 'object') {\n                if (current !== null &&\n                    'lat' in current &&\n                    'lon' in current &&\n                    typeof current.lat === 'number' &&\n                    typeof current.lon === 'number') {\n                    current = properties[path] = current;\n                    break;\n                }\n                else if (!Array.isArray(current) && current !== null && j === pathTokensLength - 1) {\n                    current = undefined;\n                    break;\n                }\n            }\n            else if ((current === null || typeof current !== 'object') && j < pathTokensLength - 1) {\n                // We can't recurse anymore but we were supposed to\n                current = undefined;\n                break;\n            }\n        }\n        if (typeof current !== 'undefined') {\n            properties[path] = current;\n        }\n    }\n    return properties;\n}\nexport function getNested(obj, path) {\n    const props = getDocumentProperties(obj, [path]);\n    return props[path];\n}\nexport function flattenObject(obj, prefix = '') {\n    const result = {};\n    for (const key in obj) {\n        const prop = `${prefix}${key}`;\n        const objKey = obj[key];\n        if (typeof objKey === 'object' && objKey !== null) {\n            Object.assign(result, flattenObject(objKey, `${prop}.`));\n        }\n        else {\n            result[prop] = objKey;\n        }\n    }\n    return result;\n}\nconst mapDistanceToMeters = {\n    cm: 0.01,\n    m: 1,\n    km: 1000,\n    ft: 0.3048,\n    yd: 0.9144,\n    mi: 1609.344\n};\nexport function convertDistanceToMeters(distance, unit) {\n    const ratio = mapDistanceToMeters[unit];\n    if (ratio === undefined) {\n        throw new Error(createError('INVALID_DISTANCE_SUFFIX', distance).message);\n    }\n    return distance * ratio;\n}\nexport function removeVectorsFromHits(searchResult, vectorProperties) {\n    searchResult.hits = searchResult.hits.map((result) => ({\n        ...result,\n        document: {\n            ...result.document,\n            // Remove embeddings from the result\n            ...vectorProperties.reduce((acc, prop) => {\n                const path = prop.split('.');\n                const lastKey = path.pop();\n                let obj = acc;\n                for (const key of path) {\n                    obj[key] = obj[key] ?? {};\n                    obj = obj[key];\n                }\n                obj[lastKey] = null;\n                return acc;\n            }, result.document)\n        }\n    }));\n}\nexport function isPromise(obj) {\n    return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n/**\n * Checks if the provided input is an async function or if the input is an array\n * containing at least one async function.\n *\n * @param func - A single function or an array of functions to check.\n *               Non-function values are ignored.\n * @returns `true` if the input is an async function or an array containing at least\n *          one async function, otherwise `false`.\n */\nexport function isAsyncFunction(func) {\n    if (Array.isArray(func)) {\n        return func.some(item => isAsyncFunction(item));\n    }\n    return func?.constructor?.name === 'AsyncFunction';\n}\nconst withIntersection = 'intersection' in (new Set());\nexport function setIntersection(...sets) {\n    // Fast path 1\n    if (sets.length === 0) {\n        return new Set();\n    }\n    // Fast path 2\n    if (sets.length === 1) {\n        return sets[0];\n    }\n    // Fast path 3\n    if (sets.length === 2) {\n        const set1 = sets[0];\n        const set2 = sets[1];\n        if (withIntersection) {\n            return set1.intersection(set2);\n        }\n        const result = new Set();\n        const base = set1.size < set2.size ? set1 : set2;\n        const other = base === set1 ? set2 : set1;\n        for (const value of base) {\n            if (other.has(value)) {\n                result.add(value);\n            }\n        }\n        return result;\n    }\n    // Slow path\n    // Find the smallest set\n    const min = {\n        index: 0,\n        size: sets[0].size,\n    };\n    for (let i = 1; i < sets.length; i++) {\n        if (sets[i].size < min.size) {\n            min.index = i;\n            min.size = sets[i].size;\n        }\n    }\n    if (withIntersection) {\n        let base = sets[min.index];\n        for (let i = 0; i < sets.length; i++) {\n            if (i === min.index) {\n                continue;\n            }\n            base = base.intersection(sets[i]);\n        }\n        return base;\n    }\n    // manual implementation:\n    // intersect all sets with the smallest set\n    const base = sets[min.index];\n    for (let i = 0; i < sets.length; i++) {\n        if (i === min.index) {\n            continue;\n        }\n        const other = sets[i];\n        for (const value of base) {\n            if (!other.has(value)) {\n                base.delete(value);\n            }\n        }\n    }\n    return base;\n}\nconst withUnion = 'union' in (new Set());\nexport function setUnion(set1, set2) {\n    if (withUnion) {\n        if (set1) {\n            return set1.union(set2);\n        }\n        return set2;\n    }\n    if (!set1) {\n        return new Set(set2);\n    }\n    return new Set([...set1, ...set2]);\n}\n// This code is taken from https://github.com/davidmarkclements/atomic-sleep, MIT licensed at the time of commit b8149d3ca276c84a54fa8fa1478f9cc79aabc15a.\n// All credits go to the original author (David Mark Clements, https://github.com/davidmarkclements).\nexport function sleep(ms) {\n    if (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n        const nil = new Int32Array(new SharedArrayBuffer(4));\n        const valid = ms > 0 && ms < Infinity;\n        if (valid === false) {\n            if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n                throw TypeError('sleep: ms must be a number');\n            }\n            throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity');\n        }\n        Atomics.wait(nil, 0, 0, Number(ms));\n    }\n    else {\n        const valid = ms > 0 && ms < Infinity;\n        if (valid === false) {\n            if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n                throw TypeError('sleep: ms must be a number');\n            }\n            throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity');\n        }\n        const target = Date.now() + Number(ms);\n        while (target > Date.now()) { /* empty */ }\n    }\n}\n//# sourceMappingURL=utils.js.map","import { SUPPORTED_LANGUAGES } from './components/tokenizer/languages.js';\nimport { sprintf } from './utils.js';\nconst allLanguages = SUPPORTED_LANGUAGES.join('\\n - ');\nconst errors = {\n    NO_LANGUAGE_WITH_CUSTOM_TOKENIZER: 'Do not pass the language option to create when using a custom tokenizer.',\n    LANGUAGE_NOT_SUPPORTED: `Language \"%s\" is not supported.\\nSupported languages are:\\n - ${allLanguages}`,\n    INVALID_STEMMER_FUNCTION_TYPE: `config.stemmer property must be a function.`,\n    MISSING_STEMMER: `As of version 1.0.0 @orama/orama does not ship non English stemmers by default. To solve this, please explicitly import and specify the \"%s\" stemmer from the package @orama/stemmers. See https://docs.orama.com/open-source/text-analysis/stemming for more information.`,\n    CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY: 'Custom stop words array must only contain strings.',\n    UNSUPPORTED_COMPONENT: `Unsupported component \"%s\".`,\n    COMPONENT_MUST_BE_FUNCTION: `The component \"%s\" must be a function.`,\n    COMPONENT_MUST_BE_FUNCTION_OR_ARRAY_FUNCTIONS: `The component \"%s\" must be a function or an array of functions.`,\n    INVALID_SCHEMA_TYPE: `Unsupported schema type \"%s\" at \"%s\". Expected \"string\", \"boolean\" or \"number\" or array of them.`,\n    DOCUMENT_ID_MUST_BE_STRING: `Document id must be of type \"string\". Got \"%s\" instead.`,\n    DOCUMENT_ALREADY_EXISTS: `A document with id \"%s\" already exists.`,\n    DOCUMENT_DOES_NOT_EXIST: `A document with id \"%s\" does not exists.`,\n    MISSING_DOCUMENT_PROPERTY: `Missing searchable property \"%s\".`,\n    INVALID_DOCUMENT_PROPERTY: `Invalid document property \"%s\": expected \"%s\", got \"%s\"`,\n    UNKNOWN_INDEX: `Invalid property name \"%s\". Expected a wildcard string (\"*\") or array containing one of the following properties: %s`,\n    INVALID_BOOST_VALUE: `Boost value must be a number greater than, or less than 0.`,\n    INVALID_FILTER_OPERATION: `You can only use one operation per filter, you requested %d.`,\n    SCHEMA_VALIDATION_FAILURE: `Cannot insert document due schema validation failure on \"%s\" property.`,\n    INVALID_SORT_SCHEMA_TYPE: `Unsupported sort schema type \"%s\" at \"%s\". Expected \"string\" or \"number\".`,\n    CANNOT_SORT_BY_ARRAY: `Cannot configure sort for \"%s\" because it is an array (%s).`,\n    UNABLE_TO_SORT_ON_UNKNOWN_FIELD: `Unable to sort on unknown field \"%s\". Allowed fields: %s`,\n    SORT_DISABLED: `Sort is disabled. Please read the documentation at https://docs.oramasearch for more information.`,\n    UNKNOWN_GROUP_BY_PROPERTY: `Unknown groupBy property \"%s\".`,\n    INVALID_GROUP_BY_PROPERTY: `Invalid groupBy property \"%s\". Allowed types: \"%s\", but given \"%s\".`,\n    UNKNOWN_FILTER_PROPERTY: `Unknown filter property \"%s\".`,\n    INVALID_VECTOR_SIZE: `Vector size must be a number greater than 0. Got \"%s\" instead.`,\n    INVALID_VECTOR_VALUE: `Vector value must be a number greater than 0. Got \"%s\" instead.`,\n    INVALID_INPUT_VECTOR: `Property \"%s\" was declared as a %s-dimensional vector, but got a %s-dimensional vector instead.\\nInput vectors must be of the size declared in the schema, as calculating similarity between vectors of different sizes can lead to unexpected results.`,\n    WRONG_SEARCH_PROPERTY_TYPE: `Property \"%s\" is not searchable. Only \"string\" properties are searchable.`,\n    FACET_NOT_SUPPORTED: `Facet doens't support the type \"%s\".`,\n    INVALID_DISTANCE_SUFFIX: `Invalid distance suffix \"%s\". Valid suffixes are: cm, m, km, mi, yd, ft.`,\n    INVALID_SEARCH_MODE: `Invalid search mode \"%s\". Valid modes are: \"fulltext\", \"vector\", \"hybrid\".`,\n    MISSING_VECTOR_AND_SECURE_PROXY: `No vector was provided and no secure proxy was configured. Please provide a vector or configure an Orama Secure Proxy to perform hybrid search.`,\n    MISSING_TERM: `\"term\" is a required parameter when performing hybrid search. Please provide a search term.`,\n    INVALID_VECTOR_INPUT: `Invalid \"vector\" property. Expected an object with \"value\" and \"property\" properties, but got \"%s\" instead.`,\n    PLUGIN_CRASHED: `A plugin crashed during initialization. Please check the error message for more information:`,\n    PLUGIN_SECURE_PROXY_NOT_FOUND: `Could not find '@orama/secure-proxy-plugin' installed in your Orama instance.\\nPlease install it before proceeding with creating an answer session.\\nRead more at https://docs.orama.com/open-source/plugins/plugin-secure-proxy#plugin-secure-proxy\\n`,\n    PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL: `Could not find a chat model defined in the secure proxy plugin configuration.\\nPlease provide a chat model before proceeding with creating an answer session.\\nRead more at https://docs.orama.com/open-source/plugins/plugin-secure-proxy#plugin-secure-proxy\\n`,\n    ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT: `The last message in the session is not an assistant message. Cannot regenerate non-assistant messages.`,\n    PLUGIN_COMPONENT_CONFLICT: `The component \"%s\" is already defined. The plugin \"%s\" is trying to redefine it.`,\n};\nexport function createError(code, ...args) {\n    const error = new Error(sprintf(errors[code] ?? `Unsupported Orama Error code: ${code}`, ...args));\n    error.code = code;\n    if ('captureStackTrace' in Error.prototype) {\n        Error.captureStackTrace(error);\n    }\n    return error;\n}\n//# sourceMappingURL=errors.js.map","import { createError } from '../errors.js';\nimport { formatNanoseconds, uniqueId } from '../utils.js';\nexport { getDocumentProperties } from '../utils.js';\nexport function formatElapsedTime(n) {\n    return {\n        raw: Number(n),\n        formatted: formatNanoseconds(n)\n    };\n}\nexport function getDocumentIndexId(doc) {\n    if (doc.id) {\n        if (typeof doc.id !== 'string') {\n            throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof doc.id);\n        }\n        return doc.id;\n    }\n    return uniqueId();\n}\nexport function validateSchema(doc, schema) {\n    for (const [prop, type] of Object.entries(schema)) {\n        const value = doc[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        if (type === 'geopoint' &&\n            typeof value === 'object' &&\n            typeof value.lon === 'number' &&\n            typeof value.lat === 'number') {\n            continue;\n        }\n        if (type === 'enum' && (typeof value === 'string' || typeof value === 'number')) {\n            continue;\n        }\n        if (type === 'enum[]' && Array.isArray(value)) {\n            const valueLength = value.length;\n            for (let i = 0; i < valueLength; i++) {\n                if (typeof value[i] !== 'string' && typeof value[i] !== 'number') {\n                    return prop + '.' + i;\n                }\n            }\n            continue;\n        }\n        if (isVectorType(type)) {\n            const vectorSize = getVectorSize(type);\n            if (!Array.isArray(value) || value.length !== vectorSize) {\n                throw createError('INVALID_INPUT_VECTOR', prop, vectorSize, value.length);\n            }\n            continue;\n        }\n        if (isArrayType(type)) {\n            if (!Array.isArray(value)) {\n                return prop;\n            }\n            const expectedType = getInnerType(type);\n            const valueLength = value.length;\n            for (let i = 0; i < valueLength; i++) {\n                if (typeof value[i] !== expectedType) {\n                    return prop + '.' + i;\n                }\n            }\n            continue;\n        }\n        if (typeof type === 'object') {\n            if (!value || typeof value !== 'object') {\n                return prop;\n            }\n            // using as ResultDocument is not exactly right but trying to be type-safe here is not useful\n            const subProp = validateSchema(value, type);\n            if (subProp) {\n                return prop + '.' + subProp;\n            }\n            continue;\n        }\n        if (typeof value !== type) {\n            return prop;\n        }\n    }\n    return undefined;\n}\nconst IS_ARRAY_TYPE = {\n    string: false,\n    number: false,\n    boolean: false,\n    enum: false,\n    geopoint: false,\n    'string[]': true,\n    'number[]': true,\n    'boolean[]': true,\n    'enum[]': true\n};\nconst INNER_TYPE = {\n    'string[]': 'string',\n    'number[]': 'number',\n    'boolean[]': 'boolean',\n    'enum[]': 'enum'\n};\nexport function isGeoPointType(type) {\n    return type === 'geopoint';\n}\nexport function isVectorType(type) {\n    return typeof type === 'string' && /^vector\\[\\d+\\]$/.test(type);\n}\nexport function isArrayType(type) {\n    return typeof type === 'string' && IS_ARRAY_TYPE[type];\n}\nexport function getInnerType(type) {\n    return INNER_TYPE[type];\n}\nexport function getVectorSize(type) {\n    const size = Number(type.slice(7, -1));\n    switch (true) {\n        case isNaN(size):\n            throw createError('INVALID_VECTOR_VALUE', type);\n        case size <= 0:\n            throw createError('INVALID_VECTOR_SIZE', type);\n        default:\n            return size;\n    }\n}\n//# sourceMappingURL=defaults.js.map","export function createInternalDocumentIDStore() {\n    return {\n        idToInternalId: new Map(),\n        internalIdToId: [],\n        save,\n        load\n    };\n}\nexport function save(store) {\n    return {\n        internalIdToId: store.internalIdToId\n    };\n}\nexport function load(orama, raw) {\n    const { internalIdToId } = raw;\n    orama.internalDocumentIDStore.idToInternalId.clear();\n    orama.internalDocumentIDStore.internalIdToId = [];\n    const internalIdToIdLength = internalIdToId.length;\n    for (let i = 0; i < internalIdToIdLength; i++) {\n        const internalIdItem = internalIdToId[i];\n        orama.internalDocumentIDStore.idToInternalId.set(internalIdItem, i + 1);\n        orama.internalDocumentIDStore.internalIdToId.push(internalIdItem);\n    }\n}\nexport function getInternalDocumentId(store, id) {\n    if (typeof id === 'string') {\n        const internalId = store.idToInternalId.get(id);\n        if (internalId) {\n            return internalId;\n        }\n        const currentId = store.idToInternalId.size + 1;\n        store.idToInternalId.set(id, currentId);\n        store.internalIdToId.push(id);\n        return currentId;\n    }\n    if (id > store.internalIdToId.length) {\n        return getInternalDocumentId(store, id.toString());\n    }\n    return id;\n}\nexport function getDocumentIdFromInternalId(store, internalId) {\n    if (store.internalIdToId.length < internalId) {\n        throw new Error(`Invalid internalId ${internalId}`);\n    }\n    return store.internalIdToId[internalId - 1];\n}\n//# sourceMappingURL=internal-document-id-store.js.map","import { getInternalDocumentId } from './internal-document-id-store.js';\nexport function create(_, sharedInternalDocumentStore) {\n    return {\n        sharedInternalDocumentStore,\n        docs: {},\n        count: 0\n    };\n}\nexport function get(store, id) {\n    const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, id);\n    return store.docs[internalId];\n}\nexport function getMultiple(store, ids) {\n    const idsLength = ids.length;\n    const found = Array.from({ length: idsLength });\n    for (let i = 0; i < idsLength; i++) {\n        const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, ids[i]);\n        found[i] = store.docs[internalId];\n    }\n    return found;\n}\nexport function getAll(store) {\n    return store.docs;\n}\nexport function store(store, id, internalId, doc) {\n    if (typeof store.docs[internalId] !== 'undefined') {\n        return false;\n    }\n    store.docs[internalId] = doc;\n    store.count++;\n    return true;\n}\nexport function remove(store, id) {\n    const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, id);\n    if (typeof store.docs[internalId] === 'undefined') {\n        return false;\n    }\n    delete store.docs[internalId];\n    store.count--;\n    return true;\n}\nexport function count(store) {\n    return store.count;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawDocument = raw;\n    return {\n        docs: rawDocument.docs,\n        count: rawDocument.count,\n        sharedInternalDocumentStore\n    };\n}\nexport function save(store) {\n    return {\n        docs: store.docs,\n        count: store.count\n    };\n}\nexport function createDocumentsStore() {\n    return {\n        create,\n        get,\n        getMultiple,\n        getAll,\n        store,\n        remove,\n        count,\n        load,\n        save\n    };\n}\n//# sourceMappingURL=documents-store.js.map","import { createError } from '../errors.js';\nexport const AVAILABLE_PLUGIN_HOOKS = [\n    'beforeInsert',\n    'afterInsert',\n    'beforeRemove',\n    'afterRemove',\n    'beforeUpdate',\n    'afterUpdate',\n    'beforeSearch',\n    'afterSearch',\n    'beforeInsertMultiple',\n    'afterInsertMultiple',\n    'beforeRemoveMultiple',\n    'afterRemoveMultiple',\n    'beforeUpdateMultiple',\n    'afterUpdateMultiple',\n    'beforeLoad',\n    'afterLoad',\n    'afterCreate'\n];\nexport function getAllPluginsByHook(orama, hook) {\n    const pluginsToRun = [];\n    const pluginsLength = orama.plugins?.length;\n    if (!pluginsLength) {\n        return pluginsToRun;\n    }\n    for (let i = 0; i < pluginsLength; i++) {\n        try {\n            const plugin = orama.plugins[i];\n            if (typeof plugin[hook] === 'function') {\n                pluginsToRun.push(plugin[hook]);\n            }\n        }\n        catch (error) {\n            console.error('Caught error in getAllPluginsByHook:', error);\n            throw createError('PLUGIN_CRASHED');\n        }\n    }\n    return pluginsToRun;\n}\n//# sourceMappingURL=plugins.js.map","import { isAsyncFunction } from '../utils.js';\nexport const OBJECT_COMPONENTS = ['tokenizer', 'index', 'documentsStore', 'sorter'];\nexport const FUNCTION_COMPONENTS = [\n    'validateSchema',\n    'getDocumentIndexId',\n    'getDocumentProperties',\n    'formatElapsedTime'\n];\nexport const SINGLE_OR_ARRAY_COMPONENTS = [\n/* deprecated with v2.0.0-beta.5 */\n];\nexport function runSingleHook(hooks, orama, id, doc) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(orama, id, doc);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(orama, id, doc);\n        }\n    }\n}\nexport function runMultipleHook(hooks, orama, docsOrIds) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(orama, docsOrIds);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(orama, docsOrIds);\n        }\n    }\n}\nexport function runAfterSearch(hooks, db, params, language, results) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db, params, language, results);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db, params, language, results);\n        }\n    }\n}\nexport function runBeforeSearch(hooks, db, params, language) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db, params, language);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db, params, language);\n        }\n    }\n}\nexport function runAfterCreate(hooks, db) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db);\n        }\n    }\n}\n//# sourceMappingURL=hooks.js.map","import { setUnion } from '../utils.js';\nexport class AVLNode {\n    k;\n    v;\n    l = null;\n    r = null;\n    h = 1;\n    constructor(key, value) {\n        this.k = key;\n        this.v = new Set(value);\n    }\n    updateHeight() {\n        this.h = Math.max(AVLNode.getHeight(this.l), AVLNode.getHeight(this.r)) + 1;\n    }\n    static getHeight(node) {\n        return node ? node.h : 0;\n    }\n    getBalanceFactor() {\n        return AVLNode.getHeight(this.l) - AVLNode.getHeight(this.r);\n    }\n    rotateLeft() {\n        const newRoot = this.r;\n        this.r = newRoot.l;\n        newRoot.l = this;\n        this.updateHeight();\n        newRoot.updateHeight();\n        return newRoot;\n    }\n    rotateRight() {\n        const newRoot = this.l;\n        this.l = newRoot.r;\n        newRoot.r = this;\n        this.updateHeight();\n        newRoot.updateHeight();\n        return newRoot;\n    }\n    toJSON() {\n        return {\n            k: this.k,\n            v: Array.from(this.v),\n            l: this.l ? this.l.toJSON() : null,\n            r: this.r ? this.r.toJSON() : null,\n            h: this.h\n        };\n    }\n    static fromJSON(json) {\n        const node = new AVLNode(json.k, json.v);\n        node.l = json.l ? AVLNode.fromJSON(json.l) : null;\n        node.r = json.r ? AVLNode.fromJSON(json.r) : null;\n        node.h = json.h;\n        return node;\n    }\n}\nexport class AVLTree {\n    root = null;\n    insertCount = 0;\n    constructor(key, value) {\n        if (key !== undefined && value !== undefined) {\n            this.root = new AVLNode(key, value);\n        }\n    }\n    insert(key, value, rebalanceThreshold = 1000) {\n        this.root = this.insertNode(this.root, key, value, rebalanceThreshold);\n    }\n    insertMultiple(key, value, rebalanceThreshold = 1000) {\n        for (const v of value) {\n            this.insert(key, v, rebalanceThreshold);\n        }\n    }\n    // Rebalance the tree if the insert count reaches the threshold.\n    // This will improve insertion performance since we won't be rebalancing the tree on every insert.\n    // When inserting docs using `insertMultiple`, the threshold will be set to the number of docs being inserted.\n    // We can force rebalancing the tree by setting the threshold to 1 (default).\n    rebalance() {\n        if (this.root) {\n            this.root = this.rebalanceNode(this.root);\n        }\n    }\n    toJSON() {\n        return {\n            root: this.root ? this.root.toJSON() : null,\n            insertCount: this.insertCount\n        };\n    }\n    static fromJSON(json) {\n        const tree = new AVLTree();\n        tree.root = json.root ? AVLNode.fromJSON(json.root) : null;\n        tree.insertCount = json.insertCount || 0;\n        return tree;\n    }\n    insertNode(node, key, value, rebalanceThreshold) {\n        if (node === null) {\n            return new AVLNode(key, [value]);\n        }\n        const path = [];\n        let current = node;\n        let parent = null;\n        while (current !== null) {\n            path.push({ parent, node: current });\n            if (key < current.k) {\n                if (current.l === null) {\n                    current.l = new AVLNode(key, [value]);\n                    path.push({ parent: current, node: current.l });\n                    break;\n                }\n                else {\n                    parent = current;\n                    current = current.l;\n                }\n            }\n            else if (key > current.k) {\n                if (current.r === null) {\n                    current.r = new AVLNode(key, [value]);\n                    path.push({ parent: current, node: current.r });\n                    break;\n                }\n                else {\n                    parent = current;\n                    current = current.r;\n                }\n            }\n            else {\n                // Key already exists\n                current.v.add(value);\n                /*\n                if (Array.isArray(current.v)) {\n                  if (Array.isArray(value)) {\n                    ;(current.v as any[]).push(...(value as V[]))\n                  } else {\n                    ;(current.v as any[]).push(value)\n                  }\n                } else {\n                  current.v = new Set([value])\n                }\n                */\n                return node;\n            }\n        }\n        // Update heights and rebalance if necessary\n        let needRebalance = false;\n        if (this.insertCount++ % rebalanceThreshold === 0) {\n            needRebalance = true;\n        }\n        for (let i = path.length - 1; i >= 0; i--) {\n            const { parent, node: currentNode } = path[i];\n            currentNode.updateHeight();\n            if (needRebalance) {\n                const rebalancedNode = this.rebalanceNode(currentNode);\n                if (parent) {\n                    if (parent.l === currentNode) {\n                        parent.l = rebalancedNode;\n                    }\n                    else if (parent.r === currentNode) {\n                        parent.r = rebalancedNode;\n                    }\n                }\n                else {\n                    // This is the root node\n                    node = rebalancedNode;\n                }\n            }\n        }\n        return node;\n    }\n    rebalanceNode(node) {\n        const balanceFactor = node.getBalanceFactor();\n        if (balanceFactor > 1) {\n            // Left heavy\n            if (node.l && node.l.getBalanceFactor() >= 0) {\n                // Left Left Case\n                return node.rotateRight();\n            }\n            else if (node.l) {\n                // Left Right Case\n                node.l = node.l.rotateLeft();\n                return node.rotateRight();\n            }\n        }\n        if (balanceFactor < -1) {\n            // Right heavy\n            if (node.r && node.r.getBalanceFactor() <= 0) {\n                // Right Right Case\n                return node.rotateLeft();\n            }\n            else if (node.r) {\n                // Right Left Case\n                node.r = node.r.rotateRight();\n                return node.rotateLeft();\n            }\n        }\n        return node;\n    }\n    find(key) {\n        const node = this.findNodeByKey(key);\n        return node ? node.v : null;\n    }\n    contains(key) {\n        return this.find(key) !== null;\n    }\n    getSize() {\n        let count = 0;\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            count++;\n            current = current.r;\n        }\n        return count;\n    }\n    isBalanced() {\n        if (!this.root)\n            return true;\n        const stack = [this.root];\n        while (stack.length > 0) {\n            const node = stack.pop();\n            const balanceFactor = node.getBalanceFactor();\n            if (Math.abs(balanceFactor) > 1) {\n                return false;\n            }\n            if (node.l)\n                stack.push(node.l);\n            if (node.r)\n                stack.push(node.r);\n        }\n        return true;\n    }\n    remove(key) {\n        this.root = this.removeNode(this.root, key);\n    }\n    removeDocument(key, id) {\n        const node = this.findNodeByKey(key);\n        if (!node) {\n            return;\n        }\n        if (node.v.size === 1) {\n            this.root = this.removeNode(this.root, key);\n        }\n        else {\n            node.v = new Set([...node.v.values()].filter((v) => v !== id));\n        }\n    }\n    findNodeByKey(key) {\n        let node = this.root;\n        while (node) {\n            if (key < node.k) {\n                node = node.l;\n            }\n            else if (key > node.k) {\n                node = node.r;\n            }\n            else {\n                return node;\n            }\n        }\n        return null;\n    }\n    removeNode(node, key) {\n        if (node === null)\n            return null;\n        const path = [];\n        let current = node;\n        while (current !== null && current.k !== key) {\n            path.push(current);\n            if (key < current.k) {\n                current = current.l;\n            }\n            else {\n                current = current.r;\n            }\n        }\n        if (current === null) {\n            // Key not found\n            return node;\n        }\n        // Node with only one child or no child\n        if (current.l === null || current.r === null) {\n            const child = current.l ? current.l : current.r;\n            if (path.length === 0) {\n                // Node to be deleted is root\n                node = child;\n            }\n            else {\n                const parent = path[path.length - 1];\n                if (parent.l === current) {\n                    parent.l = child;\n                }\n                else {\n                    parent.r = child;\n                }\n            }\n        }\n        else {\n            // Node with two children: Get the inorder successor\n            let successorParent = current;\n            let successor = current.r;\n            while (successor.l !== null) {\n                successorParent = successor;\n                successor = successor.l;\n            }\n            // Copy the successor's content to current node\n            current.k = successor.k;\n            current.v = successor.v;\n            // Delete the successor\n            if (successorParent.l === successor) {\n                successorParent.l = successor.r;\n            }\n            else {\n                successorParent.r = successor.r;\n            }\n            current = successorParent;\n        }\n        // Update heights and rebalance\n        path.push(current);\n        for (let i = path.length - 1; i >= 0; i--) {\n            const currentNode = path[i];\n            currentNode.updateHeight();\n            const rebalancedNode = this.rebalanceNode(currentNode);\n            if (i > 0) {\n                const parent = path[i - 1];\n                if (parent.l === currentNode) {\n                    parent.l = rebalancedNode;\n                }\n                else if (parent.r === currentNode) {\n                    parent.r = rebalancedNode;\n                }\n            }\n            else {\n                // Root node\n                node = rebalancedNode;\n            }\n        }\n        return node;\n    }\n    rangeSearch(min, max) {\n        let result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            if (current.k >= min && current.k <= max) {\n                result = setUnion(result, current.v);\n            }\n            if (current.k > max) {\n                break;\n            }\n            current = current.r;\n        }\n        return result;\n    }\n    greaterThan(key, inclusive = false) {\n        let result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.r; // Traverse right subtree first\n            }\n            current = stack.pop();\n            if ((inclusive && current.k >= key) || (!inclusive && current.k > key)) {\n                result = setUnion(result, current.v);\n            }\n            else if (current.k <= key) {\n                break; // Since we're traversing in descending order, we can break early\n            }\n            current = current.l;\n        }\n        return result;\n    }\n    lessThan(key, inclusive = false) {\n        let result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            if ((inclusive && current.k <= key) || (!inclusive && current.k < key)) {\n                result = setUnion(result, current.v);\n            }\n            else if (current.k > key) {\n                break; // Since we're traversing in ascending order, we can break early\n            }\n            current = current.r;\n        }\n        return result;\n    }\n}\n//# sourceMappingURL=avl.js.map","export class FlatTree {\n    numberToDocumentId;\n    constructor() {\n        this.numberToDocumentId = new Map();\n    }\n    insert(key, value) {\n        if (this.numberToDocumentId.has(key)) {\n            this.numberToDocumentId.get(key).add(value);\n        }\n        else {\n            this.numberToDocumentId.set(key, new Set([value]));\n        }\n    }\n    find(key) {\n        const idSet = this.numberToDocumentId.get(key);\n        return idSet ? Array.from(idSet) : null;\n    }\n    remove(key) {\n        this.numberToDocumentId.delete(key);\n    }\n    removeDocument(id, key) {\n        const idSet = this.numberToDocumentId.get(key);\n        if (idSet) {\n            idSet.delete(id);\n            if (idSet.size === 0) {\n                this.numberToDocumentId.delete(key);\n            }\n        }\n    }\n    contains(key) {\n        return this.numberToDocumentId.has(key);\n    }\n    getSize() {\n        let size = 0;\n        for (const idSet of this.numberToDocumentId.values()) {\n            size += idSet.size;\n        }\n        return size;\n    }\n    filter(operation) {\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length !== 1) {\n            throw new Error('Invalid operation');\n        }\n        const operationType = operationKeys[0];\n        switch (operationType) {\n            case 'eq': {\n                const value = operation[operationType];\n                const idSet = this.numberToDocumentId.get(value);\n                return idSet ? Array.from(idSet) : [];\n            }\n            case 'in': {\n                const values = operation[operationType];\n                const resultSet = new Set();\n                for (const value of values) {\n                    const idSet = this.numberToDocumentId.get(value);\n                    if (idSet) {\n                        for (const id of idSet) {\n                            resultSet.add(id);\n                        }\n                    }\n                }\n                return Array.from(resultSet);\n            }\n            case 'nin': {\n                const excludeValues = new Set(operation[operationType]);\n                const resultSet = new Set();\n                for (const [key, idSet] of this.numberToDocumentId.entries()) {\n                    if (!excludeValues.has(key)) {\n                        for (const id of idSet) {\n                            resultSet.add(id);\n                        }\n                    }\n                }\n                return Array.from(resultSet);\n            }\n            default:\n                throw new Error('Invalid operation');\n        }\n    }\n    filterArr(operation) {\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length !== 1) {\n            throw new Error('Invalid operation');\n        }\n        const operationType = operationKeys[0];\n        switch (operationType) {\n            case 'containsAll': {\n                const values = operation[operationType];\n                const idSets = values.map((value) => this.numberToDocumentId.get(value) ?? new Set());\n                if (idSets.length === 0)\n                    return [];\n                const intersection = idSets.reduce((prev, curr) => {\n                    return new Set([...prev].filter((id) => curr.has(id)));\n                });\n                return Array.from(intersection);\n            }\n            case 'containsAny': {\n                const values = operation[operationType];\n                const idSets = values.map((value) => this.numberToDocumentId.get(value) ?? new Set());\n                if (idSets.length === 0)\n                    return [];\n                const union = idSets.reduce((prev, curr) => {\n                    return new Set([...prev, ...curr]);\n                });\n                return Array.from(union);\n            }\n            default:\n                throw new Error('Invalid operation');\n        }\n    }\n    static fromJSON(json) {\n        if (!json.numberToDocumentId) {\n            throw new Error('Invalid Flat Tree JSON');\n        }\n        const tree = new FlatTree();\n        for (const [key, ids] of json.numberToDocumentId) {\n            tree.numberToDocumentId.set(key, new Set(ids));\n        }\n        return tree;\n    }\n    toJSON() {\n        return {\n            numberToDocumentId: Array.from(this.numberToDocumentId.entries()).map(([key, idSet]) => [key, Array.from(idSet)])\n        };\n    }\n}\n//# sourceMappingURL=flat.js.map","/**\n * Inspired by:\n * https://github.com/Yomguithereal/talisman/blob/86ae55cbd040ff021d05e282e0e6c71f2dde21f8/src/metrics/levenshtein.js#L218-L340\n */\nfunction _boundedLevenshtein(term, word, tolerance) {\n    // Handle base cases\n    if (tolerance < 0)\n        return -1;\n    if (term === word)\n        return 0;\n    const m = term.length;\n    const n = word.length;\n    // Special case for empty strings\n    if (m === 0)\n        return n <= tolerance ? n : -1;\n    if (n === 0)\n        return m <= tolerance ? m : -1;\n    // term = term.toLowerCase()\n    // word = word.toLowerCase()\n    const diff = Math.abs(m - n);\n    // Special case for prefixes\n    // If the searching word starts with the indexed word, return early.\n    if (term.startsWith(word)) {\n        // We just check if the remaining characters are within the tolerance\n        return diff <= tolerance ? diff : -1;\n    }\n    // If the indexed word starts with the searching word, return early.\n    if (word.startsWith(term)) {\n        // any prefixed word is within the tolerance\n        return 0;\n    }\n    // If the length difference is greater than the tolerance, return early\n    if (diff > tolerance)\n        return -1;\n    // Initialize the matrix\n    const matrix = [];\n    for (let i = 0; i <= m; i++) {\n        matrix[i] = [i];\n        for (let j = 1; j <= n; j++) {\n            matrix[i][j] = i === 0 ? j : 0;\n        }\n    }\n    // Fill the matrix\n    for (let i = 1; i <= m; i++) {\n        let rowMin = Infinity;\n        for (let j = 1; j <= n; j++) {\n            if (term[i - 1] === word[j - 1]) {\n                matrix[i][j] = matrix[i - 1][j - 1];\n            }\n            else {\n                matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion\n                matrix[i][j - 1] + 1, // insertion\n                matrix[i - 1][j - 1] + 1 // substitution\n                );\n            }\n            rowMin = Math.min(rowMin, matrix[i][j]);\n        }\n        // Early termination if all values in this row exceed tolerance\n        if (rowMin > tolerance) {\n            return -1;\n        }\n    }\n    return matrix[m][n] <= tolerance ? matrix[m][n] : -1;\n}\n/**\n * Computes the Levenshtein distance between two strings (a, b), returning early with -1 if the distance\n * is greater than the given tolerance.\n * It assumes that:\n * - tolerance >= ||a| - |b|| >= 0\n */\nexport function boundedLevenshtein(term, w, tolerance) {\n    const distance = _boundedLevenshtein(term, w, tolerance);\n    return {\n        distance,\n        isBounded: distance >= 0\n    };\n}\n// This is only used internally, keep in sync with the previous one\nexport function syncBoundedLevenshtein(term, w, tolerance) {\n    const distance = _boundedLevenshtein(term, w, tolerance);\n    return {\n        distance,\n        isBounded: distance >= 0\n    };\n}\nexport function levenshtein(a, b) {\n    /* c8 ignore next 3 */\n    if (!a.length) {\n        return b.length;\n    }\n    /* c8 ignore next 3 */\n    if (!b.length) {\n        return a.length;\n    }\n    const swap = a;\n    if (a.length > b.length) {\n        a = b;\n        b = swap;\n    }\n    const row = Array.from({ length: a.length + 1 }, (_, i) => i);\n    let val = 0;\n    for (let i = 1; i <= b.length; i++) {\n        let prev = i;\n        for (let j = 1; j <= a.length; j++) {\n            if (b[i - 1] === a[j - 1]) {\n                val = row[j - 1];\n            }\n            else {\n                val = Math.min(row[j - 1] + 1, Math.min(prev + 1, row[j] + 1));\n            }\n            row[j - 1] = prev;\n            prev = val;\n        }\n        row[a.length] = prev;\n    }\n    return row[a.length];\n}\n//# sourceMappingURL=levenshtein.js.map","/* eslint-disable @typescript-eslint/no-this-alias */\nimport { syncBoundedLevenshtein } from '../components/levenshtein.js';\nimport { getOwnProperty } from '../utils.js';\nexport class RadixNode {\n    // Node key\n    k;\n    // Node subword\n    s;\n    // Node children\n    c = new Map();\n    // Node documents\n    d = new Set();\n    // Node end\n    e;\n    // Node word\n    w = '';\n    constructor(key, subWord, end) {\n        this.k = key;\n        this.s = subWord;\n        this.e = end;\n    }\n    updateParent(parent) {\n        this.w = parent.w + this.s;\n    }\n    addDocument(docID) {\n        this.d.add(docID);\n    }\n    removeDocument(docID) {\n        return this.d.delete(docID);\n    }\n    findAllWords(output, term, exact, tolerance) {\n        const stack = [this];\n        while (stack.length > 0) {\n            const node = stack.pop();\n            if (node.e) {\n                const { w, d: docIDs } = node;\n                if (exact && w !== term) {\n                    continue;\n                }\n                // check if _output[w] exists and then add the doc to it\n                // always check in own property to prevent access to inherited properties\n                // fix https://github.com/oramasearch/orama/issues/137\n                if (getOwnProperty(output, w) !== null) {\n                    if (tolerance) {\n                        const difference = Math.abs(term.length - w.length);\n                        if (difference <= tolerance && syncBoundedLevenshtein(term, w, tolerance).isBounded) {\n                            output[w] = [];\n                        }\n                        else {\n                            continue;\n                        }\n                    }\n                    else {\n                        output[w] = [];\n                    }\n                }\n                // check if _output[w] exists and then add the doc to it\n                // always check in own property to prevent access to inherited properties\n                // fix https://github.com/oramasearch/orama/issues/137\n                if (getOwnProperty(output, w) != null && docIDs.size > 0) {\n                    const docs = output[w];\n                    for (const docID of docIDs) {\n                        if (!docs.includes(docID)) {\n                            docs.push(docID);\n                        }\n                    }\n                }\n            }\n            if (node.c.size > 0) {\n                stack.push(...node.c.values());\n            }\n        }\n        return output;\n    }\n    insert(word, docId) {\n        let node = this;\n        let i = 0;\n        const wordLength = word.length;\n        while (i < wordLength) {\n            const currentCharacter = word[i];\n            const childNode = node.c.get(currentCharacter);\n            if (childNode) {\n                const edgeLabel = childNode.s;\n                const edgeLabelLength = edgeLabel.length;\n                let j = 0;\n                // Find the common prefix length between edgeLabel and the remaining word\n                while (j < edgeLabelLength && i + j < wordLength && edgeLabel[j] === word[i + j]) {\n                    j++;\n                }\n                if (j === edgeLabelLength) {\n                    // Edge label fully matches; proceed to the child node\n                    node = childNode;\n                    i += j;\n                    if (i === wordLength) {\n                        // The word is a prefix of an existing word\n                        if (!childNode.e) {\n                            childNode.e = true;\n                        }\n                        childNode.addDocument(docId);\n                        return;\n                    }\n                    continue;\n                }\n                // Split the edgeLabel at the common prefix\n                const commonPrefix = edgeLabel.slice(0, j);\n                const newEdgeLabel = edgeLabel.slice(j);\n                const newWordLabel = word.slice(i + j);\n                // Create an intermediate node for the common prefix\n                const inbetweenNode = new RadixNode(commonPrefix[0], commonPrefix, false);\n                node.c.set(commonPrefix[0], inbetweenNode);\n                inbetweenNode.updateParent(node);\n                // Update the existing childNode\n                childNode.s = newEdgeLabel;\n                childNode.k = newEdgeLabel[0];\n                inbetweenNode.c.set(newEdgeLabel[0], childNode);\n                childNode.updateParent(inbetweenNode);\n                if (newWordLabel) {\n                    // Create a new node for the remaining part of the word\n                    const newNode = new RadixNode(newWordLabel[0], newWordLabel, true);\n                    newNode.addDocument(docId);\n                    inbetweenNode.c.set(newWordLabel[0], newNode);\n                    newNode.updateParent(inbetweenNode);\n                }\n                else {\n                    // The word ends at the inbetweenNode\n                    inbetweenNode.e = true;\n                    inbetweenNode.addDocument(docId);\n                }\n                return;\n            }\n            else {\n                // No matching child; create a new node\n                const newNode = new RadixNode(currentCharacter, word.slice(i), true);\n                newNode.addDocument(docId);\n                node.c.set(currentCharacter, newNode);\n                newNode.updateParent(node);\n                return;\n            }\n        }\n        // If we reach here, the word already exists in the tree\n        if (!node.e) {\n            node.e = true;\n        }\n        node.addDocument(docId);\n    }\n    _findLevenshtein(term, index, tolerance, originalTolerance, output) {\n        const stack = [{ node: this, index, tolerance }];\n        while (stack.length > 0) {\n            const { node, index, tolerance } = stack.pop();\n            if (node.w.startsWith(term)) {\n                node.findAllWords(output, term, false, 0);\n                continue;\n            }\n            if (tolerance < 0) {\n                continue;\n            }\n            if (node.e) {\n                const { w, d: docIDs } = node;\n                if (w) {\n                    if (syncBoundedLevenshtein(term, w, originalTolerance).isBounded) {\n                        output[w] = [];\n                    }\n                    if (getOwnProperty(output, w) !== undefined && docIDs.size > 0) {\n                        const docs = new Set(output[w]);\n                        for (const docID of docIDs) {\n                            docs.add(docID);\n                        }\n                        output[w] = Array.from(docs);\n                    }\n                }\n            }\n            if (index >= term.length) {\n                continue;\n            }\n            const currentChar = term[index];\n            // 1. If node has child matching term[index], push { node: childNode, index +1, tolerance }\n            if (node.c.has(currentChar)) {\n                const childNode = node.c.get(currentChar);\n                stack.push({ node: childNode, index: index + 1, tolerance });\n            }\n            // 2. Push { node, index +1, tolerance -1 } (Delete operation)\n            stack.push({ node: node, index: index + 1, tolerance: tolerance - 1 });\n            // 3. For each child:\n            for (const [character, childNode] of node.c) {\n                // a) Insert operation\n                stack.push({ node: childNode, index: index, tolerance: tolerance - 1 });\n                // b) Substitute operation\n                if (character !== currentChar) {\n                    stack.push({ node: childNode, index: index + 1, tolerance: tolerance - 1 });\n                }\n            }\n        }\n    }\n    find(params) {\n        const { term, exact, tolerance } = params;\n        if (tolerance && !exact) {\n            const output = {};\n            this._findLevenshtein(term, 0, tolerance, tolerance, output);\n            return output;\n        }\n        else {\n            let node = this;\n            let i = 0;\n            const termLength = term.length;\n            while (i < termLength) {\n                const character = term[i];\n                const childNode = node.c.get(character);\n                if (childNode) {\n                    const edgeLabel = childNode.s;\n                    const edgeLabelLength = edgeLabel.length;\n                    let j = 0;\n                    // Compare edge label with the term starting from position i\n                    while (j < edgeLabelLength && i + j < termLength && edgeLabel[j] === term[i + j]) {\n                        j++;\n                    }\n                    if (j === edgeLabelLength) {\n                        // Full match of edge label; proceed to the child node\n                        node = childNode;\n                        i += j;\n                    }\n                    else if (i + j === termLength) {\n                        // The term ends in the middle of the edge label\n                        if (exact) {\n                            // Exact match required but term doesn't end at a node\n                            return {};\n                        }\n                        else {\n                            // Partial match; collect words starting from this node\n                            const output = {};\n                            childNode.findAllWords(output, term, exact, tolerance);\n                            return output;\n                        }\n                    }\n                    else {\n                        // Mismatch found\n                        return {};\n                    }\n                }\n                else {\n                    // No matching child node\n                    return {};\n                }\n            }\n            // Term fully matched; collect words starting from this node\n            const output = {};\n            node.findAllWords(output, term, exact, tolerance);\n            return output;\n        }\n    }\n    contains(term) {\n        let node = this;\n        let i = 0;\n        const termLength = term.length;\n        while (i < termLength) {\n            const character = term[i];\n            const childNode = node.c.get(character);\n            if (childNode) {\n                const edgeLabel = childNode.s;\n                const edgeLabelLength = edgeLabel.length;\n                let j = 0;\n                while (j < edgeLabelLength && i + j < termLength && edgeLabel[j] === term[i + j]) {\n                    j++;\n                }\n                if (j < edgeLabelLength) {\n                    return false;\n                }\n                i += edgeLabelLength;\n                node = childNode;\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    }\n    removeWord(term) {\n        if (!term) {\n            return false;\n        }\n        let node = this;\n        const termLength = term.length;\n        const stack = [];\n        for (let i = 0; i < termLength; i++) {\n            const character = term[i];\n            if (node.c.has(character)) {\n                const childNode = node.c.get(character);\n                stack.push({ parent: node, character });\n                i += childNode.s.length - 1;\n                node = childNode;\n            }\n            else {\n                return false;\n            }\n        }\n        // Remove documents from the node\n        node.d.clear();\n        node.e = false;\n        // Clean up any nodes that no longer lead to a word\n        while (stack.length > 0 && node.c.size === 0 && !node.e && node.d.size === 0) {\n            const { parent, character } = stack.pop();\n            parent.c.delete(character);\n            node = parent;\n        }\n        return true;\n    }\n    removeDocumentByWord(term, docID, exact = true) {\n        if (!term) {\n            return true;\n        }\n        let node = this;\n        const termLength = term.length;\n        for (let i = 0; i < termLength; i++) {\n            const character = term[i];\n            if (node.c.has(character)) {\n                const childNode = node.c.get(character);\n                i += childNode.s.length - 1;\n                node = childNode;\n                if (exact && node.w !== term) {\n                    // Do nothing if the exact condition is not met.\n                }\n                else {\n                    node.removeDocument(docID);\n                }\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    }\n    static getCommonPrefix(a, b) {\n        const len = Math.min(a.length, b.length);\n        let i = 0;\n        while (i < len && a.charCodeAt(i) === b.charCodeAt(i)) {\n            i++;\n        }\n        return a.slice(0, i);\n    }\n    toJSON() {\n        return {\n            w: this.w,\n            s: this.s,\n            e: this.e,\n            k: this.k,\n            d: Array.from(this.d),\n            c: Array.from(this.c?.entries())?.map(([key, node]) => [key, node.toJSON()])\n        };\n    }\n    static fromJSON(json) {\n        const node = new RadixNode(json.k, json.s, json.e);\n        node.w = json.w;\n        node.d = new Set(json.d);\n        node.c = new Map(json?.c?.map(([key, nodeJson]) => [key, RadixNode.fromJSON(nodeJson)]));\n        return node;\n    }\n}\nexport class RadixTree extends RadixNode {\n    constructor() {\n        super('', '', false);\n    }\n    static fromJSON(json) {\n        const tree = new RadixTree();\n        tree.w = json.w;\n        tree.s = json.s;\n        tree.e = json.e;\n        tree.k = json.k;\n        tree.d = new Set(json.d);\n        tree.c = new Map(json.c?.map(([key, nodeJson]) => [key, RadixNode.fromJSON(nodeJson)]));\n        return tree;\n    }\n    toJSON() {\n        return super.toJSON();\n    }\n}\n//# sourceMappingURL=radix.js.map","const K = 2; // 2D points\nconst EARTH_RADIUS = 6371e3; // Earth radius in meters\nclass BKDNode {\n    point;\n    docIDs;\n    left;\n    right;\n    parent;\n    constructor(point, docIDs) {\n        this.point = point;\n        this.docIDs = new Set(docIDs);\n        this.left = null;\n        this.right = null;\n        this.parent = null;\n    }\n    toJSON() {\n        return {\n            point: this.point,\n            docIDs: Array.from(this.docIDs),\n            left: this.left ? this.left.toJSON() : null,\n            right: this.right ? this.right.toJSON() : null\n        };\n    }\n    static fromJSON(json, parent = null) {\n        const node = new BKDNode(json.point, json.docIDs);\n        node.parent = parent;\n        if (json.left) {\n            node.left = BKDNode.fromJSON(json.left, node);\n        }\n        if (json.right) {\n            node.right = BKDNode.fromJSON(json.right, node);\n        }\n        return node;\n    }\n}\nexport class BKDTree {\n    root;\n    nodeMap;\n    constructor() {\n        this.root = null;\n        this.nodeMap = new Map();\n    }\n    getPointKey(point) {\n        return `${point.lon},${point.lat}`;\n    }\n    insert(point, docIDs) {\n        const pointKey = this.getPointKey(point);\n        const existingNode = this.nodeMap.get(pointKey);\n        if (existingNode) {\n            docIDs.forEach((id) => existingNode.docIDs.add(id));\n            return;\n        }\n        const newNode = new BKDNode(point, docIDs);\n        this.nodeMap.set(pointKey, newNode);\n        if (this.root == null) {\n            this.root = newNode;\n            return;\n        }\n        let node = this.root;\n        let depth = 0;\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const axis = depth % K;\n            if (axis === 0) {\n                if (point.lon < node.point.lon) {\n                    if (node.left == null) {\n                        node.left = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.left;\n                }\n                else {\n                    if (node.right == null) {\n                        node.right = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.right;\n                }\n            }\n            else {\n                if (point.lat < node.point.lat) {\n                    if (node.left == null) {\n                        node.left = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.left;\n                }\n                else {\n                    if (node.right == null) {\n                        node.right = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.right;\n                }\n            }\n            depth++;\n        }\n    }\n    contains(point) {\n        const pointKey = this.getPointKey(point);\n        return this.nodeMap.has(pointKey);\n    }\n    getDocIDsByCoordinates(point) {\n        const pointKey = this.getPointKey(point);\n        const node = this.nodeMap.get(pointKey);\n        if (node) {\n            return Array.from(node.docIDs);\n        }\n        return null;\n    }\n    removeDocByID(point, docID) {\n        const pointKey = this.getPointKey(point);\n        const node = this.nodeMap.get(pointKey);\n        if (node) {\n            node.docIDs.delete(docID);\n            if (node.docIDs.size === 0) {\n                this.nodeMap.delete(pointKey);\n                this.deleteNode(node);\n            }\n        }\n    }\n    deleteNode(node) {\n        const parent = node.parent;\n        const child = node.left ? node.left : node.right;\n        if (child) {\n            child.parent = parent;\n        }\n        if (parent) {\n            if (parent.left === node) {\n                parent.left = child;\n            }\n            else if (parent.right === node) {\n                parent.right = child;\n            }\n        }\n        else {\n            this.root = child;\n            if (this.root) {\n                this.root.parent = null;\n            }\n        }\n    }\n    searchByRadius(center, radius, inclusive = true, sort = 'asc', highPrecision = false) {\n        const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n        const stack = [{ node: this.root, depth: 0 }];\n        const result = [];\n        while (stack.length > 0) {\n            const { node, depth } = stack.pop();\n            if (node == null)\n                continue;\n            const dist = distanceFn(center, node.point);\n            if (inclusive ? dist <= radius : dist > radius) {\n                result.push({ point: node.point, docIDs: Array.from(node.docIDs) });\n            }\n            if (node.left != null) {\n                stack.push({ node: node.left, depth: depth + 1 });\n            }\n            if (node.right != null) {\n                stack.push({ node: node.right, depth: depth + 1 });\n            }\n        }\n        if (sort) {\n            result.sort((a, b) => {\n                const distA = distanceFn(center, a.point);\n                const distB = distanceFn(center, b.point);\n                return sort.toLowerCase() === 'asc' ? distA - distB : distB - distA;\n            });\n        }\n        return result;\n    }\n    searchByPolygon(polygon, inclusive = true, sort = null, highPrecision = false) {\n        const stack = [{ node: this.root, depth: 0 }];\n        const result = [];\n        while (stack.length > 0) {\n            const { node, depth } = stack.pop();\n            if (node == null)\n                continue;\n            if (node.left != null) {\n                stack.push({ node: node.left, depth: depth + 1 });\n            }\n            if (node.right != null) {\n                stack.push({ node: node.right, depth: depth + 1 });\n            }\n            const isInsidePolygon = BKDTree.isPointInPolygon(polygon, node.point);\n            if ((isInsidePolygon && inclusive) || (!isInsidePolygon && !inclusive)) {\n                result.push({ point: node.point, docIDs: Array.from(node.docIDs) });\n            }\n        }\n        const centroid = BKDTree.calculatePolygonCentroid(polygon);\n        if (sort) {\n            const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n            result.sort((a, b) => {\n                const distA = distanceFn(centroid, a.point);\n                const distB = distanceFn(centroid, b.point);\n                return sort.toLowerCase() === 'asc' ? distA - distB : distB - distA;\n            });\n        }\n        return result;\n    }\n    toJSON() {\n        return {\n            root: this.root ? this.root.toJSON() : null\n        };\n    }\n    static fromJSON(json) {\n        const tree = new BKDTree();\n        if (json.root) {\n            tree.root = BKDNode.fromJSON(json.root);\n            tree.buildNodeMap(tree.root);\n        }\n        return tree;\n    }\n    buildNodeMap(node) {\n        if (node == null)\n            return;\n        const pointKey = this.getPointKey(node.point);\n        this.nodeMap.set(pointKey, node);\n        if (node.left) {\n            this.buildNodeMap(node.left);\n        }\n        if (node.right) {\n            this.buildNodeMap(node.right);\n        }\n    }\n    static calculatePolygonCentroid(polygon) {\n        let totalArea = 0;\n        let centroidX = 0;\n        let centroidY = 0;\n        const polygonLength = polygon.length;\n        for (let i = 0, j = polygonLength - 1; i < polygonLength; j = i++) {\n            const xi = polygon[i].lon;\n            const yi = polygon[i].lat;\n            const xj = polygon[j].lon;\n            const yj = polygon[j].lat;\n            const areaSegment = xi * yj - xj * yi;\n            totalArea += areaSegment;\n            centroidX += (xi + xj) * areaSegment;\n            centroidY += (yi + yj) * areaSegment;\n        }\n        totalArea /= 2;\n        const centroidCoordinate = 6 * totalArea;\n        centroidX /= centroidCoordinate;\n        centroidY /= centroidCoordinate;\n        return { lon: centroidX, lat: centroidY };\n    }\n    static isPointInPolygon(polygon, point) {\n        let isInside = false;\n        const x = point.lon;\n        const y = point.lat;\n        const polygonLength = polygon.length;\n        for (let i = 0, j = polygonLength - 1; i < polygonLength; j = i++) {\n            const xi = polygon[i].lon;\n            const yi = polygon[i].lat;\n            const xj = polygon[j].lon;\n            const yj = polygon[j].lat;\n            const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n            if (intersect)\n                isInside = !isInside;\n        }\n        return isInside;\n    }\n    static haversineDistance(coord1, coord2) {\n        const P = Math.PI / 180;\n        const lat1 = coord1.lat * P;\n        const lat2 = coord2.lat * P;\n        const deltaLat = (coord2.lat - coord1.lat) * P;\n        const deltaLon = (coord2.lon - coord1.lon) * P;\n        const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +\n            Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);\n        const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n        return EARTH_RADIUS * c;\n    }\n    static vincentyDistance(coord1, coord2) {\n        const a = 6378137;\n        const f = 1 / 298.257223563;\n        const b = (1 - f) * a;\n        const P = Math.PI / 180;\n        const lat1 = coord1.lat * P;\n        const lat2 = coord2.lat * P;\n        const deltaLon = (coord2.lon - coord1.lon) * P;\n        const U1 = Math.atan((1 - f) * Math.tan(lat1));\n        const U2 = Math.atan((1 - f) * Math.tan(lat2));\n        const sinU1 = Math.sin(U1);\n        const cosU1 = Math.cos(U1);\n        const sinU2 = Math.sin(U2);\n        const cosU2 = Math.cos(U2);\n        let lambda = deltaLon;\n        let prevLambda;\n        let iterationLimit = 1000;\n        let sinSigma;\n        let cosSigma;\n        let sigma;\n        let sinAlpha;\n        let cos2Alpha;\n        let cos2SigmaM;\n        do {\n            const sinLambda = Math.sin(lambda);\n            const cosLambda = Math.cos(lambda);\n            sinSigma = Math.sqrt(cosU2 * sinLambda * (cosU2 * sinLambda) +\n                (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n            if (sinSigma === 0)\n                return 0; // co-incident points\n            cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n            sigma = Math.atan2(sinSigma, cosSigma);\n            sinAlpha = (cosU1 * cosU2 * sinLambda) / sinSigma;\n            cos2Alpha = 1 - sinAlpha * sinAlpha;\n            cos2SigmaM = cosSigma - (2 * sinU1 * sinU2) / cos2Alpha;\n            if (isNaN(cos2SigmaM))\n                cos2SigmaM = 0;\n            const C = (f / 16) * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n            prevLambda = lambda;\n            lambda =\n                deltaLon +\n                    (1 - C) *\n                        f *\n                        sinAlpha *\n                        (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n        } while (Math.abs(lambda - prevLambda) > 1e-12 && --iterationLimit > 0);\n        if (iterationLimit === 0) {\n            return NaN;\n        }\n        const uSquared = (cos2Alpha * (a * a - b * b)) / (b * b);\n        const A = 1 + (uSquared / 16384) * (4096 + uSquared * (-768 + uSquared * (320 - 175 * uSquared)));\n        const B = (uSquared / 1024) * (256 + uSquared * (-128 + uSquared * (74 - 47 * uSquared)));\n        const deltaSigma = B *\n            sinSigma *\n            (cos2SigmaM +\n                (B / 4) *\n                    (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) -\n                        (B / 6) * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n        const s = b * A * (sigma - deltaSigma);\n        return s;\n    }\n}\n//# sourceMappingURL=bkd.js.map","export class BoolNode {\n    true;\n    false;\n    constructor() {\n        this.true = new Set();\n        this.false = new Set();\n    }\n    insert(value, bool) {\n        if (bool) {\n            this.true.add(value);\n        }\n        else {\n            this.false.add(value);\n        }\n    }\n    delete(value, bool) {\n        if (bool) {\n            this.true.delete(value);\n        }\n        else {\n            this.false.delete(value);\n        }\n    }\n    getSize() {\n        return this.true.size + this.false.size;\n    }\n    toJSON() {\n        return {\n            true: Array.from(this.true),\n            false: Array.from(this.false)\n        };\n    }\n    static fromJSON(json) {\n        const node = new BoolNode();\n        node.true = new Set(json.true);\n        node.false = new Set(json.false);\n        return node;\n    }\n}\n//# sourceMappingURL=bool.js.map","import { createError } from '../errors.js';\nexport function prioritizeTokenScores(arrays, boost, threshold = 0, keywordsCount) {\n    if (boost === 0) {\n        throw createError('INVALID_BOOST_VALUE');\n    }\n    const tokenScoresMap = new Map();\n    const mapsLength = arrays.length;\n    for (let i = 0; i < mapsLength; i++) {\n        const arr = arrays[i];\n        const entriesLength = arr.length;\n        for (let j = 0; j < entriesLength; j++) {\n            const [token, score] = arr[j];\n            const boostScore = score * boost;\n            const oldScore = tokenScoresMap.get(token)?.[0];\n            if (oldScore !== undefined) {\n                tokenScoresMap.set(token, [oldScore * 1.5 + boostScore, (tokenScoresMap?.get(token)?.[1] || 0) + 1]);\n            }\n            else {\n                tokenScoresMap.set(token, [boostScore, 1]);\n            }\n        }\n    }\n    const tokenScores = [];\n    for (const tokenScoreEntry of tokenScoresMap.entries()) {\n        tokenScores.push([tokenScoreEntry[0], tokenScoreEntry[1][0]]);\n    }\n    const results = tokenScores.sort((a, b) => b[1] - a[1]);\n    // If threshold is 1, it means we will return all the results with at least one search term,\n    // prioritizig the ones that contains more search terms (fuzzy match)\n    if (threshold === 1) {\n        return results;\n    }\n    // Prepare keywords count tracking for threshold handling\n    const allResults = results.length;\n    const tokenScoreWithKeywordsCount = [];\n    for (const tokenScoreEntry of tokenScoresMap.entries()) {\n        tokenScoreWithKeywordsCount.push([tokenScoreEntry[0], tokenScoreEntry[1][0], tokenScoreEntry[1][1]]);\n    }\n    // Find the index of the last result with all keywords.\n    // Order the documents by the number of keywords they contain, and then by the score.\n    const keywordsPerToken = tokenScoreWithKeywordsCount.sort((a, b) => {\n        // Compare by the third element, higher numbers first\n        if (a[2] > b[2])\n            return -1;\n        if (a[2] < b[2])\n            return 1;\n        // If the third elements are equal, compare by the second element, higher numbers first\n        if (a[1] > b[1])\n            return -1;\n        if (a[1] < b[1])\n            return 1;\n        // If both the second and third elements are equal, consider the elements equal\n        return 0;\n    });\n    let lastTokenWithAllKeywords = undefined;\n    for (let i = 0; i < allResults; i++) {\n        if (keywordsPerToken[i][2] === keywordsCount) {\n            lastTokenWithAllKeywords = i;\n        }\n        else {\n            break;\n        }\n    }\n    // If no results had all the keywords, either bail out earlier or normalize\n    if (typeof lastTokenWithAllKeywords === 'undefined') {\n        if (threshold === 0) {\n            return [];\n        }\n        lastTokenWithAllKeywords = 0;\n    }\n    const keywordsPerTokenLength = keywordsPerToken.length;\n    const resultsWithIdAndScore = new Array(keywordsPerTokenLength);\n    for (let i = 0; i < keywordsPerTokenLength; i++) {\n        resultsWithIdAndScore[i] = [keywordsPerToken[i][0], keywordsPerToken[i][1]];\n    }\n    // If threshold is 0, it means we will only return all the results that contains ALL the search terms (exact match)\n    if (threshold === 0) {\n        return resultsWithIdAndScore.slice(0, lastTokenWithAllKeywords + 1);\n    }\n    // If the threshold is between 0 and 1, we will return all the results that contains at least the threshold of search terms\n    // For example, if threshold is 0.5, we will return all the results that contains at least 50% of the search terms\n    // (fuzzy match with a minimum threshold)\n    const thresholdLength = lastTokenWithAllKeywords + Math.ceil((threshold * 100 * (allResults - lastTokenWithAllKeywords)) / 100);\n    return resultsWithIdAndScore.slice(0, allResults + thresholdLength);\n}\nexport function BM25(tf, matchingCount, docsCount, fieldLength, averageFieldLength, { k, b, d }) {\n    const idf = Math.log(1 + (docsCount - matchingCount + 0.5) / (matchingCount + 0.5));\n    return (idf * (d + tf * (k + 1))) / (tf + k * (1 - b + (b * fieldLength) / averageFieldLength));\n}\n//# sourceMappingURL=algorithms.js.map","export const DEFAULT_SIMILARITY = 0.8;\nexport class VectorIndex {\n    size;\n    vectors = new Map();\n    constructor(size) {\n        this.size = size;\n    }\n    add(internalDocumentId, value) {\n        if (!(value instanceof Float32Array)) {\n            value = new Float32Array(value);\n        }\n        const magnitude = getMagnitude(value, this.size);\n        this.vectors.set(internalDocumentId, [magnitude, value]);\n    }\n    remove(internalDocumentId) {\n        this.vectors.delete(internalDocumentId);\n    }\n    find(vector, similarity, whereFiltersIDs) {\n        if (!(vector instanceof Float32Array)) {\n            vector = new Float32Array(vector);\n        }\n        const results = findSimilarVectors(vector, whereFiltersIDs, this.vectors, this.size, similarity);\n        return results;\n    }\n    toJSON() {\n        const vectors = [];\n        for (const [id, [magnitude, vector]] of this.vectors) {\n            vectors.push([id, [magnitude, Array.from(vector)]]);\n        }\n        return {\n            size: this.size,\n            vectors,\n        };\n    }\n    static fromJSON(json) {\n        const raw = json;\n        const index = new VectorIndex(raw.size);\n        for (const [id, [magnitude, vector]] of raw.vectors) {\n            index.vectors.set(id, [magnitude, new Float32Array(vector)]);\n        }\n        return index;\n    }\n}\nexport function getMagnitude(vector, vectorLength) {\n    let magnitude = 0;\n    for (let i = 0; i < vectorLength; i++) {\n        magnitude += vector[i] * vector[i];\n    }\n    return Math.sqrt(magnitude);\n}\n// @todo: Write plugins for Node and Browsers to use parallel computation for this function\nexport function findSimilarVectors(targetVector, keys, vectors, length, threshold) {\n    const targetMagnitude = getMagnitude(targetVector, length);\n    const similarVectors = [];\n    const base = keys ? keys : vectors.keys();\n    for (const vectorId of base) {\n        const entry = vectors.get(vectorId);\n        if (!entry) {\n            continue;\n        }\n        const magnitude = entry[0];\n        const vector = entry[1];\n        let dotProduct = 0;\n        for (let i = 0; i < length; i++) {\n            dotProduct += targetVector[i] * vector[i];\n        }\n        const similarity = dotProduct / (targetMagnitude * magnitude);\n        if (similarity >= threshold) {\n            similarVectors.push([vectorId, similarity]);\n        }\n    }\n    return similarVectors;\n}\n//# sourceMappingURL=vector.js.map","import { createError } from '../errors.js';\nimport { AVLTree } from '../trees/avl.js';\nimport { FlatTree } from '../trees/flat.js';\nimport { RadixTree } from '../trees/radix.js';\nimport { BKDTree } from '../trees/bkd.js';\nimport { BoolNode } from '../trees/bool.js';\nimport { convertDistanceToMeters, setIntersection, setUnion } from '../utils.js';\nimport { BM25 } from './algorithms.js';\nimport { getInnerType, getVectorSize, isArrayType, isVectorType } from './defaults.js';\nimport { getInternalDocumentId } from './internal-document-id-store.js';\nimport { VectorIndex } from '../trees/vector.js';\nexport function insertDocumentScoreParameters(index, prop, id, tokens, docsCount) {\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    index.avgFieldLength[prop] = ((index.avgFieldLength[prop] ?? 0) * (docsCount - 1) + tokens.length) / docsCount;\n    index.fieldLengths[prop][internalId] = tokens.length;\n    index.frequencies[prop][internalId] = {};\n}\nexport function insertTokenScoreParameters(index, prop, id, tokens, token) {\n    let tokenFrequency = 0;\n    for (const t of tokens) {\n        if (t === token) {\n            tokenFrequency++;\n        }\n    }\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    const tf = tokenFrequency / tokens.length;\n    index.frequencies[prop][internalId][token] = tf;\n    if (!(token in index.tokenOccurrences[prop])) {\n        index.tokenOccurrences[prop][token] = 0;\n    }\n    // increase a token counter that may not yet exist\n    index.tokenOccurrences[prop][token] = (index.tokenOccurrences[prop][token] ?? 0) + 1;\n}\nexport function removeDocumentScoreParameters(index, prop, id, docsCount) {\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    if (docsCount > 1) {\n        index.avgFieldLength[prop] =\n            (index.avgFieldLength[prop] * docsCount - index.fieldLengths[prop][internalId]) / (docsCount - 1);\n    }\n    else {\n        index.avgFieldLength[prop] = undefined;\n    }\n    index.fieldLengths[prop][internalId] = undefined;\n    index.frequencies[prop][internalId] = undefined;\n}\nexport function removeTokenScoreParameters(index, prop, token) {\n    index.tokenOccurrences[prop][token]--;\n}\nexport function create(orama, sharedInternalDocumentStore, schema, index, prefix = '') {\n    if (!index) {\n        index = {\n            sharedInternalDocumentStore,\n            indexes: {},\n            vectorIndexes: {},\n            searchableProperties: [],\n            searchablePropertiesWithTypes: {},\n            frequencies: {},\n            tokenOccurrences: {},\n            avgFieldLength: {},\n            fieldLengths: {}\n        };\n    }\n    for (const [prop, type] of Object.entries(schema)) {\n        const path = `${prefix}${prefix ? '.' : ''}${prop}`;\n        if (typeof type === 'object' && !Array.isArray(type)) {\n            // Nested\n            create(orama, sharedInternalDocumentStore, type, index, path);\n            continue;\n        }\n        if (isVectorType(type)) {\n            index.searchableProperties.push(path);\n            index.searchablePropertiesWithTypes[path] = type;\n            index.vectorIndexes[path] = {\n                type: 'Vector',\n                node: new VectorIndex(getVectorSize(type)),\n                isArray: false,\n            };\n        }\n        else {\n            const isArray = /\\[/.test(type);\n            switch (type) {\n                case 'boolean':\n                case 'boolean[]':\n                    index.indexes[path] = { type: 'Bool', node: new BoolNode(), isArray };\n                    break;\n                case 'number':\n                case 'number[]':\n                    index.indexes[path] = { type: 'AVL', node: new AVLTree(0, []), isArray };\n                    break;\n                case 'string':\n                case 'string[]':\n                    index.indexes[path] = { type: 'Radix', node: new RadixTree(), isArray };\n                    index.avgFieldLength[path] = 0;\n                    index.frequencies[path] = {};\n                    index.tokenOccurrences[path] = {};\n                    index.fieldLengths[path] = {};\n                    break;\n                case 'enum':\n                case 'enum[]':\n                    index.indexes[path] = { type: 'Flat', node: new FlatTree(), isArray };\n                    break;\n                case 'geopoint':\n                    index.indexes[path] = { type: 'BKD', node: new BKDTree(), isArray };\n                    break;\n                default:\n                    throw createError('INVALID_SCHEMA_TYPE', Array.isArray(type) ? 'array' : type, path);\n            }\n            index.searchableProperties.push(path);\n            index.searchablePropertiesWithTypes[path] = type;\n        }\n    }\n    return index;\n}\nfunction insertScalarBuilder(implementation, index, prop, internalId, language, tokenizer, docsCount, options) {\n    return (value) => {\n        const { type, node } = index.indexes[prop];\n        switch (type) {\n            case 'Bool': {\n                node[value ? 'true' : 'false'].add(internalId);\n                break;\n            }\n            case 'AVL': {\n                const avlRebalanceThreshold = options?.avlRebalanceThreshold ?? 1;\n                node.insert(value, internalId, avlRebalanceThreshold);\n                break;\n            }\n            case 'Radix': {\n                const tokens = tokenizer.tokenize(value, language, prop, false);\n                implementation.insertDocumentScoreParameters(index, prop, internalId, tokens, docsCount);\n                for (const token of tokens) {\n                    implementation.insertTokenScoreParameters(index, prop, internalId, tokens, token);\n                    node.insert(token, internalId);\n                }\n                break;\n            }\n            case 'Flat': {\n                node.insert(value, internalId);\n                break;\n            }\n            case 'BKD': {\n                node.insert(value, [internalId]);\n                break;\n            }\n        }\n    };\n}\nexport function insert(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount, options) {\n    if (isVectorType(schemaType)) {\n        return insertVector(index, prop, value, id, internalId);\n    }\n    const insertScalar = insertScalarBuilder(implementation, index, prop, internalId, language, tokenizer, docsCount, options);\n    if (!isArrayType(schemaType)) {\n        return insertScalar(value);\n    }\n    const elements = value;\n    const elementsLength = elements.length;\n    for (let i = 0; i < elementsLength; i++) {\n        insertScalar(elements[i]);\n    }\n}\nexport function insertVector(index, prop, value, id, internalDocumentId) {\n    index.vectorIndexes[prop].node.add(internalDocumentId, value);\n}\nfunction removeScalar(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount) {\n    if (isVectorType(schemaType)) {\n        index.vectorIndexes[prop].node.remove(internalId);\n        return true;\n    }\n    const { type, node } = index.indexes[prop];\n    switch (type) {\n        case 'AVL': {\n            node.removeDocument(value, internalId);\n            return true;\n        }\n        case 'Bool': {\n            node[value ? 'true' : 'false'].delete(internalId);\n            return true;\n        }\n        case 'Radix': {\n            const tokens = tokenizer.tokenize(value, language, prop);\n            implementation.removeDocumentScoreParameters(index, prop, id, docsCount);\n            for (const token of tokens) {\n                implementation.removeTokenScoreParameters(index, prop, token);\n                node.removeDocumentByWord(token, internalId);\n            }\n            return true;\n        }\n        case 'Flat': {\n            node.removeDocument(internalId, value);\n            return true;\n        }\n        case 'BKD': {\n            node.removeDocByID(value, internalId);\n            return false;\n        }\n    }\n}\nexport function remove(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount) {\n    if (!isArrayType(schemaType)) {\n        return removeScalar(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount);\n    }\n    const innerSchemaType = getInnerType(schemaType);\n    const elements = value;\n    const elementsLength = elements.length;\n    for (let i = 0; i < elementsLength; i++) {\n        removeScalar(implementation, index, prop, id, internalId, elements[i], innerSchemaType, language, tokenizer, docsCount);\n    }\n    return true;\n}\nexport function calculateResultScores(index, prop, term, ids, docsCount, bm25Relevance, resultsMap, boostPerProperty, whereFiltersIDs, keywordMatchesMap) {\n    const documentIDs = Array.from(ids);\n    const avgFieldLength = index.avgFieldLength[prop];\n    const fieldLengths = index.fieldLengths[prop];\n    const oramaOccurrences = index.tokenOccurrences[prop];\n    const oramaFrequencies = index.frequencies[prop];\n    // oramaOccurrences[term] can be undefined, 0, string, or { [k: string]: number }\n    const termOccurrences = typeof oramaOccurrences[term] === 'number' ? oramaOccurrences[term] ?? 0 : 0;\n    // Calculate TF-IDF value for each term, in each document, for each index.\n    const documentIDsLength = documentIDs.length;\n    for (let k = 0; k < documentIDsLength; k++) {\n        const internalId = documentIDs[k];\n        if (whereFiltersIDs && !whereFiltersIDs.has(internalId)) {\n            continue;\n        }\n        // Track keyword matches per property\n        if (!keywordMatchesMap.has(internalId)) {\n            keywordMatchesMap.set(internalId, new Map());\n        }\n        const propertyMatches = keywordMatchesMap.get(internalId);\n        propertyMatches.set(prop, (propertyMatches.get(prop) || 0) + 1);\n        const tf = oramaFrequencies?.[internalId]?.[term] ?? 0;\n        const bm25 = BM25(tf, termOccurrences, docsCount, fieldLengths[internalId], avgFieldLength, bm25Relevance);\n        if (resultsMap.has(internalId)) {\n            resultsMap.set(internalId, resultsMap.get(internalId) + bm25 * boostPerProperty);\n        }\n        else {\n            resultsMap.set(internalId, bm25 * boostPerProperty);\n        }\n    }\n}\nfunction searchInProperty(index, tree, prop, tokens, exact, tolerance, resultsMap, boostPerProperty, bm25Relevance, docsCount, whereFiltersIDs, keywordMatchesMap) {\n    const tokenLength = tokens.length;\n    for (let i = 0; i < tokenLength; i++) {\n        const term = tokens[i];\n        const searchResult = tree.find({ term, exact, tolerance });\n        const termsFound = Object.keys(searchResult);\n        const termsFoundLength = termsFound.length;\n        for (let j = 0; j < termsFoundLength; j++) {\n            const word = termsFound[j];\n            const ids = searchResult[word];\n            calculateResultScores(index, prop, word, ids, docsCount, bm25Relevance, resultsMap, boostPerProperty, whereFiltersIDs, keywordMatchesMap);\n        }\n    }\n}\nexport function search(index, term, tokenizer, language, propertiesToSearch, exact, tolerance, boost, relevance, docsCount, whereFiltersIDs, threshold = 0) {\n    const tokens = tokenizer.tokenize(term, language);\n    const keywordsCount = tokens.length || 1;\n    // Track keyword matches per document and property\n    const keywordMatchesMap = new Map();\n    const resultsMap = new Map();\n    for (const prop of propertiesToSearch) {\n        if (!(prop in index.indexes)) {\n            continue;\n        }\n        const tree = index.indexes[prop];\n        const { type } = tree;\n        if (type !== 'Radix') {\n            throw createError('WRONG_SEARCH_PROPERTY_TYPE', prop);\n        }\n        const boostPerProperty = boost[prop] ?? 1;\n        if (boostPerProperty <= 0) {\n            throw createError('INVALID_BOOST_VALUE', boostPerProperty);\n        }\n        // if the tokenizer returns an empty array, we returns all the documents\n        if (tokens.length === 0 && !term) {\n            tokens.push('');\n        }\n        searchInProperty(index, tree.node, prop, tokens, exact, tolerance, resultsMap, boostPerProperty, relevance, docsCount, whereFiltersIDs, keywordMatchesMap);\n    }\n    // Convert to array and sort by score\n    const results = Array.from(resultsMap.entries())\n        .map(([id, score]) => [id, score])\n        .sort((a, b) => b[1] - a[1]);\n    if (results.length === 0) {\n        return [];\n    }\n    // If threshold is 1, return all results\n    if (threshold === 1) {\n        return results;\n    }\n    // Find documents that have all keywords in at least one property\n    const fullMatches = results.filter(([id]) => {\n        const propertyMatches = keywordMatchesMap.get(id);\n        if (!propertyMatches)\n            return false;\n        // Check if any property has all keywords\n        return Array.from(propertyMatches.values()).some(matches => matches === keywordsCount);\n    });\n    // If threshold is 0, return only full matches\n    if (threshold === 0) {\n        return fullMatches;\n    }\n    // If we have full matches and threshold < 1, return full matches plus a percentage of partial matches\n    if (fullMatches.length > 0) {\n        const remainingResults = results.filter(([id]) => !fullMatches.some(([fid]) => fid === id));\n        const additionalResults = Math.ceil(remainingResults.length * threshold);\n        return [...fullMatches, ...remainingResults.slice(0, additionalResults)];\n    }\n    // If no full matches, return all results\n    return results;\n}\nexport function searchByWhereClause(index, tokenizer, filters, language) {\n    const filterKeys = Object.keys(filters);\n    const filtersMap = filterKeys.reduce((acc, key) => ({\n        [key]: new Set(),\n        ...acc\n    }), {});\n    for (const param of filterKeys) {\n        const operation = filters[param];\n        if (typeof index.indexes[param] === 'undefined') {\n            throw createError('UNKNOWN_FILTER_PROPERTY', param);\n        }\n        const { node, type, isArray } = index.indexes[param];\n        if (type === 'Bool') {\n            const idx = node;\n            const filteredIDs = operation ? idx.true : idx.false;\n            filtersMap[param] = setUnion(filtersMap[param], filteredIDs);\n            continue;\n        }\n        if (type === 'BKD') {\n            let reqOperation;\n            if ('radius' in operation) {\n                reqOperation = 'radius';\n            }\n            else if ('polygon' in operation) {\n                reqOperation = 'polygon';\n            }\n            else {\n                throw new Error(`Invalid operation ${operation}`);\n            }\n            if (reqOperation === 'radius') {\n                const { value, coordinates, unit = 'm', inside = true, highPrecision = false } = operation[reqOperation];\n                const distanceInMeters = convertDistanceToMeters(value, unit);\n                const ids = node.searchByRadius(coordinates, distanceInMeters, inside, undefined, highPrecision);\n                filtersMap[param] = addGeoResult(filtersMap[param], ids);\n            }\n            else {\n                const { coordinates, inside = true, highPrecision = false } = operation[reqOperation];\n                const ids = node.searchByPolygon(coordinates, inside, undefined, highPrecision);\n                filtersMap[param] = addGeoResult(filtersMap[param], ids);\n            }\n            continue;\n        }\n        if (type === 'Radix' && (typeof operation === 'string' || Array.isArray(operation))) {\n            for (const raw of [operation].flat()) {\n                const term = tokenizer.tokenize(raw, language, param);\n                for (const t of term) {\n                    const filteredIDsResults = node.find({ term: t, exact: true });\n                    filtersMap[param] = addFindResult(filtersMap[param], filteredIDsResults);\n                }\n            }\n            continue;\n        }\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length > 1) {\n            throw createError('INVALID_FILTER_OPERATION', operationKeys.length);\n        }\n        if (type === 'Flat') {\n            const results = new Set(isArray\n                ? node.filterArr(operation)\n                : node.filter(operation));\n            filtersMap[param] = setUnion(filtersMap[param], results);\n            continue;\n        }\n        if (type === 'AVL') {\n            const operationOpt = operationKeys[0];\n            const operationValue = operation[operationOpt];\n            let filteredIDs;\n            switch (operationOpt) {\n                case 'gt': {\n                    filteredIDs = node.greaterThan(operationValue, false);\n                    break;\n                }\n                case 'gte': {\n                    filteredIDs = node.greaterThan(operationValue, true);\n                    break;\n                }\n                case 'lt': {\n                    filteredIDs = node.lessThan(operationValue, false);\n                    break;\n                }\n                case 'lte': {\n                    filteredIDs = node.lessThan(operationValue, true);\n                    break;\n                }\n                case 'eq': {\n                    const ret = node.find(operationValue);\n                    filteredIDs = ret ?? new Set();\n                    break;\n                }\n                case 'between': {\n                    const [min, max] = operationValue;\n                    filteredIDs = node.rangeSearch(min, max);\n                    break;\n                }\n                default:\n                    throw createError('INVALID_FILTER_OPERATION', operationOpt);\n            }\n            filtersMap[param] = setUnion(filtersMap[param], filteredIDs);\n        }\n    }\n    // AND operation: calculate the intersection between all the IDs in filterMap\n    return setIntersection(...Object.values(filtersMap));\n}\nexport function getSearchableProperties(index) {\n    return index.searchableProperties;\n}\nexport function getSearchablePropertiesWithTypes(index) {\n    return index.searchablePropertiesWithTypes;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const { indexes: rawIndexes, vectorIndexes: rawVectorIndexes, searchableProperties, searchablePropertiesWithTypes, frequencies, tokenOccurrences, avgFieldLength, fieldLengths } = raw;\n    const indexes = {};\n    const vectorIndexes = {};\n    for (const prop of Object.keys(rawIndexes)) {\n        const { node, type, isArray } = rawIndexes[prop];\n        switch (type) {\n            case 'Radix':\n                indexes[prop] = {\n                    type: 'Radix',\n                    node: RadixTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'Flat':\n                indexes[prop] = {\n                    type: 'Flat',\n                    node: FlatTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'AVL':\n                indexes[prop] = {\n                    type: 'AVL',\n                    node: AVLTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'BKD':\n                indexes[prop] = {\n                    type: 'BKD',\n                    node: BKDTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'Bool':\n                indexes[prop] = {\n                    type: 'Bool',\n                    node: BoolNode.fromJSON(node),\n                    isArray\n                };\n                break;\n            default:\n                indexes[prop] = rawIndexes[prop];\n        }\n    }\n    for (const idx of Object.keys(rawVectorIndexes)) {\n        vectorIndexes[idx] = {\n            type: 'Vector',\n            isArray: false,\n            node: VectorIndex.fromJSON(rawVectorIndexes[idx])\n        };\n    }\n    return {\n        sharedInternalDocumentStore,\n        indexes,\n        vectorIndexes,\n        searchableProperties,\n        searchablePropertiesWithTypes,\n        frequencies,\n        tokenOccurrences,\n        avgFieldLength,\n        fieldLengths\n    };\n}\nexport function save(index) {\n    const { indexes, vectorIndexes, searchableProperties, searchablePropertiesWithTypes, frequencies, tokenOccurrences, avgFieldLength, fieldLengths } = index;\n    const dumpVectorIndexes = {};\n    for (const idx of Object.keys(vectorIndexes)) {\n        dumpVectorIndexes[idx] = vectorIndexes[idx].node.toJSON();\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const savedIndexes = {};\n    for (const name of Object.keys(indexes)) {\n        const { type, node, isArray } = indexes[name];\n        if (type === 'Flat'\n            || type === 'Radix'\n            || type === 'AVL'\n            || type === 'BKD'\n            || type === 'Bool') {\n            savedIndexes[name] = {\n                type,\n                node: node.toJSON(),\n                isArray\n            };\n        }\n        else {\n            savedIndexes[name] = indexes[name];\n            savedIndexes[name].node = savedIndexes[name].node.toJSON();\n        }\n    }\n    return {\n        indexes: savedIndexes,\n        vectorIndexes: dumpVectorIndexes,\n        searchableProperties,\n        searchablePropertiesWithTypes,\n        frequencies,\n        tokenOccurrences,\n        avgFieldLength,\n        fieldLengths\n    };\n}\nexport function createIndex() {\n    return {\n        create,\n        insert,\n        remove,\n        insertDocumentScoreParameters,\n        insertTokenScoreParameters,\n        removeDocumentScoreParameters,\n        removeTokenScoreParameters,\n        calculateResultScores,\n        search,\n        searchByWhereClause,\n        getSearchableProperties,\n        getSearchablePropertiesWithTypes,\n        load,\n        save\n    };\n}\nfunction addGeoResult(set, ids) {\n    if (!set) {\n        set = new Set();\n    }\n    const idsLength = ids.length;\n    for (let i = 0; i < idsLength; i++) {\n        const entry = ids[i].docIDs;\n        const idsLength = entry.length;\n        for (let j = 0; j < idsLength; j++) {\n            set.add(entry[j]);\n        }\n    }\n    return set;\n}\nfunction addFindResult(set, filteredIDsResults) {\n    if (!set) {\n        set = new Set();\n    }\n    const keys = Object.keys(filteredIDsResults);\n    const keysLength = keys.length;\n    for (let i = 0; i < keysLength; i++) {\n        const ids = filteredIDsResults[keys[i]];\n        const idsLength = ids.length;\n        for (let j = 0; j < idsLength; j++) {\n            set.add(ids[j]);\n        }\n    }\n    return set;\n}\n//# sourceMappingURL=index.js.map","import { createError } from '../errors.js';\nimport { isVectorType } from './defaults.js';\nimport { getInternalDocumentId } from './internal-document-id-store.js';\nimport { safeArrayPush } from '../utils.js';\nimport { getLocale } from './tokenizer/languages.js';\nfunction innerCreate(orama, sharedInternalDocumentStore, schema, sortableDeniedProperties, prefix) {\n    const sorter = {\n        language: orama.tokenizer.language,\n        sharedInternalDocumentStore,\n        enabled: true,\n        isSorted: true,\n        sortableProperties: [],\n        sortablePropertiesWithTypes: {},\n        sorts: {}\n    };\n    for (const [prop, type] of Object.entries(schema)) {\n        const path = `${prefix}${prefix ? '.' : ''}${prop}`;\n        if (sortableDeniedProperties.includes(path)) {\n            continue;\n        }\n        if (typeof type === 'object' && !Array.isArray(type)) {\n            // Nested\n            const ret = innerCreate(orama, sharedInternalDocumentStore, type, sortableDeniedProperties, path);\n            safeArrayPush(sorter.sortableProperties, ret.sortableProperties);\n            sorter.sorts = {\n                ...sorter.sorts,\n                ...ret.sorts\n            };\n            sorter.sortablePropertiesWithTypes = {\n                ...sorter.sortablePropertiesWithTypes,\n                ...ret.sortablePropertiesWithTypes\n            };\n            continue;\n        }\n        if (!isVectorType(type)) {\n            switch (type) {\n                case 'boolean':\n                case 'number':\n                case 'string':\n                    sorter.sortableProperties.push(path);\n                    sorter.sortablePropertiesWithTypes[path] = type;\n                    sorter.sorts[path] = {\n                        docs: new Map(),\n                        orderedDocsToRemove: new Map(),\n                        orderedDocs: [],\n                        type: type\n                    };\n                    break;\n                case 'geopoint':\n                case 'enum':\n                    // We don't allow to sort by enums or geopoints\n                    continue;\n                case 'enum[]':\n                case 'boolean[]':\n                case 'number[]':\n                case 'string[]':\n                    // We don't allow to sort by arrays\n                    continue;\n                default:\n                    throw createError('INVALID_SORT_SCHEMA_TYPE', Array.isArray(type) ? 'array' : type, path);\n            }\n        }\n    }\n    return sorter;\n}\nfunction create(orama, sharedInternalDocumentStore, schema, config) {\n    const isSortEnabled = config?.enabled !== false;\n    if (!isSortEnabled) {\n        return {\n            disabled: true\n        };\n    }\n    return innerCreate(orama, sharedInternalDocumentStore, schema, (config || {}).unsortableProperties || [], '');\n}\nfunction insert(sorter, prop, id, value) {\n    if (!sorter.enabled) {\n        return;\n    }\n    sorter.isSorted = false;\n    const internalId = getInternalDocumentId(sorter.sharedInternalDocumentStore, id);\n    const s = sorter.sorts[prop];\n    // This happen during a document updating\n    // Because we re-use the same internalId\n    // We need to clean-up the data structure before re-inserting\n    // to avoid duplicates in the orderedDocs array\n    // See: https://github.com/oramasearch/orama/issues/629\n    if (s.orderedDocsToRemove.has(internalId)) {\n        ensureOrderedDocsAreDeletedByProperty(sorter, prop);\n    }\n    s.docs.set(internalId, s.orderedDocs.length);\n    s.orderedDocs.push([internalId, value]);\n}\nfunction ensureIsSorted(sorter) {\n    if (sorter.isSorted || !sorter.enabled) {\n        return;\n    }\n    const properties = Object.keys(sorter.sorts);\n    for (const prop of properties) {\n        ensurePropertyIsSorted(sorter, prop);\n    }\n    sorter.isSorted = true;\n}\nfunction stringSort(language, value, d) {\n    return value[1].localeCompare(d[1], getLocale(language));\n}\nfunction numberSort(value, d) {\n    return value[1] - d[1];\n}\nfunction booleanSort(value, d) {\n    return d[1] ? -1 : 1;\n}\nfunction ensurePropertyIsSorted(sorter, prop) {\n    const s = sorter.sorts[prop];\n    let predicate;\n    switch (s.type) {\n        case 'string':\n            predicate = stringSort.bind(null, sorter.language);\n            break;\n        case 'number':\n            predicate = numberSort.bind(null);\n            break;\n        case 'boolean':\n            predicate = booleanSort.bind(null);\n            break;\n    }\n    s.orderedDocs.sort(predicate);\n    // Increment position for the greather documents\n    const orderedDocsLength = s.orderedDocs.length;\n    for (let i = 0; i < orderedDocsLength; i++) {\n        const docId = s.orderedDocs[i][0];\n        s.docs.set(docId, i);\n    }\n}\nfunction ensureOrderedDocsAreDeleted(sorter) {\n    const properties = Object.keys(sorter.sorts);\n    for (const prop of properties) {\n        ensureOrderedDocsAreDeletedByProperty(sorter, prop);\n    }\n}\nfunction ensureOrderedDocsAreDeletedByProperty(sorter, prop) {\n    const s = sorter.sorts[prop];\n    if (!s.orderedDocsToRemove.size)\n        return;\n    s.orderedDocs = s.orderedDocs.filter((doc) => !s.orderedDocsToRemove.has(doc[0]));\n    s.orderedDocsToRemove.clear();\n}\nfunction remove(sorter, prop, id) {\n    if (!sorter.enabled) {\n        return;\n    }\n    const s = sorter.sorts[prop];\n    const internalId = getInternalDocumentId(sorter.sharedInternalDocumentStore, id);\n    const index = s.docs.get(internalId);\n    if (!index)\n        return;\n    s.docs.delete(internalId);\n    s.orderedDocsToRemove.set(internalId, true);\n}\nfunction sortBy(sorter, docIds, by) {\n    if (!sorter.enabled) {\n        throw createError('SORT_DISABLED');\n    }\n    const property = by.property;\n    const isDesc = by.order === 'DESC';\n    const s = sorter.sorts[property];\n    if (!s) {\n        throw createError('UNABLE_TO_SORT_ON_UNKNOWN_FIELD', property, sorter.sortableProperties.join(', '));\n    }\n    ensureOrderedDocsAreDeletedByProperty(sorter, property);\n    ensureIsSorted(sorter);\n    docIds.sort((a, b) => {\n        // This sort algorithm works leveraging on\n        // that s.docs is a map of docId -> position\n        // If a document is not indexed, it will be not present in the map\n        const indexOfA = s.docs.get(getInternalDocumentId(sorter.sharedInternalDocumentStore, a[0]));\n        const indexOfB = s.docs.get(getInternalDocumentId(sorter.sharedInternalDocumentStore, b[0]));\n        const isAIndexed = typeof indexOfA !== 'undefined';\n        const isBIndexed = typeof indexOfB !== 'undefined';\n        if (!isAIndexed && !isBIndexed) {\n            return 0;\n        }\n        // unindexed documents are always at the end\n        if (!isAIndexed) {\n            return 1;\n        }\n        if (!isBIndexed) {\n            return -1;\n        }\n        return isDesc ? indexOfB - indexOfA : indexOfA - indexOfB;\n    });\n    return docIds;\n}\nfunction getSortableProperties(sorter) {\n    if (!sorter.enabled) {\n        return [];\n    }\n    return sorter.sortableProperties;\n}\nfunction getSortablePropertiesWithTypes(sorter) {\n    if (!sorter.enabled) {\n        return {};\n    }\n    return sorter.sortablePropertiesWithTypes;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawDocument = raw;\n    if (!rawDocument.enabled) {\n        return {\n            enabled: false\n        };\n    }\n    const sorts = Object.keys(rawDocument.sorts).reduce((acc, prop) => {\n        const { docs, orderedDocs, type } = rawDocument.sorts[prop];\n        acc[prop] = {\n            docs: new Map(Object.entries(docs).map(([k, v]) => [+k, v])),\n            orderedDocsToRemove: new Map(),\n            orderedDocs,\n            type\n        };\n        return acc;\n    }, {});\n    return {\n        sharedInternalDocumentStore,\n        language: rawDocument.language,\n        sortableProperties: rawDocument.sortableProperties,\n        sortablePropertiesWithTypes: rawDocument.sortablePropertiesWithTypes,\n        sorts,\n        enabled: true,\n        isSorted: rawDocument.isSorted\n    };\n}\nexport function save(sorter) {\n    if (!sorter.enabled) {\n        return {\n            enabled: false\n        };\n    }\n    ensureOrderedDocsAreDeleted(sorter);\n    ensureIsSorted(sorter);\n    const sorts = Object.keys(sorter.sorts).reduce((acc, prop) => {\n        const { docs, orderedDocs, type } = sorter.sorts[prop];\n        acc[prop] = {\n            docs: Object.fromEntries(docs.entries()),\n            orderedDocs,\n            type\n        };\n        return acc;\n    }, {});\n    return {\n        language: sorter.language,\n        sortableProperties: sorter.sortableProperties,\n        sortablePropertiesWithTypes: sorter.sortablePropertiesWithTypes,\n        sorts,\n        enabled: sorter.enabled,\n        isSorted: sorter.isSorted\n    };\n}\nexport function createSorter() {\n    return {\n        create,\n        insert,\n        remove,\n        save,\n        load,\n        sortBy,\n        getSortableProperties,\n        getSortablePropertiesWithTypes\n    };\n}\n//# sourceMappingURL=sorter.js.map","const DIACRITICS_CHARCODE_START = 192;\nconst DIACRITICS_CHARCODE_END = 383;\nconst CHARCODE_REPLACE_MAPPING = [\n    65,\n    65,\n    65,\n    65,\n    65,\n    65,\n    65,\n    67,\n    69,\n    69,\n    69,\n    69,\n    73,\n    73,\n    73,\n    73,\n    69,\n    78,\n    79,\n    79,\n    79,\n    79,\n    79,\n    null,\n    79,\n    85,\n    85,\n    85,\n    85,\n    89,\n    80,\n    115,\n    97,\n    97,\n    97,\n    97,\n    97,\n    97,\n    97,\n    99,\n    101,\n    101,\n    101,\n    101,\n    105,\n    105,\n    105,\n    105,\n    101,\n    110,\n    111,\n    111,\n    111,\n    111,\n    111,\n    null,\n    111,\n    117,\n    117,\n    117,\n    117,\n    121,\n    112,\n    121,\n    65,\n    97,\n    65,\n    97,\n    65,\n    97,\n    67,\n    99,\n    67,\n    99,\n    67,\n    99,\n    67,\n    99,\n    68,\n    100,\n    68,\n    100,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    71,\n    103,\n    71,\n    103,\n    71,\n    103,\n    71,\n    103,\n    72,\n    104,\n    72,\n    104,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    74,\n    106,\n    75,\n    107,\n    107,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    78,\n    110,\n    78,\n    110,\n    78,\n    110,\n    110,\n    78,\n    110,\n    79,\n    111,\n    79,\n    111,\n    79,\n    111,\n    79,\n    111,\n    82,\n    114,\n    82,\n    114,\n    82,\n    114,\n    83,\n    115,\n    83,\n    115,\n    83,\n    115,\n    83,\n    115,\n    84,\n    116,\n    84,\n    116,\n    84,\n    116,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    87,\n    119,\n    89,\n    121,\n    89,\n    90,\n    122,\n    90,\n    122,\n    90,\n    122,\n    115\n];\nfunction replaceChar(charCode) {\n    if (charCode < DIACRITICS_CHARCODE_START || charCode > DIACRITICS_CHARCODE_END)\n        return charCode;\n    /* c8 ignore next  */\n    return CHARCODE_REPLACE_MAPPING[charCode - DIACRITICS_CHARCODE_START] || charCode;\n}\nexport function replaceDiacritics(str) {\n    const stringCharCode = [];\n    for (let idx = 0; idx < str.length; idx++) {\n        stringCharCode[idx] = replaceChar(str.charCodeAt(idx));\n    }\n    return String.fromCharCode(...stringCharCode);\n}\n//# sourceMappingURL=diacritics.js.map","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst step2List = {\n    ational: 'ate',\n    tional: 'tion',\n    enci: 'ence',\n    anci: 'ance',\n    izer: 'ize',\n    bli: 'ble',\n    alli: 'al',\n    entli: 'ent',\n    eli: 'e',\n    ousli: 'ous',\n    ization: 'ize',\n    ation: 'ate',\n    ator: 'ate',\n    alism: 'al',\n    iveness: 'ive',\n    fulness: 'ful',\n    ousness: 'ous',\n    aliti: 'al',\n    iviti: 'ive',\n    biliti: 'ble',\n    logi: 'log'\n};\nconst step3List = {\n    icate: 'ic',\n    ative: '',\n    alize: 'al',\n    iciti: 'ic',\n    ical: 'ic',\n    ful: '',\n    ness: ''\n};\n// Consonant\nconst c = '[^aeiou]';\n// Vowel\nconst v = '[aeiouy]';\n// Consonant sequence\nconst C = c + '[^aeiouy]*';\n// Vowel sequence\nconst V = v + '[aeiou]*';\n// [C]VC... is m>0\nconst mgr0 = '^(' + C + ')?' + V + C;\n// [C]VC[V] is m=1\nconst meq1 = '^(' + C + ')?' + V + C + '(' + V + ')?$';\n// [C]VCVC... is m>1\nconst mgr1 = '^(' + C + ')?' + V + C + V + C;\n// vowel in stem\nconst s_v = '^(' + C + ')?' + v;\nexport function stemmer(w) {\n    let stem;\n    let suffix;\n    let re;\n    let re2;\n    let re3;\n    let re4;\n    if (w.length < 3) {\n        return w;\n    }\n    const firstch = w.substring(0, 1);\n    if (firstch == 'y') {\n        w = firstch.toUpperCase() + w.substring(1);\n    }\n    re = /^(.+?)(ss|i)es$/;\n    re2 = /^(.+?)([^s])s$/;\n    if (re.test(w)) {\n        w = w.replace(re, '$1$2');\n    }\n    else if (re2.test(w)) {\n        w = w.replace(re2, '$1$2');\n    }\n    re = /^(.+?)eed$/;\n    re2 = /^(.+?)(ed|ing)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        re = new RegExp(mgr0);\n        if (re.test(fp[1])) {\n            re = /.$/;\n            w = w.replace(re, '');\n        }\n    }\n    else if (re2.test(w)) {\n        const fp = re2.exec(w);\n        stem = fp[1];\n        re2 = new RegExp(s_v);\n        if (re2.test(stem)) {\n            w = stem;\n            re2 = /(at|bl|iz)$/;\n            re3 = new RegExp('([^aeiouylsz])\\\\1$');\n            re4 = new RegExp('^' + C + v + '[^aeiouwxy]$');\n            if (re2.test(w)) {\n                w = w + 'e';\n            }\n            else if (re3.test(w)) {\n                re = /.$/;\n                w = w.replace(re, '');\n            }\n            else if (re4.test(w)) {\n                w = w + 'e';\n            }\n        }\n    }\n    re = /^(.+?)y$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(s_v);\n        if (stem && re.test(stem)) {\n            w = stem + 'i';\n        }\n    }\n    re =\n        /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        suffix = fp?.[2];\n        re = new RegExp(mgr0);\n        if (stem && re.test(stem)) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            w = stem + step2List[suffix];\n        }\n    }\n    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        suffix = fp?.[2];\n        re = new RegExp(mgr0);\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        if (stem && re.test(stem)) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            w = stem + step3List[suffix];\n        }\n    }\n    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n    re2 = /^(.+?)(s|t)(ion)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(mgr1);\n        if (stem && re.test(stem)) {\n            w = stem;\n        }\n    }\n    else if (re2.test(w)) {\n        const fp = re2.exec(w);\n        stem = fp?.[1] ?? '' + fp?.[2] ?? '';\n        re2 = new RegExp(mgr1);\n        if (re2.test(stem)) {\n            w = stem;\n        }\n    }\n    re = /^(.+?)e$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(mgr1);\n        re2 = new RegExp(meq1);\n        re3 = new RegExp('^' + C + v + '[^aeiouwxy]$');\n        if (stem && (re.test(stem) || (re2.test(stem) && !re3.test(stem)))) {\n            w = stem;\n        }\n    }\n    re = /ll$/;\n    re2 = new RegExp(mgr1);\n    if (re.test(w) && re2.test(w)) {\n        re = /.$/;\n        w = w.replace(re, '');\n    }\n    if (firstch == 'y') {\n        w = firstch.toLowerCase() + w.substring(1);\n    }\n    return w;\n}\n//# sourceMappingURL=english-stemmer.js.map","import { createError } from '../../errors.js';\nimport { replaceDiacritics } from './diacritics.js';\nimport { SPLITTERS, SUPPORTED_LANGUAGES } from './languages.js';\nimport { stemmer as english } from './english-stemmer.js';\nexport function normalizeToken(prop, token, withCache = true) {\n    const key = `${this.language}:${prop}:${token}`;\n    if (withCache && this.normalizationCache.has(key)) {\n        return this.normalizationCache.get(key);\n    }\n    // Remove stopwords if enabled\n    if (this.stopWords?.includes(token)) {\n        if (withCache) {\n            this.normalizationCache.set(key, '');\n        }\n        return '';\n    }\n    // Apply stemming if enabled\n    if (this.stemmer && !this.stemmerSkipProperties.has(prop)) {\n        token = this.stemmer(token);\n    }\n    token = replaceDiacritics(token);\n    if (withCache) {\n        this.normalizationCache.set(key, token);\n    }\n    return token;\n}\n/* c8 ignore next 10 */\nfunction trim(text) {\n    while (text[text.length - 1] === '') {\n        text.pop();\n    }\n    while (text[0] === '') {\n        text.shift();\n    }\n    return text;\n}\nfunction tokenize(input, language, prop, withCache = true) {\n    if (language && language !== this.language) {\n        throw createError('LANGUAGE_NOT_SUPPORTED', language);\n    }\n    /* c8 ignore next 3 */\n    if (typeof input !== 'string') {\n        return [input];\n    }\n    const normalizeToken = this.normalizeToken.bind(this, prop ?? '');\n    let tokens;\n    if (prop && this.tokenizeSkipProperties.has(prop)) {\n        tokens = [normalizeToken(input, withCache)];\n    }\n    else {\n        const splitRule = SPLITTERS[this.language];\n        tokens = input\n            .toLowerCase()\n            .split(splitRule)\n            .map(t => normalizeToken(t, withCache))\n            .filter(Boolean);\n    }\n    const trimTokens = trim(tokens);\n    if (!this.allowDuplicates) {\n        return Array.from(new Set(trimTokens));\n    }\n    return trimTokens;\n}\nexport function createTokenizer(config = {}) {\n    if (!config.language) {\n        config.language = 'english';\n    }\n    else if (!SUPPORTED_LANGUAGES.includes(config.language)) {\n        throw createError('LANGUAGE_NOT_SUPPORTED', config.language);\n    }\n    // Handle stemming - It is disabled by default\n    let stemmer;\n    if (config.stemming || (config.stemmer && !('stemming' in config))) {\n        if (config.stemmer) {\n            if (typeof config.stemmer !== 'function') {\n                throw createError('INVALID_STEMMER_FUNCTION_TYPE');\n            }\n            stemmer = config.stemmer;\n        }\n        else {\n            if (config.language === 'english') {\n                stemmer = english;\n            }\n            else {\n                throw createError('MISSING_STEMMER', config.language);\n            }\n        }\n    }\n    // Handle stopwords\n    let stopWords;\n    if (config.stopWords !== false) {\n        stopWords = [];\n        if (Array.isArray(config.stopWords)) {\n            stopWords = config.stopWords;\n        }\n        else if (typeof config.stopWords === 'function') {\n            stopWords = config.stopWords(stopWords);\n        }\n        else if (config.stopWords) {\n            throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n        }\n        // Make sure stopWords is just an array of strings\n        if (!Array.isArray(stopWords)) {\n            throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n        }\n        for (const s of stopWords) {\n            if (typeof s !== 'string') {\n                throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n            }\n        }\n    }\n    // Create the tokenizer\n    const tokenizer = {\n        tokenize,\n        language: config.language,\n        stemmer,\n        stemmerSkipProperties: new Set(config.stemmerSkipProperties ? [config.stemmerSkipProperties].flat() : []),\n        tokenizeSkipProperties: new Set(config.tokenizeSkipProperties ? [config.tokenizeSkipProperties].flat() : []),\n        stopWords,\n        allowDuplicates: Boolean(config.allowDuplicates),\n        normalizeToken,\n        normalizationCache: new Map()\n    };\n    tokenizer.tokenize = tokenize.bind(tokenizer);\n    tokenizer.normalizeToken = normalizeToken;\n    return tokenizer;\n}\n//# sourceMappingURL=index.js.map","import { formatElapsedTime, getDocumentIndexId, getDocumentProperties, validateSchema } from '../components/defaults.js';\nimport { createDocumentsStore } from '../components/documents-store.js';\nimport { AVAILABLE_PLUGIN_HOOKS, getAllPluginsByHook } from '../components/plugins.js';\nimport { FUNCTION_COMPONENTS, OBJECT_COMPONENTS, runAfterCreate } from '../components/hooks.js';\nimport { createIndex } from '../components/index.js';\nimport { createInternalDocumentIDStore } from '../components/internal-document-id-store.js';\nimport { createSorter } from '../components/sorter.js';\nimport { createTokenizer } from '../components/tokenizer/index.js';\nimport { createError } from '../errors.js';\nimport { uniqueId } from '../utils.js';\nfunction validateComponents(components) {\n    const defaultComponents = {\n        formatElapsedTime,\n        getDocumentIndexId,\n        getDocumentProperties,\n        validateSchema\n    };\n    for (const rawKey of FUNCTION_COMPONENTS) {\n        const key = rawKey;\n        if (components[key]) {\n            if (typeof components[key] !== 'function') {\n                throw createError('COMPONENT_MUST_BE_FUNCTION', key);\n            }\n        }\n        else {\n            // @ts-expect-error TSC is unable to resolve this\n            components[key] = defaultComponents[key];\n        }\n    }\n    for (const rawKey of Object.keys(components)) {\n        if (!OBJECT_COMPONENTS.includes(rawKey) && !FUNCTION_COMPONENTS.includes(rawKey)) {\n            throw createError('UNSUPPORTED_COMPONENT', rawKey);\n        }\n    }\n}\nexport function create({ schema, sort, language, components, id, plugins }) {\n    if (!components) {\n        components = {};\n    }\n    for (const plugin of plugins ?? []) {\n        if (!('getComponents' in plugin)) {\n            continue;\n        }\n        if (typeof plugin.getComponents !== 'function') {\n            continue;\n        }\n        const pluginComponents = plugin.getComponents(schema);\n        const keys = Object.keys(pluginComponents);\n        for (const key of keys) {\n            if (components[key]) {\n                throw createError('PLUGIN_COMPONENT_CONFLICT', key, plugin.name);\n            }\n        }\n        components = {\n            ...components,\n            ...pluginComponents\n        };\n    }\n    if (!id) {\n        id = uniqueId();\n    }\n    let tokenizer = components.tokenizer;\n    let index = components.index;\n    let documentsStore = components.documentsStore;\n    let sorter = components.sorter;\n    if (!tokenizer) {\n        // Use the default tokenizer\n        tokenizer = createTokenizer({ language: language ?? 'english' });\n    }\n    else if (!tokenizer.tokenize) {\n        // If there is no tokenizer function, we assume this is a TokenizerConfig\n        tokenizer = createTokenizer(tokenizer);\n    }\n    else {\n        const customTokenizer = tokenizer;\n        tokenizer = customTokenizer;\n    }\n    if (components.tokenizer && language) {\n        // Accept language only if a tokenizer is not provided\n        throw createError('NO_LANGUAGE_WITH_CUSTOM_TOKENIZER');\n    }\n    const internalDocumentStore = createInternalDocumentIDStore();\n    index ||= createIndex();\n    sorter ||= createSorter();\n    documentsStore ||= createDocumentsStore();\n    // Validate all other components\n    validateComponents(components);\n    // Assign only recognized components and hooks\n    const { getDocumentProperties, getDocumentIndexId, validateSchema, formatElapsedTime } = components;\n    const orama = {\n        data: {},\n        caches: {},\n        schema,\n        tokenizer,\n        index,\n        sorter,\n        documentsStore,\n        internalDocumentIDStore: internalDocumentStore,\n        getDocumentProperties,\n        getDocumentIndexId,\n        validateSchema,\n        beforeInsert: [],\n        afterInsert: [],\n        beforeRemove: [],\n        afterRemove: [],\n        beforeUpdate: [],\n        afterUpdate: [],\n        beforeSearch: [],\n        afterSearch: [],\n        beforeInsertMultiple: [],\n        afterInsertMultiple: [],\n        beforeRemoveMultiple: [],\n        afterRemoveMultiple: [],\n        afterUpdateMultiple: [],\n        beforeUpdateMultiple: [],\n        afterCreate: [],\n        formatElapsedTime,\n        id,\n        plugins,\n        version: getVersion()\n    };\n    orama.data = {\n        index: orama.index.create(orama, internalDocumentStore, schema),\n        docs: orama.documentsStore.create(orama, internalDocumentStore),\n        sorting: orama.sorter.create(orama, internalDocumentStore, schema, sort)\n    };\n    for (const hook of AVAILABLE_PLUGIN_HOOKS) {\n        orama[hook] = (orama[hook] ?? []).concat(getAllPluginsByHook(orama, hook));\n    }\n    const afterCreate = orama['afterCreate'];\n    if (afterCreate) {\n        runAfterCreate(afterCreate, orama);\n    }\n    return orama;\n}\nfunction getVersion() {\n    return '{{VERSION}}';\n}\n//# sourceMappingURL=create.js.map","export function getByID(db, id) {\n    return db.documentsStore.get(db.data.docs, id);\n}\nexport function count(db) {\n    return db.documentsStore.count(db.data.docs);\n}\n//# sourceMappingURL=docs.js.map","export const MODE_FULLTEXT_SEARCH = 'fulltext';\nexport const MODE_HYBRID_SEARCH = 'hybrid';\nexport const MODE_VECTOR_SEARCH = 'vector';\n//# sourceMappingURL=constants.js.map","export { MODE_FULLTEXT_SEARCH, MODE_HYBRID_SEARCH, MODE_VECTOR_SEARCH } from './constants.js';\nexport const kInsertions = Symbol('orama.insertions');\nexport const kRemovals = Symbol('orama.removals');\n//# sourceMappingURL=types.js.map","import { kInsertions, kRemovals } from '../types.js';\n// Web platforms don't have process. React-Native doesn't have process.emitWarning.\nconst warn = globalThis.process?.emitWarning ??\n    function emitWarning(message, options) {\n        console.warn(`[WARNING] [${options.code}] ${message}`);\n    };\nexport function trackInsertion(orama) {\n    if (typeof orama[kInsertions] !== 'number') {\n        queueMicrotask(() => {\n            orama[kInsertions] = undefined;\n        });\n        orama[kInsertions] = 0;\n    }\n    if (orama[kInsertions] > 1000) {\n        warn(\"Orama's insert operation is synchronous. Please avoid inserting a large number of document in a single operation in order not to block the main thread or, in alternative, please use insertMultiple.\", { code: 'ORAMA0001' });\n        orama[kInsertions] = -1;\n    }\n    else if (orama[kInsertions] >= 0) {\n        orama[kInsertions]++;\n    }\n}\nexport function trackRemoval(orama) {\n    if (typeof orama[kRemovals] !== 'number') {\n        queueMicrotask(() => {\n            orama[kRemovals] = undefined;\n        });\n        orama[kRemovals] = 0;\n    }\n    if (orama[kRemovals] > 1000) {\n        warn(\"Orama's remove operation is synchronous. Please avoid removing a large number of document in a single operation in order not to block the main thread, in alternative, please use updateMultiple.\", { code: 'ORAMA0002' });\n        orama[kRemovals] = -1;\n    }\n    else if (orama[kRemovals] >= 0) {\n        orama[kRemovals]++;\n    }\n}\n//# sourceMappingURL=sync-blocking-checker.js.map","import { isArrayType, isGeoPointType, isVectorType } from '../components.js';\nimport { isAsyncFunction, sleep } from '../utils.js';\nimport { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { trackInsertion } from '../components/sync-blocking-checker.js';\nimport { createError } from '../errors.js';\nimport { getInternalDocumentId } from '../components/internal-document-id-store.js';\nexport function insert(orama, doc, language, skipHooks, options) {\n    const errorProperty = orama.validateSchema(doc, orama.schema);\n    if (errorProperty) {\n        throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n    }\n    const asyncNeeded = isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertAsync(orama, doc, language, skipHooks, options);\n    }\n    return innerInsertSync(orama, doc, language, skipHooks, options);\n}\nconst ENUM_TYPE = new Set(['enum', 'enum[]']);\nconst STRING_NUMBER_TYPE = new Set(['string', 'number']);\nasync function innerInsertAsync(orama, doc, language, skipHooks, options) {\n    const { index, docs } = orama.data;\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    if (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        await runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const indexableValues = orama.getDocumentProperties(doc, indexableProperties);\n    for (const [key, value] of Object.entries(indexableValues)) {\n        if (typeof value === 'undefined')\n            continue;\n        const actualType = typeof value;\n        const expectedType = indexablePropertiesWithTypes[key];\n        validateDocumentProperty(actualType, expectedType, key, value);\n    }\n    await indexAndSortDocument(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options);\n    if (!skipHooks) {\n        await runSingleHook(orama.afterInsert, orama, id, doc);\n    }\n    trackInsertion(orama);\n    return id;\n}\nfunction innerInsertSync(orama, doc, language, skipHooks, options) {\n    const { index, docs } = orama.data;\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    if (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const indexableValues = orama.getDocumentProperties(doc, indexableProperties);\n    for (const [key, value] of Object.entries(indexableValues)) {\n        if (typeof value === 'undefined')\n            continue;\n        const actualType = typeof value;\n        const expectedType = indexablePropertiesWithTypes[key];\n        validateDocumentProperty(actualType, expectedType, key, value);\n    }\n    indexAndSortDocumentSync(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options);\n    if (!skipHooks) {\n        runSingleHook(orama.afterInsert, orama, id, doc);\n    }\n    trackInsertion(orama);\n    return id;\n}\nfunction validateDocumentProperty(actualType, expectedType, key, value) {\n    if (isGeoPointType(expectedType) &&\n        typeof value === 'object' &&\n        typeof value.lon === 'number' &&\n        typeof value.lat === 'number') {\n        return;\n    }\n    if (isVectorType(expectedType) && Array.isArray(value))\n        return;\n    if (isArrayType(expectedType) && Array.isArray(value))\n        return;\n    if (ENUM_TYPE.has(expectedType) && STRING_NUMBER_TYPE.has(actualType))\n        return;\n    if (actualType !== expectedType) {\n        throw createError('INVALID_DOCUMENT_PROPERTY', key, expectedType, actualType);\n    }\n}\nasync function indexAndSortDocument(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options) {\n    for (const prop of indexableProperties) {\n        const value = indexableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.index.getSearchablePropertiesWithTypes(orama.data.index)[prop];\n        await orama.index.beforeInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n        const internalId = orama.internalDocumentIDStore.idToInternalId.get(id);\n        await orama.index.insert(orama.index, orama.data.index, prop, id, internalId, value, expectedType, language, orama.tokenizer, docsCount, options);\n        await orama.index.afterInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        const value = sortableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.sorter.getSortablePropertiesWithTypes(orama.data.sorting)[prop];\n        orama.sorter.insert(orama.data.sorting, prop, id, value, expectedType, language);\n    }\n}\nfunction indexAndSortDocumentSync(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options) {\n    for (const prop of indexableProperties) {\n        const value = indexableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.index.getSearchablePropertiesWithTypes(orama.data.index)[prop];\n        const internalDocumentId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n        orama.index.beforeInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n        orama.index.insert(orama.index, orama.data.index, prop, id, internalDocumentId, value, expectedType, language, orama.tokenizer, docsCount, options);\n        orama.index.afterInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        const value = sortableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.sorter.getSortablePropertiesWithTypes(orama.data.sorting)[prop];\n        orama.sorter.insert(orama.data.sorting, prop, id, value, expectedType, language);\n    }\n}\nexport function insertMultiple(orama, docs, batchSize, language, skipHooks, timeout) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsertMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertMultipleAsync(orama, docs, batchSize, language, skipHooks, timeout);\n    }\n    return innerInsertMultipleSync(orama, docs, batchSize, language, skipHooks, timeout);\n}\nasync function innerInsertMultipleAsync(orama, docs, batchSize = 1000, language, skipHooks, timeout = 0) {\n    const ids = [];\n    const processNextBatch = async (startIndex) => {\n        const endIndex = Math.min(startIndex + batchSize, docs.length);\n        const batch = docs.slice(startIndex, endIndex);\n        for (const doc of batch) {\n            const options = { avlRebalanceThreshold: batch.length };\n            const id = await insert(orama, doc, language, skipHooks, options);\n            ids.push(id);\n        }\n        return endIndex;\n    };\n    const processAllBatches = async () => {\n        let currentIndex = 0;\n        while (currentIndex < docs.length) {\n            const startTime = Date.now();\n            currentIndex = await processNextBatch(currentIndex);\n            if (timeout > 0) {\n                const elapsedTime = Date.now() - startTime;\n                const waitTime = timeout - elapsedTime;\n                if (waitTime > 0) {\n                    sleep(waitTime);\n                }\n            }\n        }\n    };\n    await processAllBatches();\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterInsertMultiple, orama, docs);\n    }\n    return ids;\n}\nfunction innerInsertMultipleSync(orama, docs, batchSize = 1000, language, skipHooks, timeout = 0) {\n    const ids = [];\n    let i = 0;\n    function processNextBatch() {\n        const batch = docs.slice(i * batchSize, (i + 1) * batchSize);\n        if (batch.length === 0)\n            return false;\n        for (const doc of batch) {\n            const options = { avlRebalanceThreshold: batch.length };\n            const id = insert(orama, doc, language, skipHooks, options);\n            ids.push(id);\n        }\n        i++;\n        return true;\n    }\n    function processAllBatches() {\n        const startTime = Date.now();\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const hasMoreBatches = processNextBatch();\n            if (!hasMoreBatches)\n                break;\n            if (timeout > 0) {\n                const elapsedTime = Date.now() - startTime;\n                if (elapsedTime >= timeout) {\n                    const remainingTime = timeout - (elapsedTime % timeout);\n                    if (remainingTime > 0) {\n                        sleep(remainingTime);\n                    }\n                }\n            }\n        }\n    }\n    processAllBatches();\n    if (!skipHooks) {\n        runMultipleHook(orama.afterInsertMultiple, orama, docs);\n    }\n    return ids;\n}\nexport function innerInsertMultiple(orama, docs, batchSize, language, skipHooks, timeout) {\n    const asyncNeeded = isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertMultipleAsync(orama, docs, batchSize, language, skipHooks, timeout);\n    }\n    return innerInsertMultipleSync(orama, docs, batchSize, language, skipHooks, timeout);\n}\n//# sourceMappingURL=insert.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { getDocumentIdFromInternalId, getInternalDocumentId, } from '../components/internal-document-id-store.js';\nimport { trackRemoval } from '../components/sync-blocking-checker.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function remove(orama, id, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.index.beforeRemove) ||\n        isAsyncFunction(orama.index.remove) ||\n        isAsyncFunction(orama.index.afterRemove);\n    if (asyncNeeded) {\n        return removeAsync(orama, id, language, skipHooks);\n    }\n    return removeSync(orama, id, language, skipHooks);\n}\nasync function removeAsync(orama, id, language, skipHooks) {\n    let result = true;\n    const { index, docs } = orama.data;\n    const doc = orama.documentsStore.get(docs, id);\n    if (!doc) {\n        return false;\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    const docId = getDocumentIdFromInternalId(orama.internalDocumentIDStore, internalId);\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        await runSingleHook(orama.beforeRemove, orama, docId);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const values = orama.getDocumentProperties(doc, indexableProperties);\n    for (const prop of indexableProperties) {\n        const value = values[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        const schemaType = indexablePropertiesWithTypes[prop];\n        await orama.index.beforeRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n        if (!(await orama.index.remove(orama.index, orama.data.index, prop, id, internalId, value, schemaType, language, orama.tokenizer, docsCount))) {\n            result = false;\n        }\n        await orama.index.afterRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = await orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = await orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        if (typeof sortableValues[prop] === 'undefined') {\n            continue;\n        }\n        orama.sorter.remove(orama.data.sorting, prop, id);\n    }\n    if (!skipHooks) {\n        await runSingleHook(orama.afterRemove, orama, docId);\n    }\n    orama.documentsStore.remove(orama.data.docs, id, internalId);\n    trackRemoval(orama);\n    return result;\n}\nfunction removeSync(orama, id, language, skipHooks) {\n    let result = true;\n    const { index, docs } = orama.data;\n    const doc = orama.documentsStore.get(docs, id);\n    if (!doc) {\n        return false;\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    const docId = getDocumentIdFromInternalId(orama.internalDocumentIDStore, internalId);\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        runSingleHook(orama.beforeRemove, orama, docId);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const values = orama.getDocumentProperties(doc, indexableProperties);\n    for (const prop of indexableProperties) {\n        const value = values[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        const schemaType = indexablePropertiesWithTypes[prop];\n        orama.index.beforeRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n        if (!orama.index.remove(orama.index, orama.data.index, prop, id, internalId, value, schemaType, language, orama.tokenizer, docsCount)) {\n            result = false;\n        }\n        orama.index.afterRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        if (typeof sortableValues[prop] === 'undefined') {\n            continue;\n        }\n        orama.sorter.remove(orama.data.sorting, prop, id);\n    }\n    if (!skipHooks) {\n        runSingleHook(orama.afterRemove, orama, docId);\n    }\n    orama.documentsStore.remove(orama.data.docs, id, internalId);\n    trackRemoval(orama);\n    return result;\n}\nexport function removeMultiple(orama, ids, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.index.beforeRemove) ||\n        isAsyncFunction(orama.index.remove) ||\n        isAsyncFunction(orama.index.afterRemove) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple);\n    if (asyncNeeded) {\n        return removeMultipleAsync(orama, ids, batchSize, language, skipHooks);\n    }\n    return removeMultipleSync(orama, ids, batchSize, language, skipHooks);\n}\nasync function removeMultipleAsync(orama, ids, batchSize, language, skipHooks) {\n    let result = 0;\n    if (!batchSize) {\n        batchSize = 1000;\n    }\n    const docIdsForHooks = skipHooks\n        ? []\n        : ids.map((id) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, getInternalDocumentId(orama.internalDocumentIDStore, id)));\n    if (!skipHooks) {\n        await runMultipleHook(orama.beforeRemoveMultiple, orama, docIdsForHooks);\n    }\n    await new Promise((resolve, reject) => {\n        let i = 0;\n        async function _removeMultiple() {\n            const batch = ids.slice(i * batchSize, ++i * batchSize);\n            if (!batch.length) {\n                return resolve();\n            }\n            for (const doc of batch) {\n                try {\n                    if (await remove(orama, doc, language, skipHooks)) {\n                        result++;\n                    }\n                }\n                catch (err) {\n                    reject(err);\n                }\n            }\n            setTimeout(_removeMultiple, 0);\n        }\n        setTimeout(_removeMultiple, 0);\n    });\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterRemoveMultiple, orama, docIdsForHooks);\n    }\n    return result;\n}\nfunction removeMultipleSync(orama, ids, batchSize, language, skipHooks) {\n    let result = 0;\n    if (!batchSize) {\n        batchSize = 1000;\n    }\n    const docIdsForHooks = skipHooks\n        ? []\n        : ids.map((id) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, getInternalDocumentId(orama.internalDocumentIDStore, id)));\n    if (!skipHooks) {\n        runMultipleHook(orama.beforeRemoveMultiple, orama, docIdsForHooks);\n    }\n    let i = 0;\n    function _removeMultipleSync() {\n        const batch = ids.slice(i * batchSize, ++i * batchSize);\n        if (!batch.length)\n            return;\n        for (const doc of batch) {\n            if (remove(orama, doc, language, skipHooks)) {\n                result++;\n            }\n        }\n        setTimeout(_removeMultipleSync, 0);\n    }\n    _removeMultipleSync();\n    if (!skipHooks) {\n        runMultipleHook(orama.afterRemoveMultiple, orama, docIdsForHooks);\n    }\n    return result;\n}\n//# sourceMappingURL=remove.js.map","import { createError } from '../errors.js';\nimport { getNested } from '../utils.js';\nfunction sortAsc(a, b) {\n    return a[1] - b[1];\n}\nfunction sortDesc(a, b) {\n    return b[1] - a[1];\n}\nfunction sortingPredicateBuilder(order = 'desc') {\n    return order.toLowerCase() === 'asc' ? sortAsc : sortDesc;\n}\nexport function getFacets(orama, results, facetsConfig) {\n    const facets = {};\n    const allIDs = results.map(([id]) => id);\n    const allDocs = orama.documentsStore.getMultiple(orama.data.docs, allIDs);\n    const facetKeys = Object.keys(facetsConfig);\n    const properties = orama.index.getSearchablePropertiesWithTypes(orama.data.index);\n    for (const facet of facetKeys) {\n        let values;\n        // Hack to guarantee the same order of ranges as specified by the user\n        // TODO: Revisit this once components land\n        if (properties[facet] === 'number') {\n            const { ranges } = facetsConfig[facet];\n            const rangesLength = ranges.length;\n            const tmp = Array.from({ length: rangesLength });\n            for (let i = 0; i < rangesLength; i++) {\n                const range = ranges[i];\n                tmp[i] = [`${range.from}-${range.to}`, 0];\n            }\n            values = Object.fromEntries(tmp);\n        }\n        facets[facet] = {\n            count: 0,\n            values: values ?? {}\n        };\n    }\n    const allDocsLength = allDocs.length;\n    for (let i = 0; i < allDocsLength; i++) {\n        const doc = allDocs[i];\n        for (const facet of facetKeys) {\n            const facetValue = facet.includes('.') ? getNested(doc, facet) : doc[facet];\n            const propertyType = properties[facet];\n            const facetValues = facets[facet].values;\n            switch (propertyType) {\n                case 'number': {\n                    const ranges = facetsConfig[facet].ranges;\n                    calculateNumberFacetBuilder(ranges, facetValues)(facetValue);\n                    break;\n                }\n                case 'number[]': {\n                    const alreadyInsertedValues = new Set();\n                    const ranges = facetsConfig[facet].ranges;\n                    const calculateNumberFacet = calculateNumberFacetBuilder(ranges, facetValues, alreadyInsertedValues);\n                    for (const v of facetValue) {\n                        calculateNumberFacet(v);\n                    }\n                    break;\n                }\n                case 'boolean':\n                case 'enum':\n                case 'string': {\n                    calculateBooleanStringOrEnumFacetBuilder(facetValues, propertyType)(facetValue);\n                    break;\n                }\n                case 'boolean[]':\n                case 'enum[]':\n                case 'string[]': {\n                    const alreadyInsertedValues = new Set();\n                    const innerType = propertyType === 'boolean[]' ? 'boolean' : 'string';\n                    const calculateBooleanStringOrEnumFacet = calculateBooleanStringOrEnumFacetBuilder(facetValues, innerType, alreadyInsertedValues);\n                    for (const v of facetValue) {\n                        calculateBooleanStringOrEnumFacet(v);\n                    }\n                    break;\n                }\n                default:\n                    throw createError('FACET_NOT_SUPPORTED', propertyType);\n            }\n        }\n    }\n    // TODO: We are looping again with the same previous keys, should we creat a single loop instead?\n    for (const facet of facetKeys) {\n        const currentFacet = facets[facet];\n        // Count the number of values for each facet\n        currentFacet.count = Object.keys(currentFacet.values).length;\n        // Sort only string-based facets\n        if (properties[facet] === 'string') {\n            const stringFacetDefinition = facetsConfig[facet];\n            const sortingPredicate = sortingPredicateBuilder(stringFacetDefinition.sort);\n            currentFacet.values = Object.fromEntries(Object.entries(currentFacet.values)\n                .sort(sortingPredicate)\n                .slice(stringFacetDefinition.offset ?? 0, stringFacetDefinition.limit ?? 10));\n        }\n    }\n    return facets;\n}\nfunction calculateNumberFacetBuilder(ranges, values, alreadyInsertedValues) {\n    return (facetValue) => {\n        for (const range of ranges) {\n            const value = `${range.from}-${range.to}`;\n            if (alreadyInsertedValues?.has(value)) {\n                continue;\n            }\n            if (facetValue >= range.from && facetValue <= range.to) {\n                if (values[value] === undefined) {\n                    values[value] = 1;\n                }\n                else {\n                    values[value]++;\n                    alreadyInsertedValues?.add(value);\n                }\n            }\n        }\n    };\n}\nfunction calculateBooleanStringOrEnumFacetBuilder(values, propertyType, alreadyInsertedValues) {\n    const defaultValue = propertyType === 'boolean' ? 'false' : '';\n    return (facetValue) => {\n        // String or boolean based facets\n        const value = facetValue?.toString() ?? defaultValue;\n        if (alreadyInsertedValues?.has(value)) {\n            return;\n        }\n        values[value] = (values[value] ?? 0) + 1;\n        alreadyInsertedValues?.add(value);\n    };\n}\n//# sourceMappingURL=facets.js.map","import { createError } from '../errors.js';\nimport { getNested, intersect, safeArrayPush } from '../utils.js';\nimport { getDocumentIdFromInternalId } from './internal-document-id-store.js';\nconst DEFAULT_REDUCE = {\n    reducer: (_, acc, res, index) => {\n        acc[index] = res;\n        return acc;\n    },\n    getInitialValue: (length) => Array.from({ length })\n};\nconst ALLOWED_TYPES = ['string', 'number', 'boolean'];\nexport function getGroups(orama, results, groupBy) {\n    const properties = groupBy.properties;\n    const propertiesLength = properties.length;\n    const schemaProperties = orama.index.getSearchablePropertiesWithTypes(orama.data.index);\n    for (let i = 0; i < propertiesLength; i++) {\n        const property = properties[i];\n        if (typeof schemaProperties[property] === 'undefined') {\n            throw createError('UNKNOWN_GROUP_BY_PROPERTY', property);\n        }\n        if (!ALLOWED_TYPES.includes(schemaProperties[property])) {\n            throw createError('INVALID_GROUP_BY_PROPERTY', property, ALLOWED_TYPES.join(', '), schemaProperties[property]);\n        }\n    }\n    const allIDs = results.map(([id]) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, id));\n    // allDocs is already sorted by the sortBy algorithm\n    // We leverage on that to limit the number of documents returned\n    const allDocs = orama.documentsStore.getMultiple(orama.data.docs, allIDs);\n    const allDocsLength = allDocs.length;\n    const returnedCount = groupBy.maxResult || Number.MAX_SAFE_INTEGER;\n    const listOfValues = [];\n    // We want to understand which documents have which values\n    // and group them by the property and values\n    const g = {};\n    for (let i = 0; i < propertiesLength; i++) {\n        const groupByKey = properties[i];\n        const group = {\n            property: groupByKey,\n            perValue: {}\n        };\n        const values = new Set();\n        for (let j = 0; j < allDocsLength; j++) {\n            const doc = allDocs[j];\n            const value = getNested(doc, groupByKey);\n            // we don't want to consider undefined values\n            if (typeof value === 'undefined') {\n                continue;\n            }\n            const keyValue = typeof value !== 'boolean' ? value : '' + value;\n            const perValue = group.perValue[keyValue] ?? {\n                indexes: [],\n                count: 0\n            };\n            if (perValue.count >= returnedCount) {\n                // We stop early because for this value we react the limit\n                continue;\n            }\n            // We use the index to keep track of the original order\n            perValue.indexes.push(j);\n            perValue.count++;\n            group.perValue[keyValue] = perValue;\n            values.add(value);\n        }\n        listOfValues.push(Array.from(values));\n        g[groupByKey] = group;\n    }\n    const combinations = calculateCombination(listOfValues);\n    const combinationsLength = combinations.length;\n    const groups = [];\n    for (let i = 0; i < combinationsLength; i++) {\n        const combination = combinations[i];\n        const combinationLength = combination.length;\n        const group = {\n            values: [],\n            indexes: []\n        };\n        const indexes = [];\n        for (let j = 0; j < combinationLength; j++) {\n            const value = combination[j];\n            const property = properties[j];\n            indexes.push(g[property].perValue[(typeof value !== 'boolean' ? value : '' + value)].indexes);\n            group.values.push(value);\n        }\n        // We leverage on the index to sort the results by the original order\n        group.indexes = intersect(indexes).sort((a, b) => a - b);\n        // don't generate empty groups\n        if (group.indexes.length === 0) {\n            continue;\n        }\n        groups.push(group);\n    }\n    const groupsLength = groups.length;\n    const res = Array.from({ length: groupsLength });\n    for (let i = 0; i < groupsLength; i++) {\n        const group = groups[i];\n        const reduce = (groupBy.reduce || DEFAULT_REDUCE);\n        const docs = group.indexes.map((index) => {\n            return {\n                id: allIDs[index],\n                score: results[index][1],\n                document: allDocs[index]\n            };\n        });\n        const func = reduce.reducer.bind(null, group.values);\n        const initialValue = reduce.getInitialValue(group.indexes.length);\n        const aggregationValue = docs.reduce(func, initialValue);\n        res[i] = {\n            values: group.values,\n            result: aggregationValue\n        };\n    }\n    return res;\n}\nfunction calculateCombination(arrs, index = 0) {\n    if (index + 1 === arrs.length)\n        return arrs[index].map((item) => [item]);\n    const head = arrs[index];\n    const c = calculateCombination(arrs, index + 1);\n    const combinations = [];\n    for (const value of head) {\n        for (const combination of c) {\n            const result = [value];\n            safeArrayPush(result, combination);\n            combinations.push(result);\n        }\n    }\n    return combinations;\n}\n//# sourceMappingURL=groups.js.map","import { getFacets } from '../components/facets.js';\nimport { getGroups } from '../components/groups.js';\nimport { runAfterSearch, runBeforeSearch } from '../components/hooks.js';\nimport { getInternalDocumentId } from '../components/internal-document-id-store.js';\nimport { createError } from '../errors.js';\nimport { getNanosecondsTime, removeVectorsFromHits, sortTokenScorePredicate } from '../utils.js';\nimport { count } from './docs.js';\nimport { fetchDocuments, fetchDocumentsWithDistinct } from './search.js';\nexport function innerFullTextSearch(orama, params, language) {\n    const { term, properties } = params;\n    const index = orama.data.index;\n    // Get searchable string properties\n    let propertiesToSearch = orama.caches['propertiesToSearch'];\n    if (!propertiesToSearch) {\n        const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n        propertiesToSearch = orama.index.getSearchableProperties(index);\n        propertiesToSearch = propertiesToSearch.filter((prop) => propertiesToSearchWithTypes[prop].startsWith('string'));\n        orama.caches['propertiesToSearch'] = propertiesToSearch;\n    }\n    if (properties && properties !== '*') {\n        for (const prop of properties) {\n            if (!propertiesToSearch.includes(prop)) {\n                throw createError('UNKNOWN_INDEX', prop, propertiesToSearch.join(', '));\n            }\n        }\n        propertiesToSearch = propertiesToSearch.filter((prop) => properties.includes(prop));\n    }\n    // If filters are enabled, we need to get the IDs of the documents that match the filters.\n    const hasFilters = Object.keys(params.where ?? {}).length > 0;\n    let whereFiltersIDs;\n    if (hasFilters) {\n        whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where, language);\n    }\n    let uniqueDocsIDs;\n    // We need to perform the search if:\n    // - we have a search term\n    // - or we have properties to search\n    //   in this case, we need to return all the documents that contains at least one of the given properties\n    if (term || properties) {\n        const docsCount = count(orama);\n        uniqueDocsIDs = orama.index.search(index, term || '', orama.tokenizer, language, propertiesToSearch, params.exact || false, params.tolerance || 0, params.boost || {}, applyDefault(params.relevance), docsCount, whereFiltersIDs, params.threshold !== undefined && params.threshold !== null ? params.threshold : 1);\n    }\n    else {\n        // Tokenizer returns empty array and the search term is empty as well.\n        // We return all the documents.\n        const docIds = whereFiltersIDs ? Array.from(whereFiltersIDs) : Object.keys(orama.documentsStore.getAll(orama.data.docs));\n        uniqueDocsIDs = docIds.map((k) => [+k, 0]);\n    }\n    return uniqueDocsIDs;\n}\nexport function fullTextSearch(orama, params, language) {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        const vectorProperties = Object.keys(orama.data.index.vectorIndexes);\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        const { limit = 10, offset = 0, distinctOn, includeVectors = false } = params;\n        const isPreflight = params.preflight === true;\n        let uniqueDocsArray = innerFullTextSearch(orama, params, language);\n        if (params.sortBy) {\n            if (typeof params.sortBy === 'function') {\n                const ids = uniqueDocsArray.map(([id]) => id);\n                const docs = orama.documentsStore.getMultiple(orama.data.docs, ids);\n                const docsWithIdAndScore = docs.map((d, i) => [\n                    uniqueDocsArray[i][0],\n                    uniqueDocsArray[i][1],\n                    d\n                ]);\n                docsWithIdAndScore.sort(params.sortBy);\n                uniqueDocsArray = docsWithIdAndScore.map(([id, score]) => [id, score]);\n            }\n            else {\n                uniqueDocsArray = orama.sorter\n                    .sortBy(orama.data.sorting, uniqueDocsArray, params.sortBy)\n                    .map(([id, score]) => [getInternalDocumentId(orama.internalDocumentIDStore, id), score]);\n            }\n        }\n        else {\n            uniqueDocsArray = uniqueDocsArray.sort(sortTokenScorePredicate);\n        }\n        let results;\n        if (!isPreflight) {\n            results = distinctOn\n                ? fetchDocumentsWithDistinct(orama, uniqueDocsArray, offset, limit, distinctOn)\n                : fetchDocuments(orama, uniqueDocsArray, offset, limit);\n        }\n        const searchResult = {\n            elapsed: {\n                formatted: '',\n                raw: 0\n            },\n            hits: [],\n            count: uniqueDocsArray.length\n        };\n        if (typeof results !== 'undefined') {\n            searchResult.hits = results.filter(Boolean);\n            if (!includeVectors) {\n                removeVectorsFromHits(searchResult, vectorProperties);\n            }\n        }\n        if (shouldCalculateFacets) {\n            const facets = getFacets(orama, uniqueDocsArray, params.facets);\n            searchResult.facets = facets;\n        }\n        if (params.groupBy) {\n            searchResult.groups = getGroups(orama, uniqueDocsArray, params.groupBy);\n        }\n        searchResult.elapsed = orama.formatElapsedTime(getNanosecondsTime() - timeStart);\n        return searchResult;\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const searchResult = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, searchResult);\n        }\n        return searchResult;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    return performSearchLogic();\n}\nexport const defaultBM25Params = {\n    k: 1.2,\n    b: 0.75,\n    d: 0.5\n};\nfunction applyDefault(bm25Relevance) {\n    const r = bm25Relevance ?? {};\n    r.k = r.k ?? defaultBM25Params.k;\n    r.b = r.b ?? defaultBM25Params.b;\n    r.d = r.d ?? defaultBM25Params.d;\n    return r;\n}\n//# sourceMappingURL=search-fulltext.js.map","import { getNanosecondsTime, formatNanoseconds, sortTokenScorePredicate } from '../utils.js';\nimport { getFacets } from '../components/facets.js';\nimport { createError } from '../errors.js';\nimport { getGroups } from '../components/groups.js';\nimport { getDocumentIdFromInternalId } from '../components/internal-document-id-store.js';\nimport { runBeforeSearch, runAfterSearch } from '../components/hooks.js';\nimport { DEFAULT_SIMILARITY } from '../trees/vector.js';\nexport function innerVectorSearch(orama, params, language) {\n    const vector = params.vector;\n    if (vector && (!('value' in vector) || !('property' in vector))) {\n        throw createError('INVALID_VECTOR_INPUT', Object.keys(vector).join(', '));\n    }\n    const vectorIndex = orama.data.index.vectorIndexes[vector.property];\n    const vectorSize = vectorIndex.node.size;\n    if (vector?.value.length !== vectorSize) {\n        if (vector?.property === undefined || vector?.value.length === undefined) {\n            throw createError('INVALID_INPUT_VECTOR', 'undefined', vectorSize, 'undefined');\n        }\n        throw createError('INVALID_INPUT_VECTOR', vector.property, vectorSize, vector.value.length);\n    }\n    const index = orama.data.index;\n    let whereFiltersIDs;\n    const hasFilters = Object.keys(params.where ?? {}).length > 0;\n    if (hasFilters) {\n        whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where, language);\n    }\n    return vectorIndex.node.find(vector.value, params.similarity ?? DEFAULT_SIMILARITY, whereFiltersIDs);\n}\nexport function searchVector(orama, params, language = 'english') {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        const results = innerVectorSearch(orama, params, language)\n            .sort(sortTokenScorePredicate);\n        let facetsResults = [];\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        if (shouldCalculateFacets) {\n            const facets = getFacets(orama, results, params.facets);\n            facetsResults = facets;\n        }\n        const vectorProperty = params.vector.property;\n        const includeVectors = params.includeVectors ?? false;\n        const limit = params.limit ?? 10;\n        const offset = params.offset ?? 0;\n        const docs = Array.from({ length: limit });\n        for (let i = 0; i < limit; i++) {\n            const result = results[i + offset];\n            if (!result) {\n                break;\n            }\n            const doc = orama.data.docs.docs[result[0]];\n            if (doc) {\n                if (!includeVectors) {\n                    doc[vectorProperty] = null;\n                }\n                const newDoc = {\n                    id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, result[0]),\n                    score: result[1],\n                    document: doc\n                };\n                docs[i] = newDoc;\n            }\n        }\n        let groups = [];\n        if (params.groupBy) {\n            groups = getGroups(orama, results, params.groupBy);\n        }\n        const timeEnd = getNanosecondsTime();\n        const elapsedTime = timeEnd - timeStart;\n        return {\n            count: results.length,\n            hits: docs.filter(Boolean),\n            elapsed: {\n                raw: Number(elapsedTime),\n                formatted: formatNanoseconds(elapsedTime)\n            },\n            ...(facetsResults ? { facets: facetsResults } : {}),\n            ...(groups ? { groups } : {})\n        };\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const results = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, results);\n        }\n        return results;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    // Sync path\n    return performSearchLogic();\n}\n//# sourceMappingURL=search-vector.js.map","import { getNanosecondsTime, formatNanoseconds, removeVectorsFromHits } from '../utils.js';\nimport { getFacets } from '../components/facets.js';\nimport { getGroups } from '../components/groups.js';\nimport { fetchDocuments } from './search.js';\nimport { innerFullTextSearch } from './search-fulltext.js';\nimport { innerVectorSearch } from './search-vector.js';\nimport { runAfterSearch, runBeforeSearch } from '../components/hooks.js';\nexport function innerHybridSearch(orama, params, language) {\n    const fullTextIDs = minMaxScoreNormalization(innerFullTextSearch(orama, params, language));\n    const vectorIDs = innerVectorSearch(orama, params, language);\n    const hybridWeights = params.hybridWeights;\n    return mergeAndRankResults(fullTextIDs, vectorIDs, params.term ?? '', hybridWeights);\n}\nexport function hybridSearch(orama, params, language) {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        const uniqueTokenScores = innerHybridSearch(orama, params, language);\n        let facetsResults;\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        if (shouldCalculateFacets) {\n            facetsResults = getFacets(orama, uniqueTokenScores, params.facets);\n        }\n        let groups;\n        if (params.groupBy) {\n            groups = getGroups(orama, uniqueTokenScores, params.groupBy);\n        }\n        const offset = params.offset ?? 0;\n        const limit = params.limit ?? 10;\n        const results = fetchDocuments(orama, uniqueTokenScores, offset, limit).filter(Boolean);\n        const timeEnd = getNanosecondsTime();\n        const returningResults = {\n            count: uniqueTokenScores.length,\n            elapsed: {\n                raw: Number(timeEnd - timeStart),\n                formatted: formatNanoseconds(timeEnd - timeStart)\n            },\n            hits: results,\n            ...(facetsResults ? { facets: facetsResults } : {}),\n            ...(groups ? { groups } : {})\n        };\n        const includeVectors = params.includeVectors ?? false;\n        if (!includeVectors) {\n            const vectorProperties = Object.keys(orama.data.index.vectorIndexes);\n            removeVectorsFromHits(returningResults, vectorProperties);\n        }\n        return returningResults;\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const results = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, results);\n        }\n        return results;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    return performSearchLogic();\n}\nfunction extractScore(token) {\n    return token[1];\n}\nfunction minMaxScoreNormalization(results) {\n    // In this case I disabled the `prefer-spread` rule because spread seems to be slower\n    // eslint-disable-next-line prefer-spread\n    const maxScore = Math.max.apply(Math, results.map(extractScore));\n    return results.map(([id, score]) => [id, score / maxScore]);\n}\nfunction normalizeScore(score, maxScore) {\n    return score / maxScore;\n}\nfunction hybridScoreBuilder(textWeight, vectorWeight) {\n    return (textScore, vectorScore) => textScore * textWeight + vectorScore * vectorWeight;\n}\nfunction mergeAndRankResults(textResults, vectorResults, query, hybridWeights) {\n    // eslint-disable-next-line prefer-spread\n    const maxTextScore = Math.max.apply(Math, textResults.map(extractScore));\n    // eslint-disable-next-line prefer-spread\n    const maxVectorScore = Math.max.apply(Math, vectorResults.map(extractScore));\n    const hasHybridWeights = hybridWeights && hybridWeights.text && hybridWeights.vector;\n    const { text: textWeight, vector: vectorWeight } = hasHybridWeights ? hybridWeights : getQueryWeights(query);\n    const mergedResults = new Map();\n    const textResultsLength = textResults.length;\n    const hybridScore = hybridScoreBuilder(textWeight, vectorWeight);\n    for (let i = 0; i < textResultsLength; i++) {\n        const [id, score] = textResults[i];\n        const normalizedScore = normalizeScore(score, maxTextScore);\n        const hybridScoreValue = hybridScore(normalizedScore, 0);\n        mergedResults.set(id, hybridScoreValue);\n    }\n    const vectorResultsLength = vectorResults.length;\n    for (let i = 0; i < vectorResultsLength; i++) {\n        const [resultId, score] = vectorResults[i];\n        const normalizedScore = normalizeScore(score, maxVectorScore);\n        const existingRes = mergedResults.get(resultId) ?? 0;\n        mergedResults.set(resultId, existingRes + hybridScore(0, normalizedScore));\n    }\n    return [...mergedResults].sort((a, b) => b[1] - a[1]);\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction getQueryWeights(query) {\n    // In the next versions of Orama, we will ship a plugin containing a ML model to adjust the weights\n    // based on whether the query is keyword-focused, conceptual, etc.\n    // For now, we just return a fixed value.\n    return {\n        text: 0.5,\n        vector: 0.5\n    };\n}\n//# sourceMappingURL=search-hybrid.js.map","import { getDocumentIdFromInternalId } from '../components/internal-document-id-store.js';\nimport { createError } from '../errors.js';\nimport { getNested } from '../utils.js';\nimport { MODE_FULLTEXT_SEARCH, MODE_HYBRID_SEARCH, MODE_VECTOR_SEARCH } from '../constants.js';\nimport { fullTextSearch } from './search-fulltext.js';\nimport { searchVector } from './search-vector.js';\nimport { hybridSearch } from './search-hybrid.js';\nexport function search(orama, params, language) {\n    const mode = params.mode ?? MODE_FULLTEXT_SEARCH;\n    if (mode === MODE_FULLTEXT_SEARCH) {\n        return fullTextSearch(orama, params, language);\n    }\n    if (mode === MODE_VECTOR_SEARCH) {\n        return searchVector(orama, params);\n    }\n    if (mode === MODE_HYBRID_SEARCH) {\n        return hybridSearch(orama, params);\n    }\n    throw createError('INVALID_SEARCH_MODE', mode);\n}\nexport function fetchDocumentsWithDistinct(orama, uniqueDocsArray, offset, limit, distinctOn) {\n    const docs = orama.data.docs;\n    // Keep track which values we already seen\n    const values = new Map();\n    // We cannot know how many results we will have in the end,\n    // so we need cannot pre-allocate the array.\n    const results = [];\n    const resultIDs = new Set();\n    const uniqueDocsArrayLength = uniqueDocsArray.length;\n    let count = 0;\n    for (let i = 0; i < uniqueDocsArrayLength; i++) {\n        const idAndScore = uniqueDocsArray[i];\n        // If there are no more results, just break the loop\n        if (typeof idAndScore === 'undefined') {\n            continue;\n        }\n        const [id, score] = idAndScore;\n        if (resultIDs.has(id)) {\n            continue;\n        }\n        const doc = orama.documentsStore.get(docs, id);\n        const value = getNested(doc, distinctOn);\n        if (typeof value === 'undefined' || values.has(value)) {\n            continue;\n        }\n        values.set(value, true);\n        count++;\n        // We shouldn't consider the document if it's not in the offset range\n        if (count <= offset) {\n            continue;\n        }\n        results.push({ id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, id), score, document: doc });\n        resultIDs.add(id);\n        // reached the limit, break the loop\n        if (count >= offset + limit) {\n            break;\n        }\n    }\n    return results;\n}\nexport function fetchDocuments(orama, uniqueDocsArray, offset, limit) {\n    const docs = orama.data.docs;\n    const results = Array.from({\n        length: limit\n    });\n    const resultIDs = new Set();\n    // We already have the list of ALL the document IDs containing the search terms.\n    // We loop over them starting from a positional value \"offset\" and ending at \"offset + limit\"\n    // to provide pagination capabilities to the search.\n    for (let i = offset; i < limit + offset; i++) {\n        const idAndScore = uniqueDocsArray[i];\n        // If there are no more results, just break the loop\n        if (typeof idAndScore === 'undefined') {\n            break;\n        }\n        const [id, score] = idAndScore;\n        if (!resultIDs.has(id)) {\n            // We retrieve the full document only AFTER making sure that we really want it.\n            // We never retrieve the full document preventively.\n            const fullDoc = orama.documentsStore.get(docs, id);\n            results[i] = { id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, id), score, document: fullDoc };\n            resultIDs.add(id);\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=search.js.map","export function load(orama, raw) {\n    orama.internalDocumentIDStore.load(orama, raw.internalDocumentIDStore);\n    orama.data.index = orama.index.load(orama.internalDocumentIDStore, raw.index);\n    orama.data.docs = orama.documentsStore.load(orama.internalDocumentIDStore, raw.docs);\n    orama.data.sorting = orama.sorter.load(orama.internalDocumentIDStore, raw.sorting);\n    orama.tokenizer.language = raw.language;\n}\nexport function save(orama) {\n    return {\n        internalDocumentIDStore: orama.internalDocumentIDStore.save(orama.internalDocumentIDStore),\n        index: orama.index.save(orama.data.index),\n        docs: orama.documentsStore.save(orama.data.docs),\n        sorting: orama.sorter.save(orama.data.sorting),\n        language: orama.tokenizer.language\n    };\n}\n//# sourceMappingURL=serialization.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { createError } from '../errors.js';\nimport { innerInsertMultiple, insert } from './insert.js';\nimport { remove, removeMultiple } from './remove.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function update(orama, id, doc, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate);\n    if (asyncNeeded) {\n        return updateAsync(orama, id, doc, language, skipHooks);\n    }\n    return updateSync(orama, id, doc, language, skipHooks);\n}\nasync function updateAsync(orama, id, doc, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpdate) {\n        await runSingleHook(orama.beforeUpdate, orama, id);\n    }\n    await remove(orama, id, language, skipHooks);\n    const newId = await insert(orama, doc, language, skipHooks);\n    if (!skipHooks && orama.afterUpdate) {\n        await runSingleHook(orama.afterUpdate, orama, newId);\n    }\n    return newId;\n}\nfunction updateSync(orama, id, doc, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpdate) {\n        runSingleHook(orama.beforeUpdate, orama, id);\n    }\n    remove(orama, id, language, skipHooks);\n    const newId = insert(orama, doc, language, skipHooks);\n    if (!skipHooks && orama.afterUpdate) {\n        runSingleHook(orama.afterUpdate, orama, newId);\n    }\n    return newId;\n}\nexport function updateMultiple(orama, ids, docs, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate) ||\n        isAsyncFunction(orama.beforeUpdateMultiple) ||\n        isAsyncFunction(orama.afterUpdateMultiple) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.afterInsertMultiple);\n    if (asyncNeeded) {\n        return updateMultipleAsync(orama, ids, docs, batchSize, language, skipHooks);\n    }\n    return updateMultipleSync(orama, ids, docs, batchSize, language, skipHooks);\n}\nasync function updateMultipleAsync(orama, ids, docs, batchSize, language, skipHooks) {\n    if (!skipHooks) {\n        await runMultipleHook(orama.beforeUpdateMultiple, orama, ids);\n    }\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    await removeMultiple(orama, ids, batchSize, language, skipHooks);\n    const newIds = await innerInsertMultiple(orama, docs, batchSize, language, skipHooks);\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterUpdateMultiple, orama, newIds);\n    }\n    return newIds;\n}\nfunction updateMultipleSync(orama, ids, docs, batchSize, language, skipHooks) {\n    if (!skipHooks) {\n        runMultipleHook(orama.beforeUpdateMultiple, orama, ids);\n    }\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    removeMultiple(orama, ids, batchSize, language, skipHooks);\n    const newIds = innerInsertMultiple(orama, docs, batchSize, language, skipHooks);\n    if (!skipHooks) {\n        runMultipleHook(orama.afterUpdateMultiple, orama, newIds);\n    }\n    return newIds;\n}\n//# sourceMappingURL=update.js.map","import { createError } from '../errors.js';\nimport { search } from './search.js';\nconst ORAMA_SECURE_PROXY_PLUGIN_NAME = 'orama-secure-proxy';\nexport class AnswerSession {\n    db;\n    proxy = null;\n    config;\n    abortController = null;\n    lastInteractionParams = null;\n    chatModel = null;\n    conversationID;\n    messages = [];\n    events;\n    initPromise;\n    state = [];\n    constructor(db, config) {\n        this.db = db;\n        this.config = config;\n        this.init();\n        this.messages = config.initialMessages || [];\n        this.events = config.events || {};\n        this.conversationID = config.conversationID || this.generateRandomID();\n    }\n    async ask(query) {\n        await this.initPromise;\n        let output = '';\n        for await (const msg of await this.askStream(query)) {\n            output += msg;\n        }\n        return output;\n    }\n    async askStream(query) {\n        await this.initPromise;\n        return this.fetchAnswer(query);\n    }\n    abortAnswer() {\n        this.abortController?.abort();\n        this.state[this.state.length - 1].aborted = true;\n        this.triggerStateChange();\n    }\n    getMessages() {\n        return this.messages;\n    }\n    clearSession() {\n        this.messages = [];\n        this.state = [];\n    }\n    regenerateLast({ stream = true }) {\n        if (this.state.length === 0 || this.messages.length === 0) {\n            throw new Error('No messages to regenerate');\n        }\n        const isLastMessageAssistant = this.messages.at(-1)?.role === 'assistant';\n        if (!isLastMessageAssistant) {\n            throw createError('ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT');\n        }\n        this.messages.pop();\n        this.state.pop();\n        if (stream) {\n            return this.askStream(this.lastInteractionParams);\n        }\n        return this.ask(this.lastInteractionParams);\n    }\n    async *fetchAnswer(params) {\n        if (!this.chatModel) {\n            throw createError('PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL');\n        }\n        this.abortController = new AbortController();\n        this.lastInteractionParams = params;\n        const interactionId = this.generateRandomID();\n        this.messages.push({ role: 'user', content: params.term ?? '' });\n        this.state.push({\n            interactionId,\n            aborted: false,\n            loading: true,\n            query: params.term ?? '',\n            response: '',\n            sources: null,\n            translatedQuery: null,\n            error: false,\n            errorMessage: null\n        });\n        const stateIdx = this.state.length - 1;\n        this.addEmptyAssistantMessage();\n        this.triggerStateChange();\n        try {\n            const sources = await search(this.db, params);\n            this.state[stateIdx].sources = sources;\n            this.triggerStateChange();\n            for await (const msg of this.proxy.chatStream({ model: this.chatModel, messages: this.messages })) {\n                yield msg;\n                this.state[stateIdx].response += msg;\n                this.messages.findLast((msg) => msg.role === 'assistant').content += msg;\n                this.triggerStateChange();\n            }\n        }\n        catch (err) {\n            if (err.name === 'AbortError') {\n                this.state[stateIdx].aborted = true;\n            }\n            else {\n                this.state[stateIdx].error = true;\n                this.state[stateIdx].errorMessage = err.toString();\n            }\n            this.triggerStateChange();\n        }\n        this.state[stateIdx].loading = false;\n        this.triggerStateChange();\n        return this.state[stateIdx].response;\n    }\n    generateRandomID(length = 24) {\n        return Array.from({ length }, () => Math.floor(Math.random() * 36).toString(36)).join('');\n    }\n    triggerStateChange() {\n        if (this.events.onStateChange) {\n            this.events.onStateChange(this.state);\n        }\n    }\n    async init() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        const self = this;\n        async function getPlugin() {\n            return await self.db.plugins.find((plugin) => plugin.name === ORAMA_SECURE_PROXY_PLUGIN_NAME);\n        }\n        const plugin = await getPlugin();\n        if (!plugin) {\n            throw createError('PLUGIN_SECURE_PROXY_NOT_FOUND');\n        }\n        const pluginExtras = plugin.extra;\n        this.proxy = pluginExtras.proxy;\n        if (this.config.systemPrompt) {\n            this.messages.push({ role: 'system', content: this.config.systemPrompt });\n        }\n        if (pluginExtras?.pluginParams?.chat?.model) {\n            this.chatModel = pluginExtras.pluginParams.chat.model;\n        }\n        else {\n            throw createError('PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL');\n        }\n    }\n    addEmptyAssistantMessage() {\n        this.messages.push({ role: 'assistant', content: '' });\n    }\n}\n//# sourceMappingURL=answer-session.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getActivitiesDB = getActivitiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getActivitiesDB(activities, options = {}) {\n    const { queryFields = ['assay'] } = options;\n    const activitiesDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('assay') ? { assay: 'string' } : null),\n        },\n    });\n    for (const activity of activities) {\n        let assay = {\n            $id: activity.$id,\n            assay: activity.data.assay,\n        };\n        await (0, orama_1.insert)(activitiesDB, assay);\n    }\n    return activitiesDB;\n}\n//# sourceMappingURL=getActivitiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPatentsDB = getPatentsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getPatentsDB(patents, options = {}) {\n    const { queryFields = ['title', 'abstract'], abstractsLimit = 1000, callback, } = options;\n    if (patents.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    const patentsDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('title') ? { title: 'string' } : null),\n            ...(queryFields.includes('abstract') ? { abstract: 'string' } : null),\n            nbCompounds: 'number',\n        },\n    });\n    let lastCallback = Date.now();\n    for (let i = 0; i < patents.length; i++) {\n        const patent = patents[i];\n        if (callback && Date.now() - lastCallback > 1000) {\n            lastCallback = Date.now();\n            await callback('Patent DB creation', i, patents.length);\n        }\n        let article = {\n            $id: patent.$id,\n            ...(queryFields.includes('title')\n                ? { title: patent?.data?.title }\n                : null),\n            ...(queryFields.includes('abstract')\n                ? { abstract: patent?.data?.abstract }\n                : null),\n            nbCompounds: patent.data?.nbCompounds ? patent.data.nbCompounds + 2 : 2,\n        };\n        await (0, orama_1.insert)(patentsDB, article);\n    }\n    return patentsDB;\n}\n//# sourceMappingURL=getPatentsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPubmedsDB = getPubmedsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getPubmedsDB(pubmeds, options = {}) {\n    const { queryFields = ['title', 'abstract', 'meshHeadings'], abstractsLimit = 1000, callback, } = options;\n    if (pubmeds.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    const pubmedsDB = await (0, orama_1.create)({\n        schema: {\n            $ref: 'string',\n            $id: 'string',\n            ...(queryFields.includes('title') ? { title: 'string' } : null),\n            ...(queryFields.includes('abstract') ? { abstract: 'string' } : null),\n            ...(queryFields.includes('meshHeadings')\n                ? { meshHeadings: 'string[]' }\n                : null),\n            nbCompounds: 'number',\n        },\n    });\n    let lastCallback = Date.now();\n    for (let i = 0; i < pubmeds.length; i++) {\n        const pubmed = pubmeds[i];\n        if (callback && Date.now() - lastCallback > 1000) {\n            lastCallback = Date.now();\n            await callback('Pubmed DB creation', i, pubmeds.length);\n        }\n        const meshHeadings = [];\n        for (const meshHeading of pubmed.data.meshHeadings) {\n            if (meshHeading.descriptorName !== undefined) {\n                meshHeadings.push(meshHeading.descriptorName);\n            }\n        }\n        let article = {\n            $id: pubmed.$id,\n            ...(queryFields.includes('title')\n                ? { title: pubmed?.data?.article?.title || '' }\n                : null),\n            ...(queryFields.includes('abstract')\n                ? { abstract: pubmed?.data?.article?.abstract || '' }\n                : null),\n            ...(queryFields.includes('meshHeadings')\n                ? { meshHeadings: meshHeadings || '' }\n                : null),\n            nbCompounds: pubmed.data.compounds.length + 2 || +2,\n        };\n        await (0, orama_1.insert)(pubmedsDB, article);\n    }\n    return pubmedsDB;\n}\n//# sourceMappingURL=getPubmedsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTaxonomiesDB = getTaxonomiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getTaxonomiesDB(taxonomies, options = {}) {\n    const { queryFields = [\n        'superkingdom',\n        'kingdom',\n        'phylum',\n        'class',\n        'order',\n        'family',\n        'genus',\n        'species',\n    ], } = options;\n    const taxonomiesDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('superkingdom')\n                ? { superkingdom: 'string' }\n                : null),\n            ...(queryFields.includes('kingdom') ? { kingdom: 'string' } : null),\n            ...(queryFields.includes('phylum') ? { phylum: 'string' } : null),\n            ...(queryFields.includes('class') ? { class: 'string' } : null),\n            ...(queryFields.includes('order') ? { order: 'string' } : null),\n            ...(queryFields.includes('family') ? { family: 'string' } : null),\n            ...(queryFields.includes('genus') ? { genus: 'string' } : null),\n            ...(queryFields.includes('species') ? { species: 'string' } : null),\n        },\n    });\n    for (const taxonomy of taxonomies) {\n        let level = Object.keys(taxonomy);\n        let taxonomyEntry = {\n            $id: taxonomy.dbRef.$id,\n            ...(level.includes('superkingdom')\n                ? { superkingdom: taxonomy.superkingdom }\n                : null),\n            ...(level.includes('kingdom') ? { kingdom: taxonomy.kingdom } : null),\n            ...(level.includes('phylum') ? { phylum: taxonomy.phylum } : null),\n            ...(level.includes('class') ? { class: taxonomy.class } : null),\n            ...(level.includes('order') ? { order: taxonomy.order } : null),\n            ...(level.includes('family') ? { family: taxonomy.family } : null),\n            ...(level.includes('genus') ? { genus: taxonomy.genus } : null),\n            ...(level.includes('species') ? { species: taxonomy.species } : null),\n        };\n        await (0, orama_1.insert)(taxonomiesDB, taxonomyEntry);\n    }\n    return taxonomiesDB;\n}\n//# sourceMappingURL=getTaxonomiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchActivitiesDB = searchActivitiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchActivitiesDB(activitiesDB, activities, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['assay'], } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(activitiesDB, {\n        term: terms,\n        relevance,\n        properties: queryFields,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        let assay = result.document.assay;\n        let activityDocument = activities.find((activity) => {\n            return activity.$id === id && activity.data.assay === assay;\n        });\n        results.push({ ...activityDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchActivitiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchPatentsDB = searchPatentsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchPatentsDB(patentsDB, patents, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['title', 'abstract'], boostFields = {\n        title: 2,\n        abstract: 1,\n    }, abstractsLimit = 1000, } = options;\n    if (patents.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(patentsDB, {\n        term: terms,\n        properties: queryFields,\n        boost: boostFields,\n        relevance,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    queryResult.hits.map((item) => {\n        let nbCompounds = 2;\n        if (item.document.nbCompounds) {\n            nbCompounds = +Number(item.document.nbCompounds);\n        }\n        item.score = item.score / Math.log2(nbCompounds);\n        return item;\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        // to do this could be maybe improved using Map\n        let patentsDocument = patents.find((patent) => patent.$id === id);\n        results.push({ ...patentsDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchPatentsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchPubmedsDB = searchPubmedsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchPubmedsDB(pubmedsDB, pubmeds, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['title', 'abstract', 'meshHeadings'], boostFields = {\n        title: 2,\n        abstract: 1,\n        meshHeadings: 1,\n    }, abstractsLimit = 1000, } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    if (pubmeds.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    let queryResult = await (0, orama_1.search)(pubmedsDB, {\n        term: terms,\n        properties: queryFields,\n        boost: boostFields,\n        relevance,\n        limit: maxNbEntries,\n        tolerance,\n    });\n    queryResult.hits.map((item) => {\n        let nbCompounds = 2;\n        if (item.document.nbCompounds) {\n            nbCompounds = +Number(item.document.nbCompounds);\n        }\n        item.score = item.score / Math.log2(nbCompounds);\n        return item;\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        let pubmedDocument = pubmeds.find((pubmed) => pubmed.$id === id);\n        results.push({ ...pubmedDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchPubmedsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchTaxonomiesDB = searchTaxonomiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchTaxonomiesDB(taxonomiesDB, taxonomies, terms = '', options = {}) {\n    const { queryFields = [\n        'superkingdom',\n        'kingdom',\n        'phylum',\n        'class',\n        'order',\n        'family',\n        'genus',\n        'species',\n    ], maxNbEntries = 50, minScore = 0.5, tolerance = 1, } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(taxonomiesDB, {\n        term: terms,\n        properties: queryFields,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let keys = Object.keys(result.document);\n        let currentTaxonomy = {};\n        for (let key of keys) {\n            if (key !== '$id') {\n                currentTaxonomy[key] = result.document[key];\n            }\n            else {\n                currentTaxonomy.dbRef = { $id: result.document.$id };\n            }\n        }\n        let taxonomiesDocument = taxonomies.filter((taxonomy) => Object.keys(currentTaxonomy).every((key) => {\n            if (key === 'dbRef') {\n                return currentTaxonomy[key].$id === taxonomy.dbRef.$id;\n            }\n            return currentTaxonomy[key] === taxonomy[key];\n        }));\n        for (let taxonomy of taxonomiesDocument) {\n            taxonomy.score = result.score;\n            results.push(taxonomy);\n        }\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchTaxonomiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.summarizeEmptyTerms = summarizeEmptyTerms;\nfunction summarizeEmptyTerms(activities, patents, pubmeds, taxonomies, options) {\n    activities = activities.slice();\n    patents = patents.slice();\n    pubmeds = pubmeds.slice();\n    taxonomies = taxonomies.slice();\n    // PATENTS\n    const patentsMaxNbEntries = options?.patents?.maxNbEntries || 100;\n    patents.sort((a, b) => {\n        const nbCompoundsEntryA = a.data?.nbCompounds ? a.data.nbCompounds + 2 : 2;\n        const nbCompoundsEntryB = b.data?.nbCompounds ? b.data.nbCompounds + 2 : 2;\n        return 1 / Math.log2(nbCompoundsEntryB) - 1 / Math.log2(nbCompoundsEntryA);\n    });\n    if (patents.length > patentsMaxNbEntries) {\n        patents.length = patentsMaxNbEntries;\n    }\n    // PUBMEDS\n    const pubmedsMaxNbEntries = options?.pubmeds?.maxNbEntries || 100;\n    pubmeds.sort((a, b) => {\n        const nbCompoundsEntryA = a.data.compounds?.length + 2 || 2;\n        const nbCompoundsEntryB = b.data.compounds?.length + 2 || 2;\n        return 1 / Math.log2(nbCompoundsEntryB) - 1 / Math.log2(nbCompoundsEntryA);\n    });\n    if (pubmeds.length > pubmedsMaxNbEntries) {\n        pubmeds.length = pubmedsMaxNbEntries;\n    }\n    // ACTIVITIES\n    const activitiesMaxNbEntries = options?.activities?.maxNbEntries || 100;\n    if (activities.length > activitiesMaxNbEntries) {\n        activities.length = activitiesMaxNbEntries;\n    }\n    // TAXONOMIES\n    const taxonomiesMaxNbEntries = options?.taxonomies?.maxNbEntries || 50;\n    if (taxonomies.length > taxonomiesMaxNbEntries) {\n        taxonomies.length = activitiesMaxNbEntries;\n    }\n    return { activities, patents, pubmeds, taxonomies };\n}\n//# sourceMappingURL=summarizeEmptyTerms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActiveOrNaturalSummarizer = void 0;\nconst getActivitiesDB_1 = require(\"./utils/getActivitiesDB\");\nconst getPatentsDB_1 = require(\"./utils/getPatentsDB\");\nconst getPubmedsDB_1 = require(\"./utils/getPubmedsDB\");\nconst getTaxonomiesDB_1 = require(\"./utils/getTaxonomiesDB\");\nconst searchActivitiesDB_1 = require(\"./utils/searchActivitiesDB\");\nconst searchPatentsDB_1 = require(\"./utils/searchPatentsDB\");\nconst searchPubmedsDB_1 = require(\"./utils/searchPubmedsDB\");\nconst searchTaxonomiesDB_1 = require(\"./utils/searchTaxonomiesDB\");\nconst summarizeEmptyTerms_1 = require(\"./utils/summarizeEmptyTerms\");\nclass ActiveOrNaturalSummarizer {\n    /**\n     * @description Summarize the active or natural details with the given terms\n     * @param {Object} activeOrNaturalDetails The active or natural details to summarize\n     * @param {Object} [options={}] The options to use for the search\n     * @param {Object} [options.activities={}] The options to use for the activities search\n     * @param {number} [options.activities.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.activities.maxNbEntries=100] - Maximum number of entries to return\n     * @param {object} [options.activities.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.activities.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {string[]} [options.activities.queryFields=['assay']] - Fields to query\n     * @param {Object} [options.taxonomies={}] The options to use for the activities search\n     * @param {number} [options.taxonomies.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.taxonomies.maxNbEntries=50] - Maximum number of entries to return\n     * @param {number} [options.taxonomies.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {object} [options.patents={}] - Options for patents\n     * @param {number} [options.patents.abstractsLimit=1000] - If more than this number of abstracts, the search will be done on the without abstracts\n     * @param {number} [options.patents.maxNbEntries=100] - Maximum number of entries to return\n     * @param {number} [options.patents.inScore=0.5] - Minimum score for an entry to be returned\n     * @param {object} [options.patents.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.patents.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {string[]} [options.patents.queryFields=['title', 'abstract']] - Fields to query\n     * @param {object} [options.patents.boostFields={ title: 2, abstract: 1 }] - Fields weights, higher weight means higher importance\n     * @param {object} [options.pubmeds={}] - Options for pubmeds\n     * @param {number} [options.pubmeds.abstractsLimit=1000] - If more than this number of abstracts, the search will be done on the without abstracts\n     * @param {number} [options.pubmeds.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.pubmeds.maxNbEntries=100] - Maximum number of entries to return\n     * @param {object} [options.pubmeds.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.pubmeds.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {object} [options.pubmeds.boostFields={ title: 2, abstract: 1, meshHeadings: 1 }]  - Fields weights, higher weight means higher importance\n     * @param {string[]} [options.pubmeds.queryFields=['title', 'abstract', 'meshHeadings']] - Fields to query\n     * @param {(action,current,last)=>{}} [options.callback] - Callback function to call during database creation\n     * @returns\n     */\n    constructor(activeOrNaturalDetails, options = {}) {\n        this.options = options;\n        this.activeOrNaturalDetails = activeOrNaturalDetails;\n        this.activities = activeOrNaturalDetails.data.activities;\n        this.patents = activeOrNaturalDetails.data.patents;\n        this.pubmeds = activeOrNaturalDetails.data.pubmeds;\n        this.taxonomies = activeOrNaturalDetails.data.taxonomies;\n        this.isInitialized = false;\n    }\n    /**\n     * @description Summarize the active or natural details with the given terms\n     * @param {string} terms The terms to search\n     * @returns {Promise<Object>} The summarized active or natural details\n     */\n    async summarize(terms) {\n        if (terms === '') {\n            const { patents, pubmeds, activities } = (0, summarizeEmptyTerms_1.summarizeEmptyTerms)(this.activities, this.patents, this.pubmeds, this.taxonomies, this.options);\n            return {\n                ...this.activeOrNaturalDetails,\n                data: {\n                    ...this.activeOrNaturalDetails.data,\n                    activities,\n                    patents,\n                    pubmeds,\n                },\n            };\n        }\n        if (!this.isInitialized) {\n            if (!this.creatingDB) {\n                this.creatingDB = this.createDB();\n            }\n            await this.creatingDB;\n            this.isInitialized = true;\n            this.creatingDB = undefined;\n        }\n        return {\n            ...this.activeOrNaturalDetails,\n            data: {\n                ...this.activeOrNaturalDetails.data,\n                activities: await (0, searchActivitiesDB_1.searchActivitiesDB)(this.activitiesDB, this.activities, terms, this.options?.activities),\n                patents: await (0, searchPatentsDB_1.searchPatentsDB)(this.patentsDB, this.patents, terms, this.options?.patents),\n                pubmeds: await (0, searchPubmedsDB_1.searchPubmedsDB)(this.pubmedsDB, this.pubmeds, terms, this.options?.pubmeds),\n                taxonomies: await (0, searchTaxonomiesDB_1.searchTaxonomiesDB)(this.taxonomiesDB, this.taxonomies, terms, this.options?.taxonomies),\n            },\n        };\n    }\n    async createDB() {\n        this.pubmedsDB = await (0, getPubmedsDB_1.getPubmedsDB)(this.pubmeds, {\n            callback: this.options.callback,\n            ...this.options.pubmeds,\n        });\n        this.activitiesDB = await (0, getActivitiesDB_1.getActivitiesDB)(this.activities, this.options.activities);\n        this.patentsDB = await (0, getPatentsDB_1.getPatentsDB)(this.patents, {\n            callback: this.options.callback,\n            ...this.options.patents,\n        });\n        this.taxonomiesDB = await (0, getTaxonomiesDB_1.getTaxonomiesDB)(this.taxonomies, this.options.taxonomies);\n    }\n}\nexports.ActiveOrNaturalSummarizer = ActiveOrNaturalSummarizer;\n//# sourceMappingURL=ActiveOrNaturalSummarizer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.taxonomyRanks = void 0;\nexports.taxonomyRanks = [\n    'superkingdom',\n    'kingdom',\n    'phylum',\n    'class',\n    'order',\n    'family',\n    'genus',\n    'species',\n];\n//# sourceMappingURL=taxonomyRanks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.taxonomyComparator = taxonomyComparator;\nconst taxonomyRanks_js_1 = require(\"./taxonomyRanks.js\");\n/**\n * @description sort taxonomies by superkingdom, kingdom, phylum, class, order, family, genus, species\n * @param {import('./Taxonomy.js').Taxonomy} a\n * @param {import('./Taxonomy.js').Taxonomy} b\n * @returns {number}\n */\nfunction taxonomyComparator(a, b) {\n    for (const field of taxonomyRanks_js_1.taxonomyRanks) {\n        if (a[field] !== b[field]) {\n            return (a[field] || '').localeCompare(b[field] || '');\n        }\n    }\n    return 0;\n}\n//# sourceMappingURL=taxonomyComparator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createTaxonomyTree = createTaxonomyTree;\nconst taxonomyRanks_1 = require(\"./taxonomyRanks\");\n/**\n * @description Creates a tree structure from an array of taxonomies.\n *\n * @param {import('./Taxonomy.js').Taxonomy[]} taxonomies - The array of taxonomies to create a tree from.\n * @returns {Object[]} The tree structure.\n */\nfunction createTaxonomyTree(taxonomies, options = {}) {\n    let { rankLimit = '' } = options;\n    rankLimit = rankLimit.toLowerCase();\n    const tree = [];\n    for (let taxonomy of taxonomies) {\n        let reachedRankLimit = false;\n        let current = tree;\n        for (let rank of taxonomyRanks_1.taxonomyRanks) {\n            if (rank === rankLimit) {\n                reachedRankLimit = true;\n            }\n            if (reachedRankLimit && rank !== rankLimit) {\n                break;\n            }\n            const name = taxonomy[rank] || '';\n            let existing = current.find((node) => node.name === name && node.rank === rank);\n            if (!existing) {\n                existing = {\n                    name,\n                    rank,\n                    count: 1,\n                    children: [],\n                };\n                if (rank === 'species' && taxonomy?.dbRef) {\n                    existing.url = taxonomy.dbRef.url;\n                }\n                current.push(existing);\n            }\n            else {\n                existing.count++;\n            }\n            current = existing.children;\n        }\n    }\n    for (let branch of tree) {\n        cleanEmptyBranches(branch);\n        nbTaxonomies(branch);\n    }\n    return tree;\n}\nfunction cleanEmptyBranches(branch) {\n    for (const child of branch.children)\n        cleanEmptyBranches(child);\n    branch.children = branch.children.filter((child) => {\n        // This part is used empty nodes\n        if (child.children.length === 0 && child.name === '') {\n            return false;\n        }\n        // This part is used to remove the children in the lowest rank\n        if (child.children.length === 0 && child.name !== '') {\n            delete child.children;\n        }\n        return true;\n    });\n}\nfunction nbTaxonomies(branch) {\n    branch.nbTaxonomies = 0; // count the current node\n    if (branch.children) {\n        for (let child of branch.children) {\n            nbTaxonomies(child);\n            branch.nbTaxonomies += child.nbTaxonomies;\n        }\n    }\n    else {\n        branch.nbTaxonomies = 1;\n    }\n    return branch.nbTaxonomies;\n}\n//# sourceMappingURL=createTaxonomyTree.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendInternals = appendInternals;\nfunction appendInternals(data) {\n    // for each line (internal fragment) we calculate the vertical position\n    // where it should be drawn as well and the maximal number of lines\n    let maxNumberLines = 0;\n    for (let result of data.results) {\n        if (result.internal) {\n            result.slot = assignSlot(result.from, result.to, data.residues.residues);\n            if (result.slot > maxNumberLines)\n                maxNumberLines = result.slot;\n        }\n    }\n    for (let row of data.rows) {\n        row.info.internals = maxNumberLines;\n    }\n}\n// we need to define the height of the line.\n// we need to find a height that is not yet used.\nfunction assignSlot(from, to, residues) {\n    let used = {};\n    if (from > 0)\n        from--; // we ensure that we don't put on the same line to sequences that are consecutive\n    for (let i = from; i < to; i++) {\n        let residue = residues[i];\n        for (const index of residue.paper.usedSlots.keys()) {\n            used[index] = true;\n        }\n    }\n    let counter = 0;\n    while (true) {\n        if (!used[counter]) {\n            break;\n        }\n        counter++;\n    }\n    for (let i = from; i < to; i++) {\n        residues[i].paper.usedSlots[counter] = true;\n    }\n    return counter;\n}\n//# sourceMappingURL=appendInternals.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResidues = appendResidues;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Nucleotide = __importStar(require(\"nucleotide\"));\nconst Peptide = __importStar(require(\"peptide\"));\nconst ALTERNATIVES = ['', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'];\nconst SYMBOLS = ['Θ', 'Δ', 'Λ', 'Φ', 'Ω', 'Γ', 'Χ'];\nlet currentSymbol = 0;\n/**\n * Code that allows to split a sequence of amino acids or nucleotides natural or non natural\n * @param {string} [sequence]\n * @param {object} [options={}]\n * @param {string} [options.kind] - peptide, rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.circular=false]\n */\nfunction appendResidues(data, sequence, options = {}) {\n    const { kind = 'peptide' } = options;\n    currentSymbol = 0;\n    // we normalize the sequence to 3 letter codes\n    if (kind === 'peptide') {\n        sequence = Peptide.sequenceToMF(sequence);\n    }\n    else {\n        sequence = Nucleotide.sequenceToMF(sequence, options);\n    }\n    const result = {\n        begin: '',\n        end: '',\n        residues: [],\n    };\n    const STATE_BEGIN = 0;\n    const STATE_MIDDLE = 1;\n    const STATE_END = 2;\n    let parenthesisLevel = 0;\n    let state = STATE_BEGIN; // as long as we don't have an uppercase followed by 2 lowercases\n    for (let i = 0; i < sequence.length; i++) {\n        let currentChar = sequence.charAt(i);\n        let nextChar = i < sequence.length - 1 ? sequence.charAt(i + 1) : '';\n        let nextNextChar = i < sequence.length - 2 ? sequence.charAt(i + 2) : '';\n        if (state === STATE_BEGIN &&\n            currentChar.match(/[A-Z]/) &&\n            nextChar.match(/[a-z]/) &&\n            nextNextChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            state = STATE_MIDDLE;\n        }\n        if (state === STATE_MIDDLE &&\n            !sequence.slice(i).match(/[A-Z][a-z]{2}/) &&\n            !currentChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            state = STATE_END;\n        }\n        else if (currentChar.match(/[A-Z]/) &&\n            nextChar.match(/[a-z]/) &&\n            nextNextChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            result.residues.push('');\n        }\n        switch (state) {\n            case STATE_BEGIN:\n                result.begin = result.begin + currentChar;\n                break;\n            case STATE_MIDDLE:\n                result.residues[result.residues.length - 1] =\n                    result.residues.at(-1) + currentChar;\n                break;\n            case STATE_END:\n                result.end = result.end + currentChar;\n                break;\n            default:\n        }\n        if (currentChar === '(') {\n            parenthesisLevel++;\n        }\n        else if (currentChar === ')') {\n            parenthesisLevel--;\n        }\n    }\n    // we process all the residues\n    let alternatives = {};\n    let replacements = {};\n    for (let i = 0; i < result.residues.length; i++) {\n        let label = result.residues[i];\n        let residue = {\n            value: label,\n            results: {\n                begin: [],\n                end: [],\n            },\n            fromBegin: i + 1,\n            fromEnd: result.residues.length - i,\n            kind: 'residue',\n        };\n        if (label.includes('(')) {\n            getModifiedReplacement(label, residue, alternatives, replacements);\n        }\n        else if (chemical_groups_1.groupsObject[label] && chemical_groups_1.groupsObject[label].oneLetter) {\n            residue.label = chemical_groups_1.groupsObject[label].oneLetter;\n        }\n        else {\n            getUnknownReplacement(label, residue, replacements);\n        }\n        result.residues[i] = residue;\n    }\n    result.begin = removeStartEndParenthesis(result.begin);\n    result.end = removeStartEndParenthesis(result.end);\n    if (result.begin.length > 2) {\n        let label = options.kind === 'peptide' ? 'Nter' : \"5'\";\n        replacements[result.begin] = {\n            label,\n        };\n        result.begin = label;\n    }\n    if (result.end.length > 2) {\n        let label = options.kind === 'peptide' ? 'Cter' : \"3'\";\n        replacements[result.end] = {\n            label,\n        };\n        result.end = label;\n    }\n    result.begin = { label: result.begin, kind: 'begin' };\n    result.end = { label: result.end, kind: 'end' };\n    result.alternatives = alternatives;\n    result.replacements = replacements;\n    result.all = [result.begin].concat(result.residues, [result.end]);\n    for (const entry of result.all) {\n        entry.info = {\n            nbOver: 0,\n            nbUnder: 0,\n        };\n    }\n    data.residues = result;\n}\nfunction getUnknownReplacement(unknownResidue, residue, replacements) {\n    if (!replacements[unknownResidue]) {\n        replacements[unknownResidue] = {\n            label: SYMBOLS[currentSymbol] || '?',\n            id: unknownResidue,\n        };\n    }\n    currentSymbol++;\n    residue.replaced = true;\n    residue.label = replacements[unknownResidue].label;\n}\nfunction getModifiedReplacement(modifiedResidue, residue, alternatives, replacements) {\n    if (!replacements[modifiedResidue]) {\n        let position = modifiedResidue.indexOf('(');\n        let residueCode = modifiedResidue.slice(0, position);\n        let modification = removeStartEndParenthesis(modifiedResidue.slice(position));\n        if (chemical_groups_1.groupsObject[residueCode] &&\n            chemical_groups_1.groupsObject[residueCode].alternativeOneLetter) {\n            let alternativeOneLetter = chemical_groups_1.groupsObject[residueCode].alternativeOneLetter;\n            if (!alternatives[alternativeOneLetter]) {\n                alternatives[alternativeOneLetter] = { count: 1 };\n            }\n            else {\n                alternatives[alternativeOneLetter].count++;\n            }\n            replacements[modifiedResidue] = {\n                label: ALTERNATIVES[alternatives[alternativeOneLetter].count - 1] +\n                    alternativeOneLetter,\n                residue: residueCode,\n                modification,\n            };\n        }\n        else {\n            getUnknownReplacement(modifiedResidue, residue, replacements);\n        }\n    }\n    residue.replaced = true;\n    residue.label = replacements[modifiedResidue].label;\n}\nfunction removeStartEndParenthesis(mf) {\n    if (mf[0] === '(' && mf.at(-1) === ')') {\n        return mf.slice(1, -1);\n    }\n    return mf;\n}\n//# sourceMappingURL=appendResidues.js.map","/*!\n* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG.\n* @version 3.2.5\n* https://svgjs.dev/\n*\n* @copyright Wout Fierens <wout@mick-wout.com>\n* @license MIT\n*\n* BUILT: Mon Sep 15 2025 18:20:57 GMT+0200 (Central European Summer Time)\n*/;\n'use strict';\n\nconst methods$1 = {};\nconst names = [];\nfunction registerMethods(name, m) {\n  if (Array.isArray(name)) {\n    for (const _name of name) {\n      registerMethods(_name, m);\n    }\n    return;\n  }\n  if (typeof name === 'object') {\n    for (const _name in name) {\n      registerMethods(_name, name[_name]);\n    }\n    return;\n  }\n  addMethodNames(Object.getOwnPropertyNames(m));\n  methods$1[name] = Object.assign(methods$1[name] || {}, m);\n}\nfunction getMethodsFor(name) {\n  return methods$1[name] || {};\n}\nfunction getMethodNames() {\n  return [...new Set(names)];\n}\nfunction addMethodNames(_names) {\n  names.push(..._names);\n}\n\n// Map function\nfunction map(array, block) {\n  let i;\n  const il = array.length;\n  const result = [];\n  for (i = 0; i < il; i++) {\n    result.push(block(array[i]));\n  }\n  return result;\n}\n\n// Filter function\nfunction filter(array, block) {\n  let i;\n  const il = array.length;\n  const result = [];\n  for (i = 0; i < il; i++) {\n    if (block(array[i])) {\n      result.push(array[i]);\n    }\n  }\n  return result;\n}\n\n// Degrees to radians\nfunction radians(d) {\n  return d % 360 * Math.PI / 180;\n}\n\n// Radians to degrees\nfunction degrees(r) {\n  return r * 180 / Math.PI % 360;\n}\n\n// Convert camel cased string to dash separated\nfunction unCamelCase(s) {\n  return s.replace(/([A-Z])/g, function (m, g) {\n    return '-' + g.toLowerCase();\n  });\n}\n\n// Capitalize first letter of a string\nfunction capitalize(s) {\n  return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\n// Calculate proportional width and height values when necessary\nfunction proportionalSize(element, width, height, box) {\n  if (width == null || height == null) {\n    box = box || element.bbox();\n    if (width == null) {\n      width = box.width / box.height * height;\n    } else if (height == null) {\n      height = box.height / box.width * width;\n    }\n  }\n  return {\n    width: width,\n    height: height\n  };\n}\n\n/**\n * This function adds support for string origins.\n * It searches for an origin in o.origin o.ox and o.originX.\n * This way, origin: {x: 'center', y: 50} can be passed as well as ox: 'center', oy: 50\n **/\nfunction getOrigin(o, element) {\n  const origin = o.origin;\n  // First check if origin is in ox or originX\n  let ox = o.ox != null ? o.ox : o.originX != null ? o.originX : 'center';\n  let oy = o.oy != null ? o.oy : o.originY != null ? o.originY : 'center';\n\n  // Then check if origin was used and overwrite in that case\n  if (origin != null) {\n    [ox, oy] = Array.isArray(origin) ? origin : typeof origin === 'object' ? [origin.x, origin.y] : [origin, origin];\n  }\n\n  // Make sure to only call bbox when actually needed\n  const condX = typeof ox === 'string';\n  const condY = typeof oy === 'string';\n  if (condX || condY) {\n    const {\n      height,\n      width,\n      x,\n      y\n    } = element.bbox();\n\n    // And only overwrite if string was passed for this specific axis\n    if (condX) {\n      ox = ox.includes('left') ? x : ox.includes('right') ? x + width : x + width / 2;\n    }\n    if (condY) {\n      oy = oy.includes('top') ? y : oy.includes('bottom') ? y + height : y + height / 2;\n    }\n  }\n\n  // Return the origin as it is if it wasn't a string\n  return [ox, oy];\n}\nconst descriptiveElements = new Set(['desc', 'metadata', 'title']);\nconst isDescriptive = element => descriptiveElements.has(element.nodeName);\nconst writeDataToDom = (element, data, defaults = {}) => {\n  const cloned = {\n    ...data\n  };\n  for (const key in cloned) {\n    if (cloned[key].valueOf() === defaults[key]) {\n      delete cloned[key];\n    }\n  }\n  if (Object.keys(cloned).length) {\n    element.node.setAttribute('data-svgjs', JSON.stringify(cloned)); // see #428\n  } else {\n    element.node.removeAttribute('data-svgjs');\n    element.node.removeAttribute('svgjs:data');\n  }\n};\n\nvar utils = {\n  __proto__: null,\n  capitalize: capitalize,\n  degrees: degrees,\n  filter: filter,\n  getOrigin: getOrigin,\n  isDescriptive: isDescriptive,\n  map: map,\n  proportionalSize: proportionalSize,\n  radians: radians,\n  unCamelCase: unCamelCase,\n  writeDataToDom: writeDataToDom\n};\n\n// Default namespaces\nconst svg = 'http://www.w3.org/2000/svg';\nconst html = 'http://www.w3.org/1999/xhtml';\nconst xmlns = 'http://www.w3.org/2000/xmlns/';\nconst xlink = 'http://www.w3.org/1999/xlink';\n\nvar namespaces = {\n  __proto__: null,\n  html: html,\n  svg: svg,\n  xlink: xlink,\n  xmlns: xmlns\n};\n\nconst globals = {\n  window: typeof window === 'undefined' ? null : window,\n  document: typeof document === 'undefined' ? null : document\n};\nfunction registerWindow(win = null, doc = null) {\n  globals.window = win;\n  globals.document = doc;\n}\nconst save = {};\nfunction saveWindow() {\n  save.window = globals.window;\n  save.document = globals.document;\n}\nfunction restoreWindow() {\n  globals.window = save.window;\n  globals.document = save.document;\n}\nfunction withWindow(win, fn) {\n  saveWindow();\n  registerWindow(win, win.document);\n  fn(win, win.document);\n  restoreWindow();\n}\nfunction getWindow() {\n  return globals.window;\n}\n\nclass Base {\n  // constructor (node/*, {extensions = []} */) {\n  //   // this.tags = []\n  //   //\n  //   // for (let extension of extensions) {\n  //   //   extension.setup.call(this, node)\n  //   //   this.tags.push(extension.name)\n  //   // }\n  // }\n}\n\nconst elements = {};\nconst root = '___SYMBOL___ROOT___';\n\n// Method for element creation\nfunction create(name, ns = svg) {\n  // create element\n  return globals.document.createElementNS(ns, name);\n}\nfunction makeInstance(element, isHTML = false) {\n  if (element instanceof Base) return element;\n  if (typeof element === 'object') {\n    return adopter(element);\n  }\n  if (element == null) {\n    return new elements[root]();\n  }\n  if (typeof element === 'string' && element.trim().charAt(0) !== '<') {\n    return adopter(globals.document.querySelector(element));\n  }\n\n  // Make sure, that HTML elements are created with the correct namespace\n  const wrapper = isHTML ? globals.document.createElement('div') : create('svg');\n  wrapper.innerHTML = element.trim();\n\n  // We use firstElementChild here to skip potential comment nodes (#1339),\n  element = adopter(wrapper.firstElementChild);\n\n  // make sure, that element doesn't have its wrapper attached\n  wrapper.removeChild(wrapper.firstElementChild);\n  return element;\n}\nfunction nodeOrNew(name, node) {\n  return node && (node instanceof globals.window.Node || node.ownerDocument && node instanceof node.ownerDocument.defaultView.Node) ? node : create(name);\n}\n\n// Adopt existing svg elements\nfunction adopt(node) {\n  // check for presence of node\n  if (!node) return null;\n\n  // make sure a node isn't already adopted\n  if (node.instance instanceof Base) return node.instance;\n  if (node.nodeName === '#document-fragment') {\n    return new elements.Fragment(node);\n  }\n\n  // initialize variables\n  let className = capitalize(node.nodeName || 'Dom');\n\n  // Make sure that gradients are adopted correctly\n  if (className === 'LinearGradient' || className === 'RadialGradient') {\n    className = 'Gradient';\n\n    // Fallback to Dom if element is not known\n  } else if (!elements[className]) {\n    className = 'Dom';\n  }\n  return new elements[className](node);\n}\nlet adopter = adopt;\nfunction mockAdopt(mock = adopt) {\n  adopter = mock;\n}\nfunction register(element, name = element.name, asRoot = false) {\n  elements[name] = element;\n  if (asRoot) elements[root] = element;\n  addMethodNames(Object.getOwnPropertyNames(element.prototype));\n  return element;\n}\nfunction getClass(name) {\n  return elements[name];\n}\n\n// Element id sequence\nlet did = 1000;\n\n// Get next named element id\nfunction eid(name) {\n  return 'Svgjs' + capitalize(name) + did++;\n}\n\n// Deep new id assignment\nfunction assignNewId(node) {\n  // do the same for SVG child nodes as well\n  for (let i = node.children.length - 1; i >= 0; i--) {\n    assignNewId(node.children[i]);\n  }\n  if (node.id) {\n    node.id = eid(node.nodeName);\n    return node;\n  }\n  return node;\n}\n\n// Method for extending objects\nfunction extend(modules, methods) {\n  let key, i;\n  modules = Array.isArray(modules) ? modules : [modules];\n  for (i = modules.length - 1; i >= 0; i--) {\n    for (key in methods) {\n      modules[i].prototype[key] = methods[key];\n    }\n  }\n}\nfunction wrapWithAttrCheck(fn) {\n  return function (...args) {\n    const o = args[args.length - 1];\n    if (o && o.constructor === Object && !(o instanceof Array)) {\n      return fn.apply(this, args.slice(0, -1)).attr(o);\n    } else {\n      return fn.apply(this, args);\n    }\n  };\n}\n\n// Get all siblings, including myself\nfunction siblings() {\n  return this.parent().children();\n}\n\n// Get the current position siblings\nfunction position() {\n  return this.parent().index(this);\n}\n\n// Get the next element (will return null if there is none)\nfunction next() {\n  return this.siblings()[this.position() + 1];\n}\n\n// Get the next element (will return null if there is none)\nfunction prev() {\n  return this.siblings()[this.position() - 1];\n}\n\n// Send given element one step forward\nfunction forward() {\n  const i = this.position();\n  const p = this.parent();\n\n  // move node one step forward\n  p.add(this.remove(), i + 1);\n  return this;\n}\n\n// Send given element one step backward\nfunction backward() {\n  const i = this.position();\n  const p = this.parent();\n  p.add(this.remove(), i ? i - 1 : 0);\n  return this;\n}\n\n// Send given element all the way to the front\nfunction front() {\n  const p = this.parent();\n\n  // Move node forward\n  p.add(this.remove());\n  return this;\n}\n\n// Send given element all the way to the back\nfunction back() {\n  const p = this.parent();\n\n  // Move node back\n  p.add(this.remove(), 0);\n  return this;\n}\n\n// Inserts a given element before the targeted element\nfunction before(element) {\n  element = makeInstance(element);\n  element.remove();\n  const i = this.position();\n  this.parent().add(element, i);\n  return this;\n}\n\n// Inserts a given element after the targeted element\nfunction after(element) {\n  element = makeInstance(element);\n  element.remove();\n  const i = this.position();\n  this.parent().add(element, i + 1);\n  return this;\n}\nfunction insertBefore(element) {\n  element = makeInstance(element);\n  element.before(this);\n  return this;\n}\nfunction insertAfter(element) {\n  element = makeInstance(element);\n  element.after(this);\n  return this;\n}\nregisterMethods('Dom', {\n  siblings,\n  position,\n  next,\n  prev,\n  forward,\n  backward,\n  front,\n  back,\n  before,\n  after,\n  insertBefore,\n  insertAfter\n});\n\n// Parse unit value\nconst numberAndUnit = /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i;\n\n// Parse hex value\nconst hex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n\n// Parse rgb value\nconst rgb = /rgb\\((\\d+),(\\d+),(\\d+)\\)/;\n\n// Parse reference id\nconst reference = /(#[a-z_][a-z0-9\\-_]*)/i;\n\n// splits a transformation chain\nconst transforms = /\\)\\s*,?\\s*/;\n\n// Whitespace\nconst whitespace = /\\s/g;\n\n// Test hex value\nconst isHex = /^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i;\n\n// Test rgb value\nconst isRgb = /^rgb\\(/;\n\n// Test for blank string\nconst isBlank = /^(\\s+)?$/;\n\n// Test for numeric string\nconst isNumber = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\n\n// Test for image url\nconst isImage = /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i;\n\n// split at whitespace and comma\nconst delimiter = /[\\s,]+/;\n\n// Test for path letter\nconst isPathLetter = /[MLHVCSQTAZ]/i;\n\nvar regex = {\n  __proto__: null,\n  delimiter: delimiter,\n  hex: hex,\n  isBlank: isBlank,\n  isHex: isHex,\n  isImage: isImage,\n  isNumber: isNumber,\n  isPathLetter: isPathLetter,\n  isRgb: isRgb,\n  numberAndUnit: numberAndUnit,\n  reference: reference,\n  rgb: rgb,\n  transforms: transforms,\n  whitespace: whitespace\n};\n\n// Return array of classes on the node\nfunction classes() {\n  const attr = this.attr('class');\n  return attr == null ? [] : attr.trim().split(delimiter);\n}\n\n// Return true if class exists on the node, false otherwise\nfunction hasClass(name) {\n  return this.classes().indexOf(name) !== -1;\n}\n\n// Add class to the node\nfunction addClass(name) {\n  if (!this.hasClass(name)) {\n    const array = this.classes();\n    array.push(name);\n    this.attr('class', array.join(' '));\n  }\n  return this;\n}\n\n// Remove class from the node\nfunction removeClass(name) {\n  if (this.hasClass(name)) {\n    this.attr('class', this.classes().filter(function (c) {\n      return c !== name;\n    }).join(' '));\n  }\n  return this;\n}\n\n// Toggle the presence of a class on the node\nfunction toggleClass(name) {\n  return this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n}\nregisterMethods('Dom', {\n  classes,\n  hasClass,\n  addClass,\n  removeClass,\n  toggleClass\n});\n\n// Dynamic style generator\nfunction css(style, val) {\n  const ret = {};\n  if (arguments.length === 0) {\n    // get full style as object\n    this.node.style.cssText.split(/\\s*;\\s*/).filter(function (el) {\n      return !!el.length;\n    }).forEach(function (el) {\n      const t = el.split(/\\s*:\\s*/);\n      ret[t[0]] = t[1];\n    });\n    return ret;\n  }\n  if (arguments.length < 2) {\n    // get style properties as array\n    if (Array.isArray(style)) {\n      for (const name of style) {\n        const cased = name;\n        ret[name] = this.node.style.getPropertyValue(cased);\n      }\n      return ret;\n    }\n\n    // get style for property\n    if (typeof style === 'string') {\n      return this.node.style.getPropertyValue(style);\n    }\n\n    // set styles in object\n    if (typeof style === 'object') {\n      for (const name in style) {\n        // set empty string if null/undefined/'' was given\n        this.node.style.setProperty(name, style[name] == null || isBlank.test(style[name]) ? '' : style[name]);\n      }\n    }\n  }\n\n  // set style for property\n  if (arguments.length === 2) {\n    this.node.style.setProperty(style, val == null || isBlank.test(val) ? '' : val);\n  }\n  return this;\n}\n\n// Show element\nfunction show() {\n  return this.css('display', '');\n}\n\n// Hide element\nfunction hide() {\n  return this.css('display', 'none');\n}\n\n// Is element visible?\nfunction visible() {\n  return this.css('display') !== 'none';\n}\nregisterMethods('Dom', {\n  css,\n  show,\n  hide,\n  visible\n});\n\n// Store data values on svg nodes\nfunction data(a, v, r) {\n  if (a == null) {\n    // get an object of attributes\n    return this.data(map(filter(this.node.attributes, el => el.nodeName.indexOf('data-') === 0), el => el.nodeName.slice(5)));\n  } else if (a instanceof Array) {\n    const data = {};\n    for (const key of a) {\n      data[key] = this.data(key);\n    }\n    return data;\n  } else if (typeof a === 'object') {\n    for (v in a) {\n      this.data(v, a[v]);\n    }\n  } else if (arguments.length < 2) {\n    try {\n      return JSON.parse(this.attr('data-' + a));\n    } catch (e) {\n      return this.attr('data-' + a);\n    }\n  } else {\n    this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v));\n  }\n  return this;\n}\nregisterMethods('Dom', {\n  data\n});\n\n// Remember arbitrary data\nfunction remember(k, v) {\n  // remember every item in an object individually\n  if (typeof arguments[0] === 'object') {\n    for (const key in k) {\n      this.remember(key, k[key]);\n    }\n  } else if (arguments.length === 1) {\n    // retrieve memory\n    return this.memory()[k];\n  } else {\n    // store memory\n    this.memory()[k] = v;\n  }\n  return this;\n}\n\n// Erase a given memory\nfunction forget() {\n  if (arguments.length === 0) {\n    this._memory = {};\n  } else {\n    for (let i = arguments.length - 1; i >= 0; i--) {\n      delete this.memory()[arguments[i]];\n    }\n  }\n  return this;\n}\n\n// This triggers creation of a new hidden class which is not performant\n// However, this function is not rarely used so it will not happen frequently\n// Return local memory object\nfunction memory() {\n  return this._memory = this._memory || {};\n}\nregisterMethods('Dom', {\n  remember,\n  forget,\n  memory\n});\n\nfunction sixDigitHex(hex) {\n  return hex.length === 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex;\n}\nfunction componentHex(component) {\n  const integer = Math.round(component);\n  const bounded = Math.max(0, Math.min(255, integer));\n  const hex = bounded.toString(16);\n  return hex.length === 1 ? '0' + hex : hex;\n}\nfunction is(object, space) {\n  for (let i = space.length; i--;) {\n    if (object[space[i]] == null) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction getParameters(a, b) {\n  const params = is(a, 'rgb') ? {\n    _a: a.r,\n    _b: a.g,\n    _c: a.b,\n    _d: 0,\n    space: 'rgb'\n  } : is(a, 'xyz') ? {\n    _a: a.x,\n    _b: a.y,\n    _c: a.z,\n    _d: 0,\n    space: 'xyz'\n  } : is(a, 'hsl') ? {\n    _a: a.h,\n    _b: a.s,\n    _c: a.l,\n    _d: 0,\n    space: 'hsl'\n  } : is(a, 'lab') ? {\n    _a: a.l,\n    _b: a.a,\n    _c: a.b,\n    _d: 0,\n    space: 'lab'\n  } : is(a, 'lch') ? {\n    _a: a.l,\n    _b: a.c,\n    _c: a.h,\n    _d: 0,\n    space: 'lch'\n  } : is(a, 'cmyk') ? {\n    _a: a.c,\n    _b: a.m,\n    _c: a.y,\n    _d: a.k,\n    space: 'cmyk'\n  } : {\n    _a: 0,\n    _b: 0,\n    _c: 0,\n    space: 'rgb'\n  };\n  params.space = b || params.space;\n  return params;\n}\nfunction cieSpace(space) {\n  if (space === 'lab' || space === 'xyz' || space === 'lch') {\n    return true;\n  } else {\n    return false;\n  }\n}\nfunction hueToRgb(p, q, t) {\n  if (t < 0) t += 1;\n  if (t > 1) t -= 1;\n  if (t < 1 / 6) return p + (q - p) * 6 * t;\n  if (t < 1 / 2) return q;\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n  return p;\n}\nclass Color {\n  constructor(...inputs) {\n    this.init(...inputs);\n  }\n\n  // Test if given value is a color\n  static isColor(color) {\n    return color && (color instanceof Color || this.isRgb(color) || this.test(color));\n  }\n\n  // Test if given value is an rgb object\n  static isRgb(color) {\n    return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number';\n  }\n\n  /*\n  Generating random colors\n  */\n  static random(mode = 'vibrant', t) {\n    // Get the math modules\n    const {\n      random,\n      round,\n      sin,\n      PI: pi\n    } = Math;\n\n    // Run the correct generator\n    if (mode === 'vibrant') {\n      const l = (81 - 57) * random() + 57;\n      const c = (83 - 45) * random() + 45;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'sine') {\n      t = t == null ? random() : t;\n      const r = round(80 * sin(2 * pi * t / 0.5 + 0.01) + 150);\n      const g = round(50 * sin(2 * pi * t / 0.5 + 4.6) + 200);\n      const b = round(100 * sin(2 * pi * t / 0.5 + 2.3) + 150);\n      const color = new Color(r, g, b);\n      return color;\n    } else if (mode === 'pastel') {\n      const l = (94 - 86) * random() + 86;\n      const c = (26 - 9) * random() + 9;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'dark') {\n      const l = 10 + 10 * random();\n      const c = (125 - 75) * random() + 86;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'rgb') {\n      const r = 255 * random();\n      const g = 255 * random();\n      const b = 255 * random();\n      const color = new Color(r, g, b);\n      return color;\n    } else if (mode === 'lab') {\n      const l = 100 * random();\n      const a = 256 * random() - 128;\n      const b = 256 * random() - 128;\n      const color = new Color(l, a, b, 'lab');\n      return color;\n    } else if (mode === 'grey') {\n      const grey = 255 * random();\n      const color = new Color(grey, grey, grey);\n      return color;\n    } else {\n      throw new Error('Unsupported random color mode');\n    }\n  }\n\n  // Test if given value is a color string\n  static test(color) {\n    return typeof color === 'string' && (isHex.test(color) || isRgb.test(color));\n  }\n  cmyk() {\n    // Get the rgb values for the current color\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const [r, g, b] = [_a, _b, _c].map(v => v / 255);\n\n    // Get the cmyk values in an unbounded format\n    const k = Math.min(1 - r, 1 - g, 1 - b);\n    if (k === 1) {\n      // Catch the black case\n      return new Color(0, 0, 0, 1, 'cmyk');\n    }\n    const c = (1 - r - k) / (1 - k);\n    const m = (1 - g - k) / (1 - k);\n    const y = (1 - b - k) / (1 - k);\n\n    // Construct the new color\n    const color = new Color(c, m, y, k, 'cmyk');\n    return color;\n  }\n  hsl() {\n    // Get the rgb values\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const [r, g, b] = [_a, _b, _c].map(v => v / 255);\n\n    // Find the maximum and minimum values to get the lightness\n    const max = Math.max(r, g, b);\n    const min = Math.min(r, g, b);\n    const l = (max + min) / 2;\n\n    // If the r, g, v values are identical then we are grey\n    const isGrey = max === min;\n\n    // Calculate the hue and saturation\n    const delta = max - min;\n    const s = isGrey ? 0 : l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n    const h = isGrey ? 0 : max === r ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 : max === g ? ((b - r) / delta + 2) / 6 : max === b ? ((r - g) / delta + 4) / 6 : 0;\n\n    // Construct and return the new color\n    const color = new Color(360 * h, 100 * s, 100 * l, 'hsl');\n    return color;\n  }\n  init(a = 0, b = 0, c = 0, d = 0, space = 'rgb') {\n    // This catches the case when a falsy value is passed like ''\n    a = !a ? 0 : a;\n\n    // Reset all values in case the init function is rerun with new color space\n    if (this.space) {\n      for (const component in this.space) {\n        delete this[this.space[component]];\n      }\n    }\n    if (typeof a === 'number') {\n      // Allow for the case that we don't need d...\n      space = typeof d === 'string' ? d : space;\n      d = typeof d === 'string' ? 0 : d;\n\n      // Assign the values straight to the color\n      Object.assign(this, {\n        _a: a,\n        _b: b,\n        _c: c,\n        _d: d,\n        space\n      });\n      // If the user gave us an array, make the color from it\n    } else if (a instanceof Array) {\n      this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb';\n      Object.assign(this, {\n        _a: a[0],\n        _b: a[1],\n        _c: a[2],\n        _d: a[3] || 0\n      });\n    } else if (a instanceof Object) {\n      // Set the object up and assign its values directly\n      const values = getParameters(a, b);\n      Object.assign(this, values);\n    } else if (typeof a === 'string') {\n      if (isRgb.test(a)) {\n        const noWhitespace = a.replace(whitespace, '');\n        const [_a, _b, _c] = rgb.exec(noWhitespace).slice(1, 4).map(v => parseInt(v));\n        Object.assign(this, {\n          _a,\n          _b,\n          _c,\n          _d: 0,\n          space: 'rgb'\n        });\n      } else if (isHex.test(a)) {\n        const hexParse = v => parseInt(v, 16);\n        const [, _a, _b, _c] = hex.exec(sixDigitHex(a)).map(hexParse);\n        Object.assign(this, {\n          _a,\n          _b,\n          _c,\n          _d: 0,\n          space: 'rgb'\n        });\n      } else throw Error(\"Unsupported string format, can't construct Color\");\n    }\n\n    // Now add the components as a convenience\n    const {\n      _a,\n      _b,\n      _c,\n      _d\n    } = this;\n    const components = this.space === 'rgb' ? {\n      r: _a,\n      g: _b,\n      b: _c\n    } : this.space === 'xyz' ? {\n      x: _a,\n      y: _b,\n      z: _c\n    } : this.space === 'hsl' ? {\n      h: _a,\n      s: _b,\n      l: _c\n    } : this.space === 'lab' ? {\n      l: _a,\n      a: _b,\n      b: _c\n    } : this.space === 'lch' ? {\n      l: _a,\n      c: _b,\n      h: _c\n    } : this.space === 'cmyk' ? {\n      c: _a,\n      m: _b,\n      y: _c,\n      k: _d\n    } : {};\n    Object.assign(this, components);\n  }\n  lab() {\n    // Get the xyz color\n    const {\n      x,\n      y,\n      z\n    } = this.xyz();\n\n    // Get the lab components\n    const l = 116 * y - 16;\n    const a = 500 * (x - y);\n    const b = 200 * (y - z);\n\n    // Construct and return a new color\n    const color = new Color(l, a, b, 'lab');\n    return color;\n  }\n  lch() {\n    // Get the lab color directly\n    const {\n      l,\n      a,\n      b\n    } = this.lab();\n\n    // Get the chromaticity and the hue using polar coordinates\n    const c = Math.sqrt(a ** 2 + b ** 2);\n    let h = 180 * Math.atan2(b, a) / Math.PI;\n    if (h < 0) {\n      h *= -1;\n      h = 360 - h;\n    }\n\n    // Make a new color and return it\n    const color = new Color(l, c, h, 'lch');\n    return color;\n  }\n  /*\n  Conversion Methods\n  */\n\n  rgb() {\n    if (this.space === 'rgb') {\n      return this;\n    } else if (cieSpace(this.space)) {\n      // Convert to the xyz color space\n      let {\n        x,\n        y,\n        z\n      } = this;\n      if (this.space === 'lab' || this.space === 'lch') {\n        // Get the values in the lab space\n        let {\n          l,\n          a,\n          b\n        } = this;\n        if (this.space === 'lch') {\n          const {\n            c,\n            h\n          } = this;\n          const dToR = Math.PI / 180;\n          a = c * Math.cos(dToR * h);\n          b = c * Math.sin(dToR * h);\n        }\n\n        // Undo the nonlinear function\n        const yL = (l + 16) / 116;\n        const xL = a / 500 + yL;\n        const zL = yL - b / 200;\n\n        // Get the xyz values\n        const ct = 16 / 116;\n        const mx = 0.008856;\n        const nm = 7.787;\n        x = 0.95047 * (xL ** 3 > mx ? xL ** 3 : (xL - ct) / nm);\n        y = 1.0 * (yL ** 3 > mx ? yL ** 3 : (yL - ct) / nm);\n        z = 1.08883 * (zL ** 3 > mx ? zL ** 3 : (zL - ct) / nm);\n      }\n\n      // Convert xyz to unbounded rgb values\n      const rU = x * 3.2406 + y * -1.5372 + z * -0.4986;\n      const gU = x * -0.9689 + y * 1.8758 + z * 0.0415;\n      const bU = x * 0.0557 + y * -0.204 + z * 1.057;\n\n      // Convert the values to true rgb values\n      const pow = Math.pow;\n      const bd = 0.0031308;\n      const r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - 0.055 : 12.92 * rU;\n      const g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - 0.055 : 12.92 * gU;\n      const b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - 0.055 : 12.92 * bU;\n\n      // Make and return the color\n      const color = new Color(255 * r, 255 * g, 255 * b);\n      return color;\n    } else if (this.space === 'hsl') {\n      // https://bgrins.github.io/TinyColor/docs/tinycolor.html\n      // Get the current hsl values\n      let {\n        h,\n        s,\n        l\n      } = this;\n      h /= 360;\n      s /= 100;\n      l /= 100;\n\n      // If we are grey, then just make the color directly\n      if (s === 0) {\n        l *= 255;\n        const color = new Color(l, l, l);\n        return color;\n      }\n\n      // TODO I have no idea what this does :D If you figure it out, tell me!\n      const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      const p = 2 * l - q;\n\n      // Get the rgb values\n      const r = 255 * hueToRgb(p, q, h + 1 / 3);\n      const g = 255 * hueToRgb(p, q, h);\n      const b = 255 * hueToRgb(p, q, h - 1 / 3);\n\n      // Make a new color\n      const color = new Color(r, g, b);\n      return color;\n    } else if (this.space === 'cmyk') {\n      // https://gist.github.com/felipesabino/5066336\n      // Get the normalised cmyk values\n      const {\n        c,\n        m,\n        y,\n        k\n      } = this;\n\n      // Get the rgb values\n      const r = 255 * (1 - Math.min(1, c * (1 - k) + k));\n      const g = 255 * (1 - Math.min(1, m * (1 - k) + k));\n      const b = 255 * (1 - Math.min(1, y * (1 - k) + k));\n\n      // Form the color and return it\n      const color = new Color(r, g, b);\n      return color;\n    } else {\n      return this;\n    }\n  }\n  toArray() {\n    const {\n      _a,\n      _b,\n      _c,\n      _d,\n      space\n    } = this;\n    return [_a, _b, _c, _d, space];\n  }\n  toHex() {\n    const [r, g, b] = this._clamped().map(componentHex);\n    return `#${r}${g}${b}`;\n  }\n  toRgb() {\n    const [rV, gV, bV] = this._clamped();\n    const string = `rgb(${rV},${gV},${bV})`;\n    return string;\n  }\n  toString() {\n    return this.toHex();\n  }\n  xyz() {\n    // Normalise the red, green and blue values\n    const {\n      _a: r255,\n      _b: g255,\n      _c: b255\n    } = this.rgb();\n    const [r, g, b] = [r255, g255, b255].map(v => v / 255);\n\n    // Convert to the lab rgb space\n    const rL = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n    const gL = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n    const bL = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n    // Convert to the xyz color space without bounding the values\n    const xU = (rL * 0.4124 + gL * 0.3576 + bL * 0.1805) / 0.95047;\n    const yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.0;\n    const zU = (rL * 0.0193 + gL * 0.1192 + bL * 0.9505) / 1.08883;\n\n    // Get the proper xyz values by applying the bounding\n    const x = xU > 0.008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116;\n    const y = yU > 0.008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116;\n    const z = zU > 0.008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116;\n\n    // Make and return the color\n    const color = new Color(x, y, z, 'xyz');\n    return color;\n  }\n\n  /*\n  Input and Output methods\n  */\n\n  _clamped() {\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const {\n      max,\n      min,\n      round\n    } = Math;\n    const format = v => max(0, min(round(v), 255));\n    return [_a, _b, _c].map(format);\n  }\n\n  /*\n  Constructing colors\n  */\n}\n\nclass Point {\n  // Initialize\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  // Clone point\n  clone() {\n    return new Point(this);\n  }\n  init(x, y) {\n    const base = {\n      x: 0,\n      y: 0\n    };\n\n    // ensure source as object\n    const source = Array.isArray(x) ? {\n      x: x[0],\n      y: x[1]\n    } : typeof x === 'object' ? {\n      x: x.x,\n      y: x.y\n    } : {\n      x: x,\n      y: y\n    };\n\n    // merge source\n    this.x = source.x == null ? base.x : source.x;\n    this.y = source.y == null ? base.y : source.y;\n    return this;\n  }\n  toArray() {\n    return [this.x, this.y];\n  }\n  transform(m) {\n    return this.clone().transformO(m);\n  }\n\n  // Transform point with matrix\n  transformO(m) {\n    if (!Matrix.isMatrixLike(m)) {\n      m = new Matrix(m);\n    }\n    const {\n      x,\n      y\n    } = this;\n\n    // Perform the matrix multiplication\n    this.x = m.a * x + m.c * y + m.e;\n    this.y = m.b * x + m.d * y + m.f;\n    return this;\n  }\n}\nfunction point(x, y) {\n  return new Point(x, y).transformO(this.screenCTM().inverseO());\n}\n\nfunction closeEnough(a, b, threshold) {\n  return Math.abs(b - a) < (1e-6);\n}\nclass Matrix {\n  constructor(...args) {\n    this.init(...args);\n  }\n  static formatTransforms(o) {\n    // Get all of the parameters required to form the matrix\n    const flipBoth = o.flip === 'both' || o.flip === true;\n    const flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1;\n    const flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1;\n    const skewX = o.skew && o.skew.length ? o.skew[0] : isFinite(o.skew) ? o.skew : isFinite(o.skewX) ? o.skewX : 0;\n    const skewY = o.skew && o.skew.length ? o.skew[1] : isFinite(o.skew) ? o.skew : isFinite(o.skewY) ? o.skewY : 0;\n    const scaleX = o.scale && o.scale.length ? o.scale[0] * flipX : isFinite(o.scale) ? o.scale * flipX : isFinite(o.scaleX) ? o.scaleX * flipX : flipX;\n    const scaleY = o.scale && o.scale.length ? o.scale[1] * flipY : isFinite(o.scale) ? o.scale * flipY : isFinite(o.scaleY) ? o.scaleY * flipY : flipY;\n    const shear = o.shear || 0;\n    const theta = o.rotate || o.theta || 0;\n    const origin = new Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY);\n    const ox = origin.x;\n    const oy = origin.y;\n    // We need Point to be invalid if nothing was passed because we cannot default to 0 here. That is why NaN\n    const position = new Point(o.position || o.px || o.positionX || NaN, o.py || o.positionY || NaN);\n    const px = position.x;\n    const py = position.y;\n    const translate = new Point(o.translate || o.tx || o.translateX, o.ty || o.translateY);\n    const tx = translate.x;\n    const ty = translate.y;\n    const relative = new Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY);\n    const rx = relative.x;\n    const ry = relative.y;\n\n    // Populate all of the values\n    return {\n      scaleX,\n      scaleY,\n      skewX,\n      skewY,\n      shear,\n      theta,\n      rx,\n      ry,\n      tx,\n      ty,\n      ox,\n      oy,\n      px,\n      py\n    };\n  }\n  static fromArray(a) {\n    return {\n      a: a[0],\n      b: a[1],\n      c: a[2],\n      d: a[3],\n      e: a[4],\n      f: a[5]\n    };\n  }\n  static isMatrixLike(o) {\n    return o.a != null || o.b != null || o.c != null || o.d != null || o.e != null || o.f != null;\n  }\n\n  // left matrix, right matrix, target matrix which is overwritten\n  static matrixMultiply(l, r, o) {\n    // Work out the product directly\n    const a = l.a * r.a + l.c * r.b;\n    const b = l.b * r.a + l.d * r.b;\n    const c = l.a * r.c + l.c * r.d;\n    const d = l.b * r.c + l.d * r.d;\n    const e = l.e + l.a * r.e + l.c * r.f;\n    const f = l.f + l.b * r.e + l.d * r.f;\n\n    // make sure to use local variables because l/r and o could be the same\n    o.a = a;\n    o.b = b;\n    o.c = c;\n    o.d = d;\n    o.e = e;\n    o.f = f;\n    return o;\n  }\n  around(cx, cy, matrix) {\n    return this.clone().aroundO(cx, cy, matrix);\n  }\n\n  // Transform around a center point\n  aroundO(cx, cy, matrix) {\n    const dx = cx || 0;\n    const dy = cy || 0;\n    return this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy);\n  }\n\n  // Clones this matrix\n  clone() {\n    return new Matrix(this);\n  }\n\n  // Decomposes this matrix into its affine parameters\n  decompose(cx = 0, cy = 0) {\n    // Get the parameters from the matrix\n    const a = this.a;\n    const b = this.b;\n    const c = this.c;\n    const d = this.d;\n    const e = this.e;\n    const f = this.f;\n\n    // Figure out if the winding direction is clockwise or counterclockwise\n    const determinant = a * d - b * c;\n    const ccw = determinant > 0 ? 1 : -1;\n\n    // Since we only shear in x, we can use the x basis to get the x scale\n    // and the rotation of the resulting matrix\n    const sx = ccw * Math.sqrt(a * a + b * b);\n    const thetaRad = Math.atan2(ccw * b, ccw * a);\n    const theta = 180 / Math.PI * thetaRad;\n    const ct = Math.cos(thetaRad);\n    const st = Math.sin(thetaRad);\n\n    // We can then solve the y basis vector simultaneously to get the other\n    // two affine parameters directly from these parameters\n    const lam = (a * c + b * d) / determinant;\n    const sy = c * sx / (lam * a - b) || d * sx / (lam * b + a);\n\n    // Use the translations\n    const tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy);\n    const ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy);\n\n    // Construct the decomposition and return it\n    return {\n      // Return the affine parameters\n      scaleX: sx,\n      scaleY: sy,\n      shear: lam,\n      rotate: theta,\n      translateX: tx,\n      translateY: ty,\n      originX: cx,\n      originY: cy,\n      // Return the matrix parameters\n      a: this.a,\n      b: this.b,\n      c: this.c,\n      d: this.d,\n      e: this.e,\n      f: this.f\n    };\n  }\n\n  // Check if two matrices are equal\n  equals(other) {\n    if (other === this) return true;\n    const comp = new Matrix(other);\n    return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) && closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) && closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f);\n  }\n\n  // Flip matrix on x or y, at a given offset\n  flip(axis, around) {\n    return this.clone().flipO(axis, around);\n  }\n  flipO(axis, around) {\n    return axis === 'x' ? this.scaleO(-1, 1, around, 0) : axis === 'y' ? this.scaleO(1, -1, 0, around) : this.scaleO(-1, -1, axis, around || axis); // Define an x, y flip point\n  }\n\n  // Initialize\n  init(source) {\n    const base = Matrix.fromArray([1, 0, 0, 1, 0, 0]);\n\n    // ensure source as object\n    source = source instanceof Element ? source.matrixify() : typeof source === 'string' ? Matrix.fromArray(source.split(delimiter).map(parseFloat)) : Array.isArray(source) ? Matrix.fromArray(source) : typeof source === 'object' && Matrix.isMatrixLike(source) ? source : typeof source === 'object' ? new Matrix().transform(source) : arguments.length === 6 ? Matrix.fromArray([].slice.call(arguments)) : base;\n\n    // Merge the source matrix with the base matrix\n    this.a = source.a != null ? source.a : base.a;\n    this.b = source.b != null ? source.b : base.b;\n    this.c = source.c != null ? source.c : base.c;\n    this.d = source.d != null ? source.d : base.d;\n    this.e = source.e != null ? source.e : base.e;\n    this.f = source.f != null ? source.f : base.f;\n    return this;\n  }\n  inverse() {\n    return this.clone().inverseO();\n  }\n\n  // Inverses matrix\n  inverseO() {\n    // Get the current parameters out of the matrix\n    const a = this.a;\n    const b = this.b;\n    const c = this.c;\n    const d = this.d;\n    const e = this.e;\n    const f = this.f;\n\n    // Invert the 2x2 matrix in the top left\n    const det = a * d - b * c;\n    if (!det) throw new Error('Cannot invert ' + this);\n\n    // Calculate the top 2x2 matrix\n    const na = d / det;\n    const nb = -b / det;\n    const nc = -c / det;\n    const nd = a / det;\n\n    // Apply the inverted matrix to the top right\n    const ne = -(na * e + nc * f);\n    const nf = -(nb * e + nd * f);\n\n    // Construct the inverted matrix\n    this.a = na;\n    this.b = nb;\n    this.c = nc;\n    this.d = nd;\n    this.e = ne;\n    this.f = nf;\n    return this;\n  }\n  lmultiply(matrix) {\n    return this.clone().lmultiplyO(matrix);\n  }\n  lmultiplyO(matrix) {\n    const r = this;\n    const l = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n    return Matrix.matrixMultiply(l, r, this);\n  }\n\n  // Left multiplies by the given matrix\n  multiply(matrix) {\n    return this.clone().multiplyO(matrix);\n  }\n  multiplyO(matrix) {\n    // Get the matrices\n    const l = this;\n    const r = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n    return Matrix.matrixMultiply(l, r, this);\n  }\n\n  // Rotate matrix\n  rotate(r, cx, cy) {\n    return this.clone().rotateO(r, cx, cy);\n  }\n  rotateO(r, cx = 0, cy = 0) {\n    // Convert degrees to radians\n    r = radians(r);\n    const cos = Math.cos(r);\n    const sin = Math.sin(r);\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a * cos - b * sin;\n    this.b = b * cos + a * sin;\n    this.c = c * cos - d * sin;\n    this.d = d * cos + c * sin;\n    this.e = e * cos - f * sin + cy * sin - cx * cos + cx;\n    this.f = f * cos + e * sin - cx * sin - cy * cos + cy;\n    return this;\n  }\n\n  // Scale matrix\n  scale() {\n    return this.clone().scaleO(...arguments);\n  }\n  scaleO(x, y = x, cx = 0, cy = 0) {\n    // Support uniform scaling\n    if (arguments.length === 3) {\n      cy = cx;\n      cx = y;\n      y = x;\n    }\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a * x;\n    this.b = b * y;\n    this.c = c * x;\n    this.d = d * y;\n    this.e = e * x - cx * x + cx;\n    this.f = f * y - cy * y + cy;\n    return this;\n  }\n\n  // Shear matrix\n  shear(a, cx, cy) {\n    return this.clone().shearO(a, cx, cy);\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  shearO(lx, cx = 0, cy = 0) {\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a + b * lx;\n    this.c = c + d * lx;\n    this.e = e + f * lx - cy * lx;\n    return this;\n  }\n\n  // Skew Matrix\n  skew() {\n    return this.clone().skewO(...arguments);\n  }\n  skewO(x, y = x, cx = 0, cy = 0) {\n    // support uniformal skew\n    if (arguments.length === 3) {\n      cy = cx;\n      cx = y;\n      y = x;\n    }\n\n    // Convert degrees to radians\n    x = radians(x);\n    y = radians(y);\n    const lx = Math.tan(x);\n    const ly = Math.tan(y);\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a + b * lx;\n    this.b = b + a * ly;\n    this.c = c + d * lx;\n    this.d = d + c * ly;\n    this.e = e + f * lx - cy * lx;\n    this.f = f + e * ly - cx * ly;\n    return this;\n  }\n\n  // SkewX\n  skewX(x, cx, cy) {\n    return this.skew(x, 0, cx, cy);\n  }\n\n  // SkewY\n  skewY(y, cx, cy) {\n    return this.skew(0, y, cx, cy);\n  }\n  toArray() {\n    return [this.a, this.b, this.c, this.d, this.e, this.f];\n  }\n\n  // Convert matrix to string\n  toString() {\n    return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')';\n  }\n\n  // Transform a matrix into another matrix by manipulating the space\n  transform(o) {\n    // Check if o is a matrix and then left multiply it directly\n    if (Matrix.isMatrixLike(o)) {\n      const matrix = new Matrix(o);\n      return matrix.multiplyO(this);\n    }\n\n    // Get the proposed transformations and the current transformations\n    const t = Matrix.formatTransforms(o);\n    const current = this;\n    const {\n      x: ox,\n      y: oy\n    } = new Point(t.ox, t.oy).transform(current);\n\n    // Construct the resulting matrix\n    const transformer = new Matrix().translateO(t.rx, t.ry).lmultiplyO(current).translateO(-ox, -oy).scaleO(t.scaleX, t.scaleY).skewO(t.skewX, t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox, oy);\n\n    // If we want the origin at a particular place, we force it there\n    if (isFinite(t.px) || isFinite(t.py)) {\n      const origin = new Point(ox, oy).transform(transformer);\n      // TODO: Replace t.px with isFinite(t.px)\n      // Doesn't work because t.px is also 0 if it wasn't passed\n      const dx = isFinite(t.px) ? t.px - origin.x : 0;\n      const dy = isFinite(t.py) ? t.py - origin.y : 0;\n      transformer.translateO(dx, dy);\n    }\n\n    // Translate now after positioning\n    transformer.translateO(t.tx, t.ty);\n    return transformer;\n  }\n\n  // Translate matrix\n  translate(x, y) {\n    return this.clone().translateO(x, y);\n  }\n  translateO(x, y) {\n    this.e += x || 0;\n    this.f += y || 0;\n    return this;\n  }\n  valueOf() {\n    return {\n      a: this.a,\n      b: this.b,\n      c: this.c,\n      d: this.d,\n      e: this.e,\n      f: this.f\n    };\n  }\n}\nfunction ctm() {\n  return new Matrix(this.node.getCTM());\n}\nfunction screenCTM() {\n  try {\n    /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\n       This is needed because FF does not return the transformation matrix\n       for the inner coordinate system when getScreenCTM() is called on nested svgs.\n       However all other Browsers do that */\n    if (typeof this.isRoot === 'function' && !this.isRoot()) {\n      const rect = this.rect(1, 1);\n      const m = rect.node.getScreenCTM();\n      rect.remove();\n      return new Matrix(m);\n    }\n    return new Matrix(this.node.getScreenCTM());\n  } catch (e) {\n    console.warn(`Cannot get CTM from SVG node ${this.node.nodeName}. Is the element rendered?`);\n    return new Matrix();\n  }\n}\nregister(Matrix, 'Matrix');\n\nfunction parser() {\n  // Reuse cached element if possible\n  if (!parser.nodes) {\n    const svg = makeInstance().size(2, 0);\n    svg.node.style.cssText = ['opacity: 0', 'position: absolute', 'left: -100%', 'top: -100%', 'overflow: hidden'].join(';');\n    svg.attr('focusable', 'false');\n    svg.attr('aria-hidden', 'true');\n    const path = svg.path().node;\n    parser.nodes = {\n      svg,\n      path\n    };\n  }\n  if (!parser.nodes.svg.node.parentNode) {\n    const b = globals.document.body || globals.document.documentElement;\n    parser.nodes.svg.addTo(b);\n  }\n  return parser.nodes;\n}\n\nfunction isNulledBox(box) {\n  return !box.width && !box.height && !box.x && !box.y;\n}\nfunction domContains(node) {\n  return node === globals.document || (globals.document.documentElement.contains || function (node) {\n    // This is IE - it does not support contains() for top-level SVGs\n    while (node.parentNode) {\n      node = node.parentNode;\n    }\n    return node === globals.document;\n  }).call(globals.document.documentElement, node);\n}\nclass Box {\n  constructor(...args) {\n    this.init(...args);\n  }\n  addOffset() {\n    // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\n    this.x += globals.window.pageXOffset;\n    this.y += globals.window.pageYOffset;\n    return new Box(this);\n  }\n  init(source) {\n    const base = [0, 0, 0, 0];\n    source = typeof source === 'string' ? source.split(delimiter).map(parseFloat) : Array.isArray(source) ? source : typeof source === 'object' ? [source.left != null ? source.left : source.x, source.top != null ? source.top : source.y, source.width, source.height] : arguments.length === 4 ? [].slice.call(arguments) : base;\n    this.x = source[0] || 0;\n    this.y = source[1] || 0;\n    this.width = this.w = source[2] || 0;\n    this.height = this.h = source[3] || 0;\n\n    // Add more bounding box properties\n    this.x2 = this.x + this.w;\n    this.y2 = this.y + this.h;\n    this.cx = this.x + this.w / 2;\n    this.cy = this.y + this.h / 2;\n    return this;\n  }\n  isNulled() {\n    return isNulledBox(this);\n  }\n\n  // Merge rect box with another, return a new instance\n  merge(box) {\n    const x = Math.min(this.x, box.x);\n    const y = Math.min(this.y, box.y);\n    const width = Math.max(this.x + this.width, box.x + box.width) - x;\n    const height = Math.max(this.y + this.height, box.y + box.height) - y;\n    return new Box(x, y, width, height);\n  }\n  toArray() {\n    return [this.x, this.y, this.width, this.height];\n  }\n  toString() {\n    return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height;\n  }\n  transform(m) {\n    if (!(m instanceof Matrix)) {\n      m = new Matrix(m);\n    }\n    let xMin = Infinity;\n    let xMax = -Infinity;\n    let yMin = Infinity;\n    let yMax = -Infinity;\n    const pts = [new Point(this.x, this.y), new Point(this.x2, this.y), new Point(this.x, this.y2), new Point(this.x2, this.y2)];\n    pts.forEach(function (p) {\n      p = p.transform(m);\n      xMin = Math.min(xMin, p.x);\n      xMax = Math.max(xMax, p.x);\n      yMin = Math.min(yMin, p.y);\n      yMax = Math.max(yMax, p.y);\n    });\n    return new Box(xMin, yMin, xMax - xMin, yMax - yMin);\n  }\n}\nfunction getBox(el, getBBoxFn, retry) {\n  let box;\n  try {\n    // Try to get the box with the provided function\n    box = getBBoxFn(el.node);\n\n    // If the box is worthless and not even in the dom, retry\n    // by throwing an error here...\n    if (isNulledBox(box) && !domContains(el.node)) {\n      throw new Error('Element not in the dom');\n    }\n  } catch (e) {\n    // ... and calling the retry handler here\n    box = retry(el);\n  }\n  return box;\n}\nfunction bbox() {\n  // Function to get bbox is getBBox()\n  const getBBox = node => node.getBBox();\n\n  // Take all measures so that a stupid browser renders the element\n  // so we can get the bbox from it when we try again\n  const retry = el => {\n    try {\n      const clone = el.clone().addTo(parser().svg).show();\n      const box = clone.node.getBBox();\n      clone.remove();\n      return box;\n    } catch (e) {\n      // We give up...\n      throw new Error(`Getting bbox of element \"${el.node.nodeName}\" is not possible: ${e.toString()}`);\n    }\n  };\n  const box = getBox(this, getBBox, retry);\n  const bbox = new Box(box);\n  return bbox;\n}\nfunction rbox(el) {\n  const getRBox = node => node.getBoundingClientRect();\n  const retry = el => {\n    // There is no point in trying tricks here because if we insert the element into the dom ourselves\n    // it obviously will be at the wrong position\n    throw new Error(`Getting rbox of element \"${el.node.nodeName}\" is not possible`);\n  };\n  const box = getBox(this, getRBox, retry);\n  const rbox = new Box(box);\n\n  // If an element was passed, we want the bbox in the coordinate system of that element\n  if (el) {\n    return rbox.transform(el.screenCTM().inverseO());\n  }\n\n  // Else we want it in absolute screen coordinates\n  // Therefore we need to add the scrollOffset\n  return rbox.addOffset();\n}\n\n// Checks whether the given point is inside the bounding box\nfunction inside(x, y) {\n  const box = this.bbox();\n  return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height;\n}\nregisterMethods({\n  viewbox: {\n    viewbox(x, y, width, height) {\n      // act as getter\n      if (x == null) return new Box(this.attr('viewBox'));\n\n      // act as setter\n      return this.attr('viewBox', new Box(x, y, width, height));\n    },\n    zoom(level, point) {\n      // Its best to rely on the attributes here and here is why:\n      // clientXYZ: Doesn't work on non-root svgs because they dont have a CSSBox (silly!)\n      // getBoundingClientRect: Doesn't work because Chrome just ignores width and height of nested svgs completely\n      //                        that means, their clientRect is always as big as the content.\n      //                        Furthermore this size is incorrect if the element is further transformed by its parents\n      // computedStyle: Only returns meaningful values if css was used with px. We dont go this route here!\n      // getBBox: returns the bounding box of its content - that doesn't help!\n      let {\n        width,\n        height\n      } = this.attr(['width', 'height']);\n\n      // Width and height is a string when a number with a unit is present which we can't use\n      // So we try clientXYZ\n      if (!width && !height || typeof width === 'string' || typeof height === 'string') {\n        width = this.node.clientWidth;\n        height = this.node.clientHeight;\n      }\n\n      // Giving up...\n      if (!width || !height) {\n        throw new Error('Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element');\n      }\n      const v = this.viewbox();\n      const zoomX = width / v.width;\n      const zoomY = height / v.height;\n      const zoom = Math.min(zoomX, zoomY);\n      if (level == null) {\n        return zoom;\n      }\n      let zoomAmount = zoom / level;\n\n      // Set the zoomAmount to the highest value which is safe to process and recover from\n      // The * 100 is a bit of wiggle room for the matrix transformation\n      if (zoomAmount === Infinity) zoomAmount = Number.MAX_SAFE_INTEGER / 100;\n      point = point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y);\n      const box = new Box(v).transform(new Matrix({\n        scale: zoomAmount,\n        origin: point\n      }));\n      return this.viewbox(box);\n    }\n  }\n});\nregister(Box, 'Box');\n\n// import { subClassArray } from './ArrayPolyfill.js'\n\nclass List extends Array {\n  constructor(arr = [], ...args) {\n    super(arr, ...args);\n    if (typeof arr === 'number') return this;\n    this.length = 0;\n    this.push(...arr);\n  }\n}\nextend([List], {\n  each(fnOrMethodName, ...args) {\n    if (typeof fnOrMethodName === 'function') {\n      return this.map((el, i, arr) => {\n        return fnOrMethodName.call(el, el, i, arr);\n      });\n    } else {\n      return this.map(el => {\n        return el[fnOrMethodName](...args);\n      });\n    }\n  },\n  toArray() {\n    return Array.prototype.concat.apply([], this);\n  }\n});\nconst reserved = ['toArray', 'constructor', 'each'];\nList.extend = function (methods) {\n  methods = methods.reduce((obj, name) => {\n    // Don't overwrite own methods\n    if (reserved.includes(name)) return obj;\n\n    // Don't add private methods\n    if (name[0] === '_') return obj;\n\n    // Allow access to original Array methods through a prefix\n    if (name in Array.prototype) {\n      obj['$' + name] = Array.prototype[name];\n    }\n\n    // Relay every call to each()\n    obj[name] = function (...attrs) {\n      return this.each(name, ...attrs);\n    };\n    return obj;\n  }, {});\n  extend([List], methods);\n};\n\nfunction baseFind(query, parent) {\n  return new List(map((parent || globals.document).querySelectorAll(query), function (node) {\n    return adopt(node);\n  }));\n}\n\n// Scoped find method\nfunction find(query) {\n  return baseFind(query, this.node);\n}\nfunction findOne(query) {\n  return adopt(this.node.querySelector(query));\n}\n\nlet listenerId = 0;\nconst windowEvents = {};\nfunction getEvents(instance) {\n  let n = instance.getEventHolder();\n\n  // We dont want to save events in global space\n  if (n === globals.window) n = windowEvents;\n  if (!n.events) n.events = {};\n  return n.events;\n}\nfunction getEventTarget(instance) {\n  return instance.getEventTarget();\n}\nfunction clearEvents(instance) {\n  let n = instance.getEventHolder();\n  if (n === globals.window) n = windowEvents;\n  if (n.events) n.events = {};\n}\n\n// Add event binder in the SVG namespace\nfunction on(node, events, listener, binding, options) {\n  const l = listener.bind(binding || node);\n  const instance = makeInstance(node);\n  const bag = getEvents(instance);\n  const n = getEventTarget(instance);\n\n  // events can be an array of events or a string of events\n  events = Array.isArray(events) ? events : events.split(delimiter);\n\n  // add id to listener\n  if (!listener._svgjsListenerId) {\n    listener._svgjsListenerId = ++listenerId;\n  }\n  events.forEach(function (event) {\n    const ev = event.split('.')[0];\n    const ns = event.split('.')[1] || '*';\n\n    // ensure valid object\n    bag[ev] = bag[ev] || {};\n    bag[ev][ns] = bag[ev][ns] || {};\n\n    // reference listener\n    bag[ev][ns][listener._svgjsListenerId] = l;\n\n    // add listener\n    n.addEventListener(ev, l, options || false);\n  });\n}\n\n// Add event unbinder in the SVG namespace\nfunction off(node, events, listener, options) {\n  const instance = makeInstance(node);\n  const bag = getEvents(instance);\n  const n = getEventTarget(instance);\n\n  // listener can be a function or a number\n  if (typeof listener === 'function') {\n    listener = listener._svgjsListenerId;\n    if (!listener) return;\n  }\n\n  // events can be an array of events or a string or undefined\n  events = Array.isArray(events) ? events : (events || '').split(delimiter);\n  events.forEach(function (event) {\n    const ev = event && event.split('.')[0];\n    const ns = event && event.split('.')[1];\n    let namespace, l;\n    if (listener) {\n      // remove listener reference\n      if (bag[ev] && bag[ev][ns || '*']) {\n        // removeListener\n        n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false);\n        delete bag[ev][ns || '*'][listener];\n      }\n    } else if (ev && ns) {\n      // remove all listeners for a namespaced event\n      if (bag[ev] && bag[ev][ns]) {\n        for (l in bag[ev][ns]) {\n          off(n, [ev, ns].join('.'), l);\n        }\n        delete bag[ev][ns];\n      }\n    } else if (ns) {\n      // remove all listeners for a specific namespace\n      for (event in bag) {\n        for (namespace in bag[event]) {\n          if (ns === namespace) {\n            off(n, [event, ns].join('.'));\n          }\n        }\n      }\n    } else if (ev) {\n      // remove all listeners for the event\n      if (bag[ev]) {\n        for (namespace in bag[ev]) {\n          off(n, [ev, namespace].join('.'));\n        }\n        delete bag[ev];\n      }\n    } else {\n      // remove all listeners on a given node\n      for (event in bag) {\n        off(n, event);\n      }\n      clearEvents(instance);\n    }\n  });\n}\nfunction dispatch(node, event, data, options) {\n  const n = getEventTarget(node);\n\n  // Dispatch event\n  if (event instanceof globals.window.Event) {\n    n.dispatchEvent(event);\n  } else {\n    event = new globals.window.CustomEvent(event, {\n      detail: data,\n      cancelable: true,\n      ...options\n    });\n    n.dispatchEvent(event);\n  }\n  return event;\n}\n\nclass EventTarget extends Base {\n  addEventListener() {}\n  dispatch(event, data, options) {\n    return dispatch(this, event, data, options);\n  }\n  dispatchEvent(event) {\n    const bag = this.getEventHolder().events;\n    if (!bag) return true;\n    const events = bag[event.type];\n    for (const i in events) {\n      for (const j in events[i]) {\n        events[i][j](event);\n      }\n    }\n    return !event.defaultPrevented;\n  }\n\n  // Fire given event\n  fire(event, data, options) {\n    this.dispatch(event, data, options);\n    return this;\n  }\n  getEventHolder() {\n    return this;\n  }\n  getEventTarget() {\n    return this;\n  }\n\n  // Unbind event from listener\n  off(event, listener, options) {\n    off(this, event, listener, options);\n    return this;\n  }\n\n  // Bind given event to listener\n  on(event, listener, binding, options) {\n    on(this, event, listener, binding, options);\n    return this;\n  }\n  removeEventListener() {}\n}\nregister(EventTarget, 'EventTarget');\n\nfunction noop() {}\n\n// Default animation values\nconst timeline = {\n  duration: 400,\n  ease: '>',\n  delay: 0\n};\n\n// Default attribute values\nconst attrs = {\n  // fill and stroke\n  'fill-opacity': 1,\n  'stroke-opacity': 1,\n  'stroke-width': 0,\n  'stroke-linejoin': 'miter',\n  'stroke-linecap': 'butt',\n  fill: '#000000',\n  stroke: '#000000',\n  opacity: 1,\n  // position\n  x: 0,\n  y: 0,\n  cx: 0,\n  cy: 0,\n  // size\n  width: 0,\n  height: 0,\n  // radius\n  r: 0,\n  rx: 0,\n  ry: 0,\n  // gradient\n  offset: 0,\n  'stop-opacity': 1,\n  'stop-color': '#000000',\n  // text\n  'text-anchor': 'start'\n};\n\nvar defaults = {\n  __proto__: null,\n  attrs: attrs,\n  noop: noop,\n  timeline: timeline\n};\n\nclass SVGArray extends Array {\n  constructor(...args) {\n    super(...args);\n    this.init(...args);\n  }\n  clone() {\n    return new this.constructor(this);\n  }\n  init(arr) {\n    // This catches the case, that native map tries to create an array with new Array(1)\n    if (typeof arr === 'number') return this;\n    this.length = 0;\n    this.push(...this.parse(arr));\n    return this;\n  }\n\n  // Parse whitespace separated string\n  parse(array = []) {\n    // If already is an array, no need to parse it\n    if (array instanceof Array) return array;\n    return array.trim().split(delimiter).map(parseFloat);\n  }\n  toArray() {\n    return Array.prototype.concat.apply([], this);\n  }\n  toSet() {\n    return new Set(this);\n  }\n  toString() {\n    return this.join(' ');\n  }\n\n  // Flattens the array if needed\n  valueOf() {\n    const ret = [];\n    ret.push(...this);\n    return ret;\n  }\n}\n\n// Module for unit conversions\nclass SVGNumber {\n  // Initialize\n  constructor(...args) {\n    this.init(...args);\n  }\n  convert(unit) {\n    return new SVGNumber(this.value, unit);\n  }\n\n  // Divide number\n  divide(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this / number, this.unit || number.unit);\n  }\n  init(value, unit) {\n    unit = Array.isArray(value) ? value[1] : unit;\n    value = Array.isArray(value) ? value[0] : value;\n\n    // initialize defaults\n    this.value = 0;\n    this.unit = unit || '';\n\n    // parse value\n    if (typeof value === 'number') {\n      // ensure a valid numeric value\n      this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e38 : +3.4e38 : value;\n    } else if (typeof value === 'string') {\n      unit = value.match(numberAndUnit);\n      if (unit) {\n        // make value numeric\n        this.value = parseFloat(unit[1]);\n\n        // normalize\n        if (unit[5] === '%') {\n          this.value /= 100;\n        } else if (unit[5] === 's') {\n          this.value *= 1000;\n        }\n\n        // store unit\n        this.unit = unit[5];\n      }\n    } else {\n      if (value instanceof SVGNumber) {\n        this.value = value.valueOf();\n        this.unit = value.unit;\n      }\n    }\n    return this;\n  }\n\n  // Subtract number\n  minus(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this - number, this.unit || number.unit);\n  }\n\n  // Add number\n  plus(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this + number, this.unit || number.unit);\n  }\n\n  // Multiply number\n  times(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this * number, this.unit || number.unit);\n  }\n  toArray() {\n    return [this.value, this.unit];\n  }\n  toJSON() {\n    return this.toString();\n  }\n  toString() {\n    return (this.unit === '%' ? ~~(this.value * 1e8) / 1e6 : this.unit === 's' ? this.value / 1e3 : this.value) + this.unit;\n  }\n  valueOf() {\n    return this.value;\n  }\n}\n\nconst colorAttributes = new Set(['fill', 'stroke', 'color', 'bgcolor', 'stop-color', 'flood-color', 'lighting-color']);\nconst hooks = [];\nfunction registerAttrHook(fn) {\n  hooks.push(fn);\n}\n\n// Set svg element attribute\nfunction attr(attr, val, ns) {\n  // act as full getter\n  if (attr == null) {\n    // get an object of attributes\n    attr = {};\n    val = this.node.attributes;\n    for (const node of val) {\n      attr[node.nodeName] = isNumber.test(node.nodeValue) ? parseFloat(node.nodeValue) : node.nodeValue;\n    }\n    return attr;\n  } else if (attr instanceof Array) {\n    // loop through array and get all values\n    return attr.reduce((last, curr) => {\n      last[curr] = this.attr(curr);\n      return last;\n    }, {});\n  } else if (typeof attr === 'object' && attr.constructor === Object) {\n    // apply every attribute individually if an object is passed\n    for (val in attr) this.attr(val, attr[val]);\n  } else if (val === null) {\n    // remove value\n    this.node.removeAttribute(attr);\n  } else if (val == null) {\n    // act as a getter if the first and only argument is not an object\n    val = this.node.getAttribute(attr);\n    return val == null ? attrs[attr] : isNumber.test(val) ? parseFloat(val) : val;\n  } else {\n    // Loop through hooks and execute them to convert value\n    val = hooks.reduce((_val, hook) => {\n      return hook(attr, _val, this);\n    }, val);\n\n    // ensure correct numeric values (also accepts NaN and Infinity)\n    if (typeof val === 'number') {\n      val = new SVGNumber(val);\n    } else if (colorAttributes.has(attr) && Color.isColor(val)) {\n      // ensure full hex color\n      val = new Color(val);\n    } else if (val.constructor === Array) {\n      // Check for plain arrays and parse array values\n      val = new SVGArray(val);\n    }\n\n    // if the passed attribute is leading...\n    if (attr === 'leading') {\n      // ... call the leading method instead\n      if (this.leading) {\n        this.leading(val);\n      }\n    } else {\n      // set given attribute on node\n      typeof ns === 'string' ? this.node.setAttributeNS(ns, attr, val.toString()) : this.node.setAttribute(attr, val.toString());\n    }\n\n    // rebuild if required\n    if (this.rebuild && (attr === 'font-size' || attr === 'x')) {\n      this.rebuild();\n    }\n  }\n  return this;\n}\n\nclass Dom extends EventTarget {\n  constructor(node, attrs) {\n    super();\n    this.node = node;\n    this.type = node.nodeName;\n    if (attrs && node !== attrs) {\n      this.attr(attrs);\n    }\n  }\n\n  // Add given element at a position\n  add(element, i) {\n    element = makeInstance(element);\n\n    // If non-root svg nodes are added we have to remove their namespaces\n    if (element.removeNamespace && this.node instanceof globals.window.SVGElement) {\n      element.removeNamespace();\n    }\n    if (i == null) {\n      this.node.appendChild(element.node);\n    } else if (element.node !== this.node.childNodes[i]) {\n      this.node.insertBefore(element.node, this.node.childNodes[i]);\n    }\n    return this;\n  }\n\n  // Add element to given container and return self\n  addTo(parent, i) {\n    return makeInstance(parent).put(this, i);\n  }\n\n  // Returns all child elements\n  children() {\n    return new List(map(this.node.children, function (node) {\n      return adopt(node);\n    }));\n  }\n\n  // Remove all elements in this container\n  clear() {\n    // remove children\n    while (this.node.hasChildNodes()) {\n      this.node.removeChild(this.node.lastChild);\n    }\n    return this;\n  }\n\n  // Clone element\n  clone(deep = true, assignNewIds = true) {\n    // write dom data to the dom so the clone can pickup the data\n    this.writeDataToDom();\n\n    // clone element\n    let nodeClone = this.node.cloneNode(deep);\n    if (assignNewIds) {\n      // assign new id\n      nodeClone = assignNewId(nodeClone);\n    }\n    return new this.constructor(nodeClone);\n  }\n\n  // Iterates over all children and invokes a given block\n  each(block, deep) {\n    const children = this.children();\n    let i, il;\n    for (i = 0, il = children.length; i < il; i++) {\n      block.apply(children[i], [i, children]);\n      if (deep) {\n        children[i].each(block, deep);\n      }\n    }\n    return this;\n  }\n  element(nodeName, attrs) {\n    return this.put(new Dom(create(nodeName), attrs));\n  }\n\n  // Get first child\n  first() {\n    return adopt(this.node.firstChild);\n  }\n\n  // Get a element at the given index\n  get(i) {\n    return adopt(this.node.childNodes[i]);\n  }\n  getEventHolder() {\n    return this.node;\n  }\n  getEventTarget() {\n    return this.node;\n  }\n\n  // Checks if the given element is a child\n  has(element) {\n    return this.index(element) >= 0;\n  }\n  html(htmlOrFn, outerHTML) {\n    return this.xml(htmlOrFn, outerHTML, html);\n  }\n\n  // Get / set id\n  id(id) {\n    // generate new id if no id set\n    if (typeof id === 'undefined' && !this.node.id) {\n      this.node.id = eid(this.type);\n    }\n\n    // don't set directly with this.node.id to make `null` work correctly\n    return this.attr('id', id);\n  }\n\n  // Gets index of given element\n  index(element) {\n    return [].slice.call(this.node.childNodes).indexOf(element.node);\n  }\n\n  // Get the last child\n  last() {\n    return adopt(this.node.lastChild);\n  }\n\n  // matches the element vs a css selector\n  matches(selector) {\n    const el = this.node;\n    const matcher = el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector || null;\n    return matcher && matcher.call(el, selector);\n  }\n\n  // Returns the parent element instance\n  parent(type) {\n    let parent = this;\n\n    // check for parent\n    if (!parent.node.parentNode) return null;\n\n    // get parent element\n    parent = adopt(parent.node.parentNode);\n    if (!type) return parent;\n\n    // loop through ancestors if type is given\n    do {\n      if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent;\n    } while (parent = adopt(parent.node.parentNode));\n    return parent;\n  }\n\n  // Basically does the same as `add()` but returns the added element instead\n  put(element, i) {\n    element = makeInstance(element);\n    this.add(element, i);\n    return element;\n  }\n\n  // Add element to given container and return container\n  putIn(parent, i) {\n    return makeInstance(parent).add(this, i);\n  }\n\n  // Remove element\n  remove() {\n    if (this.parent()) {\n      this.parent().removeElement(this);\n    }\n    return this;\n  }\n\n  // Remove a given child\n  removeElement(element) {\n    this.node.removeChild(element.node);\n    return this;\n  }\n\n  // Replace this with element\n  replace(element) {\n    element = makeInstance(element);\n    if (this.node.parentNode) {\n      this.node.parentNode.replaceChild(element.node, this.node);\n    }\n    return element;\n  }\n  round(precision = 2, map = null) {\n    const factor = 10 ** precision;\n    const attrs = this.attr(map);\n    for (const i in attrs) {\n      if (typeof attrs[i] === 'number') {\n        attrs[i] = Math.round(attrs[i] * factor) / factor;\n      }\n    }\n    this.attr(attrs);\n    return this;\n  }\n\n  // Import / Export raw svg\n  svg(svgOrFn, outerSVG) {\n    return this.xml(svgOrFn, outerSVG, svg);\n  }\n\n  // Return id on string conversion\n  toString() {\n    return this.id();\n  }\n  words(text) {\n    // This is faster than removing all children and adding a new one\n    this.node.textContent = text;\n    return this;\n  }\n  wrap(node) {\n    const parent = this.parent();\n    if (!parent) {\n      return this.addTo(node);\n    }\n    const position = parent.index(this);\n    return parent.put(node, position).put(this);\n  }\n\n  // write svgjs data to the dom\n  writeDataToDom() {\n    // dump variables recursively\n    this.each(function () {\n      this.writeDataToDom();\n    });\n    return this;\n  }\n\n  // Import / Export raw svg\n  xml(xmlOrFn, outerXML, ns) {\n    if (typeof xmlOrFn === 'boolean') {\n      ns = outerXML;\n      outerXML = xmlOrFn;\n      xmlOrFn = null;\n    }\n\n    // act as getter if no svg string is given\n    if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n      // The default for exports is, that the outerNode is included\n      outerXML = outerXML == null ? true : outerXML;\n\n      // write svgjs data to the dom\n      this.writeDataToDom();\n      let current = this;\n\n      // An export modifier was passed\n      if (xmlOrFn != null) {\n        current = adopt(current.node.cloneNode(true));\n\n        // If the user wants outerHTML we need to process this node, too\n        if (outerXML) {\n          const result = xmlOrFn(current);\n          current = result || current;\n\n          // The user does not want this node? Well, then he gets nothing\n          if (result === false) return '';\n        }\n\n        // Deep loop through all children and apply modifier\n        current.each(function () {\n          const result = xmlOrFn(this);\n          const _this = result || this;\n\n          // If modifier returns false, discard node\n          if (result === false) {\n            this.remove();\n\n            // If modifier returns new node, use it\n          } else if (result && this !== _this) {\n            this.replace(_this);\n          }\n        }, true);\n      }\n\n      // Return outer or inner content\n      return outerXML ? current.node.outerHTML : current.node.innerHTML;\n    }\n\n    // Act as setter if we got a string\n\n    // The default for import is, that the current node is not replaced\n    outerXML = outerXML == null ? false : outerXML;\n\n    // Create temporary holder\n    const well = create('wrapper', ns);\n    const fragment = globals.document.createDocumentFragment();\n\n    // Dump raw svg\n    well.innerHTML = xmlOrFn;\n\n    // Transplant nodes into the fragment\n    for (let len = well.children.length; len--;) {\n      fragment.appendChild(well.firstElementChild);\n    }\n    const parent = this.parent();\n\n    // Add the whole fragment at once\n    return outerXML ? this.replace(fragment) && parent : this.add(fragment);\n  }\n}\nextend(Dom, {\n  attr,\n  find,\n  findOne\n});\nregister(Dom, 'Dom');\n\nclass Element extends Dom {\n  constructor(node, attrs) {\n    super(node, attrs);\n\n    // initialize data object\n    this.dom = {};\n\n    // create circular reference\n    this.node.instance = this;\n    if (node.hasAttribute('data-svgjs') || node.hasAttribute('svgjs:data')) {\n      // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n      this.setData(JSON.parse(node.getAttribute('data-svgjs')) ?? JSON.parse(node.getAttribute('svgjs:data')) ?? {});\n    }\n  }\n\n  // Move element by its center\n  center(x, y) {\n    return this.cx(x).cy(y);\n  }\n\n  // Move by center over x-axis\n  cx(x) {\n    return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n  }\n\n  // Move by center over y-axis\n  cy(y) {\n    return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n  }\n\n  // Get defs\n  defs() {\n    const root = this.root();\n    return root && root.defs();\n  }\n\n  // Relative move over x and y axes\n  dmove(x, y) {\n    return this.dx(x).dy(y);\n  }\n\n  // Relative move over x axis\n  dx(x = 0) {\n    return this.x(new SVGNumber(x).plus(this.x()));\n  }\n\n  // Relative move over y axis\n  dy(y = 0) {\n    return this.y(new SVGNumber(y).plus(this.y()));\n  }\n  getEventHolder() {\n    return this;\n  }\n\n  // Set height of element\n  height(height) {\n    return this.attr('height', height);\n  }\n\n  // Move element to given x and y values\n  move(x, y) {\n    return this.x(x).y(y);\n  }\n\n  // return array of all ancestors of given type up to the root svg\n  parents(until = this.root()) {\n    const isSelector = typeof until === 'string';\n    if (!isSelector) {\n      until = makeInstance(until);\n    }\n    const parents = new List();\n    let parent = this;\n    while ((parent = parent.parent()) && parent.node !== globals.document && parent.nodeName !== '#document-fragment') {\n      parents.push(parent);\n      if (!isSelector && parent.node === until.node) {\n        break;\n      }\n      if (isSelector && parent.matches(until)) {\n        break;\n      }\n      if (parent.node === this.root().node) {\n        // We worked our way to the root and didn't match `until`\n        return null;\n      }\n    }\n    return parents;\n  }\n\n  // Get referenced element form attribute value\n  reference(attr) {\n    attr = this.attr(attr);\n    if (!attr) return null;\n    const m = (attr + '').match(reference);\n    return m ? makeInstance(m[1]) : null;\n  }\n\n  // Get parent document\n  root() {\n    const p = this.parent(getClass(root));\n    return p && p.root();\n  }\n\n  // set given data to the elements data property\n  setData(o) {\n    this.dom = o;\n    return this;\n  }\n\n  // Set element size to given width and height\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height));\n  }\n\n  // Set width of element\n  width(width) {\n    return this.attr('width', width);\n  }\n\n  // write svgjs data to the dom\n  writeDataToDom() {\n    writeDataToDom(this, this.dom);\n    return super.writeDataToDom();\n  }\n\n  // Move over x-axis\n  x(x) {\n    return this.attr('x', x);\n  }\n\n  // Move over y-axis\n  y(y) {\n    return this.attr('y', y);\n  }\n}\nextend(Element, {\n  bbox,\n  rbox,\n  inside,\n  point,\n  ctm,\n  screenCTM\n});\nregister(Element, 'Element');\n\n// Define list of available attributes for stroke and fill\nconst sugar = {\n  stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\n  fill: ['color', 'opacity', 'rule'],\n  prefix: function (t, a) {\n    return a === 'color' ? t : t + '-' + a;\n  }\n}\n\n// Add sugar for fill and stroke\n;\n['fill', 'stroke'].forEach(function (m) {\n  const extension = {};\n  let i;\n  extension[m] = function (o) {\n    if (typeof o === 'undefined') {\n      return this.attr(m);\n    }\n    if (typeof o === 'string' || o instanceof Color || Color.isRgb(o) || o instanceof Element) {\n      this.attr(m, o);\n    } else {\n      // set all attributes from sugar.fill and sugar.stroke list\n      for (i = sugar[m].length - 1; i >= 0; i--) {\n        if (o[sugar[m][i]] != null) {\n          this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n        }\n      }\n    }\n    return this;\n  };\n  registerMethods(['Element', 'Runner'], extension);\n});\nregisterMethods(['Element', 'Runner'], {\n  // Let the user set the matrix directly\n  matrix: function (mat, b, c, d, e, f) {\n    // Act as a getter\n    if (mat == null) {\n      return new Matrix(this);\n    }\n\n    // Act as a setter, the user can pass a matrix or a set of numbers\n    return this.attr('transform', new Matrix(mat, b, c, d, e, f));\n  },\n  // Map rotation to transform\n  rotate: function (angle, cx, cy) {\n    return this.transform({\n      rotate: angle,\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map skew to transform\n  skew: function (x, y, cx, cy) {\n    return arguments.length === 1 || arguments.length === 3 ? this.transform({\n      skew: x,\n      ox: y,\n      oy: cx\n    }, true) : this.transform({\n      skew: [x, y],\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  shear: function (lam, cx, cy) {\n    return this.transform({\n      shear: lam,\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map scale to transform\n  scale: function (x, y, cx, cy) {\n    return arguments.length === 1 || arguments.length === 3 ? this.transform({\n      scale: x,\n      ox: y,\n      oy: cx\n    }, true) : this.transform({\n      scale: [x, y],\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map translate to transform\n  translate: function (x, y) {\n    return this.transform({\n      translate: [x, y]\n    }, true);\n  },\n  // Map relative translations to transform\n  relative: function (x, y) {\n    return this.transform({\n      relative: [x, y]\n    }, true);\n  },\n  // Map flip to transform\n  flip: function (direction = 'both', origin = 'center') {\n    if ('xybothtrue'.indexOf(direction) === -1) {\n      origin = direction;\n      direction = 'both';\n    }\n    return this.transform({\n      flip: direction,\n      origin: origin\n    }, true);\n  },\n  // Opacity\n  opacity: function (value) {\n    return this.attr('opacity', value);\n  }\n});\nregisterMethods('radius', {\n  // Add x and y radius\n  radius: function (x, y = x) {\n    const type = (this._element || this).type;\n    return type === 'radialGradient' ? this.attr('r', new SVGNumber(x)) : this.rx(x).ry(y);\n  }\n});\nregisterMethods('Path', {\n  // Get path length\n  length: function () {\n    return this.node.getTotalLength();\n  },\n  // Get point at length\n  pointAt: function (length) {\n    return new Point(this.node.getPointAtLength(length));\n  }\n});\nregisterMethods(['Element', 'Runner'], {\n  // Set font\n  font: function (a, v) {\n    if (typeof a === 'object') {\n      for (v in a) this.font(v, a[v]);\n      return this;\n    }\n    return a === 'leading' ? this.leading(v) : a === 'anchor' ? this.attr('text-anchor', v) : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style' ? this.attr('font-' + a, v) : this.attr(a, v);\n  }\n});\n\n// Add events to elements\nconst methods = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'mouseenter', 'mouseleave', 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel', 'contextmenu', 'wheel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel'].reduce(function (last, event) {\n  // add event to Element\n  const fn = function (f) {\n    if (f === null) {\n      this.off(event);\n    } else {\n      this.on(event, f);\n    }\n    return this;\n  };\n  last[event] = fn;\n  return last;\n}, {});\nregisterMethods('Element', methods);\n\n// Reset all transformations\nfunction untransform() {\n  return this.attr('transform', null);\n}\n\n// merge the whole transformation chain into one matrix and returns it\nfunction matrixify() {\n  const matrix = (this.attr('transform') || ''\n  // split transformations\n  ).split(transforms).slice(0, -1).map(function (str) {\n    // generate key => value pairs\n    const kv = str.trim().split('(');\n    return [kv[0], kv[1].split(delimiter).map(function (str) {\n      return parseFloat(str);\n    })];\n  }).reverse()\n  // merge every transformation into one matrix\n  .reduce(function (matrix, transform) {\n    if (transform[0] === 'matrix') {\n      return matrix.lmultiply(Matrix.fromArray(transform[1]));\n    }\n    return matrix[transform[0]].apply(matrix, transform[1]);\n  }, new Matrix());\n  return matrix;\n}\n\n// add an element to another parent without changing the visual representation on the screen\nfunction toParent(parent, i) {\n  if (this === parent) return this;\n  if (isDescriptive(this.node)) return this.addTo(parent, i);\n  const ctm = this.screenCTM();\n  const pCtm = parent.screenCTM().inverse();\n  this.addTo(parent, i).untransform().transform(pCtm.multiply(ctm));\n  return this;\n}\n\n// same as above with parent equals root-svg\nfunction toRoot(i) {\n  return this.toParent(this.root(), i);\n}\n\n// Add transformations\nfunction transform(o, relative) {\n  // Act as a getter if no object was passed\n  if (o == null || typeof o === 'string') {\n    const decomposed = new Matrix(this).decompose();\n    return o == null ? decomposed : decomposed[o];\n  }\n  if (!Matrix.isMatrixLike(o)) {\n    // Set the origin according to the defined transform\n    o = {\n      ...o,\n      origin: getOrigin(o, this)\n    };\n  }\n\n  // The user can pass a boolean, an Element or an Matrix or nothing\n  const cleanRelative = relative === true ? this : relative || false;\n  const result = new Matrix(cleanRelative).transform(o);\n  return this.attr('transform', result);\n}\nregisterMethods('Element', {\n  untransform,\n  matrixify,\n  toParent,\n  toRoot,\n  transform\n});\n\nclass Container extends Element {\n  flatten() {\n    this.each(function () {\n      if (this instanceof Container) {\n        return this.flatten().ungroup();\n      }\n    });\n    return this;\n  }\n  ungroup(parent = this.parent(), index = parent.index(this)) {\n    // when parent != this, we want append all elements to the end\n    index = index === -1 ? parent.children().length : index;\n    this.each(function (i, children) {\n      // reverse each\n      return children[children.length - i - 1].toParent(parent, index);\n    });\n    return this.remove();\n  }\n}\nregister(Container, 'Container');\n\nclass Defs extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('defs', node), attrs);\n  }\n  flatten() {\n    return this;\n  }\n  ungroup() {\n    return this;\n  }\n}\nregister(Defs, 'Defs');\n\nclass Shape extends Element {}\nregister(Shape, 'Shape');\n\n// Radius x value\nfunction rx(rx) {\n  return this.attr('rx', rx);\n}\n\n// Radius y value\nfunction ry(ry) {\n  return this.attr('ry', ry);\n}\n\n// Move over x-axis\nfunction x$3(x) {\n  return x == null ? this.cx() - this.rx() : this.cx(x + this.rx());\n}\n\n// Move over y-axis\nfunction y$3(y) {\n  return y == null ? this.cy() - this.ry() : this.cy(y + this.ry());\n}\n\n// Move by center over x-axis\nfunction cx$1(x) {\n  return this.attr('cx', x);\n}\n\n// Move by center over y-axis\nfunction cy$1(y) {\n  return this.attr('cy', y);\n}\n\n// Set width of element\nfunction width$2(width) {\n  return width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2));\n}\n\n// Set height of element\nfunction height$2(height) {\n  return height == null ? this.ry() * 2 : this.ry(new SVGNumber(height).divide(2));\n}\n\nvar circled = {\n  __proto__: null,\n  cx: cx$1,\n  cy: cy$1,\n  height: height$2,\n  rx: rx,\n  ry: ry,\n  width: width$2,\n  x: x$3,\n  y: y$3\n};\n\nclass Ellipse extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('ellipse', node), attrs);\n  }\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2));\n  }\n}\nextend(Ellipse, circled);\nregisterMethods('Container', {\n  // Create an ellipse\n  ellipse: wrapWithAttrCheck(function (width = 0, height = width) {\n    return this.put(new Ellipse()).size(width, height).move(0, 0);\n  })\n});\nregister(Ellipse, 'Ellipse');\n\nclass Fragment extends Dom {\n  constructor(node = globals.document.createDocumentFragment()) {\n    super(node);\n  }\n\n  // Import / Export raw xml\n  xml(xmlOrFn, outerXML, ns) {\n    if (typeof xmlOrFn === 'boolean') {\n      ns = outerXML;\n      outerXML = xmlOrFn;\n      xmlOrFn = null;\n    }\n\n    // because this is a fragment we have to put all elements into a wrapper first\n    // before we can get the innerXML from it\n    if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n      const wrapper = new Dom(create('wrapper', ns));\n      wrapper.add(this.node.cloneNode(true));\n      return wrapper.xml(false, ns);\n    }\n\n    // Act as setter if we got a string\n    return super.xml(xmlOrFn, false, ns);\n  }\n}\nregister(Fragment, 'Fragment');\n\nfunction from(x, y) {\n  return (this._element || this).type === 'radialGradient' ? this.attr({\n    fx: new SVGNumber(x),\n    fy: new SVGNumber(y)\n  }) : this.attr({\n    x1: new SVGNumber(x),\n    y1: new SVGNumber(y)\n  });\n}\nfunction to(x, y) {\n  return (this._element || this).type === 'radialGradient' ? this.attr({\n    cx: new SVGNumber(x),\n    cy: new SVGNumber(y)\n  }) : this.attr({\n    x2: new SVGNumber(x),\n    y2: new SVGNumber(y)\n  });\n}\n\nvar gradiented = {\n  __proto__: null,\n  from: from,\n  to: to\n};\n\nclass Gradient extends Container {\n  constructor(type, attrs) {\n    super(nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type), attrs);\n  }\n\n  // custom attr to handle transform\n  attr(a, b, c) {\n    if (a === 'transform') a = 'gradientTransform';\n    return super.attr(a, b, c);\n  }\n  bbox() {\n    return new Box();\n  }\n  targets() {\n    return baseFind('svg [fill*=' + this.id() + ']');\n  }\n\n  // Alias string conversion to fill\n  toString() {\n    return this.url();\n  }\n\n  // Update gradient\n  update(block) {\n    // remove all stops\n    this.clear();\n\n    // invoke passed block\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n    return this;\n  }\n\n  // Return the fill id\n  url() {\n    return 'url(#' + this.id() + ')';\n  }\n}\nextend(Gradient, gradiented);\nregisterMethods({\n  Container: {\n    // Create gradient element in defs\n    gradient(...args) {\n      return this.defs().gradient(...args);\n    }\n  },\n  // define gradient\n  Defs: {\n    gradient: wrapWithAttrCheck(function (type, block) {\n      return this.put(new Gradient(type)).update(block);\n    })\n  }\n});\nregister(Gradient, 'Gradient');\n\nclass Pattern extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('pattern', node), attrs);\n  }\n\n  // custom attr to handle transform\n  attr(a, b, c) {\n    if (a === 'transform') a = 'patternTransform';\n    return super.attr(a, b, c);\n  }\n  bbox() {\n    return new Box();\n  }\n  targets() {\n    return baseFind('svg [fill*=' + this.id() + ']');\n  }\n\n  // Alias string conversion to fill\n  toString() {\n    return this.url();\n  }\n\n  // Update pattern by rebuilding\n  update(block) {\n    // remove content\n    this.clear();\n\n    // invoke passed block\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n    return this;\n  }\n\n  // Return the fill id\n  url() {\n    return 'url(#' + this.id() + ')';\n  }\n}\nregisterMethods({\n  Container: {\n    // Create pattern element in defs\n    pattern(...args) {\n      return this.defs().pattern(...args);\n    }\n  },\n  Defs: {\n    pattern: wrapWithAttrCheck(function (width, height, block) {\n      return this.put(new Pattern()).update(block).attr({\n        x: 0,\n        y: 0,\n        width: width,\n        height: height,\n        patternUnits: 'userSpaceOnUse'\n      });\n    })\n  }\n});\nregister(Pattern, 'Pattern');\n\nclass Image extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('image', node), attrs);\n  }\n\n  // (re)load image\n  load(url, callback) {\n    if (!url) return this;\n    const img = new globals.window.Image();\n    on(img, 'load', function (e) {\n      const p = this.parent(Pattern);\n\n      // ensure image size\n      if (this.width() === 0 && this.height() === 0) {\n        this.size(img.width, img.height);\n      }\n      if (p instanceof Pattern) {\n        // ensure pattern size if not set\n        if (p.width() === 0 && p.height() === 0) {\n          p.size(this.width(), this.height());\n        }\n      }\n      if (typeof callback === 'function') {\n        callback.call(this, e);\n      }\n    }, this);\n    on(img, 'load error', function () {\n      // dont forget to unbind memory leaking events\n      off(img);\n    });\n    return this.attr('href', img.src = url, xlink);\n  }\n}\nregisterAttrHook(function (attr, val, _this) {\n  // convert image fill and stroke to patterns\n  if (attr === 'fill' || attr === 'stroke') {\n    if (isImage.test(val)) {\n      val = _this.root().defs().image(val);\n    }\n  }\n  if (val instanceof Image) {\n    val = _this.root().defs().pattern(0, 0, pattern => {\n      pattern.add(val);\n    });\n  }\n  return val;\n});\nregisterMethods({\n  Container: {\n    // create image element, load image and set its size\n    image: wrapWithAttrCheck(function (source, callback) {\n      return this.put(new Image()).size(0, 0).load(source, callback);\n    })\n  }\n});\nregister(Image, 'Image');\n\nclass PointArray extends SVGArray {\n  // Get bounding box of points\n  bbox() {\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    let minX = Infinity;\n    let minY = Infinity;\n    this.forEach(function (el) {\n      maxX = Math.max(el[0], maxX);\n      maxY = Math.max(el[1], maxY);\n      minX = Math.min(el[0], minX);\n      minY = Math.min(el[1], minY);\n    });\n    return new Box(minX, minY, maxX - minX, maxY - minY);\n  }\n\n  // Move point string\n  move(x, y) {\n    const box = this.bbox();\n\n    // get relative offset\n    x -= box.x;\n    y -= box.y;\n\n    // move every point\n    if (!isNaN(x) && !isNaN(y)) {\n      for (let i = this.length - 1; i >= 0; i--) {\n        this[i] = [this[i][0] + x, this[i][1] + y];\n      }\n    }\n    return this;\n  }\n\n  // Parse point string and flat array\n  parse(array = [0, 0]) {\n    const points = [];\n\n    // if it is an array, we flatten it and therefore clone it to 1 depths\n    if (array instanceof Array) {\n      array = Array.prototype.concat.apply([], array);\n    } else {\n      // Else, it is considered as a string\n      // parse points\n      array = array.trim().split(delimiter).map(parseFloat);\n    }\n\n    // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\n    // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\n    if (array.length % 2 !== 0) array.pop();\n\n    // wrap points in two-tuples\n    for (let i = 0, len = array.length; i < len; i = i + 2) {\n      points.push([array[i], array[i + 1]]);\n    }\n    return points;\n  }\n\n  // Resize poly string\n  size(width, height) {\n    let i;\n    const box = this.bbox();\n\n    // recalculate position of all points according to new size\n    for (i = this.length - 1; i >= 0; i--) {\n      if (box.width) this[i][0] = (this[i][0] - box.x) * width / box.width + box.x;\n      if (box.height) this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n    }\n    return this;\n  }\n\n  // Convert array to line object\n  toLine() {\n    return {\n      x1: this[0][0],\n      y1: this[0][1],\n      x2: this[1][0],\n      y2: this[1][1]\n    };\n  }\n\n  // Convert array to string\n  toString() {\n    const array = [];\n    // convert to a poly point string\n    for (let i = 0, il = this.length; i < il; i++) {\n      array.push(this[i].join(','));\n    }\n    return array.join(' ');\n  }\n  transform(m) {\n    return this.clone().transformO(m);\n  }\n\n  // transform points with matrix (similar to Point.transform)\n  transformO(m) {\n    if (!Matrix.isMatrixLike(m)) {\n      m = new Matrix(m);\n    }\n    for (let i = this.length; i--;) {\n      // Perform the matrix multiplication\n      const [x, y] = this[i];\n      this[i][0] = m.a * x + m.c * y + m.e;\n      this[i][1] = m.b * x + m.d * y + m.f;\n    }\n    return this;\n  }\n}\n\nconst MorphArray = PointArray;\n\n// Move by left top corner over x-axis\nfunction x$2(x) {\n  return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n}\n\n// Move by left top corner over y-axis\nfunction y$2(y) {\n  return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n}\n\n// Set width of element\nfunction width$1(width) {\n  const b = this.bbox();\n  return width == null ? b.width : this.size(width, b.height);\n}\n\n// Set height of element\nfunction height$1(height) {\n  const b = this.bbox();\n  return height == null ? b.height : this.size(b.width, height);\n}\n\nvar pointed = {\n  __proto__: null,\n  MorphArray: MorphArray,\n  height: height$1,\n  width: width$1,\n  x: x$2,\n  y: y$2\n};\n\nclass Line extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('line', node), attrs);\n  }\n\n  // Get array\n  array() {\n    return new PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]);\n  }\n\n  // Move by left top corner\n  move(x, y) {\n    return this.attr(this.array().move(x, y).toLine());\n  }\n\n  // Overwrite native plot() method\n  plot(x1, y1, x2, y2) {\n    if (x1 == null) {\n      return this.array();\n    } else if (typeof y1 !== 'undefined') {\n      x1 = {\n        x1,\n        y1,\n        x2,\n        y2\n      };\n    } else {\n      x1 = new PointArray(x1).toLine();\n    }\n    return this.attr(x1);\n  }\n\n  // Set element size to given width and height\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.attr(this.array().size(p.width, p.height).toLine());\n  }\n}\nextend(Line, pointed);\nregisterMethods({\n  Container: {\n    // Create a line element\n    line: wrapWithAttrCheck(function (...args) {\n      // make sure plot is called as a setter\n      // x1 is not necessarily a number, it can also be an array, a string and a PointArray\n      return Line.prototype.plot.apply(this.put(new Line()), args[0] != null ? args : [0, 0, 0, 0]);\n    })\n  }\n});\nregister(Line, 'Line');\n\nclass Marker extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('marker', node), attrs);\n  }\n\n  // Set height of element\n  height(height) {\n    return this.attr('markerHeight', height);\n  }\n  orient(orient) {\n    return this.attr('orient', orient);\n  }\n\n  // Set marker refX and refY\n  ref(x, y) {\n    return this.attr('refX', x).attr('refY', y);\n  }\n\n  // Return the fill id\n  toString() {\n    return 'url(#' + this.id() + ')';\n  }\n\n  // Update marker\n  update(block) {\n    // remove all content\n    this.clear();\n\n    // invoke passed block\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n    return this;\n  }\n\n  // Set width of element\n  width(width) {\n    return this.attr('markerWidth', width);\n  }\n}\nregisterMethods({\n  Container: {\n    marker(...args) {\n      // Create marker element in defs\n      return this.defs().marker(...args);\n    }\n  },\n  Defs: {\n    // Create marker\n    marker: wrapWithAttrCheck(function (width, height, block) {\n      // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\n      return this.put(new Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block);\n    })\n  },\n  marker: {\n    // Create and attach markers\n    marker(marker, width, height, block) {\n      let attr = ['marker'];\n\n      // Build attribute name\n      if (marker !== 'all') attr.push(marker);\n      attr = attr.join('-');\n\n      // Set marker attribute\n      marker = arguments[1] instanceof Marker ? arguments[1] : this.defs().marker(width, height, block);\n      return this.attr(attr, marker);\n    }\n  }\n});\nregister(Marker, 'Marker');\n\n/***\nBase Class\n==========\nThe base stepper class that will be\n***/\n\nfunction makeSetterGetter(k, f) {\n  return function (v) {\n    if (v == null) return this[k];\n    this[k] = v;\n    if (f) f.call(this);\n    return this;\n  };\n}\nconst easing = {\n  '-': function (pos) {\n    return pos;\n  },\n  '<>': function (pos) {\n    return -Math.cos(pos * Math.PI) / 2 + 0.5;\n  },\n  '>': function (pos) {\n    return Math.sin(pos * Math.PI / 2);\n  },\n  '<': function (pos) {\n    return -Math.cos(pos * Math.PI / 2) + 1;\n  },\n  bezier: function (x1, y1, x2, y2) {\n    // see https://www.w3.org/TR/css-easing-1/#cubic-bezier-algo\n    return function (t) {\n      if (t < 0) {\n        if (x1 > 0) {\n          return y1 / x1 * t;\n        } else if (x2 > 0) {\n          return y2 / x2 * t;\n        } else {\n          return 0;\n        }\n      } else if (t > 1) {\n        if (x2 < 1) {\n          return (1 - y2) / (1 - x2) * t + (y2 - x2) / (1 - x2);\n        } else if (x1 < 1) {\n          return (1 - y1) / (1 - x1) * t + (y1 - x1) / (1 - x1);\n        } else {\n          return 1;\n        }\n      } else {\n        return 3 * t * (1 - t) ** 2 * y1 + 3 * t ** 2 * (1 - t) * y2 + t ** 3;\n      }\n    };\n  },\n  // see https://www.w3.org/TR/css-easing-1/#step-timing-function-algo\n  steps: function (steps, stepPosition = 'end') {\n    // deal with \"jump-\" prefix\n    stepPosition = stepPosition.split('-').reverse()[0];\n    let jumps = steps;\n    if (stepPosition === 'none') {\n      --jumps;\n    } else if (stepPosition === 'both') {\n      ++jumps;\n    }\n\n    // The beforeFlag is essentially useless\n    return (t, beforeFlag = false) => {\n      // Step is called currentStep in referenced url\n      let step = Math.floor(t * steps);\n      const jumping = t * step % 1 === 0;\n      if (stepPosition === 'start' || stepPosition === 'both') {\n        ++step;\n      }\n      if (beforeFlag && jumping) {\n        --step;\n      }\n      if (t >= 0 && step < 0) {\n        step = 0;\n      }\n      if (t <= 1 && step > jumps) {\n        step = jumps;\n      }\n      return step / jumps;\n    };\n  }\n};\nclass Stepper {\n  done() {\n    return false;\n  }\n}\n\n/***\nEasing Functions\n================\n***/\n\nclass Ease extends Stepper {\n  constructor(fn = timeline.ease) {\n    super();\n    this.ease = easing[fn] || fn;\n  }\n  step(from, to, pos) {\n    if (typeof from !== 'number') {\n      return pos < 1 ? from : to;\n    }\n    return from + (to - from) * this.ease(pos);\n  }\n}\n\n/***\nController Types\n================\n***/\n\nclass Controller extends Stepper {\n  constructor(fn) {\n    super();\n    this.stepper = fn;\n  }\n  done(c) {\n    return c.done;\n  }\n  step(current, target, dt, c) {\n    return this.stepper(current, target, dt, c);\n  }\n}\nfunction recalculate() {\n  // Apply the default parameters\n  const duration = (this._duration || 500) / 1000;\n  const overshoot = this._overshoot || 0;\n\n  // Calculate the PID natural response\n  const eps = 1e-10;\n  const pi = Math.PI;\n  const os = Math.log(overshoot / 100 + eps);\n  const zeta = -os / Math.sqrt(pi * pi + os * os);\n  const wn = 3.9 / (zeta * duration);\n\n  // Calculate the Spring values\n  this.d = 2 * zeta * wn;\n  this.k = wn * wn;\n}\nclass Spring extends Controller {\n  constructor(duration = 500, overshoot = 0) {\n    super();\n    this.duration(duration).overshoot(overshoot);\n  }\n  step(current, target, dt, c) {\n    if (typeof current === 'string') return current;\n    c.done = dt === Infinity;\n    if (dt === Infinity) return target;\n    if (dt === 0) return current;\n    if (dt > 100) dt = 16;\n    dt /= 1000;\n\n    // Get the previous velocity\n    const velocity = c.velocity || 0;\n\n    // Apply the control to get the new position and store it\n    const acceleration = -this.d * velocity - this.k * (current - target);\n    const newPosition = current + velocity * dt + acceleration * dt * dt / 2;\n\n    // Store the velocity\n    c.velocity = velocity + acceleration * dt;\n\n    // Figure out if we have converged, and if so, pass the value\n    c.done = Math.abs(target - newPosition) + Math.abs(velocity) < 0.002;\n    return c.done ? target : newPosition;\n  }\n}\nextend(Spring, {\n  duration: makeSetterGetter('_duration', recalculate),\n  overshoot: makeSetterGetter('_overshoot', recalculate)\n});\nclass PID extends Controller {\n  constructor(p = 0.1, i = 0.01, d = 0, windup = 1000) {\n    super();\n    this.p(p).i(i).d(d).windup(windup);\n  }\n  step(current, target, dt, c) {\n    if (typeof current === 'string') return current;\n    c.done = dt === Infinity;\n    if (dt === Infinity) return target;\n    if (dt === 0) return current;\n    const p = target - current;\n    let i = (c.integral || 0) + p * dt;\n    const d = (p - (c.error || 0)) / dt;\n    const windup = this._windup;\n\n    // antiwindup\n    if (windup !== false) {\n      i = Math.max(-windup, Math.min(i, windup));\n    }\n    c.error = p;\n    c.integral = i;\n    c.done = Math.abs(p) < 0.001;\n    return c.done ? target : current + (this.P * p + this.I * i + this.D * d);\n  }\n}\nextend(PID, {\n  windup: makeSetterGetter('_windup'),\n  p: makeSetterGetter('P'),\n  i: makeSetterGetter('I'),\n  d: makeSetterGetter('D')\n});\n\nconst segmentParameters = {\n  M: 2,\n  L: 2,\n  H: 1,\n  V: 1,\n  C: 6,\n  S: 4,\n  Q: 4,\n  T: 2,\n  A: 7,\n  Z: 0\n};\nconst pathHandlers = {\n  M: function (c, p, p0) {\n    p.x = p0.x = c[0];\n    p.y = p0.y = c[1];\n    return ['M', p.x, p.y];\n  },\n  L: function (c, p) {\n    p.x = c[0];\n    p.y = c[1];\n    return ['L', c[0], c[1]];\n  },\n  H: function (c, p) {\n    p.x = c[0];\n    return ['H', c[0]];\n  },\n  V: function (c, p) {\n    p.y = c[0];\n    return ['V', c[0]];\n  },\n  C: function (c, p) {\n    p.x = c[4];\n    p.y = c[5];\n    return ['C', c[0], c[1], c[2], c[3], c[4], c[5]];\n  },\n  S: function (c, p) {\n    p.x = c[2];\n    p.y = c[3];\n    return ['S', c[0], c[1], c[2], c[3]];\n  },\n  Q: function (c, p) {\n    p.x = c[2];\n    p.y = c[3];\n    return ['Q', c[0], c[1], c[2], c[3]];\n  },\n  T: function (c, p) {\n    p.x = c[0];\n    p.y = c[1];\n    return ['T', c[0], c[1]];\n  },\n  Z: function (c, p, p0) {\n    p.x = p0.x;\n    p.y = p0.y;\n    return ['Z'];\n  },\n  A: function (c, p) {\n    p.x = c[5];\n    p.y = c[6];\n    return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]];\n  }\n};\nconst mlhvqtcsaz = 'mlhvqtcsaz'.split('');\nfor (let i = 0, il = mlhvqtcsaz.length; i < il; ++i) {\n  pathHandlers[mlhvqtcsaz[i]] = function (i) {\n    return function (c, p, p0) {\n      if (i === 'H') c[0] = c[0] + p.x;else if (i === 'V') c[0] = c[0] + p.y;else if (i === 'A') {\n        c[5] = c[5] + p.x;\n        c[6] = c[6] + p.y;\n      } else {\n        for (let j = 0, jl = c.length; j < jl; ++j) {\n          c[j] = c[j] + (j % 2 ? p.y : p.x);\n        }\n      }\n      return pathHandlers[i](c, p, p0);\n    };\n  }(mlhvqtcsaz[i].toUpperCase());\n}\nfunction makeAbsolut(parser) {\n  const command = parser.segment[0];\n  return pathHandlers[command](parser.segment.slice(1), parser.p, parser.p0);\n}\nfunction segmentComplete(parser) {\n  return parser.segment.length && parser.segment.length - 1 === segmentParameters[parser.segment[0].toUpperCase()];\n}\nfunction startNewSegment(parser, token) {\n  parser.inNumber && finalizeNumber(parser, false);\n  const pathLetter = isPathLetter.test(token);\n  if (pathLetter) {\n    parser.segment = [token];\n  } else {\n    const lastCommand = parser.lastCommand;\n    const small = lastCommand.toLowerCase();\n    const isSmall = lastCommand === small;\n    parser.segment = [small === 'm' ? isSmall ? 'l' : 'L' : lastCommand];\n  }\n  parser.inSegment = true;\n  parser.lastCommand = parser.segment[0];\n  return pathLetter;\n}\nfunction finalizeNumber(parser, inNumber) {\n  if (!parser.inNumber) throw new Error('Parser Error');\n  parser.number && parser.segment.push(parseFloat(parser.number));\n  parser.inNumber = inNumber;\n  parser.number = '';\n  parser.pointSeen = false;\n  parser.hasExponent = false;\n  if (segmentComplete(parser)) {\n    finalizeSegment(parser);\n  }\n}\nfunction finalizeSegment(parser) {\n  parser.inSegment = false;\n  if (parser.absolute) {\n    parser.segment = makeAbsolut(parser);\n  }\n  parser.segments.push(parser.segment);\n}\nfunction isArcFlag(parser) {\n  if (!parser.segment.length) return false;\n  const isArc = parser.segment[0].toUpperCase() === 'A';\n  const length = parser.segment.length;\n  return isArc && (length === 4 || length === 5);\n}\nfunction isExponential(parser) {\n  return parser.lastToken.toUpperCase() === 'E';\n}\nconst pathDelimiters = new Set([' ', ',', '\\t', '\\n', '\\r', '\\f']);\nfunction pathParser(d, toAbsolute = true) {\n  let index = 0;\n  let token = '';\n  const parser = {\n    segment: [],\n    inNumber: false,\n    number: '',\n    lastToken: '',\n    inSegment: false,\n    segments: [],\n    pointSeen: false,\n    hasExponent: false,\n    absolute: toAbsolute,\n    p0: new Point(),\n    p: new Point()\n  };\n  while (parser.lastToken = token, token = d.charAt(index++)) {\n    if (!parser.inSegment) {\n      if (startNewSegment(parser, token)) {\n        continue;\n      }\n    }\n    if (token === '.') {\n      if (parser.pointSeen || parser.hasExponent) {\n        finalizeNumber(parser, false);\n        --index;\n        continue;\n      }\n      parser.inNumber = true;\n      parser.pointSeen = true;\n      parser.number += token;\n      continue;\n    }\n    if (!isNaN(parseInt(token))) {\n      if (parser.number === '0' || isArcFlag(parser)) {\n        parser.inNumber = true;\n        parser.number = token;\n        finalizeNumber(parser, true);\n        continue;\n      }\n      parser.inNumber = true;\n      parser.number += token;\n      continue;\n    }\n    if (pathDelimiters.has(token)) {\n      if (parser.inNumber) {\n        finalizeNumber(parser, false);\n      }\n      continue;\n    }\n    if (token === '-' || token === '+') {\n      if (parser.inNumber && !isExponential(parser)) {\n        finalizeNumber(parser, false);\n        --index;\n        continue;\n      }\n      parser.number += token;\n      parser.inNumber = true;\n      continue;\n    }\n    if (token.toUpperCase() === 'E') {\n      parser.number += token;\n      parser.hasExponent = true;\n      continue;\n    }\n    if (isPathLetter.test(token)) {\n      if (parser.inNumber) {\n        finalizeNumber(parser, false);\n      } else if (!segmentComplete(parser)) {\n        throw new Error('parser Error');\n      } else {\n        finalizeSegment(parser);\n      }\n      --index;\n    }\n  }\n  if (parser.inNumber) {\n    finalizeNumber(parser, false);\n  }\n  if (parser.inSegment && segmentComplete(parser)) {\n    finalizeSegment(parser);\n  }\n  return parser.segments;\n}\n\nfunction arrayToString(a) {\n  let s = '';\n  for (let i = 0, il = a.length; i < il; i++) {\n    s += a[i][0];\n    if (a[i][1] != null) {\n      s += a[i][1];\n      if (a[i][2] != null) {\n        s += ' ';\n        s += a[i][2];\n        if (a[i][3] != null) {\n          s += ' ';\n          s += a[i][3];\n          s += ' ';\n          s += a[i][4];\n          if (a[i][5] != null) {\n            s += ' ';\n            s += a[i][5];\n            s += ' ';\n            s += a[i][6];\n            if (a[i][7] != null) {\n              s += ' ';\n              s += a[i][7];\n            }\n          }\n        }\n      }\n    }\n  }\n  return s + ' ';\n}\nclass PathArray extends SVGArray {\n  // Get bounding box of path\n  bbox() {\n    parser().path.setAttribute('d', this.toString());\n    return new Box(parser.nodes.path.getBBox());\n  }\n\n  // Move path string\n  move(x, y) {\n    // get bounding box of current situation\n    const box = this.bbox();\n\n    // get relative offset\n    x -= box.x;\n    y -= box.y;\n    if (!isNaN(x) && !isNaN(y)) {\n      // move every point\n      for (let l, i = this.length - 1; i >= 0; i--) {\n        l = this[i][0];\n        if (l === 'M' || l === 'L' || l === 'T') {\n          this[i][1] += x;\n          this[i][2] += y;\n        } else if (l === 'H') {\n          this[i][1] += x;\n        } else if (l === 'V') {\n          this[i][1] += y;\n        } else if (l === 'C' || l === 'S' || l === 'Q') {\n          this[i][1] += x;\n          this[i][2] += y;\n          this[i][3] += x;\n          this[i][4] += y;\n          if (l === 'C') {\n            this[i][5] += x;\n            this[i][6] += y;\n          }\n        } else if (l === 'A') {\n          this[i][6] += x;\n          this[i][7] += y;\n        }\n      }\n    }\n    return this;\n  }\n\n  // Absolutize and parse path to array\n  parse(d = 'M0 0') {\n    if (Array.isArray(d)) {\n      d = Array.prototype.concat.apply([], d).toString();\n    }\n    return pathParser(d);\n  }\n\n  // Resize path string\n  size(width, height) {\n    // get bounding box of current situation\n    const box = this.bbox();\n    let i, l;\n\n    // If the box width or height is 0 then we ignore\n    // transformations on the respective axis\n    box.width = box.width === 0 ? 1 : box.width;\n    box.height = box.height === 0 ? 1 : box.height;\n\n    // recalculate position of all points according to new size\n    for (i = this.length - 1; i >= 0; i--) {\n      l = this[i][0];\n      if (l === 'M' || l === 'L' || l === 'T') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n        this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n      } else if (l === 'H') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n      } else if (l === 'V') {\n        this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n      } else if (l === 'C' || l === 'S' || l === 'Q') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n        this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n        this[i][3] = (this[i][3] - box.x) * width / box.width + box.x;\n        this[i][4] = (this[i][4] - box.y) * height / box.height + box.y;\n        if (l === 'C') {\n          this[i][5] = (this[i][5] - box.x) * width / box.width + box.x;\n          this[i][6] = (this[i][6] - box.y) * height / box.height + box.y;\n        }\n      } else if (l === 'A') {\n        // resize radii\n        this[i][1] = this[i][1] * width / box.width;\n        this[i][2] = this[i][2] * height / box.height;\n\n        // move position values\n        this[i][6] = (this[i][6] - box.x) * width / box.width + box.x;\n        this[i][7] = (this[i][7] - box.y) * height / box.height + box.y;\n      }\n    }\n    return this;\n  }\n\n  // Convert array to string\n  toString() {\n    return arrayToString(this);\n  }\n}\n\nconst getClassForType = value => {\n  const type = typeof value;\n  if (type === 'number') {\n    return SVGNumber;\n  } else if (type === 'string') {\n    if (Color.isColor(value)) {\n      return Color;\n    } else if (delimiter.test(value)) {\n      return isPathLetter.test(value) ? PathArray : SVGArray;\n    } else if (numberAndUnit.test(value)) {\n      return SVGNumber;\n    } else {\n      return NonMorphable;\n    }\n  } else if (morphableTypes.indexOf(value.constructor) > -1) {\n    return value.constructor;\n  } else if (Array.isArray(value)) {\n    return SVGArray;\n  } else if (type === 'object') {\n    return ObjectBag;\n  } else {\n    return NonMorphable;\n  }\n};\nclass Morphable {\n  constructor(stepper) {\n    this._stepper = stepper || new Ease('-');\n    this._from = null;\n    this._to = null;\n    this._type = null;\n    this._context = null;\n    this._morphObj = null;\n  }\n  at(pos) {\n    return this._morphObj.morph(this._from, this._to, pos, this._stepper, this._context);\n  }\n  done() {\n    const complete = this._context.map(this._stepper.done).reduce(function (last, curr) {\n      return last && curr;\n    }, true);\n    return complete;\n  }\n  from(val) {\n    if (val == null) {\n      return this._from;\n    }\n    this._from = this._set(val);\n    return this;\n  }\n  stepper(stepper) {\n    if (stepper == null) return this._stepper;\n    this._stepper = stepper;\n    return this;\n  }\n  to(val) {\n    if (val == null) {\n      return this._to;\n    }\n    this._to = this._set(val);\n    return this;\n  }\n  type(type) {\n    // getter\n    if (type == null) {\n      return this._type;\n    }\n\n    // setter\n    this._type = type;\n    return this;\n  }\n  _set(value) {\n    if (!this._type) {\n      this.type(getClassForType(value));\n    }\n    let result = new this._type(value);\n    if (this._type === Color) {\n      result = this._to ? result[this._to[4]]() : this._from ? result[this._from[4]]() : result;\n    }\n    if (this._type === ObjectBag) {\n      result = this._to ? result.align(this._to) : this._from ? result.align(this._from) : result;\n    }\n    result = result.toConsumable();\n    this._morphObj = this._morphObj || new this._type();\n    this._context = this._context || Array.apply(null, Array(result.length)).map(Object).map(function (o) {\n      o.done = true;\n      return o;\n    });\n    return result;\n  }\n}\nclass NonMorphable {\n  constructor(...args) {\n    this.init(...args);\n  }\n  init(val) {\n    val = Array.isArray(val) ? val[0] : val;\n    this.value = val;\n    return this;\n  }\n  toArray() {\n    return [this.value];\n  }\n  valueOf() {\n    return this.value;\n  }\n}\nclass TransformBag {\n  constructor(...args) {\n    this.init(...args);\n  }\n  init(obj) {\n    if (Array.isArray(obj)) {\n      obj = {\n        scaleX: obj[0],\n        scaleY: obj[1],\n        shear: obj[2],\n        rotate: obj[3],\n        translateX: obj[4],\n        translateY: obj[5],\n        originX: obj[6],\n        originY: obj[7]\n      };\n    }\n    Object.assign(this, TransformBag.defaults, obj);\n    return this;\n  }\n  toArray() {\n    const v = this;\n    return [v.scaleX, v.scaleY, v.shear, v.rotate, v.translateX, v.translateY, v.originX, v.originY];\n  }\n}\nTransformBag.defaults = {\n  scaleX: 1,\n  scaleY: 1,\n  shear: 0,\n  rotate: 0,\n  translateX: 0,\n  translateY: 0,\n  originX: 0,\n  originY: 0\n};\nconst sortByKey = (a, b) => {\n  return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;\n};\nclass ObjectBag {\n  constructor(...args) {\n    this.init(...args);\n  }\n  align(other) {\n    const values = this.values;\n    for (let i = 0, il = values.length; i < il; ++i) {\n      // If the type is the same we only need to check if the color is in the correct format\n      if (values[i + 1] === other[i + 1]) {\n        if (values[i + 1] === Color && other[i + 7] !== values[i + 7]) {\n          const space = other[i + 7];\n          const color = new Color(this.values.splice(i + 3, 5))[space]().toArray();\n          this.values.splice(i + 3, 0, ...color);\n        }\n        i += values[i + 2] + 2;\n        continue;\n      }\n      if (!other[i + 1]) {\n        return this;\n      }\n\n      // The types differ, so we overwrite the new type with the old one\n      // And initialize it with the types default (e.g. black for color or 0 for number)\n      const defaultObject = new other[i + 1]().toArray();\n\n      // Than we fix the values array\n      const toDelete = values[i + 2] + 3;\n      values.splice(i, toDelete, other[i], other[i + 1], other[i + 2], ...defaultObject);\n      i += values[i + 2] + 2;\n    }\n    return this;\n  }\n  init(objOrArr) {\n    this.values = [];\n    if (Array.isArray(objOrArr)) {\n      this.values = objOrArr.slice();\n      return;\n    }\n    objOrArr = objOrArr || {};\n    const entries = [];\n    for (const i in objOrArr) {\n      const Type = getClassForType(objOrArr[i]);\n      const val = new Type(objOrArr[i]).toArray();\n      entries.push([i, Type, val.length, ...val]);\n    }\n    entries.sort(sortByKey);\n    this.values = entries.reduce((last, curr) => last.concat(curr), []);\n    return this;\n  }\n  toArray() {\n    return this.values;\n  }\n  valueOf() {\n    const obj = {};\n    const arr = this.values;\n\n    // for (var i = 0, len = arr.length; i < len; i += 2) {\n    while (arr.length) {\n      const key = arr.shift();\n      const Type = arr.shift();\n      const num = arr.shift();\n      const values = arr.splice(0, num);\n      obj[key] = new Type(values); // .valueOf()\n    }\n    return obj;\n  }\n}\nconst morphableTypes = [NonMorphable, TransformBag, ObjectBag];\nfunction registerMorphableType(type = []) {\n  morphableTypes.push(...[].concat(type));\n}\nfunction makeMorphable() {\n  extend(morphableTypes, {\n    to(val) {\n      return new Morphable().type(this.constructor).from(this.toArray()) // this.valueOf())\n      .to(val);\n    },\n    fromArray(arr) {\n      this.init(arr);\n      return this;\n    },\n    toConsumable() {\n      return this.toArray();\n    },\n    morph(from, to, pos, stepper, context) {\n      const mapper = function (i, index) {\n        return stepper.step(i, to[index], pos, context[index], context);\n      };\n      return this.fromArray(from.map(mapper));\n    }\n  });\n}\n\nclass Path extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('path', node), attrs);\n  }\n\n  // Get array\n  array() {\n    return this._array || (this._array = new PathArray(this.attr('d')));\n  }\n\n  // Clear array cache\n  clear() {\n    delete this._array;\n    return this;\n  }\n\n  // Set height of element\n  height(height) {\n    return height == null ? this.bbox().height : this.size(this.bbox().width, height);\n  }\n\n  // Move by left top corner\n  move(x, y) {\n    return this.attr('d', this.array().move(x, y));\n  }\n\n  // Plot new path\n  plot(d) {\n    return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new PathArray(d));\n  }\n\n  // Set element size to given width and height\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.attr('d', this.array().size(p.width, p.height));\n  }\n\n  // Set width of element\n  width(width) {\n    return width == null ? this.bbox().width : this.size(width, this.bbox().height);\n  }\n\n  // Move by left top corner over x-axis\n  x(x) {\n    return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n  }\n\n  // Move by left top corner over y-axis\n  y(y) {\n    return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n  }\n}\n\n// Define morphable array\nPath.prototype.MorphArray = PathArray;\n\n// Add parent method\nregisterMethods({\n  Container: {\n    // Create a wrapped path element\n    path: wrapWithAttrCheck(function (d) {\n      // make sure plot is called as a setter\n      return this.put(new Path()).plot(d || new PathArray());\n    })\n  }\n});\nregister(Path, 'Path');\n\n// Get array\nfunction array() {\n  return this._array || (this._array = new PointArray(this.attr('points')));\n}\n\n// Clear array cache\nfunction clear() {\n  delete this._array;\n  return this;\n}\n\n// Move by left top corner\nfunction move$2(x, y) {\n  return this.attr('points', this.array().move(x, y));\n}\n\n// Plot new path\nfunction plot(p) {\n  return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new PointArray(p));\n}\n\n// Set element size to given width and height\nfunction size$1(width, height) {\n  const p = proportionalSize(this, width, height);\n  return this.attr('points', this.array().size(p.width, p.height));\n}\n\nvar poly = {\n  __proto__: null,\n  array: array,\n  clear: clear,\n  move: move$2,\n  plot: plot,\n  size: size$1\n};\n\nclass Polygon extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('polygon', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    // Create a wrapped polygon element\n    polygon: wrapWithAttrCheck(function (p) {\n      // make sure plot is called as a setter\n      return this.put(new Polygon()).plot(p || new PointArray());\n    })\n  }\n});\nextend(Polygon, pointed);\nextend(Polygon, poly);\nregister(Polygon, 'Polygon');\n\nclass Polyline extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('polyline', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    // Create a wrapped polygon element\n    polyline: wrapWithAttrCheck(function (p) {\n      // make sure plot is called as a setter\n      return this.put(new Polyline()).plot(p || new PointArray());\n    })\n  }\n});\nextend(Polyline, pointed);\nextend(Polyline, poly);\nregister(Polyline, 'Polyline');\n\nclass Rect extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('rect', node), attrs);\n  }\n}\nextend(Rect, {\n  rx,\n  ry\n});\nregisterMethods({\n  Container: {\n    // Create a rect element\n    rect: wrapWithAttrCheck(function (width, height) {\n      return this.put(new Rect()).size(width, height);\n    })\n  }\n});\nregister(Rect, 'Rect');\n\nclass Queue {\n  constructor() {\n    this._first = null;\n    this._last = null;\n  }\n\n  // Shows us the first item in the list\n  first() {\n    return this._first && this._first.value;\n  }\n\n  // Shows us the last item in the list\n  last() {\n    return this._last && this._last.value;\n  }\n  push(value) {\n    // An item stores an id and the provided value\n    const item = typeof value.next !== 'undefined' ? value : {\n      value: value,\n      next: null,\n      prev: null\n    };\n\n    // Deal with the queue being empty or populated\n    if (this._last) {\n      item.prev = this._last;\n      this._last.next = item;\n      this._last = item;\n    } else {\n      this._last = item;\n      this._first = item;\n    }\n\n    // Return the current item\n    return item;\n  }\n\n  // Removes the item that was returned from the push\n  remove(item) {\n    // Relink the previous item\n    if (item.prev) item.prev.next = item.next;\n    if (item.next) item.next.prev = item.prev;\n    if (item === this._last) this._last = item.prev;\n    if (item === this._first) this._first = item.next;\n\n    // Invalidate item\n    item.prev = null;\n    item.next = null;\n  }\n  shift() {\n    // Check if we have a value\n    const remove = this._first;\n    if (!remove) return null;\n\n    // If we do, remove it and relink things\n    this._first = remove.next;\n    if (this._first) this._first.prev = null;\n    this._last = this._first ? this._last : null;\n    return remove.value;\n  }\n}\n\nconst Animator = {\n  nextDraw: null,\n  frames: new Queue(),\n  timeouts: new Queue(),\n  immediates: new Queue(),\n  timer: () => globals.window.performance || globals.window.Date,\n  transforms: [],\n  frame(fn) {\n    // Store the node\n    const node = Animator.frames.push({\n      run: fn\n    });\n\n    // Request an animation frame if we don't have one\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n\n    // Return the node so we can remove it easily\n    return node;\n  },\n  timeout(fn, delay) {\n    delay = delay || 0;\n\n    // Work out when the event should fire\n    const time = Animator.timer().now() + delay;\n\n    // Add the timeout to the end of the queue\n    const node = Animator.timeouts.push({\n      run: fn,\n      time: time\n    });\n\n    // Request another animation frame if we need one\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n    return node;\n  },\n  immediate(fn) {\n    // Add the immediate fn to the end of the queue\n    const node = Animator.immediates.push(fn);\n    // Request another animation frame if we need one\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n    return node;\n  },\n  cancelFrame(node) {\n    node != null && Animator.frames.remove(node);\n  },\n  clearTimeout(node) {\n    node != null && Animator.timeouts.remove(node);\n  },\n  cancelImmediate(node) {\n    node != null && Animator.immediates.remove(node);\n  },\n  _draw(now) {\n    // Run all the timeouts we can run, if they are not ready yet, add them\n    // to the end of the queue immediately! (bad timeouts!!! [sarcasm])\n    let nextTimeout = null;\n    const lastTimeout = Animator.timeouts.last();\n    while (nextTimeout = Animator.timeouts.shift()) {\n      // Run the timeout if its time, or push it to the end\n      if (now >= nextTimeout.time) {\n        nextTimeout.run();\n      } else {\n        Animator.timeouts.push(nextTimeout);\n      }\n\n      // If we hit the last item, we should stop shifting out more items\n      if (nextTimeout === lastTimeout) break;\n    }\n\n    // Run all of the animation frames\n    let nextFrame = null;\n    const lastFrame = Animator.frames.last();\n    while (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) {\n      nextFrame.run(now);\n    }\n    let nextImmediate = null;\n    while (nextImmediate = Animator.immediates.shift()) {\n      nextImmediate();\n    }\n\n    // If we have remaining timeouts or frames, draw until we don't anymore\n    Animator.nextDraw = Animator.timeouts.first() || Animator.frames.first() ? globals.window.requestAnimationFrame(Animator._draw) : null;\n  }\n};\n\nconst makeSchedule = function (runnerInfo) {\n  const start = runnerInfo.start;\n  const duration = runnerInfo.runner.duration();\n  const end = start + duration;\n  return {\n    start: start,\n    duration: duration,\n    end: end,\n    runner: runnerInfo.runner\n  };\n};\nconst defaultSource = function () {\n  const w = globals.window;\n  return (w.performance || w.Date).now();\n};\nclass Timeline extends EventTarget {\n  // Construct a new timeline on the given element\n  constructor(timeSource = defaultSource) {\n    super();\n    this._timeSource = timeSource;\n\n    // terminate resets all variables to their initial state\n    this.terminate();\n  }\n  active() {\n    return !!this._nextFrame;\n  }\n  finish() {\n    // Go to end and pause\n    this.time(this.getEndTimeOfTimeline() + 1);\n    return this.pause();\n  }\n\n  // Calculates the end of the timeline\n  getEndTime() {\n    const lastRunnerInfo = this.getLastRunnerInfo();\n    const lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0;\n    const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n    return lastStartTime + lastDuration;\n  }\n  getEndTimeOfTimeline() {\n    const endTimes = this._runners.map(i => i.start + i.runner.duration());\n    return Math.max(0, ...endTimes);\n  }\n  getLastRunnerInfo() {\n    return this.getRunnerInfoById(this._lastRunnerId);\n  }\n  getRunnerInfoById(id) {\n    return this._runners[this._runnerIds.indexOf(id)] || null;\n  }\n  pause() {\n    this._paused = true;\n    return this._continue();\n  }\n  persist(dtOrForever) {\n    if (dtOrForever == null) return this._persist;\n    this._persist = dtOrForever;\n    return this;\n  }\n  play() {\n    // Now make sure we are not paused and continue the animation\n    this._paused = false;\n    return this.updateTime()._continue();\n  }\n  reverse(yes) {\n    const currentSpeed = this.speed();\n    if (yes == null) return this.speed(-currentSpeed);\n    const positive = Math.abs(currentSpeed);\n    return this.speed(yes ? -positive : positive);\n  }\n\n  // schedules a runner on the timeline\n  schedule(runner, delay, when) {\n    if (runner == null) {\n      return this._runners.map(makeSchedule);\n    }\n\n    // The start time for the next animation can either be given explicitly,\n    // derived from the current timeline time or it can be relative to the\n    // last start time to chain animations directly\n\n    let absoluteStartTime = 0;\n    const endTime = this.getEndTime();\n    delay = delay || 0;\n\n    // Work out when to start the animation\n    if (when == null || when === 'last' || when === 'after') {\n      // Take the last time and increment\n      absoluteStartTime = endTime;\n    } else if (when === 'absolute' || when === 'start') {\n      absoluteStartTime = delay;\n      delay = 0;\n    } else if (when === 'now') {\n      absoluteStartTime = this._time;\n    } else if (when === 'relative') {\n      const runnerInfo = this.getRunnerInfoById(runner.id);\n      if (runnerInfo) {\n        absoluteStartTime = runnerInfo.start + delay;\n        delay = 0;\n      }\n    } else if (when === 'with-last') {\n      const lastRunnerInfo = this.getLastRunnerInfo();\n      const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n      absoluteStartTime = lastStartTime;\n    } else {\n      throw new Error('Invalid value for the \"when\" parameter');\n    }\n\n    // Manage runner\n    runner.unschedule();\n    runner.timeline(this);\n    const persist = runner.persist();\n    const runnerInfo = {\n      persist: persist === null ? this._persist : persist,\n      start: absoluteStartTime + delay,\n      runner\n    };\n    this._lastRunnerId = runner.id;\n    this._runners.push(runnerInfo);\n    this._runners.sort((a, b) => a.start - b.start);\n    this._runnerIds = this._runners.map(info => info.runner.id);\n    this.updateTime()._continue();\n    return this;\n  }\n  seek(dt) {\n    return this.time(this._time + dt);\n  }\n  source(fn) {\n    if (fn == null) return this._timeSource;\n    this._timeSource = fn;\n    return this;\n  }\n  speed(speed) {\n    if (speed == null) return this._speed;\n    this._speed = speed;\n    return this;\n  }\n  stop() {\n    // Go to start and pause\n    this.time(0);\n    return this.pause();\n  }\n  time(time) {\n    if (time == null) return this._time;\n    this._time = time;\n    return this._continue(true);\n  }\n\n  // Remove the runner from this timeline\n  unschedule(runner) {\n    const index = this._runnerIds.indexOf(runner.id);\n    if (index < 0) return this;\n    this._runners.splice(index, 1);\n    this._runnerIds.splice(index, 1);\n    runner.timeline(null);\n    return this;\n  }\n\n  // Makes sure, that after pausing the time doesn't jump\n  updateTime() {\n    if (!this.active()) {\n      this._lastSourceTime = this._timeSource();\n    }\n    return this;\n  }\n\n  // Checks if we are running and continues the animation\n  _continue(immediateStep = false) {\n    Animator.cancelFrame(this._nextFrame);\n    this._nextFrame = null;\n    if (immediateStep) return this._stepImmediate();\n    if (this._paused) return this;\n    this._nextFrame = Animator.frame(this._step);\n    return this;\n  }\n  _stepFn(immediateStep = false) {\n    // Get the time delta from the last time and update the time\n    const time = this._timeSource();\n    let dtSource = time - this._lastSourceTime;\n    if (immediateStep) dtSource = 0;\n    const dtTime = this._speed * dtSource + (this._time - this._lastStepTime);\n    this._lastSourceTime = time;\n\n    // Only update the time if we use the timeSource.\n    // Otherwise use the current time\n    if (!immediateStep) {\n      // Update the time\n      this._time += dtTime;\n      this._time = this._time < 0 ? 0 : this._time;\n    }\n    this._lastStepTime = this._time;\n    this.fire('time', this._time);\n\n    // This is for the case that the timeline was seeked so that the time\n    // is now before the startTime of the runner. That is why we need to set\n    // the runner to position 0\n\n    // FIXME:\n    // However, resetting in insertion order leads to bugs. Considering the case,\n    // where 2 runners change the same attribute but in different times,\n    // resetting both of them will lead to the case where the later defined\n    // runner always wins the reset even if the other runner started earlier\n    // and therefore should win the attribute battle\n    // this can be solved by resetting them backwards\n    for (let k = this._runners.length; k--;) {\n      // Get and run the current runner and ignore it if its inactive\n      const runnerInfo = this._runners[k];\n      const runner = runnerInfo.runner;\n\n      // Make sure that we give the actual difference\n      // between runner start time and now\n      const dtToStart = this._time - runnerInfo.start;\n\n      // Dont run runner if not started yet\n      // and try to reset it\n      if (dtToStart <= 0) {\n        runner.reset();\n      }\n    }\n\n    // Run all of the runners directly\n    let runnersLeft = false;\n    for (let i = 0, len = this._runners.length; i < len; i++) {\n      // Get and run the current runner and ignore it if its inactive\n      const runnerInfo = this._runners[i];\n      const runner = runnerInfo.runner;\n      let dt = dtTime;\n\n      // Make sure that we give the actual difference\n      // between runner start time and now\n      const dtToStart = this._time - runnerInfo.start;\n\n      // Dont run runner if not started yet\n      if (dtToStart <= 0) {\n        runnersLeft = true;\n        continue;\n      } else if (dtToStart < dt) {\n        // Adjust dt to make sure that animation is on point\n        dt = dtToStart;\n      }\n      if (!runner.active()) continue;\n\n      // If this runner is still going, signal that we need another animation\n      // frame, otherwise, remove the completed runner\n      const finished = runner.step(dt).done;\n      if (!finished) {\n        runnersLeft = true;\n        // continue\n      } else if (runnerInfo.persist !== true) {\n        // runner is finished. And runner might get removed\n        const endTime = runner.duration() - runner.time() + this._time;\n        if (endTime + runnerInfo.persist < this._time) {\n          // Delete runner and correct index\n          runner.unschedule();\n          --i;\n          --len;\n        }\n      }\n    }\n\n    // Basically: we continue when there are runners right from us in time\n    // when -->, and when runners are left from us when <--\n    if (runnersLeft && !(this._speed < 0 && this._time === 0) || this._runnerIds.length && this._speed < 0 && this._time > 0) {\n      this._continue();\n    } else {\n      this.pause();\n      this.fire('finished');\n    }\n    return this;\n  }\n  terminate() {\n    // cleanup memory\n\n    // Store the timing variables\n    this._startTime = 0;\n    this._speed = 1.0;\n\n    // Determines how long a runner is hold in memory. Can be a dt or true/false\n    this._persist = 0;\n\n    // Keep track of the running animations and their starting parameters\n    this._nextFrame = null;\n    this._paused = true;\n    this._runners = [];\n    this._runnerIds = [];\n    this._lastRunnerId = -1;\n    this._time = 0;\n    this._lastSourceTime = 0;\n    this._lastStepTime = 0;\n\n    // Make sure that step is always called in class context\n    this._step = this._stepFn.bind(this, false);\n    this._stepImmediate = this._stepFn.bind(this, true);\n  }\n}\nregisterMethods({\n  Element: {\n    timeline: function (timeline) {\n      if (timeline == null) {\n        this._timeline = this._timeline || new Timeline();\n        return this._timeline;\n      } else {\n        this._timeline = timeline;\n        return this;\n      }\n    }\n  }\n});\n\nclass Runner extends EventTarget {\n  constructor(options) {\n    super();\n\n    // Store a unique id on the runner, so that we can identify it later\n    this.id = Runner.id++;\n\n    // Ensure a default value\n    options = options == null ? timeline.duration : options;\n\n    // Ensure that we get a controller\n    options = typeof options === 'function' ? new Controller(options) : options;\n\n    // Declare all of the variables\n    this._element = null;\n    this._timeline = null;\n    this.done = false;\n    this._queue = [];\n\n    // Work out the stepper and the duration\n    this._duration = typeof options === 'number' && options;\n    this._isDeclarative = options instanceof Controller;\n    this._stepper = this._isDeclarative ? options : new Ease();\n\n    // We copy the current values from the timeline because they can change\n    this._history = {};\n\n    // Store the state of the runner\n    this.enabled = true;\n    this._time = 0;\n    this._lastTime = 0;\n\n    // At creation, the runner is in reset state\n    this._reseted = true;\n\n    // Save transforms applied to this runner\n    this.transforms = new Matrix();\n    this.transformId = 1;\n\n    // Looping variables\n    this._haveReversed = false;\n    this._reverse = false;\n    this._loopsDone = 0;\n    this._swing = false;\n    this._wait = 0;\n    this._times = 1;\n    this._frameId = null;\n\n    // Stores how long a runner is stored after being done\n    this._persist = this._isDeclarative ? true : null;\n  }\n  static sanitise(duration, delay, when) {\n    // Initialise the default parameters\n    let times = 1;\n    let swing = false;\n    let wait = 0;\n    duration = duration ?? timeline.duration;\n    delay = delay ?? timeline.delay;\n    when = when || 'last';\n\n    // If we have an object, unpack the values\n    if (typeof duration === 'object' && !(duration instanceof Stepper)) {\n      delay = duration.delay ?? delay;\n      when = duration.when ?? when;\n      swing = duration.swing || swing;\n      times = duration.times ?? times;\n      wait = duration.wait ?? wait;\n      duration = duration.duration ?? timeline.duration;\n    }\n    return {\n      duration: duration,\n      delay: delay,\n      swing: swing,\n      times: times,\n      wait: wait,\n      when: when\n    };\n  }\n  active(enabled) {\n    if (enabled == null) return this.enabled;\n    this.enabled = enabled;\n    return this;\n  }\n\n  /*\n  Private Methods\n  ===============\n  Methods that shouldn't be used externally\n  */\n  addTransform(transform) {\n    this.transforms.lmultiplyO(transform);\n    return this;\n  }\n  after(fn) {\n    return this.on('finished', fn);\n  }\n  animate(duration, delay, when) {\n    const o = Runner.sanitise(duration, delay, when);\n    const runner = new Runner(o.duration);\n    if (this._timeline) runner.timeline(this._timeline);\n    if (this._element) runner.element(this._element);\n    return runner.loop(o).schedule(o.delay, o.when);\n  }\n  clearTransform() {\n    this.transforms = new Matrix();\n    return this;\n  }\n\n  // TODO: Keep track of all transformations so that deletion is faster\n  clearTransformsFromQueue() {\n    if (!this.done || !this._timeline || !this._timeline._runnerIds.includes(this.id)) {\n      this._queue = this._queue.filter(item => {\n        return !item.isTransform;\n      });\n    }\n  }\n  delay(delay) {\n    return this.animate(0, delay);\n  }\n  duration() {\n    return this._times * (this._wait + this._duration) - this._wait;\n  }\n  during(fn) {\n    return this.queue(null, fn);\n  }\n  ease(fn) {\n    this._stepper = new Ease(fn);\n    return this;\n  }\n  /*\n  Runner Definitions\n  ==================\n  These methods help us define the runtime behaviour of the Runner or they\n  help us make new runners from the current runner\n  */\n\n  element(element) {\n    if (element == null) return this._element;\n    this._element = element;\n    element._prepareRunner();\n    return this;\n  }\n  finish() {\n    return this.step(Infinity);\n  }\n  loop(times, swing, wait) {\n    // Deal with the user passing in an object\n    if (typeof times === 'object') {\n      swing = times.swing;\n      wait = times.wait;\n      times = times.times;\n    }\n\n    // Sanitise the values and store them\n    this._times = times || Infinity;\n    this._swing = swing || false;\n    this._wait = wait || 0;\n\n    // Allow true to be passed\n    if (this._times === true) {\n      this._times = Infinity;\n    }\n    return this;\n  }\n  loops(p) {\n    const loopDuration = this._duration + this._wait;\n    if (p == null) {\n      const loopsDone = Math.floor(this._time / loopDuration);\n      const relativeTime = this._time - loopsDone * loopDuration;\n      const position = relativeTime / this._duration;\n      return Math.min(loopsDone + position, this._times);\n    }\n    const whole = Math.floor(p);\n    const partial = p % 1;\n    const time = loopDuration * whole + this._duration * partial;\n    return this.time(time);\n  }\n  persist(dtOrForever) {\n    if (dtOrForever == null) return this._persist;\n    this._persist = dtOrForever;\n    return this;\n  }\n  position(p) {\n    // Get all of the variables we need\n    const x = this._time;\n    const d = this._duration;\n    const w = this._wait;\n    const t = this._times;\n    const s = this._swing;\n    const r = this._reverse;\n    let position;\n    if (p == null) {\n      /*\n      This function converts a time to a position in the range [0, 1]\n      The full explanation can be found in this desmos demonstration\n        https://www.desmos.com/calculator/u4fbavgche\n      The logic is slightly simplified here because we can use booleans\n      */\n\n      // Figure out the value without thinking about the start or end time\n      const f = function (x) {\n        const swinging = s * Math.floor(x % (2 * (w + d)) / (w + d));\n        const backwards = swinging && !r || !swinging && r;\n        const uncliped = Math.pow(-1, backwards) * (x % (w + d)) / d + backwards;\n        const clipped = Math.max(Math.min(uncliped, 1), 0);\n        return clipped;\n      };\n\n      // Figure out the value by incorporating the start time\n      const endTime = t * (w + d) - w;\n      position = x <= 0 ? Math.round(f(1e-5)) : x < endTime ? f(x) : Math.round(f(endTime - 1e-5));\n      return position;\n    }\n\n    // Work out the loops done and add the position to the loops done\n    const loopsDone = Math.floor(this.loops());\n    const swingForward = s && loopsDone % 2 === 0;\n    const forwards = swingForward && !r || r && swingForward;\n    position = loopsDone + (forwards ? p : 1 - p);\n    return this.loops(position);\n  }\n  progress(p) {\n    if (p == null) {\n      return Math.min(1, this._time / this.duration());\n    }\n    return this.time(p * this.duration());\n  }\n\n  /*\n  Basic Functionality\n  ===================\n  These methods allow us to attach basic functions to the runner directly\n  */\n  queue(initFn, runFn, retargetFn, isTransform) {\n    this._queue.push({\n      initialiser: initFn || noop,\n      runner: runFn || noop,\n      retarget: retargetFn,\n      isTransform: isTransform,\n      initialised: false,\n      finished: false\n    });\n    const timeline = this.timeline();\n    timeline && this.timeline()._continue();\n    return this;\n  }\n  reset() {\n    if (this._reseted) return this;\n    this.time(0);\n    this._reseted = true;\n    return this;\n  }\n  reverse(reverse) {\n    this._reverse = reverse == null ? !this._reverse : reverse;\n    return this;\n  }\n  schedule(timeline, delay, when) {\n    // The user doesn't need to pass a timeline if we already have one\n    if (!(timeline instanceof Timeline)) {\n      when = delay;\n      delay = timeline;\n      timeline = this.timeline();\n    }\n\n    // If there is no timeline, yell at the user...\n    if (!timeline) {\n      throw Error('Runner cannot be scheduled without timeline');\n    }\n\n    // Schedule the runner on the timeline provided\n    timeline.schedule(this, delay, when);\n    return this;\n  }\n  step(dt) {\n    // If we are inactive, this stepper just gets skipped\n    if (!this.enabled) return this;\n\n    // Update the time and get the new position\n    dt = dt == null ? 16 : dt;\n    this._time += dt;\n    const position = this.position();\n\n    // Figure out if we need to run the stepper in this frame\n    const running = this._lastPosition !== position && this._time >= 0;\n    this._lastPosition = position;\n\n    // Figure out if we just started\n    const duration = this.duration();\n    const justStarted = this._lastTime <= 0 && this._time > 0;\n    const justFinished = this._lastTime < duration && this._time >= duration;\n    this._lastTime = this._time;\n    if (justStarted) {\n      this.fire('start', this);\n    }\n\n    // Work out if the runner is finished set the done flag here so animations\n    // know, that they are running in the last step (this is good for\n    // transformations which can be merged)\n    const declarative = this._isDeclarative;\n    this.done = !declarative && !justFinished && this._time >= duration;\n\n    // Runner is running. So its not in reset state anymore\n    this._reseted = false;\n    let converged = false;\n    // Call initialise and the run function\n    if (running || declarative) {\n      this._initialise(running);\n\n      // clear the transforms on this runner so they dont get added again and again\n      this.transforms = new Matrix();\n      converged = this._run(declarative ? dt : position);\n      this.fire('step', this);\n    }\n    // correct the done flag here\n    // declarative animations itself know when they converged\n    this.done = this.done || converged && declarative;\n    if (justFinished) {\n      this.fire('finished', this);\n    }\n    return this;\n  }\n\n  /*\n  Runner animation methods\n  ========================\n  Control how the animation plays\n  */\n  time(time) {\n    if (time == null) {\n      return this._time;\n    }\n    const dt = time - this._time;\n    this.step(dt);\n    return this;\n  }\n  timeline(timeline) {\n    // check explicitly for undefined so we can set the timeline to null\n    if (typeof timeline === 'undefined') return this._timeline;\n    this._timeline = timeline;\n    return this;\n  }\n  unschedule() {\n    const timeline = this.timeline();\n    timeline && timeline.unschedule(this);\n    return this;\n  }\n\n  // Run each initialise function in the runner if required\n  _initialise(running) {\n    // If we aren't running, we shouldn't initialise when not declarative\n    if (!running && !this._isDeclarative) return;\n\n    // Loop through all of the initialisers\n    for (let i = 0, len = this._queue.length; i < len; ++i) {\n      // Get the current initialiser\n      const current = this._queue[i];\n\n      // Determine whether we need to initialise\n      const needsIt = this._isDeclarative || !current.initialised && running;\n      running = !current.finished;\n\n      // Call the initialiser if we need to\n      if (needsIt && running) {\n        current.initialiser.call(this);\n        current.initialised = true;\n      }\n    }\n  }\n\n  // Save a morpher to the morpher list so that we can retarget it later\n  _rememberMorpher(method, morpher) {\n    this._history[method] = {\n      morpher: morpher,\n      caller: this._queue[this._queue.length - 1]\n    };\n\n    // We have to resume the timeline in case a controller\n    // is already done without being ever run\n    // This can happen when e.g. this is done:\n    //    anim = el.animate(new SVG.Spring)\n    // and later\n    //    anim.move(...)\n    if (this._isDeclarative) {\n      const timeline = this.timeline();\n      timeline && timeline.play();\n    }\n  }\n\n  // Try to set the target for a morpher if the morpher exists, otherwise\n  // Run each run function for the position or dt given\n  _run(positionOrDt) {\n    // Run all of the _queue directly\n    let allfinished = true;\n    for (let i = 0, len = this._queue.length; i < len; ++i) {\n      // Get the current function to run\n      const current = this._queue[i];\n\n      // Run the function if its not finished, we keep track of the finished\n      // flag for the sake of declarative _queue\n      const converged = current.runner.call(this, positionOrDt);\n      current.finished = current.finished || converged === true;\n      allfinished = allfinished && current.finished;\n    }\n\n    // We report when all of the constructors are finished\n    return allfinished;\n  }\n\n  // do nothing and return false\n  _tryRetarget(method, target, extra) {\n    if (this._history[method]) {\n      // if the last method wasn't even initialised, throw it away\n      if (!this._history[method].caller.initialised) {\n        const index = this._queue.indexOf(this._history[method].caller);\n        this._queue.splice(index, 1);\n        return false;\n      }\n\n      // for the case of transformations, we use the special retarget function\n      // which has access to the outer scope\n      if (this._history[method].caller.retarget) {\n        this._history[method].caller.retarget.call(this, target, extra);\n        // for everything else a simple morpher change is sufficient\n      } else {\n        this._history[method].morpher.to(target);\n      }\n      this._history[method].caller.finished = false;\n      const timeline = this.timeline();\n      timeline && timeline.play();\n      return true;\n    }\n    return false;\n  }\n}\nRunner.id = 0;\nclass FakeRunner {\n  constructor(transforms = new Matrix(), id = -1, done = true) {\n    this.transforms = transforms;\n    this.id = id;\n    this.done = done;\n  }\n  clearTransformsFromQueue() {}\n}\nextend([Runner, FakeRunner], {\n  mergeWith(runner) {\n    return new FakeRunner(runner.transforms.lmultiply(this.transforms), runner.id);\n  }\n});\n\n// FakeRunner.emptyRunner = new FakeRunner()\n\nconst lmultiply = (last, curr) => last.lmultiplyO(curr);\nconst getRunnerTransform = runner => runner.transforms;\nfunction mergeTransforms() {\n  // Find the matrix to apply to the element and apply it\n  const runners = this._transformationRunners.runners;\n  const netTransform = runners.map(getRunnerTransform).reduce(lmultiply, new Matrix());\n  this.transform(netTransform);\n  this._transformationRunners.merge();\n  if (this._transformationRunners.length() === 1) {\n    this._frameId = null;\n  }\n}\nclass RunnerArray {\n  constructor() {\n    this.runners = [];\n    this.ids = [];\n  }\n  add(runner) {\n    if (this.runners.includes(runner)) return;\n    const id = runner.id + 1;\n    this.runners.push(runner);\n    this.ids.push(id);\n    return this;\n  }\n  clearBefore(id) {\n    const deleteCnt = this.ids.indexOf(id + 1) || 1;\n    this.ids.splice(0, deleteCnt, 0);\n    this.runners.splice(0, deleteCnt, new FakeRunner()).forEach(r => r.clearTransformsFromQueue());\n    return this;\n  }\n  edit(id, newRunner) {\n    const index = this.ids.indexOf(id + 1);\n    this.ids.splice(index, 1, id + 1);\n    this.runners.splice(index, 1, newRunner);\n    return this;\n  }\n  getByID(id) {\n    return this.runners[this.ids.indexOf(id + 1)];\n  }\n  length() {\n    return this.ids.length;\n  }\n  merge() {\n    let lastRunner = null;\n    for (let i = 0; i < this.runners.length; ++i) {\n      const runner = this.runners[i];\n      const condition = lastRunner && runner.done && lastRunner.done && (\n      // don't merge runner when persisted on timeline\n      !runner._timeline || !runner._timeline._runnerIds.includes(runner.id)) && (!lastRunner._timeline || !lastRunner._timeline._runnerIds.includes(lastRunner.id));\n      if (condition) {\n        // the +1 happens in the function\n        this.remove(runner.id);\n        const newRunner = runner.mergeWith(lastRunner);\n        this.edit(lastRunner.id, newRunner);\n        lastRunner = newRunner;\n        --i;\n      } else {\n        lastRunner = runner;\n      }\n    }\n    return this;\n  }\n  remove(id) {\n    const index = this.ids.indexOf(id + 1);\n    this.ids.splice(index, 1);\n    this.runners.splice(index, 1);\n    return this;\n  }\n}\nregisterMethods({\n  Element: {\n    animate(duration, delay, when) {\n      const o = Runner.sanitise(duration, delay, when);\n      const timeline = this.timeline();\n      return new Runner(o.duration).loop(o).element(this).timeline(timeline.play()).schedule(o.delay, o.when);\n    },\n    delay(by, when) {\n      return this.animate(0, by, when);\n    },\n    // this function searches for all runners on the element and deletes the ones\n    // which run before the current one. This is because absolute transformations\n    // overwrite anything anyway so there is no need to waste time computing\n    // other runners\n    _clearTransformRunnersBefore(currentRunner) {\n      this._transformationRunners.clearBefore(currentRunner.id);\n    },\n    _currentTransform(current) {\n      return this._transformationRunners.runners\n      // we need the equal sign here to make sure, that also transformations\n      // on the same runner which execute before the current transformation are\n      // taken into account\n      .filter(runner => runner.id <= current.id).map(getRunnerTransform).reduce(lmultiply, new Matrix());\n    },\n    _addRunner(runner) {\n      this._transformationRunners.add(runner);\n\n      // Make sure that the runner merge is executed at the very end of\n      // all Animator functions. That is why we use immediate here to execute\n      // the merge right after all frames are run\n      Animator.cancelImmediate(this._frameId);\n      this._frameId = Animator.immediate(mergeTransforms.bind(this));\n    },\n    _prepareRunner() {\n      if (this._frameId == null) {\n        this._transformationRunners = new RunnerArray().add(new FakeRunner(new Matrix(this)));\n      }\n    }\n  }\n});\n\n// Will output the elements from array A that are not in the array B\nconst difference = (a, b) => a.filter(x => !b.includes(x));\nextend(Runner, {\n  attr(a, v) {\n    return this.styleAttr('attr', a, v);\n  },\n  // Add animatable styles\n  css(s, v) {\n    return this.styleAttr('css', s, v);\n  },\n  styleAttr(type, nameOrAttrs, val) {\n    if (typeof nameOrAttrs === 'string') {\n      return this.styleAttr(type, {\n        [nameOrAttrs]: val\n      });\n    }\n    let attrs = nameOrAttrs;\n    if (this._tryRetarget(type, attrs)) return this;\n    let morpher = new Morphable(this._stepper).to(attrs);\n    let keys = Object.keys(attrs);\n    this.queue(function () {\n      morpher = morpher.from(this.element()[type](keys));\n    }, function (pos) {\n      this.element()[type](morpher.at(pos).valueOf());\n      return morpher.done();\n    }, function (newToAttrs) {\n      // Check if any new keys were added\n      const newKeys = Object.keys(newToAttrs);\n      const differences = difference(newKeys, keys);\n\n      // If their are new keys, initialize them and add them to morpher\n      if (differences.length) {\n        // Get the values\n        const addedFromAttrs = this.element()[type](differences);\n\n        // Get the already initialized values\n        const oldFromAttrs = new ObjectBag(morpher.from()).valueOf();\n\n        // Merge old and new\n        Object.assign(oldFromAttrs, addedFromAttrs);\n        morpher.from(oldFromAttrs);\n      }\n\n      // Get the object from the morpher\n      const oldToAttrs = new ObjectBag(morpher.to()).valueOf();\n\n      // Merge in new attributes\n      Object.assign(oldToAttrs, newToAttrs);\n\n      // Change morpher target\n      morpher.to(oldToAttrs);\n\n      // Make sure that we save the work we did so we don't need it to do again\n      keys = newKeys;\n      attrs = newToAttrs;\n    });\n    this._rememberMorpher(type, morpher);\n    return this;\n  },\n  zoom(level, point) {\n    if (this._tryRetarget('zoom', level, point)) return this;\n    let morpher = new Morphable(this._stepper).to(new SVGNumber(level));\n    this.queue(function () {\n      morpher = morpher.from(this.element().zoom());\n    }, function (pos) {\n      this.element().zoom(morpher.at(pos), point);\n      return morpher.done();\n    }, function (newLevel, newPoint) {\n      point = newPoint;\n      morpher.to(newLevel);\n    });\n    this._rememberMorpher('zoom', morpher);\n    return this;\n  },\n  /**\n   ** absolute transformations\n   **/\n\n  //\n  // M v -----|-----(D M v = F v)------|----->  T v\n  //\n  // 1. define the final state (T) and decompose it (once)\n  //    t = [tx, ty, the, lam, sy, sx]\n  // 2. on every frame: pull the current state of all previous transforms\n  //    (M - m can change)\n  //   and then write this as m = [tx0, ty0, the0, lam0, sy0, sx0]\n  // 3. Find the interpolated matrix F(pos) = m + pos * (t - m)\n  //   - Note F(0) = M\n  //   - Note F(1) = T\n  // 4. Now you get the delta matrix as a result: D = F * inv(M)\n\n  transform(transforms, relative, affine) {\n    // If we have a declarative function, we should retarget it if possible\n    relative = transforms.relative || relative;\n    if (this._isDeclarative && !relative && this._tryRetarget('transform', transforms)) {\n      return this;\n    }\n\n    // Parse the parameters\n    const isMatrix = Matrix.isMatrixLike(transforms);\n    affine = transforms.affine != null ? transforms.affine : affine != null ? affine : !isMatrix;\n\n    // Create a morpher and set its type\n    const morpher = new Morphable(this._stepper).type(affine ? TransformBag : Matrix);\n    let origin;\n    let element;\n    let current;\n    let currentAngle;\n    let startTransform;\n    function setup() {\n      // make sure element and origin is defined\n      element = element || this.element();\n      origin = origin || getOrigin(transforms, element);\n      startTransform = new Matrix(relative ? undefined : element);\n\n      // add the runner to the element so it can merge transformations\n      element._addRunner(this);\n\n      // Deactivate all transforms that have run so far if we are absolute\n      if (!relative) {\n        element._clearTransformRunnersBefore(this);\n      }\n    }\n    function run(pos) {\n      // clear all other transforms before this in case something is saved\n      // on this runner. We are absolute. We dont need these!\n      if (!relative) this.clearTransform();\n      const {\n        x,\n        y\n      } = new Point(origin).transform(element._currentTransform(this));\n      let target = new Matrix({\n        ...transforms,\n        origin: [x, y]\n      });\n      let start = this._isDeclarative && current ? current : startTransform;\n      if (affine) {\n        target = target.decompose(x, y);\n        start = start.decompose(x, y);\n\n        // Get the current and target angle as it was set\n        const rTarget = target.rotate;\n        const rCurrent = start.rotate;\n\n        // Figure out the shortest path to rotate directly\n        const possibilities = [rTarget - 360, rTarget, rTarget + 360];\n        const distances = possibilities.map(a => Math.abs(a - rCurrent));\n        const shortest = Math.min(...distances);\n        const index = distances.indexOf(shortest);\n        target.rotate = possibilities[index];\n      }\n      if (relative) {\n        // we have to be careful here not to overwrite the rotation\n        // with the rotate method of Matrix\n        if (!isMatrix) {\n          target.rotate = transforms.rotate || 0;\n        }\n        if (this._isDeclarative && currentAngle) {\n          start.rotate = currentAngle;\n        }\n      }\n      morpher.from(start);\n      morpher.to(target);\n      const affineParameters = morpher.at(pos);\n      currentAngle = affineParameters.rotate;\n      current = new Matrix(affineParameters);\n      this.addTransform(current);\n      element._addRunner(this);\n      return morpher.done();\n    }\n    function retarget(newTransforms) {\n      // only get a new origin if it changed since the last call\n      if ((newTransforms.origin || 'center').toString() !== (transforms.origin || 'center').toString()) {\n        origin = getOrigin(newTransforms, element);\n      }\n\n      // overwrite the old transformations with the new ones\n      transforms = {\n        ...newTransforms,\n        origin\n      };\n    }\n    this.queue(setup, run, retarget, true);\n    this._isDeclarative && this._rememberMorpher('transform', morpher);\n    return this;\n  },\n  // Animatable x-axis\n  x(x) {\n    return this._queueNumber('x', x);\n  },\n  // Animatable y-axis\n  y(y) {\n    return this._queueNumber('y', y);\n  },\n  ax(x) {\n    return this._queueNumber('ax', x);\n  },\n  ay(y) {\n    return this._queueNumber('ay', y);\n  },\n  dx(x = 0) {\n    return this._queueNumberDelta('x', x);\n  },\n  dy(y = 0) {\n    return this._queueNumberDelta('y', y);\n  },\n  dmove(x, y) {\n    return this.dx(x).dy(y);\n  },\n  _queueNumberDelta(method, to) {\n    to = new SVGNumber(to);\n\n    // Try to change the target if we have this method already registered\n    if (this._tryRetarget(method, to)) return this;\n\n    // Make a morpher and queue the animation\n    const morpher = new Morphable(this._stepper).to(to);\n    let from = null;\n    this.queue(function () {\n      from = this.element()[method]();\n      morpher.from(from);\n      morpher.to(from + to);\n    }, function (pos) {\n      this.element()[method](morpher.at(pos));\n      return morpher.done();\n    }, function (newTo) {\n      morpher.to(from + new SVGNumber(newTo));\n    });\n\n    // Register the morpher so that if it is changed again, we can retarget it\n    this._rememberMorpher(method, morpher);\n    return this;\n  },\n  _queueObject(method, to) {\n    // Try to change the target if we have this method already registered\n    if (this._tryRetarget(method, to)) return this;\n\n    // Make a morpher and queue the animation\n    const morpher = new Morphable(this._stepper).to(to);\n    this.queue(function () {\n      morpher.from(this.element()[method]());\n    }, function (pos) {\n      this.element()[method](morpher.at(pos));\n      return morpher.done();\n    });\n\n    // Register the morpher so that if it is changed again, we can retarget it\n    this._rememberMorpher(method, morpher);\n    return this;\n  },\n  _queueNumber(method, value) {\n    return this._queueObject(method, new SVGNumber(value));\n  },\n  // Animatable center x-axis\n  cx(x) {\n    return this._queueNumber('cx', x);\n  },\n  // Animatable center y-axis\n  cy(y) {\n    return this._queueNumber('cy', y);\n  },\n  // Add animatable move\n  move(x, y) {\n    return this.x(x).y(y);\n  },\n  amove(x, y) {\n    return this.ax(x).ay(y);\n  },\n  // Add animatable center\n  center(x, y) {\n    return this.cx(x).cy(y);\n  },\n  // Add animatable size\n  size(width, height) {\n    // animate bbox based size for all other elements\n    let box;\n    if (!width || !height) {\n      box = this._element.bbox();\n    }\n    if (!width) {\n      width = box.width / box.height * height;\n    }\n    if (!height) {\n      height = box.height / box.width * width;\n    }\n    return this.width(width).height(height);\n  },\n  // Add animatable width\n  width(width) {\n    return this._queueNumber('width', width);\n  },\n  // Add animatable height\n  height(height) {\n    return this._queueNumber('height', height);\n  },\n  // Add animatable plot\n  plot(a, b, c, d) {\n    // Lines can be plotted with 4 arguments\n    if (arguments.length === 4) {\n      return this.plot([a, b, c, d]);\n    }\n    if (this._tryRetarget('plot', a)) return this;\n    const morpher = new Morphable(this._stepper).type(this._element.MorphArray).to(a);\n    this.queue(function () {\n      morpher.from(this._element.array());\n    }, function (pos) {\n      this._element.plot(morpher.at(pos));\n      return morpher.done();\n    });\n    this._rememberMorpher('plot', morpher);\n    return this;\n  },\n  // Add leading method\n  leading(value) {\n    return this._queueNumber('leading', value);\n  },\n  // Add animatable viewbox\n  viewbox(x, y, width, height) {\n    return this._queueObject('viewbox', new Box(x, y, width, height));\n  },\n  update(o) {\n    if (typeof o !== 'object') {\n      return this.update({\n        offset: arguments[0],\n        color: arguments[1],\n        opacity: arguments[2]\n      });\n    }\n    if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n    if (o.color != null) this.attr('stop-color', o.color);\n    if (o.offset != null) this.attr('offset', o.offset);\n    return this;\n  }\n});\nextend(Runner, {\n  rx,\n  ry,\n  from,\n  to\n});\nregister(Runner, 'Runner');\n\nclass Svg extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('svg', node), attrs);\n    this.namespace();\n  }\n\n  // Creates and returns defs element\n  defs() {\n    if (!this.isRoot()) return this.root().defs();\n    return adopt(this.node.querySelector('defs')) || this.put(new Defs());\n  }\n  isRoot() {\n    return !this.node.parentNode || !(this.node.parentNode instanceof globals.window.SVGElement) && this.node.parentNode.nodeName !== '#document-fragment';\n  }\n\n  // Add namespaces\n  namespace() {\n    if (!this.isRoot()) return this.root().namespace();\n    return this.attr({\n      xmlns: svg,\n      version: '1.1'\n    }).attr('xmlns:xlink', xlink, xmlns);\n  }\n  removeNamespace() {\n    return this.attr({\n      xmlns: null,\n      version: null\n    }).attr('xmlns:xlink', null, xmlns).attr('xmlns:svgjs', null, xmlns);\n  }\n\n  // Check if this is a root svg\n  // If not, call root() from this element\n  root() {\n    if (this.isRoot()) return this;\n    return super.root();\n  }\n}\nregisterMethods({\n  Container: {\n    // Create nested svg document\n    nested: wrapWithAttrCheck(function () {\n      return this.put(new Svg());\n    })\n  }\n});\nregister(Svg, 'Svg', true);\n\nclass Symbol extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('symbol', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    symbol: wrapWithAttrCheck(function () {\n      return this.put(new Symbol());\n    })\n  }\n});\nregister(Symbol, 'Symbol');\n\n// Create plain text node\nfunction plain(text) {\n  // clear if build mode is disabled\n  if (this._build === false) {\n    this.clear();\n  }\n\n  // create text node\n  this.node.appendChild(globals.document.createTextNode(text));\n  return this;\n}\n\n// Get length of text element\nfunction length() {\n  return this.node.getComputedTextLength();\n}\n\n// Move over x-axis\n// Text is moved by its bounding box\n// text-anchor does NOT matter\nfunction x$1(x, box = this.bbox()) {\n  if (x == null) {\n    return box.x;\n  }\n  return this.attr('x', this.attr('x') + x - box.x);\n}\n\n// Move over y-axis\nfunction y$1(y, box = this.bbox()) {\n  if (y == null) {\n    return box.y;\n  }\n  return this.attr('y', this.attr('y') + y - box.y);\n}\nfunction move$1(x, y, box = this.bbox()) {\n  return this.x(x, box).y(y, box);\n}\n\n// Move center over x-axis\nfunction cx(x, box = this.bbox()) {\n  if (x == null) {\n    return box.cx;\n  }\n  return this.attr('x', this.attr('x') + x - box.cx);\n}\n\n// Move center over y-axis\nfunction cy(y, box = this.bbox()) {\n  if (y == null) {\n    return box.cy;\n  }\n  return this.attr('y', this.attr('y') + y - box.cy);\n}\nfunction center(x, y, box = this.bbox()) {\n  return this.cx(x, box).cy(y, box);\n}\nfunction ax(x) {\n  return this.attr('x', x);\n}\nfunction ay(y) {\n  return this.attr('y', y);\n}\nfunction amove(x, y) {\n  return this.ax(x).ay(y);\n}\n\n// Enable / disable build mode\nfunction build(build) {\n  this._build = !!build;\n  return this;\n}\n\nvar textable = {\n  __proto__: null,\n  amove: amove,\n  ax: ax,\n  ay: ay,\n  build: build,\n  center: center,\n  cx: cx,\n  cy: cy,\n  length: length,\n  move: move$1,\n  plain: plain,\n  x: x$1,\n  y: y$1\n};\n\nclass Text extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('text', node), attrs);\n    this.dom.leading = this.dom.leading ?? new SVGNumber(1.3); // store leading value for rebuilding\n    this._rebuild = true; // enable automatic updating of dy values\n    this._build = false; // disable build mode for adding multiple lines\n  }\n\n  // Set / get leading\n  leading(value) {\n    // act as getter\n    if (value == null) {\n      return this.dom.leading;\n    }\n\n    // act as setter\n    this.dom.leading = new SVGNumber(value);\n    return this.rebuild();\n  }\n\n  // Rebuild appearance type\n  rebuild(rebuild) {\n    // store new rebuild flag if given\n    if (typeof rebuild === 'boolean') {\n      this._rebuild = rebuild;\n    }\n\n    // define position of all lines\n    if (this._rebuild) {\n      const self = this;\n      let blankLineOffset = 0;\n      const leading = this.dom.leading;\n      this.each(function (i) {\n        if (isDescriptive(this.node)) return;\n        const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n        const dy = leading * new SVGNumber(fontSize);\n        if (this.dom.newLined) {\n          this.attr('x', self.attr('x'));\n          if (this.text() === '\\n') {\n            blankLineOffset += dy;\n          } else {\n            this.attr('dy', i ? dy + blankLineOffset : 0);\n            blankLineOffset = 0;\n          }\n        }\n      });\n      this.fire('rebuild');\n    }\n    return this;\n  }\n\n  // overwrite method from parent to set data properly\n  setData(o) {\n    this.dom = o;\n    this.dom.leading = new SVGNumber(o.leading || 1.3);\n    return this;\n  }\n  writeDataToDom() {\n    writeDataToDom(this, this.dom, {\n      leading: 1.3\n    });\n    return this;\n  }\n\n  // Set the text content\n  text(text) {\n    // act as getter\n    if (text === undefined) {\n      const children = this.node.childNodes;\n      let firstLine = 0;\n      text = '';\n      for (let i = 0, len = children.length; i < len; ++i) {\n        // skip textPaths - they are no lines\n        if (children[i].nodeName === 'textPath' || isDescriptive(children[i])) {\n          if (i === 0) firstLine = i + 1;\n          continue;\n        }\n\n        // add newline if its not the first child and newLined is set to true\n        if (i !== firstLine && children[i].nodeType !== 3 && adopt(children[i]).dom.newLined === true) {\n          text += '\\n';\n        }\n\n        // add content of this node\n        text += children[i].textContent;\n      }\n      return text;\n    }\n\n    // remove existing content\n    this.clear().build(true);\n    if (typeof text === 'function') {\n      // call block\n      text.call(this, this);\n    } else {\n      // store text and make sure text is not blank\n      text = (text + '').split('\\n');\n\n      // build new lines\n      for (let j = 0, jl = text.length; j < jl; j++) {\n        this.newLine(text[j]);\n      }\n    }\n\n    // disable build mode and rebuild lines\n    return this.build(false).rebuild();\n  }\n}\nextend(Text, textable);\nregisterMethods({\n  Container: {\n    // Create text element\n    text: wrapWithAttrCheck(function (text = '') {\n      return this.put(new Text()).text(text);\n    }),\n    // Create plain text element\n    plain: wrapWithAttrCheck(function (text = '') {\n      return this.put(new Text()).plain(text);\n    })\n  }\n});\nregister(Text, 'Text');\n\nclass Tspan extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('tspan', node), attrs);\n    this._build = false; // disable build mode for adding multiple lines\n  }\n\n  // Shortcut dx\n  dx(dx) {\n    return this.attr('dx', dx);\n  }\n\n  // Shortcut dy\n  dy(dy) {\n    return this.attr('dy', dy);\n  }\n\n  // Create new line\n  newLine() {\n    // mark new line\n    this.dom.newLined = true;\n\n    // fetch parent\n    const text = this.parent();\n\n    // early return in case we are not in a text element\n    if (!(text instanceof Text)) {\n      return this;\n    }\n    const i = text.index(this);\n    const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n    const dy = text.dom.leading * new SVGNumber(fontSize);\n\n    // apply new position\n    return this.dy(i ? dy : 0).attr('x', text.x());\n  }\n\n  // Set text content\n  text(text) {\n    if (text == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '');\n    if (typeof text === 'function') {\n      this.clear().build(true);\n      text.call(this, this);\n      this.build(false);\n    } else {\n      this.plain(text);\n    }\n    return this;\n  }\n}\nextend(Tspan, textable);\nregisterMethods({\n  Tspan: {\n    tspan: wrapWithAttrCheck(function (text = '') {\n      const tspan = new Tspan();\n\n      // clear if build mode is disabled\n      if (!this._build) {\n        this.clear();\n      }\n\n      // add new tspan\n      return this.put(tspan).text(text);\n    })\n  },\n  Text: {\n    newLine: function (text = '') {\n      return this.tspan(text).newLine();\n    }\n  }\n});\nregister(Tspan, 'Tspan');\n\nclass Circle extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('circle', node), attrs);\n  }\n  radius(r) {\n    return this.attr('r', r);\n  }\n\n  // Radius x value\n  rx(rx) {\n    return this.attr('r', rx);\n  }\n\n  // Alias radius x value\n  ry(ry) {\n    return this.rx(ry);\n  }\n  size(size) {\n    return this.radius(new SVGNumber(size).divide(2));\n  }\n}\nextend(Circle, {\n  x: x$3,\n  y: y$3,\n  cx: cx$1,\n  cy: cy$1,\n  width: width$2,\n  height: height$2\n});\nregisterMethods({\n  Container: {\n    // Create circle element\n    circle: wrapWithAttrCheck(function (size = 0) {\n      return this.put(new Circle()).size(size).move(0, 0);\n    })\n  }\n});\nregister(Circle, 'Circle');\n\nclass ClipPath extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('clipPath', node), attrs);\n  }\n\n  // Unclip all clipped elements and remove itself\n  remove() {\n    // unclip all targets\n    this.targets().forEach(function (el) {\n      el.unclip();\n    });\n\n    // remove clipPath from parent\n    return super.remove();\n  }\n  targets() {\n    return baseFind('svg [clip-path*=' + this.id() + ']');\n  }\n}\nregisterMethods({\n  Container: {\n    // Create clipping element\n    clip: wrapWithAttrCheck(function () {\n      return this.defs().put(new ClipPath());\n    })\n  },\n  Element: {\n    // Distribute clipPath to svg element\n    clipper() {\n      return this.reference('clip-path');\n    },\n    clipWith(element) {\n      // use given clip or create a new one\n      const clipper = element instanceof ClipPath ? element : this.parent().clip().add(element);\n\n      // apply mask\n      return this.attr('clip-path', 'url(#' + clipper.id() + ')');\n    },\n    // Unclip element\n    unclip() {\n      return this.attr('clip-path', null);\n    }\n  }\n});\nregister(ClipPath, 'ClipPath');\n\nclass ForeignObject extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('foreignObject', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    foreignObject: wrapWithAttrCheck(function (width, height) {\n      return this.put(new ForeignObject()).size(width, height);\n    })\n  }\n});\nregister(ForeignObject, 'ForeignObject');\n\nfunction dmove(dx, dy) {\n  this.children().forEach(child => {\n    let bbox;\n\n    // We have to wrap this for elements that dont have a bbox\n    // e.g. title and other descriptive elements\n    try {\n      // Get the childs bbox\n      // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1905039\n      // Because bbox for nested svgs returns the contents bbox in the coordinate space of the svg itself (weird!), we cant use bbox for svgs\n      // Therefore we have to use getBoundingClientRect. But THAT is broken (as explained in the bug).\n      // Funnily enough the broken behavior would work for us but that breaks it in chrome\n      // So we have to replicate the broken behavior of FF by just reading the attributes of the svg itself\n      bbox = child.node instanceof getWindow().SVGSVGElement ? new Box(child.attr(['x', 'y', 'width', 'height'])) : child.bbox();\n    } catch (e) {\n      return;\n    }\n\n    // Get childs matrix\n    const m = new Matrix(child);\n    // Translate childs matrix by amount and\n    // transform it back into parents space\n    const matrix = m.translate(dx, dy).transform(m.inverse());\n    // Calculate new x and y from old box\n    const p = new Point(bbox.x, bbox.y).transform(matrix);\n    // Move element\n    child.move(p.x, p.y);\n  });\n  return this;\n}\nfunction dx(dx) {\n  return this.dmove(dx, 0);\n}\nfunction dy(dy) {\n  return this.dmove(0, dy);\n}\nfunction height(height, box = this.bbox()) {\n  if (height == null) return box.height;\n  return this.size(box.width, height, box);\n}\nfunction move(x = 0, y = 0, box = this.bbox()) {\n  const dx = x - box.x;\n  const dy = y - box.y;\n  return this.dmove(dx, dy);\n}\nfunction size(width, height, box = this.bbox()) {\n  const p = proportionalSize(this, width, height, box);\n  const scaleX = p.width / box.width;\n  const scaleY = p.height / box.height;\n  this.children().forEach(child => {\n    const o = new Point(box).transform(new Matrix(child).inverse());\n    child.scale(scaleX, scaleY, o.x, o.y);\n  });\n  return this;\n}\nfunction width(width, box = this.bbox()) {\n  if (width == null) return box.width;\n  return this.size(width, box.height, box);\n}\nfunction x(x, box = this.bbox()) {\n  if (x == null) return box.x;\n  return this.move(x, box.y, box);\n}\nfunction y(y, box = this.bbox()) {\n  if (y == null) return box.y;\n  return this.move(box.x, y, box);\n}\n\nvar containerGeometry = {\n  __proto__: null,\n  dmove: dmove,\n  dx: dx,\n  dy: dy,\n  height: height,\n  move: move,\n  size: size,\n  width: width,\n  x: x,\n  y: y\n};\n\nclass G extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('g', node), attrs);\n  }\n}\nextend(G, containerGeometry);\nregisterMethods({\n  Container: {\n    // Create a group element\n    group: wrapWithAttrCheck(function () {\n      return this.put(new G());\n    })\n  }\n});\nregister(G, 'G');\n\nclass A extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('a', node), attrs);\n  }\n\n  // Link target attribute\n  target(target) {\n    return this.attr('target', target);\n  }\n\n  // Link url\n  to(url) {\n    return this.attr('href', url, xlink);\n  }\n}\nextend(A, containerGeometry);\nregisterMethods({\n  Container: {\n    // Create a hyperlink element\n    link: wrapWithAttrCheck(function (url) {\n      return this.put(new A()).to(url);\n    })\n  },\n  Element: {\n    unlink() {\n      const link = this.linker();\n      if (!link) return this;\n      const parent = link.parent();\n      if (!parent) {\n        return this.remove();\n      }\n      const index = parent.index(link);\n      parent.add(this, index);\n      link.remove();\n      return this;\n    },\n    linkTo(url) {\n      // reuse old link if possible\n      let link = this.linker();\n      if (!link) {\n        link = new A();\n        this.wrap(link);\n      }\n      if (typeof url === 'function') {\n        url.call(link, link);\n      } else {\n        link.to(url);\n      }\n      return this;\n    },\n    linker() {\n      const link = this.parent();\n      if (link && link.node.nodeName.toLowerCase() === 'a') {\n        return link;\n      }\n      return null;\n    }\n  }\n});\nregister(A, 'A');\n\nclass Mask extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('mask', node), attrs);\n  }\n\n  // Unmask all masked elements and remove itself\n  remove() {\n    // unmask all targets\n    this.targets().forEach(function (el) {\n      el.unmask();\n    });\n\n    // remove mask from parent\n    return super.remove();\n  }\n  targets() {\n    return baseFind('svg [mask*=' + this.id() + ']');\n  }\n}\nregisterMethods({\n  Container: {\n    mask: wrapWithAttrCheck(function () {\n      return this.defs().put(new Mask());\n    })\n  },\n  Element: {\n    // Distribute mask to svg element\n    masker() {\n      return this.reference('mask');\n    },\n    maskWith(element) {\n      // use given mask or create a new one\n      const masker = element instanceof Mask ? element : this.parent().mask().add(element);\n\n      // apply mask\n      return this.attr('mask', 'url(#' + masker.id() + ')');\n    },\n    // Unmask element\n    unmask() {\n      return this.attr('mask', null);\n    }\n  }\n});\nregister(Mask, 'Mask');\n\nclass Stop extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('stop', node), attrs);\n  }\n\n  // add color stops\n  update(o) {\n    if (typeof o === 'number' || o instanceof SVGNumber) {\n      o = {\n        offset: arguments[0],\n        color: arguments[1],\n        opacity: arguments[2]\n      };\n    }\n\n    // set attributes\n    if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n    if (o.color != null) this.attr('stop-color', o.color);\n    if (o.offset != null) this.attr('offset', new SVGNumber(o.offset));\n    return this;\n  }\n}\nregisterMethods({\n  Gradient: {\n    // Add a color stop\n    stop: function (offset, color, opacity) {\n      return this.put(new Stop()).update(offset, color, opacity);\n    }\n  }\n});\nregister(Stop, 'Stop');\n\nfunction cssRule(selector, rule) {\n  if (!selector) return '';\n  if (!rule) return selector;\n  let ret = selector + '{';\n  for (const i in rule) {\n    ret += unCamelCase(i) + ':' + rule[i] + ';';\n  }\n  ret += '}';\n  return ret;\n}\nclass Style extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('style', node), attrs);\n  }\n  addText(w = '') {\n    this.node.textContent += w;\n    return this;\n  }\n  font(name, src, params = {}) {\n    return this.rule('@font-face', {\n      fontFamily: name,\n      src: src,\n      ...params\n    });\n  }\n  rule(selector, obj) {\n    return this.addText(cssRule(selector, obj));\n  }\n}\nregisterMethods('Dom', {\n  style(selector, obj) {\n    return this.put(new Style()).rule(selector, obj);\n  },\n  fontface(name, src, params) {\n    return this.put(new Style()).font(name, src, params);\n  }\n});\nregister(Style, 'Style');\n\nclass TextPath extends Text {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('textPath', node), attrs);\n  }\n\n  // return the array of the path track element\n  array() {\n    const track = this.track();\n    return track ? track.array() : null;\n  }\n\n  // Plot path if any\n  plot(d) {\n    const track = this.track();\n    let pathArray = null;\n    if (track) {\n      pathArray = track.plot(d);\n    }\n    return d == null ? pathArray : this;\n  }\n\n  // Get the path element\n  track() {\n    return this.reference('href');\n  }\n}\nregisterMethods({\n  Container: {\n    textPath: wrapWithAttrCheck(function (text, path) {\n      // Convert text to instance if needed\n      if (!(text instanceof Text)) {\n        text = this.text(text);\n      }\n      return text.path(path);\n    })\n  },\n  Text: {\n    // Create path for text to run on\n    path: wrapWithAttrCheck(function (track, importNodes = true) {\n      const textPath = new TextPath();\n\n      // if track is a path, reuse it\n      if (!(track instanceof Path)) {\n        // create path element\n        track = this.defs().path(track);\n      }\n\n      // link textPath to path and add content\n      textPath.attr('href', '#' + track, xlink);\n\n      // Transplant all nodes from text to textPath\n      let node;\n      if (importNodes) {\n        while (node = this.node.firstChild) {\n          textPath.node.appendChild(node);\n        }\n      }\n\n      // add textPath element as child node and return textPath\n      return this.put(textPath);\n    }),\n    // Get the textPath children\n    textPath() {\n      return this.findOne('textPath');\n    }\n  },\n  Path: {\n    // creates a textPath from this path\n    text: wrapWithAttrCheck(function (text) {\n      // Convert text to instance if needed\n      if (!(text instanceof Text)) {\n        text = new Text().addTo(this.parent()).text(text);\n      }\n\n      // Create textPath from text and path and return\n      return text.path(this);\n    }),\n    targets() {\n      return baseFind('svg textPath').filter(node => {\n        return (node.attr('href') || '').includes(this.id());\n      });\n\n      // Does not work in IE11. Use when IE support is dropped\n      // return baseFind('svg textPath[*|href*=' + this.id() + ']')\n    }\n  }\n});\nTextPath.prototype.MorphArray = PathArray;\nregister(TextPath, 'TextPath');\n\nclass Use extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('use', node), attrs);\n  }\n\n  // Use element as a reference\n  use(element, file) {\n    // Set lined element\n    return this.attr('href', (file || '') + '#' + element, xlink);\n  }\n}\nregisterMethods({\n  Container: {\n    // Create a use element\n    use: wrapWithAttrCheck(function (element, file) {\n      return this.put(new Use()).use(element, file);\n    })\n  }\n});\nregister(Use, 'Use');\n\n/* Optional Modules */\nconst SVG = makeInstance;\nextend([Svg, Symbol, Image, Pattern, Marker], getMethodsFor('viewbox'));\nextend([Line, Polyline, Polygon, Path], getMethodsFor('marker'));\nextend(Text, getMethodsFor('Text'));\nextend(Path, getMethodsFor('Path'));\nextend(Defs, getMethodsFor('Defs'));\nextend([Text, Tspan], getMethodsFor('Tspan'));\nextend([Rect, Ellipse, Gradient, Runner], getMethodsFor('radius'));\nextend(EventTarget, getMethodsFor('EventTarget'));\nextend(Dom, getMethodsFor('Dom'));\nextend(Element, getMethodsFor('Element'));\nextend(Shape, getMethodsFor('Shape'));\nextend([Container, Fragment], getMethodsFor('Container'));\nextend(Gradient, getMethodsFor('Gradient'));\nextend(Runner, getMethodsFor('Runner'));\nList.extend(getMethodNames());\nregisterMorphableType([SVGNumber, Color, Box, Matrix, SVGArray, PointArray, PathArray, Point]);\nmakeMorphable();\n\nexports.A = A;\nexports.Animator = Animator;\nexports.Array = SVGArray;\nexports.Box = Box;\nexports.Circle = Circle;\nexports.ClipPath = ClipPath;\nexports.Color = Color;\nexports.Container = Container;\nexports.Controller = Controller;\nexports.Defs = Defs;\nexports.Dom = Dom;\nexports.Ease = Ease;\nexports.Element = Element;\nexports.Ellipse = Ellipse;\nexports.EventTarget = EventTarget;\nexports.ForeignObject = ForeignObject;\nexports.Fragment = Fragment;\nexports.G = G;\nexports.Gradient = Gradient;\nexports.Image = Image;\nexports.Line = Line;\nexports.List = List;\nexports.Marker = Marker;\nexports.Mask = Mask;\nexports.Matrix = Matrix;\nexports.Morphable = Morphable;\nexports.NonMorphable = NonMorphable;\nexports.Number = SVGNumber;\nexports.ObjectBag = ObjectBag;\nexports.PID = PID;\nexports.Path = Path;\nexports.PathArray = PathArray;\nexports.Pattern = Pattern;\nexports.Point = Point;\nexports.PointArray = PointArray;\nexports.Polygon = Polygon;\nexports.Polyline = Polyline;\nexports.Queue = Queue;\nexports.Rect = Rect;\nexports.Runner = Runner;\nexports.SVG = SVG;\nexports.Shape = Shape;\nexports.Spring = Spring;\nexports.Stop = Stop;\nexports.Style = Style;\nexports.Svg = Svg;\nexports.Symbol = Symbol;\nexports.Text = Text;\nexports.TextPath = TextPath;\nexports.Timeline = Timeline;\nexports.TransformBag = TransformBag;\nexports.Tspan = Tspan;\nexports.Use = Use;\nexports.adopt = adopt;\nexports.assignNewId = assignNewId;\nexports.clearEvents = clearEvents;\nexports.create = create;\nexports.defaults = defaults;\nexports.dispatch = dispatch;\nexports.easing = easing;\nexports.eid = eid;\nexports.extend = extend;\nexports.find = baseFind;\nexports.getClass = getClass;\nexports.getEventTarget = getEventTarget;\nexports.getEvents = getEvents;\nexports.getWindow = getWindow;\nexports.makeInstance = makeInstance;\nexports.makeMorphable = makeMorphable;\nexports.mockAdopt = mockAdopt;\nexports.namespaces = namespaces;\nexports.nodeOrNew = nodeOrNew;\nexports.off = off;\nexports.on = on;\nexports.parser = parser;\nexports.regex = regex;\nexports.register = register;\nexports.registerMorphableType = registerMorphableType;\nexports.registerWindow = registerWindow;\nexports.restoreWindow = restoreWindow;\nexports.root = root;\nexports.saveWindow = saveWindow;\nexports.utils = utils;\nexports.windowEvents = windowEvents;\nexports.withWindow = withWindow;\nexports.wrapWithAttrCheck = wrapWithAttrCheck;\n//# sourceMappingURL=svg.node.cjs.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPaper = getPaper;\nconst svg_js_1 = require(\"@svgdotjs/svg.js\");\nfunction getPaper() {\n    // eslint-disable-next-line new-cap\n    return (0, svg_js_1.SVG)();\n}\n//# sourceMappingURL=getPaper.browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResiduesPosition = appendResiduesPosition;\nconst getPaper_1 = require(\"./getPaper\");\nfunction appendResiduesPosition(data, options = {}) {\n    const residues = data.residues;\n    const { leftRightBorders = 20, spaceBetweenResidues = 20, width = 600, } = options;\n    let xPos = leftRightBorders;\n    let xOld = xPos;\n    let line = 0;\n    // we create a temporary paper in order to get the width of the text blocs\n    const paper = (0, getPaper_1.getPaper)();\n    for (let i = 0; i < residues.all.length; i++) {\n        let residue = residues.all[i];\n        let textWidth = getTextWidth(paper, residue.label, options);\n        xPos += textWidth;\n        if (xPos > width - leftRightBorders) {\n            xOld = leftRightBorders;\n            xPos = leftRightBorders + textWidth;\n            line++;\n        }\n        setPaper(residue, xOld, xPos, line);\n        xPos += spaceBetweenResidues;\n        xOld = xPos;\n    }\n    residues.nbLines = line;\n}\nfunction setPaper(residue, xFrom, xTo, line) {\n    residue.paper = {\n        xFrom,\n        xTo,\n        line,\n        usedSlots: [],\n        topPosition: 0,\n        bottomPosition: 0,\n    };\n}\nfunction getTextWidth(paper, label, options = {}) {\n    const { labelFontFamily = 'Verdana', labelSize = 12 } = options;\n    let text = paper.text(label);\n    text.font({\n        family: labelFontFamily,\n        size: labelSize,\n        weight: 'bold',\n        fill: '#888',\n    });\n    let textWidth = text.length() || text.bbox().width;\n    text.remove();\n    return textWidth;\n}\n//# sourceMappingURL=appendResiduesPosition.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResults = appendResults;\nfunction appendResults(data, analysisResult, options = {}) {\n    const numberResidues = data.residues.residues.length;\n    const { merge = {}, filter = {} } = options;\n    let results = structuredClone(analysisResult);\n    results = results.filter((result) => !result.type.match(/^-B\\d$/));\n    // we calculate all the lines based on the results\n    for (let result of results) {\n        let parts = result.type.split(/:|(?=[a-z])/); // we may have ':' but not mandatory\n        if (parts.length === 2) {\n            result.internal = true;\n            if (parts[1].match(/^[a-d][1-9]/)) {\n                [parts[0], parts[1]] = [parts[1], parts[0]];\n            }\n            result.to = getNumber(parts[0]) - 1;\n            result.from = numberResidues - getNumber(parts[1]);\n        }\n        else {\n            if (parts[0].match(/^[a-d][1-9]/)) {\n                result.fromBegin = true;\n                result.position = getNumber(parts[0]) - 1;\n            }\n            if (parts[0].match(/^[w-z][1-9]/)) {\n                result.fromEnd = true;\n                result.position = numberResidues - 1 - getNumber(parts[0]);\n            }\n        }\n        if (result.fromEnd)\n            result.color = 'red';\n        if (result.fromBegin)\n            result.color = 'blue';\n        if (result.internal) {\n            switch (result.type.slice(0, 1)) {\n                case 'a':\n                    result.color = 'green';\n                    break;\n                case 'b':\n                    result.color = 'orange';\n                    break;\n                case 'c':\n                    result.color = 'cyan';\n                    break;\n                default:\n                    result.color = 'green';\n            }\n        }\n    }\n    if (merge.charge) {\n        const unique = {};\n        for (let result of results) {\n            if (!unique[result.type]) {\n                unique[result.type] = [];\n            }\n            unique[result.type].push(result);\n        }\n        results = [];\n        for (let key in unique) {\n            let current = unique[key][0];\n            current.similarity = unique[key].reduce((previous, item) => previous + item.similarity, 0);\n            current.similarity = current.similarity / unique[key].length;\n            results.push(current);\n            current.charge = '';\n        }\n    }\n    for (let result of results) {\n        if (result.similarity > 0.95) {\n            result.textColor = 'black';\n        }\n        else if (result.similarity > 0.9) {\n            result.textColor = '#333';\n        }\n        else if (result.similariy > 0.8) {\n            result.textColor = '#666';\n        }\n        else {\n            result.textColor = '#999';\n        }\n    }\n    results = filterResults(results, filter);\n    // sort by residue length\n    results.sort((a, b) => a.length - b.length);\n    data.results = results;\n}\nfunction getNumber(text) {\n    return Number(text.replace(/^.(\\d+).*$/, '$1'));\n}\nfunction filterResults(results, filter) {\n    if (!filter)\n        return;\n    let { minRelativeQuantity = 0, minSimilarity = 0, minQuantity = 0, showInternals = true, } = filter;\n    if (minRelativeQuantity) {\n        minQuantity =\n            Math.max(...results.map((entry) => entry.quantity)) * minRelativeQuantity;\n    }\n    if (minSimilarity) {\n        results = results.filter((result) => !result.similarity || result.similarity >= minSimilarity);\n    }\n    if (minQuantity) {\n        results = results.filter((result) => !result.quantity || result.quantity >= minQuantity);\n    }\n    if (!showInternals) {\n        results = results.filter((result) => !result.internal);\n    }\n    return results;\n}\n//# sourceMappingURL=appendResults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendRows = appendRows;\nfunction appendRows(data) {\n    let allResidues = data.residues.all.toSorted((a, b) => a.line - b.line);\n    data.rows = [];\n    for (let residue of allResidues) {\n        let line = residue.paper.line;\n        if (!data.rows[line]) {\n            data.rows[line] = {\n                residues: [],\n            };\n        }\n        data.rows[line].residues.push(residue);\n    }\n    for (let row of data.rows) {\n        row.info = {};\n    }\n}\n//# sourceMappingURL=appendRows.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendRowsInformation = appendRowsInformation;\n/**\n * For each row we calculate internals, label over and label under\n * @param {*} data\n */\nfunction appendRowsInformation(data) {\n    for (let row of data.rows) {\n        let filtered = row.residues.filter((entry) => entry.fromBegin !== undefined);\n        if (filtered.length > 0) {\n            row.info.firstResidue = filtered[0].fromBegin;\n            row.info.lastResidue = filtered.at(-1).fromBegin;\n        }\n        row.internals = [];\n    }\n    for (let result of data.results) {\n        if (result.internal) {\n            let fromResidue = data.residues.residues[result.from];\n            let from = fromResidue.fromBegin;\n            let toResidue = data.residues.residues[result.to];\n            let to = toResidue.fromBegin;\n            for (let row of data.rows) {\n                if (from <= row.info.lastResidue && to >= row.info.firstResidue) {\n                    result = structuredClone(result);\n                    result.fromResidue = fromResidue;\n                    if (from < row.info.firstResidue) {\n                        result.firstIndex = true;\n                    }\n                    else {\n                        for (const [index, residue] of row.residues.entries()) {\n                            if (residue.fromBegin === from) {\n                                result.firstIndex = index;\n                            }\n                        }\n                    }\n                    result.toResidue = toResidue;\n                    if (to > row.info.lastResidue) {\n                        result.lastIndex = true;\n                    }\n                    else {\n                        for (const [index, residue] of row.residues.entries()) {\n                            if (residue.fromBegin === to) {\n                                result.lastIndex = index;\n                            }\n                        }\n                    }\n                    row.internals.push(result);\n                }\n            }\n        }\n        else if (result.position !== undefined &&\n            data.residues.residues[result.position]) {\n            let residue = data.residues.residues[result.position];\n            if (result.fromEnd) {\n                residue.info.nbOver++;\n                residue.results.end.push(result);\n            }\n            if (result.fromBegin) {\n                residue.info.nbUnder++;\n                residue.results.begin.push(result);\n            }\n        }\n    }\n    for (let row of data.rows) {\n        let maxNbOver = 0;\n        let maxNbUnder = 0;\n        for (let residue of row.residues) {\n            if (residue.info.nbOver > maxNbOver)\n                maxNbOver = residue.info.nbOver;\n            if (residue.info.nbUnder > maxNbUnder)\n                maxNbUnder = residue.info.nbUnder;\n        }\n        row.info.nbOver = maxNbOver;\n        row.info.nbUnder = maxNbUnder;\n    }\n}\n//# sourceMappingURL=appendRowsInformation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addCSS = addCSS;\nfunction addCSS(paper) {\n    let cssCode = `\n    .highlight {\n        stroke: yellow;\n        stroke-width: 5px;\n        fill: red;\n    }\n    .highlightText {\n        fill: red;\n    }\n    `;\n    let style = paper.element('style');\n    style.words(cssCode);\n}\n//# sourceMappingURL=addCSS.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addScript = addScript;\nfunction addScript(paper) {\n    let scriptCode = ` // <![CDATA[\n        function mouseOver(evt) {\n           \n            let targetRange=evt.target.id.replace(/^line/,'');\n            let from=targetRange.replace(/-.*/,'')*1;\n            let to=targetRange.replace(/.*-/,'')*1;\n            let children=evt.target.parentNode.children;\n            for (let child of children) {\n                if (child.id === evt.target.id) {\n                    child.setAttribute('class','highlight');\n                }\n                if (child.nodeName === 'text' && child.id.startsWith(\"residue\")) {\n                    let residueNumber=child.id.replace(/residue-/,'')*1;\n                    if (residueNumber>=from && residueNumber<=to) {\n                        child.setAttribute('class','highlightText');\n                    }\n                }\n            }\n        }\n        function mouseOut(evt) {\n            let children=evt.target.parentNode.children;\n            for (let child of children) {\n                if (child.id === evt.target.id) {\n                    child.setAttribute('class','');\n                }\n                if (child.nodeName === 'text' && child.id.startsWith(\"residue\")) {\n                    child.setAttribute('class','');\n                }\n            }\n        }\n     // ]]>\n    `;\n    let script = paper.element('script');\n    script.attr({\n        type: 'application/ecmascript',\n    });\n    script.words(scriptCode);\n}\n//# sourceMappingURL=addScript.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawLabel = drawLabel;\nfunction drawLabel(paper, result, x, y, options) {\n    let label = result.type;\n    let similarity = String(Math.round(result.similarity * 100));\n    let charge = result.charge > 0 ? `+${result.charge}` : result.charge;\n    let text = paper.plain(label);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        weight: 'bold',\n        size: options.labelSize,\n        anchor: 'end',\n    });\n    text.attr({\n        x,\n        y,\n    });\n    let textWidth = 0;\n    text = paper.plain(charge);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        size: options.labelSize / 2,\n    });\n    text.attr({ x: x + textWidth, y: y - options.labelSize / 2 });\n    text = paper.plain(similarity);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        size: options.labelSize / 2,\n    });\n    text.attr({ x: x + textWidth, y });\n}\n//# sourceMappingURL=drawLabel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawInternals = drawInternals;\nconst drawLabel_1 = require(\"./drawLabel\");\nfunction drawInternals(paper, row, options) {\n    let fromX = 0;\n    let toX = 0;\n    for (const internal of row.internals) {\n        options.verticalPosition += options.spaceBetweenInternalLines;\n        if (internal.firstIndex === true) {\n            fromX = 0;\n        }\n        else {\n            fromX =\n                internal.fromResidue.paper.xFrom - options.spaceBetweenResidues / 2;\n        }\n        if (internal.lastIndex === true) {\n            toX = options.width - 1;\n        }\n        else {\n            toX = internal.toResidue.paper.xTo + options.spaceBetweenResidues / 2;\n        }\n        let y = options.verticalPosition;\n        let drawLine = paper.line(fromX, y, toX, y);\n        drawLine.attr({\n            onmouseover: 'mouseOver(evt)',\n            onmouseout: 'mouseOut(evt)',\n            id: `line${internal.fromResidue.fromBegin}-${internal.toResidue.fromBegin}`,\n        });\n        drawLine.stroke({\n            color: internal.color,\n            width: options.strokeWidth,\n        });\n        let center = (fromX + toX + (internal.type.length * options.labelSize * 2) / 3) / 2;\n        (0, drawLabel_1.drawLabel)(paper, internal, center, y - 2, options);\n    }\n    options.verticalPosition += options.spaceBetweenInternalLines * 2;\n}\n//# sourceMappingURL=drawInternals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawReplacements = drawReplacements;\nfunction drawReplacements(paper, data, options) {\n    let replacements = data.residues.replacements;\n    replacements = Object.keys(replacements).map((key) => {\n        return { key, ...replacements[key] };\n    });\n    for (let replacement of replacements) {\n        options.verticalPosition += options.spaceBetweenInternalLines;\n        let text = paper.plain(`${replacement.label} = ${replacement.key}`);\n        text.font({\n            fill: 'darkviolet',\n            family: options.labelFontFamily,\n            weight: 'bold',\n            size: 10,\n        });\n        text.attr({\n            x: options.leftRightBorders,\n            y: options.verticalPosition,\n        });\n    }\n    options.verticalPosition += options.spaceBetweenInternalLines;\n}\n//# sourceMappingURL=drawReplacements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawTerminals = drawTerminals;\nconst drawLabel_1 = require(\"./drawLabel\");\nfunction drawTerminals(paper, row, options) {\n    for (let residue of row.residues) {\n        if (!residue.results)\n            continue;\n        for (let result of residue.results.begin) {\n            let line = paper.line(residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y, residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y - 8);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            line = paper.line(residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y, residue.paper.xTo + options.spaceBetweenResidues / 2 - 5, residue.paper.y + 5);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            (0, drawLabel_1.drawLabel)(paper, result, residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y +\n                options.labelSize +\n                6 +\n                residue.paper.bottomPosition * options.labelSize, options);\n            residue.paper.bottomPosition++;\n        }\n        for (let result of residue.results.end) {\n            let line = paper.line(residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y, residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y - 8);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            line = paper.line(residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y - 8, residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                5 +\n                options.strokeWidth, residue.paper.y - 13);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            (0, drawLabel_1.drawLabel)(paper, result, residue.paper.xTo + options.spaceBetweenResidues, residue.paper.y - 17 - residue.paper.topPosition * options.labelSize, options);\n            residue.paper.topPosition++;\n        }\n    }\n}\n//# sourceMappingURL=drawTerminals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawSequence = drawSequence;\nconst drawTerminals_1 = require(\"./drawTerminals\");\nfunction drawSequence(paper, row, options) {\n    // need to plan some space for the OVER\n    options.verticalPosition += row.info.nbOver * (options.labelSize + 1);\n    for (const residue of row.residues) {\n        residue.paper.y = options.verticalPosition;\n        let text = paper.plain(residue.label);\n        let textColor = residue.replaced\n            ? 'darkviolet'\n            : residue.kind === 'residue'\n                ? '#555'\n                : '#CCC';\n        text.font({\n            family: options.labelFontFamily,\n            size: 12,\n            weight: 'bold',\n            fill: textColor,\n        });\n        text.attr({\n            x: residue.paper.xFrom,\n            y: residue.paper.y,\n        });\n        text.attr({ id: `residue-${residue.fromBegin}` });\n    }\n    (0, drawTerminals_1.drawTerminals)(paper, row, options);\n    // need to plan some space for the UNDER\n    options.verticalPosition += row.info.nbUnder * (options.labelSize + 1);\n    options.verticalPosition += options.spaceBetweenInternalLines * 2;\n}\n//# sourceMappingURL=drawSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceSVG = sequenceSVG;\nconst appendInternals_1 = require(\"./appendInternals\");\nconst appendResidues_1 = require(\"./appendResidues\");\nconst appendResiduesPosition_1 = require(\"./appendResiduesPosition\");\nconst appendResults_1 = require(\"./appendResults\");\nconst appendRows_1 = require(\"./appendRows\");\nconst appendRowsInformation_1 = require(\"./appendRowsInformation\");\nconst addCSS_1 = require(\"./draw/addCSS\");\nconst addScript_1 = require(\"./draw/addScript\");\nconst drawInternals_1 = require(\"./draw/drawInternals\");\nconst drawReplacements_1 = require(\"./draw/drawReplacements\");\nconst drawSequence_1 = require(\"./draw/drawSequence\");\nconst getPaper_1 = require(\"./getPaper\");\n/**\n *\n * @param {string} sequence\n * @param {array} analysisResults\n * @param {object} [options={}]\n * @param {number} [options.leftRightBorders=50]\n * @param {number} [options.width=600]\n * @param {number} [options.spaceBetweenResidues=30]\n * @param {number} [options.spaceBetweenInternalLines=12]\n * @param {number} [options.strokeWidth=2]\n * @param {string} [options.labelFontFamily='Verdana']\n * @param {number} [options.labelSize=8]\n * @param {number} [options.parsing] Sequence parsing options\n * @param {object} [options.merge={}]\n * @param {boolean} [options.merge.charge] Merge results if only differs by charge\n * @param {object} [options.filter={}] define some filters\n * @param {number} [options.filter.minSimilarity=0]  minimal similarity\n * @param {number} [options.filter.minQuantity=0]  minimal quantity\n * @param {number} [options.filter.minRelativeQuantity=0]  minimal relative quantity. This value should be between 0 and 1 and supersede minQuantity.\n * @param {boolean} [options.filter.showInternals=true] show the internal fragments\n *\n */\nfunction sequenceSVG(sequence, analysisResults, options = {}) {\n    const { width = 600, leftRightBorders = 50, spaceBetweenResidues = 30, spaceBetweenInternalLines = 12, strokeWidth = 2, labelFontFamily = 'Verdana', labelSize = 8, parsing, merge, filter, } = options;\n    const drawOptions = {\n        spaceBetweenResidues,\n        leftRightBorders,\n        spaceBetweenInternalLines,\n        strokeWidth,\n        labelSize,\n        labelFontFamily,\n        verticalPosition: spaceBetweenInternalLines,\n        width,\n    };\n    let data = {};\n    (0, appendResidues_1.appendResidues)(data, sequence, parsing);\n    (0, appendResults_1.appendResults)(data, analysisResults, {\n        merge,\n        filter,\n    });\n    (0, appendResiduesPosition_1.appendResiduesPosition)(data, {\n        leftRightBorders,\n        spaceBetweenResidues,\n        labelFontFamily,\n        labelSize,\n        width,\n    });\n    (0, appendRows_1.appendRows)(data);\n    (0, appendInternals_1.appendInternals)(data);\n    (0, appendRowsInformation_1.appendRowsInformation)(data);\n    // We start to create the SVG and create the paper\n    const paper = (0, getPaper_1.getPaper)();\n    (0, addCSS_1.addCSS)(paper);\n    (0, addScript_1.addScript)(paper);\n    for (let row of data.rows) {\n        (0, drawInternals_1.drawInternals)(paper, row, drawOptions);\n        (0, drawSequence_1.drawSequence)(paper, row, drawOptions);\n    }\n    (0, drawReplacements_1.drawReplacements)(paper, data, drawOptions);\n    paper.size(width, drawOptions.verticalPosition);\n    let svg = paper.svg();\n    paper.clear();\n    return svg;\n}\n//# sourceMappingURL=sequenceSVG.js.map","var IDX=256, HEX=[], BUFFER;\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nfunction v4() {\n\tvar i=0, num, out='';\n\n\tif (!BUFFER || ((IDX + 16) > 256)) {\n\t\tBUFFER = Array(i=256);\n\t\twhile (i--) BUFFER[i] = 256 * Math.random() | 0;\n\t\ti = IDX = 0;\n\t}\n\n\tfor (; i < 16; i++) {\n\t\tnum = BUFFER[IDX + i];\n\t\tif (i==6) out += HEX[num & 15 | 64];\n\t\telse if (i==8) out += HEX[num & 63 | 128];\n\t\telse out += HEX[num];\n\n\t\tif (i & 1 && i > 1 && i < 11) out += '-';\n\t}\n\n\tIDX++;\n\treturn out;\n}\n\nexports.v4 = v4;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeakWidthFct = getPeakWidthFct;\n/**\n *\n * @param {object} [options ={}]\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @returns\n */\nfunction getPeakWidthFct(options = {}) {\n    const { logger, mass: massOptions = {} } = options;\n    const { precision = 0, peakWidthFct } = massOptions;\n    if (typeof peakWidthFct === 'function') {\n        return peakWidthFct;\n    }\n    if (!peakWidthFct) {\n        return () => 0.01;\n    }\n    try {\n        // eslint-disable-next-line no-new-func\n        return new Function('mass', `return ${peakWidthFct} + ${precision} * mass / 1e6`);\n    }\n    catch (error) {\n        logger?.warn(`error in peakWidthFct: ${error.toString()}`);\n        return fixedWidthFct;\n    }\n}\nfunction fixedWidthFct() {\n    return 0.01;\n}\n//# sourceMappingURL=getPeakWidthFct.js.map","/**\n * From an array of arrays it constructs a unique key for each array,\n * given by its values, such that same arrays have same keys.\n *\n * @param collection - Array of arrays\n * @returns - Array of objects with the original array, its index and its key\n */\nfunction addUniqueKeyToColumns(collection) {\n    return collection.map((positiveRows, columnIndexInK) => {\n        //indices of positive values within the column. (Pset)\n        let key = BigInt(0);\n        // items will be the indexes of Pset, so it's always an integer.\n        positiveRows.forEach((item) => (key |= BigInt(1) << BigInt(item)));\n        return { positiveRows, columnIndexInK, key };\n    });\n}\n/**\n * From an array of arrays it constructs a unique key for each subarray,\n * given by its values, such that same arrays have same keys.\n * @param collection - Array of arrays\n * @returns Array of objects with the original array, its index and its key\n */\nexport default function groupColumnsBySign(collection) {\n    const mapped = addUniqueKeyToColumns(collection);\n    mapped.sort((a, b) => {\n        if (a.key - b.key < 0)\n            return -1;\n        return 1;\n    });\n    const sorted = [];\n    const indices = [];\n    let key;\n    for (const set of mapped) {\n        if (set.key !== key) {\n            key = set.key;\n            indices.push([]);\n            sorted.push(set.positiveRows);\n        }\n        indices[indices.length - 1].push(set.columnIndexInK);\n    }\n    const result = {\n        values: sorted,\n        indices,\n    };\n    return result;\n}\n//# sourceMappingURL=sortCollectionSet.js.map","import { Matrix, LuDecomposition, solve, CholeskyDecomposition, } from 'ml-matrix';\nimport sortCollectionSet from './util/sortCollectionSet';\n/**\n * Combinatorial Subspace Least Squares - subfunction for the FC-NNLS\n * Solves XtX*K = XtY for the variables in Pset\n * if XtX (or XtX(vars,vars)) is singular, performs the svd and find pseudo-inverse, otherwise (even if ill-conditioned) finds inverse with LU decomposition and solves the set of equation\n * it is consistent with matlab results for ill-conditioned matrices (at least consistent with test 'ill-conditioned square X rank 2, Y 3x1' in cssls.test)\n * @param XtX - Gram matrix\n * @param XtY\n * @param Pset - Subset of matrix K with positive values (indices)\n * @param l - number of rows of X\n * @param p - number of columns of Y\n */\nexport function cssls(XtX, XtY, Pset, l, p) {\n    let K = Matrix.zeros(l, p);\n    if (Pset === null) {\n        // used for initialisation where OLS is solved.\n        const choXtX = new CholeskyDecomposition(XtX);\n        if (choXtX.isPositiveDefinite()) {\n            K = choXtX.solve(XtY);\n        }\n        else {\n            const luXtX = new LuDecomposition(XtX);\n            if (!luXtX.isSingular()) {\n                K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n            }\n            else {\n                K = solve(XtX, XtY, true);\n            }\n        }\n    }\n    else {\n        const { values: sortedPset, indices: sortedEset } = sortCollectionSet(Pset);\n        if (sortedPset.length === 1 &&\n            sortedPset[0].length === 0 &&\n            sortedEset[0].length === p) {\n            return K;\n        }\n        else if (sortedPset.length === 1 &&\n            sortedPset[0].length === l &&\n            sortedEset[0].length === p) {\n            const choXtX = new CholeskyDecomposition(XtX);\n            if (choXtX.isPositiveDefinite()) {\n                K = choXtX.solve(XtY);\n            }\n            else {\n                const luXtX = new LuDecomposition(XtX);\n                if (!luXtX.isSingular()) {\n                    K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n                }\n                else {\n                    K = solve(XtX, XtY, true);\n                }\n            }\n        }\n        else {\n            for (let k = 0; k < sortedPset.length; k++) {\n                const cols2Solve = sortedEset[k];\n                const vars = sortedPset[k];\n                let L;\n                const choXtX = new CholeskyDecomposition(XtX.selection(vars, vars));\n                if (choXtX.isPositiveDefinite()) {\n                    L = choXtX.solve(XtY.selection(vars, cols2Solve));\n                }\n                else {\n                    const luXtX = new LuDecomposition(XtX.selection(vars, vars));\n                    if (!luXtX.isSingular()) {\n                        L = luXtX\n                            .solve(Matrix.eye(vars.length))\n                            .mmul(XtY.selection(vars, cols2Solve));\n                    }\n                    else {\n                        L = solve(XtX.selection(vars, vars), XtY.selection(vars, cols2Solve), true);\n                    }\n                }\n                for (let i = 0; i < L.rows; i++) {\n                    for (let j = 0; j < L.columns; j++) {\n                        K.set(vars[i], cols2Solve[j], L.get(i, j));\n                    }\n                }\n            }\n        }\n    }\n    return K;\n}\n//# sourceMappingURL=cssls.js.map","import { Matrix } from 'ml-matrix';\nimport { cssls } from './cssls';\n/**\n * Solves as std linear squares,\n * and overwrites the negative values of K with 0 as an initial guess for K,\n * It also precomputes part of the pseudoinverse used to solve Least Squares.\n * @param - X input data matrix\n * @param - Y output data matrix\n * @returns - initial values for the algorithm (including the solution K to least squares, overwriting of negative values with 0)\n */\nexport function initialisation(X, Y) {\n    // X = n x l\n    // W = l x p, same as K\n    // Y = n x p\n    const n = X.rows;\n    const l = X.columns;\n    const p = Y.columns;\n    const iter = 0;\n    if (Y.rows !== n)\n        throw new Error('ERROR: matrix size not compatible');\n    const W = Matrix.zeros(l, p);\n    // precomputes part of pseudoinverse\n    const XtX = X.transpose().mmul(X);\n    const XtY = X.transpose().mmul(Y);\n    const K = cssls(XtX, XtY, null, l, p); // K is lxp\n    /* Each subarray corresponds to col of K\n     * And stores indices of positive values of that column\n     */\n    const Pset = [];\n    for (let j = 0; j < p; j++) {\n        Pset[j] = [];\n        for (let i = 0; i < l; i++) {\n            if (K.get(i, j) > 0) {\n                Pset[j].push(i); // [[1,2,3...,l],[1,2,4,7,..,l],[],..] p arrays, each length l or less\n            }\n            else {\n                K.set(i, j, 0);\n            } // This is our initial solution, it's the solution found by overwriting the unconstrained least square solution in K.\n        }\n    }\n    const Fset = [];\n    for (let j = 0; j < p; j++) {\n        if (Pset[j].length !== l) {\n            Fset.push(j); // If column j of K was not all positive, add it to the Fset. So Fset are the indices of columns with negative values\n        }\n    }\n    const D = K.clone();\n    return { n, l, p, iter, W, XtX, XtY, K, Pset, Fset, D };\n}\n//# sourceMappingURL=initialisation.js.map","/**\n * Computes the set difference A\\B\n * @param set A as an array\n * @param set B as an array\n * @returns Elements of A that are not in B\n */\nexport default function setDifference(A, B) {\n    const C = [];\n    for (const i of A) {\n        if (!B.includes(i))\n            C.push(i);\n    }\n    return C;\n}\n//# sourceMappingURL=setDifference.js.map","import setDifference from './util/setDifference';\n/**\n * Checks whether the solution has converged\n * @param iter - current iteration\n * @param maxIter - maximum number of iterations, @default 3 times the number of columns of X\n * @param XtX - Gram matrix\n * @param XtY\n * @param Fset - Columns to be optimized (active), it stores indices of columns with negative values\n * @param Pset - Subset of matrix K with positive values (indices)\n * @param W - Gradient Matrix\n * @param K - Coefficients Matrix\n * @param l - Number of rows of X\n * @param p - Number of columns of X\n * @param D - K clone\n * @param gradientTolerance - Control over the optimality of the solution; applied over the largest gradient value of all. @default 1e-5.\n * @returns - {Pset, Fset, W}\n */\nexport function optimality(iter, maxIter, XtX, XtY, Fset, Pset, W, K, l, p, D, gradientTolerance) {\n    if (iter === maxIter) {\n        throw new Error('Maximum number of iterations exceeded');\n    }\n    // Check solution for optimality\n    const V = XtY.subMatrixColumn(Fset).subtract(XtX.mmul(K.subMatrixColumn(Fset)));\n    for (let j = 0; j < Fset.length; j++) {\n        // for the \"negative\" columns, we set the new gradient.\n        W.setColumn(Fset[j], V.subMatrixColumn([j]));\n    }\n    const Jset = [];\n    const fullSet = [];\n    for (let i = 0; i < l; i++) {\n        fullSet.push(i);\n    }\n    for (const colIndex of Fset) {\n        const notPset = setDifference(fullSet, Pset[colIndex]);\n        if (notPset.length === 0) {\n            Jset.push(colIndex);\n        }\n        else if (W.selection(notPset, [colIndex]).max() <= gradientTolerance) {\n            Jset.push(colIndex);\n        }\n    }\n    Fset = setDifference(Fset, Jset);\n    // For non-optimal solutions, add the appropriate variables to Pset\n    if (Fset.length !== 0) {\n        for (let j = 0; j < Fset.length; j++) {\n            for (let i = 0; i < l; i++) {\n                if (Pset[Fset[j]].includes(i))\n                    W.set(i, Fset[j], -Infinity);\n            }\n            Pset[Fset[j]].push(W.subMatrixColumn(Fset).maxColumnIndex(j)[0]);\n        }\n        for (const colIndex of Fset) {\n            D.setColumn(colIndex, K.getColumn(colIndex));\n        }\n    }\n    for (let j = 0; j < p; j++) {\n        Pset[j].sort((a, b) => a - b);\n    }\n    return { Pset, Fset, W };\n}\n//# sourceMappingURL=optimality.js.map","/**\n * Returns a new array based on extraction of specific indices of an array\n * @param collection or array\n * @param indices\n */\nexport default function selection(vector, indices) {\n    const u = []; //new Float64Array(indices.length);\n    for (let i = 0; i < indices.length; i++) {\n        u[i] = vector[indices[i]];\n    }\n    return u;\n}\n//# sourceMappingURL=selection.js.map","import { Matrix } from 'ml-matrix';\nimport { cssls } from './cssls';\nimport { initialisation } from './initialisation';\nimport { optimality } from './optimality';\nimport selection from './util/selection';\n/**\n * Fast Combinatorial Non-negative Least Squares with multiple Right Hand Side\n * @param X\n * @param Y\n * @param options\n * @returns Solution Matrix.\n */\nexport default function fcnnls(X, Y, options = {}) {\n    X = Matrix.checkMatrix(X);\n    Y = Matrix.checkMatrix(Y);\n    const init = initialisation(X, Y);\n    const { l, p, XtX, XtY, K, D } = init;\n    let { iter, W, Pset, Fset } = init;\n    const { maxIterations = X.columns * 3, gradientTolerance = 1e-5 } = options;\n    // Active set algorithm for NNLS main loop\n    while (Fset.length > 0) {\n        // Solves for the passive variables (uses subroutine below)\n        let L = cssls(XtX, XtY.subMatrixColumn(Fset), selection(Pset, Fset), l, Fset.length);\n        for (let i = 0; i < l; i++) {\n            for (let j = 0; j < Fset.length; j++) {\n                K.set(i, Fset[j], L.get(i, j));\n            }\n        }\n        // Finds any infeasible solutions\n        const infeasIndex = [];\n        for (let j = 0; j < Fset.length; j++) {\n            for (let i = 0; i < l; i++) {\n                if (L.get(i, j) < 0) {\n                    infeasIndex.push(j);\n                    break;\n                }\n            }\n        }\n        let Hset = selection(Fset, infeasIndex);\n        // Makes infeasible solutions feasible (standard NNLS inner loop)\n        if (Hset.length > 0) {\n            let m = Hset.length;\n            const alpha = Matrix.ones(l, m);\n            while (m > 0 && iter < maxIterations) {\n                iter++;\n                alpha.mul(Infinity);\n                // Finds indices of negative variables in passive set\n                const hRowColIdx = [[], []]; // Indexes work in pairs, each pair reprensents a single element, first array is row index, second array is column index\n                const negRowColIdx = [[], []]; // Same as before\n                for (let j = 0; j < m; j++) {\n                    for (const item of Pset[Hset[j]]) {\n                        if (K.get(item, Hset[j]) < 0) {\n                            hRowColIdx[0].push(item); // i\n                            hRowColIdx[1].push(j);\n                            negRowColIdx[0].push(item); // i\n                            negRowColIdx[1].push(Hset[j]);\n                        } // Compared to matlab, here we keep the row/column indexing (we are not taking the linear indexing)\n                    }\n                }\n                for (let k = 0; k < hRowColIdx[0].length; k++) {\n                    // could be hRowColIdx[1].length as well\n                    alpha.set(hRowColIdx[0][k], hRowColIdx[1][k], D.get(negRowColIdx[0][k], negRowColIdx[1][k]) /\n                        (D.get(negRowColIdx[0][k], negRowColIdx[1][k]) -\n                            K.get(negRowColIdx[0][k], negRowColIdx[1][k])));\n                }\n                let alphaMin = [];\n                const minIdx = [];\n                for (let j = 0; j < m; j++) {\n                    alphaMin[j] = alpha.minColumn(j);\n                    minIdx[j] = alpha.minColumnIndex(j)[0];\n                }\n                alphaMin = Matrix.rowVector(alphaMin);\n                for (let i = 0; i < l; i++) {\n                    alpha.setSubMatrix(alphaMin, i, 0);\n                }\n                let E = new Matrix(l, m);\n                E = D.subMatrixColumn(Hset).subtract(alpha\n                    .subMatrix(0, l - 1, 0, m - 1)\n                    .mul(D.subMatrixColumn(Hset).subtract(K.subMatrixColumn(Hset))));\n                for (let j = 0; j < m; j++) {\n                    D.setColumn(Hset[j], E.subMatrixColumn([j]));\n                }\n                const idx2zero = [minIdx, Hset];\n                for (let k = 0; k < m; k++) {\n                    D.set(idx2zero[0][k], idx2zero[1][k], 0);\n                }\n                for (let j = 0; j < m; j++) {\n                    Pset[Hset[j]].splice(Pset[Hset[j]].findIndex((item) => item === minIdx[j]), 1);\n                }\n                L = cssls(XtX, XtY.subMatrixColumn(Hset), selection(Pset, Hset), l, m);\n                for (let j = 0; j < m; j++) {\n                    K.setColumn(Hset[j], L.subMatrixColumn([j]));\n                }\n                Hset = [];\n                for (let j = 0; j < K.columns; j++) {\n                    for (let i = 0; i < l; i++) {\n                        if (K.get(i, j) < 0) {\n                            Hset.push(j);\n                            break;\n                        }\n                    }\n                }\n                m = Hset.length;\n            }\n        }\n        const newParam = optimality(iter, maxIterations, XtX, XtY, Fset, Pset, W, K, l, p, D, gradientTolerance);\n        Pset = newParam.Pset;\n        Fset = newParam.Fset;\n        W = newParam.W;\n    }\n    return K;\n}\n//# sourceMappingURL=fcnnls.js.map","import { Matrix } from 'ml-matrix';\nimport fcnnls from './fcnnls';\n/**\n * Fast Combinatorial Non-negative Least Squares with single Right Hand Side\n * @param X - input data matrix\n * @param y - output data vector\n * @param options - for maxIterations\n * @returns Solution vector.\n */\nexport default function fcnnlsVector(X, y, options = {}) {\n    if (!Array.isArray(y)) {\n        throw new TypeError('y must be a 1D Array');\n    }\n    const Y = Matrix.columnVector(y);\n    const K = fcnnls(X, Y, options);\n    const k = K.to1DArray();\n    return k;\n}\n//# sourceMappingURL=fcnnlsVector.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitMatrix = splitMatrix;\nfunction splitMatrix(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    const { nonZeroColumns, nonZeroRows } = createMatrixIndexes(matrix);\n    const rowsMapping = new Int32Array(nbRows).fill(-1);\n    const columnsMapping = new Int32Array(nbColumns).fill(-1);\n    const matrices = [];\n    let currentMappingID = 0;\n    for (let row = 0; row < matrix.length; row++) {\n        for (let column of nonZeroColumns[row]) {\n            if (matrix[row][column] === 0) {\n                continue;\n            }\n            if (rowsMapping[row] !== -1) {\n                continue;\n            }\n            if (columnsMapping[column] !== -1) {\n                continue;\n            }\n            currentMappingID++;\n            const result = { rows: [], columns: [] };\n            matrices.push(result);\n            processFromACell(row, rowsMapping, columnsMapping, currentMappingID, nonZeroColumns, nonZeroRows, result);\n        }\n    }\n    appendSubMatrix(matrices, matrix);\n    return matrices;\n}\nfunction appendSubMatrix(matrices, matrix) {\n    for (const entry of matrices) {\n        const submatrix = new Array(entry.rows.length)\n            .fill(0)\n            .map(() => new Float64Array(entry.columns.length));\n        for (let i = 0; i < entry.rows.length; i++) {\n            for (let j = 0; j < entry.columns.length; j++) {\n                submatrix[i][j] = matrix[entry.rows[i]][entry.columns[j]];\n            }\n        }\n        entry.submatrix = submatrix;\n    }\n}\nfunction processFromACell(row, rowsMapping, columnsMapping, currentMappingID, nonZeroColumns, nonZeroRows, result) {\n    const rowsTodo = [row];\n    let nextRow;\n    while ((nextRow = rowsTodo.pop()) !== undefined) {\n        result.rows.push(nextRow);\n        for (let column of nonZeroColumns[nextRow]) {\n            if (columnsMapping[column] !== -1) {\n                continue;\n            }\n            rowsMapping[nextRow] = currentMappingID;\n            columnsMapping[column] = currentMappingID;\n            result.columns.push(column);\n            for (let internalRow of nonZeroRows[column]) {\n                if (rowsMapping[internalRow] === -1) {\n                    if (!rowsTodo.includes(internalRow)) {\n                        rowsTodo.push(internalRow);\n                    }\n                    continue;\n                }\n                if (rowsMapping[internalRow] !== currentMappingID) {\n                    throw new Error('This should not happen');\n                }\n            }\n        }\n    }\n}\nfunction createMatrixIndexes(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    const nonZeroColumns = new Array(nbRows).fill(0).map(() => []);\n    const nonZeroRows = new Array(nbColumns).fill(0).map(() => []);\n    for (let row = 0; row < nbRows; row++) {\n        for (let column = 0; column < nbColumns; column++) {\n            if (matrix[row][column] === 0) {\n                continue;\n            }\n            nonZeroColumns[row].push(column);\n            nonZeroRows[column].push(row);\n        }\n    }\n    return { nonZeroColumns, nonZeroRows };\n}\n//# sourceMappingURL=splitMatrix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.blockFcnnls = blockFcnnls;\nconst ml_fcnnls_1 = require(\"ml-fcnnls\");\nconst ml_matrix_1 = require(\"ml-matrix\");\nconst splitMatrix_js_1 = require(\"./splitMatrix.js\");\nfunction blockFcnnls(fullMatrix) {\n    const target = fullMatrix[0];\n    const originalMatrix = fullMatrix.slice(1);\n    const matrix = [];\n    const emptyRow = new Float64Array(originalMatrix[0].length);\n    row: for (const row of originalMatrix) {\n        for (let i = 0; i < row.length; i++) {\n            if (row[i] !== 0 && target[i] !== 0) {\n                matrix.push(row);\n                continue row;\n            }\n        }\n        matrix.push(emptyRow);\n    }\n    // if there is no match with first spectrum we just ignore this entry\n    const matrices = (0, splitMatrix_js_1.splitMatrix)(matrix);\n    appendTarget(matrices, target);\n    const weights = new Float64Array(matrix.length);\n    const reconstructed = new Float64Array(target.length);\n    for (const entry of matrices) {\n        const A = new ml_matrix_1.Matrix(entry.submatrix);\n        const At = A.transpose();\n        const b = Array.from(entry.target); // target\n        const w = (0, ml_fcnnls_1.fcnnlsVector)(At, b);\n        const W = new ml_matrix_1.Matrix([w]); // weights\n        const partialReconstructed = W.mmul(A).getRow(0);\n        for (let i = 0; i < entry.columns.length; i++) {\n            reconstructed[entry.columns[i]] = partialReconstructed[i];\n        }\n        for (let i = 0; i < entry.rows.length; i++) {\n            weights[entry.rows[i]] = w[i];\n        }\n    }\n    return {\n        reconstructed,\n        weights,\n    };\n}\nfunction appendTarget(matrices, target) {\n    for (const entry of matrices) {\n        entry.target = [];\n        for (let column of entry.columns) {\n            entry.target.push(target[column]);\n        }\n    }\n}\n//# sourceMappingURL=blockFcnnls.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfsDeconvolution = mfsDeconvolution;\nconst uuid_1 = require(\"@lukeed/uuid\");\nconst isotopic_distribution_1 = require(\"isotopic-distribution\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst ml_matrix_1 = require(\"ml-matrix\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst getPeakWidthFct_1 = require(\"./getPeakWidthFct\");\nconst blockFcnnls_js_1 = require(\"./utils/blockFcnnls.js\");\n/**\n *\n * @param {import('ms-spectrum').Spectrum} spectrum\n * @param {Array}         ranges\n * @param {object}        [options={}]\n * @param {string}        [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {string[]}      [options.customMFs={}] - An array of MFs to add to the list generated by ranges\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.threshold=0.001]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @param {object}        [options.filter={}]\n * @param {number}        [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number}        [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number}        [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}        [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}       [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {boolean}       [options.filter.allowNegativeAtoms=false] - Allow to have negative number of atoms\n * @param {object}        [options.filter.unsaturation={}]\n * @param {number}        [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}        [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}        [options.filter.atoms] - object of atom:{min, max}\n * @param {function}      [options.filter.callback] - a function to filter the MF\n * @param {string}        [options.filterFct]\n */\nasync function mfsDeconvolution(spectrum, ranges, options = {}) {\n    if (!spectrum || !spectrum.getPeaks || !spectrum.getPeaks()) {\n        throw new Error('spectrum must be an instance of Spectrum');\n    }\n    const { customMFs = [], mass: massOptions = {}, filter, ionizations, logger, } = options;\n    const { threshold = 0.001 } = massOptions;\n    if (!ionizations) {\n        logger?.warn('No ionizations provided this could be an error if the molecule is not naturally charged.');\n    }\n    const peakWidthFct = (0, getPeakWidthFct_1.getPeakWidthFct)(options);\n    const centroids = getCentroids(spectrum, { threshold });\n    let mfs = await (0, mf_generator_1.generateMFs)(ranges, { filter, ionizations });\n    if (customMFs.length > 0) {\n        const newMFs = await (0, mf_generator_1.generateMFs)([customMFs], { filter, ionizations });\n        mfs = mfs.concat(newMFs);\n    }\n    for (const mf of mfs) {\n        mf.id = (0, uuid_1.v4)();\n    }\n    mfs = addIsotopicDistributionAndCheckMF(mfs, { logger, peakWidthFct });\n    mfs.sort((mf1, mf2) => mf1.ms.em - mf2.ms.em);\n    const combined = buildCombined(centroids, mfs, { peakWidthFct });\n    if (!hasOverlap(combined.ys)) {\n        throw new Error('Could not find any overlaping peaks between experimental and theoretical spectra.');\n    }\n    const { weights, reconstructed } = (0, blockFcnnls_js_1.blockFcnnls)(combined.ys);\n    const relativeIntensity = (0, ml_spectra_processing_1.xNormed)(weights);\n    for (let i = 0; i < mfs.length; i++) {\n        mfs[i].absoluteQuantity = weights[i];\n        mfs[i].relativeQuantity = relativeIntensity[i];\n        mfs[i].distribution.y = mfs[i].distribution.y.map((y) => y * weights[i]);\n    }\n    let matchingScore = 0;\n    const difference = [];\n    for (let i = 0; i < combined.ys[0].length; i++) {\n        matchingScore += Math.min(combined.ys[0][i], reconstructed[i]);\n        difference.push(combined.ys[0][i] - reconstructed[i]);\n    }\n    matchingScore = matchingScore / (0, ml_spectra_processing_1.xSum)(combined.ys[0]);\n    let A;\n    let W;\n    return {\n        reconstructed: {\n            x: combined.x,\n            y: reconstructed,\n        },\n        difference: {\n            x: combined.x,\n            y: difference,\n        },\n        mfs: mfs\n            .slice()\n            .toSorted((mf1, mf2) => mf2.absoluteQuantity - mf1.absoluteQuantity),\n        matchingScore,\n        getFilteredReconstructed,\n    };\n    function getFilteredReconstructed(ids = mfs.map((mf) => mf.id)) {\n        if (!A)\n            A = new ml_matrix_1.Matrix(combined.ys.slice(1));\n        if (!W)\n            W = new ml_matrix_1.Matrix([weights]);\n        let wClone = W;\n        if (ids.length !== W.length) {\n            wClone = W.clone();\n            for (let i = 0; i < mfs.length; i++) {\n                if (ids.includes(mfs[i].id))\n                    continue;\n                wClone.set(0, i, 0);\n            }\n        }\n        const filteredReconstructed = wClone.mmul(A).getRow(0);\n        return {\n            x: combined.x,\n            y: filteredReconstructed,\n        };\n    }\n}\n/**\n *\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.threshold=0.001]\n */\nfunction getCentroids(spectrum, options = {}) {\n    const { threshold = 0.001 } = options;\n    const peaks = spectrum.getPeaks({\n        threshold,\n    });\n    return {\n        x: peaks.map((peak) => peak.x),\n        y: peaks.map((peak) => peak.y),\n    };\n}\nfunction addIsotopicDistributionAndCheckMF(mfs, options) {\n    const { logger, peakWidthFct } = options;\n    for (let mf of mfs) {\n        const isotopicDistribution = new isotopic_distribution_1.IsotopicDistribution(mf.mf, {\n            fwhm: peakWidthFct(mf.ms.em), // when should we join peaks\n            ionizations: mf.ms.ionization,\n        });\n        mf.distribution = isotopicDistribution.getXY({ sumValue: 1 });\n        if (mf.distribution.y.length === 0) {\n            logger?.warn(`Problem with isotopic distribution calculation. Negative number of atoms ? ${mf.mf} ${mf.ms.ionization}`);\n        }\n    }\n    mfs = mfs.filter((mf) => mf.distribution.x.length > 0);\n    if (mfs.length === 0) {\n        throw new Error('No MF found. Did you forget ionization ?');\n    }\n    return mfs;\n}\nfunction buildCombined(centroids, mfs, options = {}) {\n    const { peakWidthFct } = options;\n    if (!peakWidthFct) {\n        throw new Error('peakWidthFct is mandatory');\n    }\n    const data = [centroids];\n    for (const mf of mfs) {\n        data.push(mf.distribution);\n    }\n    // We align all the spectra to the first one, but if some values (X) are missing, we will add them.\n    return (0, ml_spectra_processing_1.xyArrayAlignToFirst)(data, {\n        delta: peakWidthFct,\n    });\n}\n/**\n * We will check if there is any overlap between the theoretical and experimental spectra\n * @param {number[][]} ys\n */\nfunction hasOverlap(ys) {\n    for (let i = 0; i < ys[0].length; i++) {\n        for (let j = 1; j < ys.length; j++) {\n            if (ys[0][i] > 0 && ys[j][i] > 0) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=mfsDeconvolution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reconstruct = reconstruct;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Reconstruct a mass spectrum from a set of molecular formulas\n * that has the  distribution property\n * @param {object[]} mfs\n * @param {object} [options={}]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n */\nconst getPeakWidthFct_js_1 = require(\"./getPeakWidthFct.js\");\nfunction reconstruct(mfs, options = {}) {\n    const delta = (0, getPeakWidthFct_js_1.getPeakWidthFct)(options);\n    const data = mfs.map((mf) => mf.distribution);\n    const reconstructed = (0, ml_spectra_processing_1.xyArrayWeightedMerge)(data, { delta });\n    return reconstructed;\n}\n//# sourceMappingURL=reconstruct.js.map","import * as EMDBPkg from 'emdb';\nimport * as SpectrumPkg from 'ms-spectrum';\n\nexport { groups, groupsObject } from 'chemical-groups';\nexport { elements, elementsObject } from 'chemical-elements';\nexport { IsotopicDistribution } from 'isotopic-distribution';\n\nEMDBPkg.EMDB.massShifts = EMDBPkg.massShifts;\nEMDBPkg.EMDB.prototype.massShifts = EMDBPkg.massShifts;\nexport const EMDB = EMDBPkg.EMDB;\n\nSpectrumPkg.Spectrum.JsGraph = SpectrumPkg.JsGraph;\nSpectrumPkg.Spectrum.prototype.JsGraph = SpectrumPkg.JsGraph;\nexport const Spectrum = SpectrumPkg.Spectrum;\nexport const MSComparator = SpectrumPkg.MSComparator;\nexport const getBestPeaks = SpectrumPkg.getBestPeaks;\n\nexport { MF, ensureCase } from 'mf-parser';\nexport {\n  MFRange,\n  getRangesForFragment,\n  preprocessIonizations,\n  preprocessRanges,\n} from 'mf-utilities';\nexport { generateMFs } from 'mf-generator';\n\nexport { atomSorter } from 'atom-sorter';\nexport { mfFromEA } from 'mf-from-ea';\nexport { mfFromAtomicRatio } from 'mf-from-atomic-ratio';\nexport {\n  ActiveOrNaturalSummarizer,\n  OctoChemDB,\n  createTaxonomyTree,\n} from 'octochemdb';\nexport * as MassFragmentation from 'mass-fragmentation';\nexport * as Report from 'ms-report';\nexport * as MFSDeconvolution from 'mfs-deconvolution';\nexport * as Nucleotide from 'nucleotide';\nexport * as Peptide from 'peptide';\n"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","reimAbsolute","data","length","re","im","newArray","Float64Array","i","Math","hypot","getOutputArray","output","undefined","TypeError","xAbsolute","array","tmpArray","slice","xMedian","input","options","exact","middleIndex","calcMiddle","median","quickSelect","medianNext","low","high","middle","currentLow","currentHigh","swap","j","temp","floor","xAbsoluteMedian","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","xAbsoluteSum","sum","xAdd","array1","array2","isConstant","constant","array3","xApplyFunctionStr","variableLabel","fctString","fct","Function","replaceAll","toReturn","isNaN","xMultiply","xDotProduct","A","B","g","result","xCrossCorrelation","tau","lag","n","q","k","w","l","xAutoCorrelation","xBoxPlot","sort","at","EPSILON","shortTestNumber","String","min","q1","q3","max","posQ1","posQ3","medianPos","q1MinProportion","q3MinProportion","medianMinProportion","xBoxPlotWithOutliers","boxPlot","lowerWhisker","upperWhisker","minWhisker","maxWhisker","iqr","outliers","push","info","xCheckLengths","xCorrelation","sumA","sumA2","sumB","sumB2","sumAB","a","b","sqrt","arguments","_options$fromIndex","_options$toIndex","isInteger","maxValue","minValue","rescale","Array","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","defineProperty","matrix","require$$0","require$$1","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","inspectData","rows","columns","maxI","maxJ","loop","get","line","formatNumber","join","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","expm1","fround","log","log1p","log10","log2","round","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","checkNonEmpty","isEmpty","sumByRow","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","row","column","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","eye","diag","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","maxRow","p","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","dot","cumulativeSum","vector2","vector1","mmul","other","Bcolj","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","console","warn","embed","mat","r","c","resultat","blockMult","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","first","last","flipColumns","kroneckerProduct","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","entries","product","standardDeviation","center","Symbol","iterator","col","values","for","isArrayOfNumbers","every","element","randomInt","diagonal","identity","negate","tensorProduct","#initData","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","compactLength","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","kase","alpha","MIN_VALUE","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","linearDependencies","results","Abis","svd","pseudoInverse","svdSolution","covariance","xMatrix","yMatrix","yIsSame","cov","correlation","sdx","sdy","corr","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","hh","dl1","c3","el1","s2","tst1","nn","exshift","z","iter","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","counter","xResidual","residual","yResidual","betas","CHO","CholeskyDecomposition_1","EVD","LuDecomposition_1","Matrix_1","NIPALS","Nipals","SVD","_default","default","inverse_1","solve_1","absDiff","xCostMatrix","rowsArray","columnsArray","nbRows","nbColumns","xCumulative","xMean","sumValue","xVariance","sqrError","xStandardDeviation","xDistributionStats","sd","nb","xDivide","xEnsureFloat64","xGetTargetIndex","targetIndex","FFT","_csize","table","angle","PI","power","_width","_bitrev","revShift","_out","_data","_inv","fft","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","_transform4","realTransform","_realTransform4","inverseTransform","width","step","outOff","bitrev","off","_singleTransform2","_singleTransform4","inv","quarterLen","limit","C","D","Ar","Ai","Br","Bi","Cr","Ci","Dr","Di","MAr","MAi","tableBr","tableBi","MBr","MBi","tableCr","tableCi","MCr","MCi","tableDr","tableDi","MDr","MDi","T0r","T0i","T1r","T1i","T2r","T2i","T3r","T3i","FAr","FAi","FCr","FCi","FBr","FBi","FDr","FDi","evenR","evenI","oddR","oddI","leftR","leftI","rightR","rightI","step2","step3","_singleRealTransform2","_singleRealTransform4","halfLen","hquarterLen","ST0r","ST0i","ST1r","ST1i","ST2r","ST2i","ST3r","ST3i","SFAr","SFAi","SFBr","SFBi","SA","SB","createNumberArray","ArrayConstructor","createDoubleArray","createFromToArray","includeFrom","includeTo","distribution","delta","base","firstExponent","LOOP","FLOAT_MUL","sh1","sh2","sh3","multiplyUint32","nlo","nhi","XSadd","state","seed","Date","now","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","createRandomArray","generator","gaussianGenerator","GaussianGenerator","generateGaussian","val","createStepArray","getRescaler","targetMin","targetMax","clamp","algorithmOptions","algorithm","originalMin","originalMax","convert","getDataConverter","originalRange","targetRange","rescaler","valueScaled","kind","isPowerOfTwo","nextPowerOfTwo","recursiveResolve","object","promises","appendPromises","Promise","all","key","then","recursiveUntypeArrays","modifier","ArrayBuffer","isView","replacer","space","internalReplacer","xSubtract","calculateAdaptiveWeights","yData","baseline","weights","controlPoints","factorStd","learningRate","minWeight","absResiduals","medAbsRes","mad","rawWeights","maxWeight","MIN_SAFE_INTEGER","newWeights","oneMinusLearningRate","weight","recursiveRemoveEmptyAndNull","propertiesToRemove","otherOptions","removeProperty","cleanCyclicObject","visitedObjects","WeakMap","recursiveClean","parent","parentKey","isObject","has","Reflect","ownKeys","deleteProperty","isArray","arrayElement","removeEmptyArrayAndObject","isIndex","test","repr","arg","isString","isNull","isUndefined","keys","xHilbertTransform","forceFFT","hilbertTransformWithFFT","resampling","hilbertTransform","hilbertSignal","inClockwise","aSum","cSum","oldLength","ratio","currentIndex","xMaxValue","xMinValue","xHistogram","histogram","centerX","nbSlots","logBaseX","logBaseY","absolute","logOfBase","slotSize","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","xMassCenterVectorSimilarity","recenter","similarityFct","depth1","getDepth","depth2","depth","similarity","level","maxSimilarity","slot","value1","value2","shiftSubTree","currentLevel","levelSlotShift","levelShift","levelSlotSize","slotIndex","xMaxAbsoluteValue","xMaxIndex","xMeanAbsoluteError","xMeanSquaredError","xMeanWeighted","sumWeights","xMedianAbsoluteDeviation","averageDeviations","xMinIndex","xMinMaxDelta","minDelta","maxDelta","xMinMaxValues","xMode","maxCount","counts","Y1","P1","Q1","Y2","P2","Q2","Y3","P3","Q3","Y4","P4","Q4","Y5","P5","Q5","polyval","coef","calc","P","Q","erfcinv","simpleNormInv","magnitudeMode","SQRT2","simpleNormInvNumber","xNoiseSanPlot","cutOff","refine","scaleFactor","fixOffset","prepareData","medianIndex","firstNegativeValueIndex","findIndex","lastPositiveValueIndex","signPositive","signNegative","cutOffDist","determineCutOff","pIndex","initialNoiseLevelPositive","skyPoint","initialNoiseLevelNegative","nIndex","noiseLevelPositive","noiseLevelNegative","cloneSignPositive","cloneSignNegative","cutOffSignalsIndexPlus","cutOffSignalsIndexNeg","cutOffSignals","correctionFactor","effectiveCutOffDist","refinedCorrectionFactor","positive","negative","snr","sanplot","generateSanPlot","fromTo","considerList","indexMax","minKi","whereToCutStat","top","elementsOfCutOff","filter","averageValue","kiSqrt","xAxis","_e","xNoiseStandardDeviation","xNorm","xSum","xNormed","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","xPadding","fromEnd","toEnd","xParetoNormalization","sqrtSD","xRobustDistributionStats","filteredArray","xRemoveOutliersIQR","higherWhisker","xRescale","xRolling","window","padding","padded","subarray","xRollingAverage","xRollingMax","xRollingMedian","xRollingMin","xRotate","xSampling","downSampling","xSequentialFillFromStep","parameters","xSequentialFillFromTo","xSortAscending","xSortDescending","xUniqueSorted","unique","Set","matrixAbsoluteMedian","flatten","currentRow","matrixCreateEmpty","matrixApplyNumericalEncoding","matrixInitial","dictionary","arrayOfValues","matrixAutoCorrelation","targetArray","sourceArray","matrixBoxPlot","columnArray","q1max","q3min","middleOver","matrixCenterZMean","matrixCheck","firstLength","matrixCholeskySolver","nonZerosArray","permutationEncoded","pinv","mt","ar","ac","ap","ai","ax","lnz","colOffset","adr","lp","lnzArray","flag","pattern","bp1","ldlSymbolic","lx","li","ldlNumeric","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","kk","p2","lKi","matrixClone","map","matrixColumnsCorrelation","matrixCuthillMckee","list","adj","visited","toVisit","eol","ptr","nbhd","matrixCheckRanges","boundaries","matrixGetSubMatrix","duplicate","matrixHilbertTransform","fftResult","matrixMinMaxAbsoluteZ","matrixMinMaxZ","matrixHistogram","minMax","xHistogramOptions","finalHistogram","matrixMaxAbsoluteZ","matrixToArray","matrixMedian","matrixNoiseStandardDeviation","matrixNumericalDecoding","invertedDictionary","ret","matrixNumericalEncoding","dictCategoricalToNumerical","matrixPQN","matrixB","normalizationFactor","referenceSpectrum","currentVariable","medianOfQuotients","quotients","matrixSetSubMatrix","matrixZPivotRescale","matrixZRescale","matrixZRescalePerColumn","matrixTranspose","addWeights","nbPoints","newLeftHandSide","newRightHandSide","next","createSystemMatrix","lambda","upperTriangularNonZeros","xWhittakerSmoother","getWeightsAndControlPoints","prevBaseline","iteration","Infinity","cho","newBaseline","calculateDelta","xWhitakerSmoother","reimPhaseCorrection","phi0","phi1","firstAngle","beta","cosTheta","sinTheta","newRe","newIm","newCosTheta","newSinTheta","reimAutoPhaseCorrection","minRegSize","factorNoise","maxDistanceToJoin","finalPeaks","detectBaselineRegions","indexMask","x0","reTmp","imTmp","autoPhaseRegion","ph1","ph0","determiningGlobalValues","area","phased","toRadians","ph0Values","weightedLinearRegression","maxDiff","predictedPh0","magnitudeData","ds","holoborodko","peaksDs","robustBaseLineRegionsDetection","peaksSp","start","stop","nSteps","maxSteps","bestAng","minArea","dAng","tmpPhased","negArea","getNegArea","sumX","dk","Uint8Array","change","noiseLevel","prev","sxtw","swx","sw","sxtwy","swy","detMx","inMx","degree","zeroShift","reimFFT","applyZeroShift","inPlace","csize","complexArray","reimZeroFilling","totalLength","newRE","newIM","reimArrayFFT","outRe","outIm","source","reimMatrixFFT","numRows","resultRe","resultIm","reRow","imRow","xyAlign","data1","data2","common","y1","y2","length1","length2","difference","weightedX","xyCheck","xyCovariance","meanX","meanY","xyMaxYPoint","current","STEPS","xyCumulativeDistributionStatistics","maxY","x25","x50","x75","x100","currentStep","breakPoint","sumXY","sumY","xyEnsureFloat64","xyEnsureGrowingX","prevX","zonesNormalize","zones","exclusions","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","zoneIndex","zonesWithPoints","numberOfPoints","normalizedZones","zonesWithNumberOfPoints","totalSize","reduce","previous","unitsPerPoint","currentTotal","tempZone","tempZoneNumberOfPoints","equallySpacedSlot","xLength","halfStep","lastStep","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","integral","x1","slope","intercept","equallySpacedSmooth","initialOriginalStep","lastOriginalStep","sumAtMin","sumAtMax","getSlope","y0","xyEquallySpaced","variant","zonesWithPointsRes","xResult","yResult","zoneResult","processZone","concat","xyExtract","newX","newY","position","xyFilter","xyFilterMinYValue","minRelativeYValue","xyFilterTopYValues","nbPeaks","descending","nbThreshold","xyFilterX","currentZoneIndex","xyFilterXPositive","xyFindClosestPoint","xyGetNMaxY","numberMaxPoints","floatY","xyGrowingX","toReversed","xyIntegral","xyIntegration","currentxyIntegral","currentxyIntegration","xyJoinX","deltaIsFunction","currentDelta","xyMassCenter","sumYs","sumProducts","xyMassCenterVector","weightedIntegral","getWeightedIntegral","endIndexes","Int32Array","beginIndexes","currentBeginIndex","currentEndIndex","currentIntegration","nextIndex","firstIntegration","totalIntegration","totalWeightedIntegral","currentX","lastIntegration","xyMaxClosestYPoint","previousIndex","xyMaxY","xyMaximaY","maxima","startEqualIndex","xyMaxMerge","groupWidth","merged","maxAbscissa","currentxyMaxY","xyMedian","cumSumY","xyMergeByCentroids","centroids","mergedPoints","originalIndex","mergedIndex","xyMinClosestYPoint","minY","xyMinimaY","xyMinYPoint","xyPeakInfo","multiplier","newDiff","after","before","inflectionBefore","inflectionAfter","extrema","inflectionMiddle","xyRealMaxYPoint","gamma","xyRealMinYPoint","xyReduce","optimize","internalZones","totalPoints","getInternalZones","notEnoughPoints","appendFromTo","zoneNbPoints","xyReduceNonContinuous","maxApproximateNbPoints","deltaX","internalZone","maxNbPoints","currentY","lastX","xyRolling","xyRollingCircleTransform","radius","shifted","yCenters","fromX","toX","yShift","currentMinYShift","xySetYValue","xySortX","floatX","xyObject","response","xyToXYArray","objectArray","xyToXYObject","xyUniqueX","isSorted","average","cumulativeY","xyWeightedMerge","weightedAbscissa","xy2ToXY","xy2","xyValue","xreimSortX","xreimZeroFilling","getSlots","possibleXs","flatMap","currentSlot","number","slots","xyArrayAlign","requiredY","ys","positions","filterRequiredY","newYs","xyArrayWeightedMerge","deltaNumber","point","nextValue","maxX","sameSlot","minX","getSlotsToFirst","firstXs","otherXs","currentPosition","xyArrayAlignToFirst","xyArrayMerge","xyObjectCheck","points","xyObjectMaxXPoint","xyObjectMinXPoint","xyObjectBestPoints","numberCloseSlots","numberSlots","closeSlot","selected","peakLoop","item","close","existing","newPeak","xyObjectJoinX","xError","xyObjectMaxYPoint","xyObjectMinMaxValues","xyObjectMinYPoint","xyObjectNormedY","structuredClone","normalizedYs","xyObjectSlotX","slotWidth","halfSlot","xyObjectSortX","xyObjectSumY","xyObjectToXY","entry","ensureString","blob","encoding","TextDecoder","decode","decodeText","uint8","buffer","byteOffset","byteLength","fatal","parse","text","uniqueX","bestGuess","keepInfo","xColumn","yColumn","numberColumns","maxNumberColumns","minNumberColumns","lines","split","trim","fields","parseFloat","replace","skipFirstColumn","currentFirst","nextFirst","xs","yValues","parseXY","parseXYAndKeepInfo","getBestPeaks","peaks","searchMonoisotopicRatio","ml_spectra_processing_1","peak","monoisotopic","toSorted","nextItem","atomSorter","elementsAndIsotopes","nominal","mass","abundance","symbol","monoisotopicMass","elements","elementsAndIsotopes_js_1","exports","elementsAndIsotopesObject","elementsAndStableIsotopes","elementsAndStableIsotopesObject","elementsObject","isotopesObject","elementsAndIsotopesObject_js_1","isotope","isotopes","stableIsotopesObject","mostAbundant","unsaturationsObject","O","N","Na","K","Li","Ca","F","Si","Cl","I","groupsObject","groups","forEach","groupsObject_js_1","groupsToSequence","mf","part","parts","usefulParts","match","oneLetter","Kind","BEGIN","ATOM","MULTIPLIER_RANGE","ISOTOPE","ISOTOPE_RATIO","CHARGE","SALT","OPENING_PARENTHESIS","CLOSING_PARENTHESIS","PRE_MULTIPLIER","MULTIPLIER","TEXT","parseCharge_1","parseCharge","charge","chargeNumber","charAt","Kind_1","require$$3","require$$4","expandGroups","simplify","lastKind","char","ascii","charCodeAt","nextAscii","getNumber","MFError","ANCHOR","getAtom","getParenthesisCharge","getIsotope","isotopeRatio","getCurlyBracketIsotopeRatio","lastResult","atom","getNonParenthesisCharge","COMMENT","checkParenthesis","fromCharCode","indexOfDash","indexOf","parseNumberWithDivision","chemical_elements_1","group","chemical_groups_1","expandedGroups","substring","begin","SyntaxError","message","string","parsed","realMultiplier","currentMultiplier","multipliers","newParsed","distinctParsedObject","atomA","atomB","subSuperscript","superscript","Format","SUBSCRIPT","SUPERSCRIPT","improveLinesForDisplay","Kind_js_1","beginCounter","endCounter","minCounter","nbParenthesisToSuppress","toSuppress","formatCharge_js_1","require$$2","improveLinesForDisplay_js_1","toDisplay","specialCases","Format_1","SUPERIMPOSE","over","formatCharge","under","nbElectrons","isMF_1","isMF","tmpMF","Style","toHtml_1","toHtml","html","Style_1","SUPERIMPOSE_SUP_SUB","ensureCase_1","ensureCase","toUpperCase","newPart","two","one","groupIdentical","parenthesisLevel","currentPart","comments","optimizeRanges","mfs","createMFs","newParts","mfsObject","hasRange","comment","currents","getMF","getIsotopeRatioInfo_1","getIsotopeRatioInfo","isotopesArray","ratios","normalize","getEA_1","getEA","addMass","isotopeRatioInfo","eas","getElements_1","getElements","addElement","find","newElement","getNumberOfIsotopologues","atoms","nbIsotopes","nbAtoms","getNbCombinationsPerAtom","partToAtoms_1","partToAtoms","partToMF_1","partToMF","neutral","getInfoInternal_1","getInfoInternal","getNumberOfIsotopologues_1","require$$5","require$$6","customUnsaturations","emFieldName","msemFieldName","oneResult","getProcessedPart","nbIsotopologues","unsaturation","currentElement","validUnsaturation","getIsotopesInfo","getDistribution","toDisplay_js_1","partsToDisplay","partLine","partsToMF_1","partsToMF","toParts","expand","shouldExpandgroupsObject","createNewPart","openingParenthesis","closingParenthesis","preMultiplier","postMultiplier","previousKind","globalPartMultiplier","expandgroupsObject","combineAtomsIsotopesCharges","pop","expanded","currentKey","atom_sorter_1","calculateAndSortKeys","getKey","stringComparator","prop","toText_1","toText","subSuperscript_1","subscript","MFInternal_1","MFInternal","parse_1","flatten_1","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","flattenLimit","some","flattened","cache","displayed","toParts_1","getInfo","ea","isotopesInfo","toMF","MF_1","MF","internal","toCanonicText","parse_js_1","toHtml_js_1","unsaturationMatcher_1","unsaturationMatcher","onlyInteger","onlyNonInteger","generalMatcher","minMW","maxMW","minEM","maxEM","minCharge","maxCharge","absoluteCharge","mw","em","unsaturationMatcher_js_1","ensureUppercaseSequence_1","ensureUppercaseSequence","sequence","parenthesisCounter","currentSymbol","getEutrophicationPotential_1","getEutrophicationPotential","mf_parser_1","mfString","nC","nO","nN","nP","vRef","mwRef","thOD","nH","ep","getMsem_1","getMsem","ELECTRON_MASS","getMsInfo","allowNeutralMolecules","ionization","forceIonization","targetMass","realIonization","ms","ppm","getRangesForFragment_1","getRangesForFragment","ranges","newRanges","currentMF","possibilities","MFRange_1","MFRange","getRange","isInRange","rangeIndex","rangeElement","targetElement","currentRange","mfDiff_1","mfDiff","mfString1","mfString2","mf1","mf2","preprocessIonizations_1","preprocessIonizations","ionizationsString","ionizations","preprocessRanges_1","preprocessRanges","possibility","originalMinCount","originalMaxCount","currentMinCount","currentMaxCount","currentCount","currentMonoisotopicMass","currentCharge","currentUnsaturation","initialOrder","minInnerMass","maxInnerMass","minInnerCharge","maxInnerCharge","minMass","maxMass","innerCharge","isGroup","innerPossibility","msemMatcher","precision","targetMasses","minMSEM","maxMSEM","allowNegativeAtoms","msInfo","mf_utilities_1","ionizationAtoms","atomKeys","TargetMassCache_1","TargetMassCache","allowNeutral","firstPossibility","currentMinCharge","currentMaxCharge","findMFsSync","uniqueMFs","targetMassCache","filterUnsaturation","fakeMinUnsaturation","fakeMaxUnsaturation","advancedFilter","numberMFEvaluated","numberResults","currentIonization","orderMapping","getOrderMapping","theEnd","maxPosition","lastPosition","currentAtom","lastPossibility","unsaturationValue","isOdd","isValid","filterCharge","getMinMass","getResult","mf_matcher_1","newResult","updateCurrentAtom","previousAtom","setCurrentMinMax","ensureUniqueMF","bestCounts","previousEM","currentCounts","findMFs_1","findMFs","mfIncluded","targetEM","findMFsSync_js_1","fromMonoisotopicMass","masses","mf_finder_1","getPeaks","getFragmentPeaks","mfInfo","getPeaks_js_1","fromMonoisotopicMass_1","getMassRemainder","calculateOverlapFromDiff","diffs","sumPos","checkPeaks","extract","getCommonArray","pos2","array1Length","array2Length","arithmeticMean","geometricMean","logMean","lnsum","grandMean","means","samples","truncatedMean","percent","alreadySorted","harmonicMean","contraHarmonicMean","theMean","theVariance","standardError","robustMeanAndStdev","stdev","quartiles","quart","q2","pooledStandardDeviation","pooledVariance","vari","mode","itemCount","itemArray","mean1","mean2","skewness","s3","dev","kurtosis","s4","entropy","weightedMean","weightedStandardDeviation","weightedVariance","standardize","standardDev","arrayStat","l1","l2","theSum","theProduct","medians","modes","skew","kurt","standardDeviations","standardErrors","sqrtN","scatter","divisor","scores","zScores","cor","jj","resultRow","sourceRow","weightSum","weightedCovariance","s1","weightedScatter","StatArray","commonExtractAndNormalize","extract1","extract2","common1","common2","info1","info2","COMMON_SECOND","COMMON_FIRST","extractAndNormalize","getIntersection","segment1","segment2","p0X","p0Y","p1X","p1Y","p2X","p2Y","p3X","p3Y","s1X","s1Y","s2X","s2Y","COMMON_NO","COMMON_BOTH","Comparator","setOptions","toLowerCase","trapezoid","commonFactor","widthBottom","widthTop","setTrapezoid","setFromTo","setPeaks1","extracts","array1Extract","array1ExtractInfo","array2Extract","array2ExtractInfo","setPeaks2","getExtract1","getExtract2","getExtractInfo1","getExtractInfo2","newWidthBottom","newWidthTop","widthSlope","newFrom","newTo","getOverlap","x2","getOverlapTrapezoid","small","big","targets","segment","intersection","calculateDiff","newFirst","newSecond","pos1","previous2","overlap","getSimilarity","newPeaks1","newPeaks2","extractInfo1","extractInfo2","fastSimilarity","NEUTRON_MASS","getPeakChargeBySimilarity","widthFunction","bottom","experimentalData","similarityProcessor","peaks_similarity_1","checkTopBottom","fromCharge","toCharge","fromIsotope","toIsotope","isotopeHeight","getPeaksWithCharge_1","getPeaksWithCharge","selectedPeaks","allPeaks","numberIsotopes","isotopeIntensity","localFromIndex","localToIndex","peaksWithCharge","bestCharge","theoreticalPositions","massRange","isotopePosition","fromMass","toMass","localHeightSum","currentTheoreticalPosition","theoreticalMaxValue","isContinuous","maxDeltaRatio","relativeHeightThreshold","minHeight","minRadio","maxRatio","continuous","previousDelta","failed","success","sgg","windowSize","derivative","polynomial","np","ans","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","gramPoly","Grampoly","genFact","gf","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","minDistance","possible","newLastIndex","centerIndex","currentDistance","lastIndex","autoAlgorithm","ddY","minddY","crossDy","lastJ","yIndex","id","crypto","randomUUID","inflectionPoints","getPeakFromIntervals","xGetCrossZeroPoints","isLessAndGreaterThanZero","back","firstDerivative","secondDerivative","optimizeTop","xCurrent","xPrevious","gsd","sgOptions","smoothY","maxCriteria","minMaxRatio","realTopDetection","peakDetectionAlgorithm","isEquallySpaced","noiseInfo","xValue","peakData","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","erfinv","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","secondSqrt","Gaussian","fwhm","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","getGaussianFactor","getData","getGaussianData","calculateHeight","getParameters","shape","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","halfResidual","quantileFunction","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","GeneralizedLorentzian","generalizedLorentzianFwhmToWidth","generalizedLorentzianWidthToFWHM","generalizedLorentzianFct","getGeneralizedLorentzianArea","getGeneralizedLorentzianFactor","getGeneralizedLorentzianData","calculateGeneralizedLorentzianHeight","Gaussian2D","ensureFWHM2D","fwhmX","fwhmY","gaussian2DFct","getGaussian2DData","volume","getVolume","calculateGaussian2DHeight","getGaussian2DVolume","ensureXYNumber","xFWHM","yFWHM","axis","xCenter","yCenter","sdObject","getShape1D","getShape2D","unHandled","getSumOfShapes","internalPeaks","sumOfShapes","totalY","peakX","shapeFctKey","shapeFct","assert","DefaultParameters","peakShape","gradientDifference","properties","getInternalPeaks","minMaxY","shiftValue","normalizedPeaks","propertiesValues","parameter","property","propertyValue","getNormalizedValue","generalParameterValue","defaultParameterValues","checkOptions","timeout","initialValues","damping","dampingStepUp","dampingStepDown","errorTolerance","centralDifference","improvementThreshold","minValues","maxValues","parLen","gradientDifferenceArray","getGradientDifferenceArray","filler","getFiller","checkTimeout","getCheckTimeout","weightSquare","_","dataLength","endTime","errorCalculation","parameterizedFunction","func","gradientFunction","evaluatedData","params","paramFunction","nbParams","param","auxParams","funcParam","funcParam2","matrixFunction","gradientFunc","residualError","inverseMatrix","jacobianWeightResidualError","perturbations","levenbergMarquardt","checkedOptions","optimalError","optimalParameters","converged","previousError","improvementMetric","parameterValues","parameterError","iterations","antiLowerConvexHull","currentPoint","moveOn","det","leftTurn","moveBack","direct","objectiveFunction","lowerBoundaries","upperBoundaries","epsilon","tolerance2","initialState","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","bestCurrentValue","fCalls","smallerDistance","edgeSizes","diagonalDistances","functionValues","differentDistances","smallerValuesByDistance","choiceLimit","originalCoordinates","getMinIndex","S1","optimumValuesIndex","S3","a1","b1","a2","b2","S2","xHull","yHull","lowerIndexHull","largerSide","largeSidesIndex","bestFunctionValues","firstMiddleCenter","secondMiddleCenter","firstMiddleValue","secondMiddleValue","firstMinValue","secondMinValue","ix1","ix2","minFunctionValue","pair","finalState","minimizer","optima","directOptimization","getObjectiveFunction","selectMethod","optimizationOptions","normalizedY","gradientDifferences","optimization","fitted","fittedValues","newPeaks","addMissingShape","shapeInstance","hasShape","groupPeaks","previousPeak","currentGroup","optimizePeaksWithLogs","peakList","groupingFactor","factorLimits","logs","peakGroup","firstPeak","lastPeak","groupSize","time","optimizedPeaks","optimizePeaks","addMissingIDs","joinBroadPeaks","broadWidth","broadRatio","broadLines","getGSDPeakOptimizedStructure","maxDdy","candidates","indexes","initialWidth","pushBackPeaks","broadenPeaks","mapPeaks","nextPeak","xFrom","xTo","setShape","peakPicking","gsdPeaks","ml_gsd_1","gsdPeak","checkArrayLength","BaseRegression","new","predict","_predict","xVal","train","toLaTeX","score","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","figures","toPrecision","SimpleLinearRegression","yObj","coefficients","regress","computeX","xFactor","absIntercept","operator","load","json","numerator","PowerRegression","newInputs","latex","pr","xl","yl","linear","peaksWidth_1","peaksWidth","ml_regression_power_1","widths","regression","regressionChart","fit","predictFct","tex","Spectrum_1","Spectrum","fromPeaks","is_any_array_1","xy_parser_1","getPeaksWithCharge_js_1","defaultData","minMaxX","scaleY","intensity","rescaleX","ensureOriginalX","xOriginal","normedY","total","peakPicking_js_1","getBestPeaks_js_1","getSelectedPeaksWithCharge","getFragmentPeaksFct","MSComparator_1","massPower","intensityPower","getSimilarityToMasses","dataXY","normalizeAndCacheData","selectedMasses","aligned","dataXY1","dataXY2","returnSimilarity","minIntensity","minNbCommonPeaks","nbCommonPeaks","nbPeaks2","nbPeaks1","tanimoto","cosine","getPeaksAnnotation","bestPeaks","numberDigits","showMF","numberMFs","mfPrefs","displayCharge","displayProperties","mfColors","color","annotations","_highlight","dy","annotation","rx","ry","fillOpacity","textLine","dx","labels","currentMfPrefs","numberOfMFS","getColor","jsgraph","JsGraph","appendFragmentsInfo","experimentalSpectrum","database","onStep","fragments","nbFound","intensityFound","possibleMFs","assignments","bestMF","toSum","lib","generateMFs","estimate","filterFctVariables","variables","filterFct","canonizeMF","sizes","evolution","appendResult","uniqueMFsObject","getMonoisotopicMass","ems","getEMFromParts","sum_object_keys_1","links","sharps","anchors","xAtomicNumber","getXAtomicNumber","molecule","OCL","getOCL","Molecule","getAtomicNoFromLabel","cPseudoAtomX","isCsp3","atomID","getAtomicNo","getAtomCharge","getImplicitHydrogens","getConnAtoms","makeRacemic","ensureHelperArrays","cHelperCIP","getAllAtoms","getAtomParity","cAtomParityNone","setAtomESR","cESRTypeAnd","tagAtom","iAtom","customLabel","getAtomLabel","setAtomCustomLabel","setAtomicNo","setAtomMass","getAtomMass","FULL_HOSE_CODE","HOSE_CODE_CUT_C_SP3_SP3","getHoseCodesForAtomsAsFragments","allowedCustomLabels","minSphereSize","maxSphereSize","tagAtoms","tagAtomFct","rootAtoms","getCompactCopy","internalTagAtoms","cHelperNeighbours","getAtomCustomLabel","mappings","atomMask","atomList","sphere","rootAtom","newMax","getAllConnAtoms","connAtom","getConnAtom","fragment","copyMoleculeByAtoms","setAtomMapNo","removeExplicitHydrogens","addQueryFeaturesAndRemoveMapNo","mapping","getAtomMapNo","isAromatic","isAromaticAtom","setAtomQueryFeature","cAtomQFAromatic","cAtomQFNotAromatic","smallestRing","getAtomRingSize","cAtomQFRingSize3","cAtomQFRingSize4","cAtomQFRingSize5","cAtomQFRingSize6","cAtomQFRingSize7","cAtomQFRingSizeLarge","nbHydrogens","getAllHydrogens","cAtomQFNot0Hydrogen","cAtomQFNot1Hydrogen","cAtomQFNot2Hydrogen","cAtomQFNot3Hydrogen","getAllAtomsPaths","maxPathLength","allAtomsPaths","oneAtomPaths","atomPaths","path","pathLength","nextIndexes","nextAtoms","currentIndexes","currentAtoms","previousPath","conn","connectedAtom","floydWarshall","adjMatrix","numVertices","distMatrix","is","dist","getConnectivityMatrix","atomicNo","negativeAtomicNo","cRoundedMass","sdt","getConnBondOrder","sdta","bondNumber","getConnBond","isAromaticBond","getCompactCopyWithoutCustomLabels","tempMolecule","getCanonizedDiaIDs","diaMol","logger","maxNbAtoms","moleculeWithH","heterotopicSymmetryRanks","finalRanks","canonizedDiaIDs","cHelperSymmetryStereoHeterotopicity","diaID","getCanonizedIDCode","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS","getHoseCodesForAtomsAsStrings","hoses","getCanonizedHoseCodes","topicMolecule","canonizedHoseCodes","getCanonizedHoseCodesForPath","minPathLength","toAtomicNo","fromAtomicNo","atomsPaths","fromAtom","fromDiaID","diaIDs","paths","pathOfSpecificLength","toAtom","toDiaID","getDiaIDsAndInfo","newDiaIDs","newDiaID","idCode","attachedHydrogensIDCodes","attachedHydrogens","nbAttachedHydrogens","atomLabel","nbEquivalentAtoms","heavyAtom","atomMapNo","hydrogenDiaID","getHeterotopicSymmetryRanks","xMolecule","symmetryRanks","getSymmetryRank","getFinalRanks","getChiralOrHeterotopicCarbons","internalMolecule","addImplicitHydrogens","addPossibleChiralBonds","neighbourSymmetries","getNeighbourSymmetries","getAtoms","getStereoBond","stereoBond","getAtomPreferredStereoBond","setBondType","cBondTypeUp","getBondAtom","setBondAtom","symmetryRank","ensureHeterotopicChiralBonds","esrType","atLeastThreeAtoms","cHelperBitNeighbours","heterotopicCarbons","getMoleculeWithH","getXMolecule","xAtomNumber","TopicMolecule","originalMolecule","getIDCode","setAtomNoInMapNo","molecules","ensureMapNo","existingMapNo","mapNo","nextMapNo","getHoseCodesForPath","getHoseFragment","sphereSize","getAtomPathsFrom","atomPathValue","atomPath","getAtomPaths","atom1","atom2","maxDistance","toMolfile","version","toMolfileV3","getMolecule","fromMolecule","getDiaIDsObject","groupDiastereotopicAtomIDsAsObject","hoseCodes","distanceMatrix","diaIDsAndInfo","toMolfileWithH","toMolfileWithoutH","atomsToDelete","getExplicitHydrogens","deleteAtoms","getGroupedDiastereotopicAtomIDs","groupDiastereotopicAtomIDs","getDiaIDsMapping","originalDiaIDs","destinationDiaIDs","destinationDiaID","originalDiaID","newIDCode","oldIDCode","oldHydrogenIDCode","newHydrogenIDCode","diaIDsObject","oclID","existingAtoms","heavyAtoms","customLabels","attachedHydrogensCustomLabels","heavyAtomsCustomLabels","connected","heavyAtomCustomLabel","attachedHydrogenCustomLabel","diaIDObject","getSymmetryRanks","getDiastereotopicAtomIDs","numberAtoms","ids","getDiastereotopicAtomIDsAndH","hydrogenOCLIDs","getDiastereotopicAtomIDsFromMolfile","molfile","fromMolfileWithAtomMap","diaIDsArray","destination","toDiastereotopicSVG","prefix","heavyAtomHydrogen","svg","hydrogenInfo","groupedDiaIDs","toSVG","getHoseCodes","atomLabels","atomicNumbers","label","getHoseCodesAndInfo","calculateDiastereotopicIDs","newMolfile","newMolfileWithH","hose","molfileWithH","moleculeWithHydrogens","getHoseCodesForAtoms","getHoseCodesForAtom","getHoseCodesFromDiastereotopicID","maxLength","originalFrom","originalTo","originalAtoms","getPath","torsion","calculateTorsion","tag1","tag2","atomMap","createPolymer","unit","checkEntity","getAlphaGamma","r1AtomicNo","r2AtomicNo","getR1R2AtomicNo","polymer","addMolecule","getUnit","addBond","markMonomer","firstAtomicNo","secondAtomicNo","nbR1","nbR2","r1Count","r2Count","fromSmiles","cPseudoAtomsRGroups","copyMolecule","Z","Bt","getIDCodeAndCoordinates","navigator","clipboard","writeText","coordinates","pasteMolecule","DS","JU","uS","ot","Ft","H1","bt","i1","L1","u1","Ml","padStart","hr","globalThis","devicePixelRatio","z2","ctx","textAlign","textBaseline","currentFontSize","currentFont","font","currentColor","currentLineWidth","canvasCache","Map","clearRect","getBackgroundRGB","getForegroundRGB","getSelectionBackgroundRGB","getLineWidth","setRGB","fillStyle","strokeStyle","setFont","getFontSize","getBounds","measureText","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","drawString","fillText","drawCenteredString","setLineWidth","lineWidth","fillRectangle","fillRect","fillCircle","beginPath","arc","drawLine","moveTo","lineTo","stroke","drawPolygon","getX","getY","getSize","drawRectangle","strokeRect","fillPolygon","drawImage","document","createElement","n0","imageData","N0","getContext","globalAlpha","putImageData","isDarkBackground","Hl","canvasElement","changeListener","drawContext","getCanvasWidth","getCanvasHeight","getDrawContext","onChange","what","isUserEvent","getClipboardHandler","BPt","Gc","QS","CSSStyleSheet","replaceSync","Jc","button","fireMouseEvent","offsetX","offsetY","shiftKey","ctrlKey","altKey","addEventListener","pointerId","MOUSE_EVENT_PRESSED","MOUSE_EVENT_RELEASED","MOUSE_EVENT_CLICKED","detail","MOUSE_EVENT_ENTERED","MOUSE_EVENT_EXITED","MOUSE_EVENT_DRAGGED","MOUSE_EVENT_MOVED","removeEventListener","US","platform","metaKey","vPt","fireKeyEvent","KEY_EVENT_PRESSED","KEY_EVENT_RELEASED","clipboardData","fromText","addPastedOrDropped","KEY_CTRL","KEY_ALT","KEY_SHIFT","KEY_DELETE","KEY_HELP","KEY_ESCAPE","KEY_ENTER","codePointAt","Vl","setDimensions","style","oS","zc","create","LS","El","HOTSPOT_32","IMAGE_NAME_32","cPointerCursor","cTextCursor","getCursor","buildCursor","Sl","title","rootElement","dialogElement","setLayout","hLayout","sS","vLayout","component","createTextField","Kc","createLabel","Yc","createComboBox","Xc","createCheckBox","Zc","setEventConsumer","consumer","showMessage","alert","showDialog","getBoundingClientRect","assign","marginBlock","left","right","body","parentElement","clientWidth","offsetTop","getRootNode","append","display","gridTemplateColumns","gridTemplateRows","preventDefault","fireOk","H0","gridColumn","gridRow","getElement","flexDirection","gap","textContent","fireCancel","showModal","disposeDialog","remove","setEventHandler","eventHandler","fireEvent","setText","getText","selectedIndex","setEnabled","disabled","addItem","getSelectedIndex","setSelectedIndex","setSelectedItem","getSelectedItem","removeAllItems","innerHTML","setEditable","checkBox","isSelected","setSelected","zU","dataView","DataView","getWidth","getHeight","getRGB","getInt32","setInt32","toDataURL","ql","dialogRoot","JavaEditorArea","register","javaUiHelper","cursorManager","grabFocus","focus","preventScroll","setCursor","cursor","showHelpDialog","createImage","ImageData","createImageFromBase64","Uint8ClampedArray","createDialog","runLater","requestAnimationFrame","setImmediate","setTimeout","yS","readOnly","initialMode","initialFragment","dataset","openchemlibCanvasEditor","alignItems","backgroundColor","touchAction","userSelect","webkitUserSelect","attachShadow","adoptedStyleSheets","Se","Xe","tabIndex","outline","j8","GP","FPt","jA","setFragment","setMolecule","setReaction","setEditorArea","Nn","K2","repaint","YU","X2","ResizeObserver","contentRect","observe","Z2","W2","_2","KU","disconnect","editorArea","toolbar","uiHelper","destroy","MODE_REACTION","MODE_MULTIPLE_FRAGMENTS","lS","EDITOR_EVENT_MOLECULE_CHANGED","EDITOR_EVENT_SELECTION_CHANGED","EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED","EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED","getMode","getReaction","setOnChangeListener","removeOnChangeListener","clearAll","isDestroyed","moleculeChanged","#A","#i","TS","HTMLElement","MODE","freeze","MOLECULE","REACTION","observedAttributes","idcode","MODE_MOLECULE","readonly","setAttribute","removeAttribute","isFragment","getIDCoordinates","encode","keepAbsoluteCoordinates","INCLUDE_MAPPING","INCLUDE_COORDS","RETAIN_REACTANT_AND_PRODUCT_ORDER","#P","requestIdleCallback","#n","#f","fromIDCode","#r","ensureCoordinates","#Q","CustomEvent","bubbles","dispatchEvent","#D","#u","connectedCallback","getAttribute","hasAttribute","disconnectedCallback","adoptedCallback","attributeChangedCallback","Wc","GenericEditorArea","GenericEditorToolbar","GenericUIHelper","Reaction","ReactionEncoder","customElements","define","head","prepend","CanvasEditor","registerCustomElement","hS","changeCustomLabelPosition","cS","getNextCustomAtomLabel","mPt","fromCodePoint","wS","fromMolfile","customLabelPosition","getAllBonds","kPt","gS","includeCustomAtomLabelsAsALines","includeCustomAtomLabelsAsVLines","removeCustomAtomLabels","BS","toRxn","toRxnV3","dS","programName","keepIdCode","vS","factorTextSize","autoCrop","autoCropMargin","exec","fontWeight","strokeWidth","FS","ConformerGenerator","ForceFieldMMFF94","getNextConformerAsMolecule","maxIts","gradTol","funcTol","_minimise","minimise","eD","bPt","__moduleStartupDone","_c","Il","AD","$c","c9","nD","tw","ew","Aw","Nl","PD","B1","kS","nw","Pw","rw","u0","iw","fw","XU","Dw","uw","Qw","Uw","ow","Lw","Ol","yw","lw","Tw","hw","cw","ww","gw","dw","Bw","vw","Fw","kw","bS","S","Gl","RS","T","jS","$2","pS","G","CS","MS","HS","VS","ES","SS","bw","qS","IS","xS","NS","ZU","cr","GA","Rw","jw","pw","Cw","Mw","Hw","Vw","Ew","Sw","qw","Iw","WU","rD","xw","tu","Nw","Ow","Jl","Fi","eu","zl","Yl","Kl","iD","Xl","Zl","fD","DD","Wl","_l","w9","g9","Wt","_U","Gw","Jw","$l","zw","Yw","Kw","Xw","OS","GS","JS","zS","$U","YS","Zw","al","KS","XS","DO","ZS","fO","WS","au","t3","JP","aU","LA","_S","$S","aS","Wq","tq","eq","Au","fo","f1","cu","LP","Cu","Ww","XK","_w","$w","mr","aw","e7","e3","A3","d9","Aq","pV","nq","Pq","cK","rq","FK","iq","sP","Q0","n3","I0","fq","Dq","mi","uq","rA","Qq","IE","pU","Uq","$r","oq","kf","sr","t7","vo","uD","A7","n7","k9","c0","JD","P7","dA","r3","r7","i3","LQ","i7","Y8","f7","f3","TD","QD","D3","lP","D7","Pu","GJ","Lq","Qi","sq","eo","Ao","no","yq","_A","wn","ki","SL","u7","wp","It","wr","V1","p1","Q7","J","UD","Mt","o","lq","Tq","hq","ye","o0","ee","cq","u3","wq","B9","ru","iu","oD","J0","gq","U7","o7","dq","t8","Bq","bJ","L7","s7","fa","y7","No","l7","T7","h7","gr","c7","w7","zL","bi","Ri","U1","LD","vq","Fq","mq","oz","kq","tJ","bq","db","Rq","Ui","jq","ji","ul","g7","$4","a4","pq","zr","sD","yD","bD","Cq","Mq","ux","Hq","Qx","Vq","Tx","U3","Hu","Po","o3","p8","C8","ro","d7","lD","L3","BA","EA","B7","Iu","jb","zP","v7","vA","kt","jt","d0","qe","Bn","v9","F9","RB","F7","Eq","Sq","cQ","qq","Iq","ei","JA","$3","YP","fu","V0","y3","io","k7","Co","b7","R7","yB","l3","M8","j7","hD","p7","T3","C7","C9","pi","M3","M7","H7","xq","E0","w0","Du","FA","Do","X1","Z1","h3","V7","Nq","R0","Ho","Oq","w3","dr","uu","pv","Gq","ff","Qu","yb","N5","E7","Jq","cI","S7","q7","zq","g3","Uu","Mo","On","ut","I7","uo","Ji","b9","R9","wU","d3","LE","Wh","kU","Yq","CU","MU","x7","nl","Kq","At","B3","Qo","ha","cD","GK","Uo","gO","oo","H4","N7","Dn","Ln","X0","ou","Lu","iA","w1","yP","Xq","Ze","wD","su","Mi","Lo","gD","O7","KP","G7","J7","z7","Y7","We","K7","X7","v3","so","Z7","pD","W7","_7","$7","gL","Rj","gi","yo","vl","Zq","UL","uG","_q","ox","a7","tg","F3","eg","Ot","pA","$q","dD","Ag","Hi","yu","ng","j9","Pg","pa","WB","rg","lo","So","To","TP","ig","fg","Dg","ug","ho","Qg","co","V9","aq","tI","eI","_P","P8","Tu","w2","Vi","nr","H8","bf","J1","AI","Je","nI","P0","hu","Ug","gt","i6","rI","clearTimeout","og","Lg","Fm","sg","zf","$A","yg","B8","lg","k3","b3","Ei","wo","De","R3","go","Tg","uP","A0","hg","Ie","Be","hP","iI","fI","DI","M5","cg","S0","XP","ed","p9","U0","gg","wu","Wi","j3","yx","Bo","BD","uI","EL","fA","gu","V8","wP","du","a5","sB","p3","dg","WX","C3","Bg","vg","AP","Fg","mg","Ni","_J","ZP","kg","QI","j0","UI","bg","Rg","oI","Fo","a8","jg","ke","QG","pg","XO","hN","Cg","Mg","Hg","H3","CY","LI","Pn","Vg","V3","s8","E3","z0","Fr","nU","E8","Tn","qi","hn","sI","C0","yI","ge","i0","Re","S8","lI","T8","Bu","y8","r0","WP","cP","mo","f6","Eg","Te","TI","ko","LL","zA","Fv","CA","AL","vu","xe","Sg","dL","qg","q8","tP","hI","FI","wI","Nb","WO","I3","GB","CL","vn","gI","Zt","Tz","Ae","x3","dI","Ig","N3","BI","O3","kd","vI","nd","xg","mI","el","kI","Eh","kB","ue","O1","G3","dE","h0","Ng","bo","NA","a0","Og","Ro","Gg","Jg","VW","zg","sj","Yg","Kg","qT","jc","backingJsObject","vD","$H","bI","A1","RI","J3","jI","fP","DP","pI","Ii","le","I8","FD","mD","lF","Fu","WA","jo","CI","MI","vY","rp","kr","po","Ve","x8","Xg","rt","ft","Zg","ZF","Fn","Wg","HI","kD","ku","_g","VI","ze","fX","$g","ag","Mb","td","EI","jk","SI","RX","kR","Ad","qI","II","xI","z3","Gn","Pd","rd","lh","K3","hB","SD","NI","Ub","$e","OI","ub","GI","RD","l5","xN","fd","Dd","JI","zt","DA","rn","h2","ud","Qd","br","g8","X3","MA","C1","Ud","od","bu","Z3","W3","gP","Ld","yd","Vo","N8","sG","JT","Lc","ld","mv","Td","xt","Eo","OF","KN","dT","zI","k0","YI","kA","G9","hd","cd","_3","qo","Eu","R","Nu","pd","KI","z1","ER","OQ","XI","zi","uL","Qe","Pe","wd","e0","Rr","Ic","ZI","WI","_I","$I","Ja","ad","jD","gd","Oi","jr","aI","Rb","tx","qL","dd","QL","vv","Io","Bd","vd","K5","Sy","M","FR","Fd","ex","md","D6","Ax","_0","Ne","bd","yh","Rd","a3","vs","tT","Kv","Gi","Ec","xo","CD","jd","mF","Jn","pn","px","pe","nx","Px","KB","_4","Ts","ve","ix","M9","zn","gy","Cd","CN","Ru","hW","fx","Dx","ju","ae","Oo","Md","Bc","YA","Gt","Go","O8","Jo","je","Yb","Hd","eT","oj","Vd","fF","XD","e9","Bl","Ed","rc","yPt","Ye","Sd","Pc","sPt","qd","nc","LPt","R1","Id","dP","Ux","X8","k1","Tb","Yn","vt","AT","H9","o1","Lx","NV","sx","iv","rm","BP","mQ","jL","nT","xd","hx","Nd","Mr","cx","Od","hA","Gd","Jd","lZ","n1","sL","MD","PT","$P","M1","Xk","q0","u5","nK","zd","$8","Qm","wx","gx","zo","Bx","lastIndexOf","vx","Fx","pu","rT","Hr","mx","Yd","vP","Kd","kx","ri","gn","Os","bx","Zj","Rx","bj","fR","iT","Xd","Fs","Ue","Zd","$5","Me","o_","Wd","jx","Yi","Mu","G8","aA","_d","D8","Cx","$d","Mx","FP","Kn","aP","Sr","fT","HD","Xt","substr","uA","Hx","Yo","tB","Ac","VD","Vx","Vr","eB","Ko","AB","NK","J8","nB","Oe","Er","z8","DT","Ex","DL","Sx","Xo","uT","Zo","PB","Xn","uf","rB","eb","QT","lE","n6","Zf","sE","$V","yE","aV","TE","tE","qx","iB","Wo","fB","mU","yk","B0","DB","UT","_o","Ix","Cj","es","xx","Nx","$o","uB","iX","QA","qt","Ki","oT","l4","ao","QB","UB","KO","Ox","Pb","xu","LT","Su","Zn","Gx","sT","VP","K8","tL","O0","Vu","Jx","eL","zx","yT","Yx","TK","Kx","lY","oB","Xx","lT","Cn","Zx","Wx","LB","xb","wL","lB","TB","j4","hp","_x","mn","HA","Ir","e8","TT","E9","ED","aJ","$x","UA","pt","cB","_t","wB","hT","cT","nL","wT","FT","v0","Xi","aj","aT","fU","tN","Cv","TC","eN","AN","gB","qu","Nr","PN","Kr","dB","BB","rN","ET","Vb","oO","iN","X9","gT","wy","fN","bs","XL","kn","DN","uN","PL","rL","vB","A8","W0","W9","FB","ZA","oh","QN","cU","mB","z$","BT","kj","iL","Bs","$R","bB","XZ","UN","bF","eF","Rc","mP","jB","Pr","$D","oN","LN","sN","pB","yN","sm","lN","TN","n8","RP","qD","yt","wt","bn","fL","Yt","IU","vT","L6","s6","CB","xk","cN","wN","gN","MB","ID","HB","lk","VB","EB","qB","IB","dN","iQ","Fl","qE","qU","sc","BN","Ltt","J4","z4","Ti","xB","NB","OB","vN","Y0","FN","Or","kP","we","p0","Zi","G1","mN","dt","Gr","mT","qz","t1","removeAtIndex","xD","lm","JB","f0","zB","_u","S9","h1","kT","YB","bT","wK","RegExp","kN","_5","KA","XB","IA","bN","n$","RT","RN","nz","$N","Jr","cO","ZB","ND","oL","jN","Fj","UY","uU","pN","Ms","yp","Dc","jT","MN","drawDottedLine","pT","Rn","getAtIndex","HN","VN","EN","t9","stt","sl","Ll","ll","bU","Tl","SN","cPt","VE","EE","SE","CT","JE","mA","MT","_B","qN","oA","oe","Cc","bP","y9","P9","Hs","Ou","$B","Hv","OD","Bz","aB","F0","b6","a9","IN","q9","NN","Fc","HT","I1","VT","ON","tv","ev","Av","nv","Pv","GN","Qc","aX","aO","pc","JN","yL","Wn","Um","dW","rv","cp","Nk","v_","ST","fv","Sh","oi","Yr","Dv","cb","us","vp","zN","lL","IQ","P_","YN","fn","Ge","uv","XN","ZN","N1","Qv","Xm","TL","hL","jY","Uv","ov","WN","_N","cL","Lv","AG","YR","mO","sv","yv","lv","I9","Im","Xb","IT","BL","i5","pF","Tv","vL","sA","FL","hv","GD","cv","he","xT","GX","mL","vW","Uk","kL","wv","gv","yc","aN","YQ","o6","mp","tO","c$","u6","ce","dv","Bv","Z8","x9","bL","Oc","eO","He","zD","YD","NT","OT","RL","hPt","AO","java","lang","Number$impl","Qn","t0","Gu","Ju","GT","W8","Hn","mm","kv","bv","Rv","jv","Sv","_L","__elementTypeId$","PO","Dl","r8","pL","rO","VU","nf","Kb","Mv","_h","iO","zT","_i","vh","Vv","ib","Ns","uO","YT","mc","QO","UO","cY","nG","Wr","KT","gp","Ev","LO","sO","yO","__elementTypeCategory$","ML","XT","$T","lO","TO","qv","$i","ln","Iv","D1","hO","o$","y_","x$","fY","xv","qb","jh","Xr","wO","Nv","X4","KD","tc","cE","l8","ec","dO","lPt","ME","RE","bE","jE","pE","se","CE","ZT","BO","vO","k4","FO","jF","xP","WT","zu","Ov","Yk","kO","HL","bO","Bb","RO","jO","pO","fp","aD","Gv","N9","Zr","Jv","tA","CO","zv","Sb","Gb","MO","n9","Aj","_T","_n","VA","RA","Yv","fy","Yu","Lr","HV","VV","Uh","HO","IL","VO","EO","eK","Fe","Xv","SO","xL","Zv","Wv","o9","qO","Ku","IO","xO","_v","$v","NO","NL","OO","$9","av","GO","JO","$n","configurable","defineProperties","zO","$gwt","tF","YO","ZJ","me","M$","cj","aa","OL","AF","dn","v8","a$","k5","dF","Xu","T1","H_","Nm","nF","jm","PF","P$","ZO","rF","_O","iF","Vz","$O","Zu","Wu","on","wG","_8","tG","eG","vc","GL","JL","jn","Rs","PG","DF","de","YL","vZ","uF","QF","KL","Af","tf","Us","O9","UF","oF","rG","LF","iG","sF","fG","Ib","DG","bQ","yF","Z6","th","TF","hF","ih","_Z","cF","E1","UG","eh","$u","oG","Ff","LG","wF","gF","Ah","un","l9","bh","yG","BF","nh","lG","Ph","EP","TG","hG","vF","M2","EX","cG","$implements__java_lang_Cloneable","FF","Ds","gG","dG","BG","vG","kF","rh","FG","__java$exception","nm","RF","mG","R2","fh","kG","Ma","delete","bG","CF","RG","ps","Pf","W1","ZL","qG","HF","Xa","jG","js","pG","CG","cn","MG","tQ","jP","toArray","VF","Dh","HG","$","UQ","Ce","eQ","WL","EF","tR","SF","L2","VG","EG","E2","SG","sZ","Pi","IG","JF","Ky","Xy","Zy","Wy","AY","nE","qF","xG","jz","In","NG","FZ","rJ","OG","r9","uh","IF","GG","JG","Qh","AQ","contains","zG","YG","ZD","xF","Bp","rl","KG","NF","DJ","XG","nQ","ef","GF","PQ","ZG","$implements__java_lang_CharSequence","i8","ml","it","Dt","J9","wi","_r","xA","Ee","PA","Z4","WG","ntt","Att","CV","_G","$G","yA","aG","$F","zF","YF","KF","eJ","rQ","AJ","WD","XF","bm","qk","nJ","e$","Bj","$L","WF","ett","_F","PJ","iJ","fJ","fQ","aF","Mc","Nc","aL","tm","ts","uJ","QJ","UJ","j$","$z","oJ","zV","Am","Pm","z9","Tj","Fp","LJ","Bh","Lh","dp","Yf","JV","oQ","sJ","yJ","Qs","YK","DQ","er","lJ","As","fm","az","Dm","sh","D0","TJ","nA","zR","hJ","cJ","Hb","pP","uz","wJ","Le","Hp","uQ","um","gJ","wh","dJ","QQ","BJ","Th","os","vJ","FJ","Ba","mJ","hY","QY","om","Lm","za","ym","Un","V_","l0","kJ","Tm","rf","RJ","_D","hm","yQ","jJ","pJ","cm","wm","eY","gm","wf","dm","U2","CJ","ns","MJ","HJ","Lk","N_","VJ","w$","Bm","K_","JW","EJ","fj","_b","vm","NJ","dh","Ql","hi","LR","GV","km","AE","TPt","vV","h4","K0","gh","oV","$j","ch","Rm","Zb","X5","Wa","an","SJ","pm","sz","qJ","Cy","Cm","dQ","eZ","IJ","Mm","xJ","Hm","Vm","bA","eU","Em","Sm","B6","Lb","v6","nt","t2","qm","OJ","SU","qh","Ps","FE","Y9","G5","ZV","xm","Z_","Qa","JJ","Om","Gm","zJ","Jm","zm","YJ","VY","Z9","rs","KJ","XJ","Ym","WJ","$implements__java_lang_Comparable","K9","Km","qV","ba","$J","TU","SK","Hc","ga","tz","Zm","Df","Wm","cc","ez","Az","_m","vX","hE","Pz","rz","iz","w8","$m","fs","fz","hl","ytt","RU","Up","Dz","noCoordinates","noStereo","CP","am","Qz","Uz","tk","MP","Lz","qX","qn","yz","lz","Fh","Ak","d6","AA","nk","BU","jV","RV","bV","sQ","HY","hz","JY","Hz","LY","Pk","rtt","Ptt","W","itt","cz","wz","ob","hashCode","gz","dz","e2","XA","rk","ik","fk","Dk","eP","Jt","mh","vz","Fz","mz","uk","kh","kz","fi","bz","Rz","Nz","Qk","TQ","xa","ok","pz","Rh","T5","M4","i_","dU","Cz","Mz","$implements__java_io_Serializable","XR","r5","lQ","m0","Ez","Sz","HP","vb","wb","tb","op","xV","DK","Iz","xz","A2","Oz","gQ","ti","Tk","Gz","u8","R$","ss","hk","ck","iU","f8","Jh","hb","kb","Jz","zz","En","Yz","Kz","wk","Xz","Zz","lA","ne","Wz","_z","Yj","j5","gk","Qf","tY","stack","nY","containsKey","PY","Bk","vk","ph","mb","equals","rY","qQ","kp","iY","hQ","Aa","DY","wE","Fk","uY","Mn","oY","Wb","wPt","Ga","Uf","mk","oR","wQ","sY","yY","Ttt","Mh","Ch","PK","bk","TY","KE","Rk","Vj","y4","kZ","BQ","xR","pk","of","K1","nM","g$","O$","Ck","Mk","Hk","UR","Ws","c5","wY","U9","Vk","gY","CQ","BY","Hh","Vh","NR","iR","Ek","MV","Uc","oc","Sk","FY","yK","qY","mY","Of","kY","N2","MR","ls","n2","bY","RY","pY","put","g0","Ih","MY","VR","wa","Ik","I2","ny","K4","EY","SY","iy","il","b4","o8","W_","xh","cl","_V","WV","Ok","IY","Gk","ws","NY","OY","GY","Jk","zk","fl","Kk","Nh","$b","vQ","Oh","g4","g2","Gh","ab","gs","Zk","gE","wA","Wk","zY","C5","W5","YY","h5","By","FQ","i2","JQ","YZ","ey","R_","kQ","KY","Ks","ah","XY","ZY","NZ","Bf","_k","WY","_Y","EQ","zh","Yh","Lf","Ay","Nj","$Y","Gj","aY","$k","tK","vR","Cb","jf","ak","MX","sf","Kh","AK","cA","df","Zh","Ab","rK","iK","fK","rb","gR","Xh","uK","QK","UK","sb","fb","oK","LK","sK","Db","lK","_j","NQ","yX","_s","v1","YV","Qb","d_","cause","hc","fc","suppressed","gc","$h","hU","x5","hK","L0","gK","Dj","t5","dK","BK","SV","vK","Kf","Ul","_9","lc","mK","lb","kK","p$","ott","bK","RK","jK","e5","pK","TA","CK","A6","MK","Ny","HK","Vn","eE","VK","EK","Sn","s0","execScript","A5","f2","n5","iP","PP","GZ","D2","RQ","Q8","gb","qP","qK","oPt","IK","xK","KR","GE","k2","yW","BW","QZ","VX","matchAtomCharge","matchAtomMass","matchDBondToDelocalized","matchAromDBondToDelocalized","yf","OK","Fb","HE","JK","Yy","zK","f5","KK","_1","D5","smartsMode","skipCoordinateTemplates","makeHydrogenExplicit","noCactvs","singleDotSeparator","createSmartsWarnings","xc","ZK","aH","u2","PU","aR","lf","mR","GQ","J5","WK","_K","$K","Tf","aK","tX","eX","R5","AX","nX","pb","PX","rX","Vc","Tc","Sc","Gs","yy","jQ","U5","dc","DX","countMode","wV","lU","L8","uX","o5","pQ","L5","Lj","QX","NW","yU","UX","oX","LX","sX","s5","sR","CW","gW","Eb","Xs","AR","lX","TX","hX","cX","wX","gX","a_","BX","FX","MQ","mX","kX","bX","n4","UV","ui","jX","Cs","pX","CX","IZ","lj","BR","HX","V4","I4","S4","e4","N4","vU","FU","E4","oU","x4","q4","R6","O4","xC","y5","SX","HQ","G4","xf","tZ","T2","tr","La","IX","xX","da","NX","OX","aW","SQ","hf","JX","zX","Ob","qA","YX","Jb","zb","KX","A4","XX","t$","ZX","ky","D9","_X","$0","$X","uc","AZ","U6","D4","TV","nZ","d5","eR","PZ","eA","di","dl","f$","rZ","iZ","nR","cf","te","A9","fZ","DZ","uZ","PR","UZ","oZ","LZ","rR","yZ","Dtt","w5","TZ","Ss","Vs","hZ","cZ","ol","Xf","bc","L9","s9","o2","DR","wZ","uR","gZ","g5","dZ","zs","E_","BZ","B5","mZ","B4","v5","yR","Kj","Oy","bZ","RZ","lR","OE","xE","NE","F5","mC","J6","UU","py","$6","jZ","rr","ci","XV","ir","fr","ur","Qr","pf","pZ","vj","CZ","TR","MZ","HZ","hR","kc","cR","b5","qs","sW","VZ","qj","Z5","D_","EZ","SZ","qZ","Ra","$_","xZ","OZ","Es","JZ","c8","VQ","UW","zQ","zZ","dj","ca","KZ","wR","U4","PE","o4","rE","hV","iE","ZZ","sortByIDCode","EU","dR","gV","pW","Sj","Uj","F_","WZ","RW","Is","kE","mE","ly","$Z","p5","aZ","tW","rW","bR","RR","eW","jR","AW","nW","pR","h8","PW","CR","k6","iW","fW","Wf","jy","HR","S5","DW","uW","Pp","QW","SW","oW","H5","LW","Ur","Y$","lW","TW","D$","ma","oa","cW","SR","wW","qR","V5","FW","IR","qy","mW","atan2","JR","YE","mV","kW","bW","jW","qa","r$","MW","HW","createSymmetryRank","considerStereoheterotopicity","encodeAtomCustomLabels","encodeAtomSelection","assignParitiesToTetrahedralN","coordsAre3d","createPseudoStereoGroups","distinguishRacemicOrGroups","tieBreakFreeValenceAtoms","encodeAtomCustomLabelsWithoutRanking","neglectAnyStereoInformation","ftt","EW","OR","E5","GR","i9","Mf","Cf","qW","IW","xW","ka","q5","OW","GW","F4","ZR","zW","YW","KW","ej","WR","I5","xQ","XW","ZW","WW","maxAVBL","inflateToMaxAVBL","inflateToHighResAVBL","chiralTextBelowMolecule","chiralTextAboveMolecule","chiralTextOnFrameTop","chiralTextOnFrameBottom","_W","vf","_R","$W","E6","S6","Rp","q6","t_","e_","A_","n_","tj","r_","p4","C4","EV","f_","single","double","triple","delocalized","metalLigand","quadruple","quintuple","notRing","ring","aromatic","nonAromatic","ringSize","SP","brigdeMin","brigdeSpan","u_","Q_","U_","wl","U8","L_","s_","nj","ty","xy","Qj","Ua","ij","Da","Oj","l_","Pj","T$","T_","h_","c_","Dp","Za","la","y$","G$","w_","g_","rj","iM","DM","B_","m_","k_","b_","$1","j_","be","ta","t6","HU","p_","C_","M_","Q$","Ta","K$","A$","x_","Ef","Js","E","uj","S_","q_","I$","na","ie","Q9","Gf","I_","O5","O_","Ys","G_","h$","Ka","wj","i$","H$","J_","noTabus","showAtomNumber","showBondNumber","highlightQueryFeatures","showMapping","suppressChiralText","suppressCIPParity","suppressESR","noCarbonLabelWithCustomLabel","noAtomCustomLabels","showSymmetryAny","showSymmetrySimple","showSymmetryStereoHeterotopicity","noImplicitAtomLabelColors","noStereoProblem","noColorOnESRAndCIP","noImplicitHydrogen","drawBondsInGray","y6","l6","z_","yj","Y_","AU","Oa","Zs","ja","hj","Jf","DU","N6","z5","X_","Dy","Qp","__","gj","kV","r6","utt","f9","Mj","c4","IV","mj","JC","zC","YC","KC","XC","ZC","WC","_C","$C","aC","Z$","Xj","Utt","v4","u$","NC","$s","U$","up","C6","Vp","as","pj","Hj","_$","L$","s$","KV","d8","fV","jp","l$","_a","FV","fM","j6","Ej","d$","Pl","dV","B$","rU","Ha","N$","X$","v$","F$","m$","rP","tp","Ij","J$","k$","b$","Py","zj","WH","C$","Pa","xj","V$","E$","jU","LV","sV","S$","q$","PM","rM","BE","vE","ic","Jj","M0","W$","$$","OC","Wj","gPt","iV","ia","ua","tt","et","lt","st","j2","I6","Yp","Ap","gU","d4","Ea","Lp","ya","notAromatic","notChain","not2RingBonds","not3RingBonds","not4RingBonds","noMoreNeighbours","moreNeighbours","matchStereo","not0PiElectrons","not1PiElectron","not2PiElectrons","not0Hydrogen","not1Hydrogen","not2Hydrogen","not3Hydrogen","not0Neighbours","not1Neighbour","not2Neighbours","not3Neighbours","not4Neighbours","notChargeNeg","notCharge0","noChargePos","ringSize0","ringSize3","ringSize4","ringSize5","ringSize6","ringSize7","ringSizeLarge","ip","F6","Sa","F2","ct","p6","Hf","v2","Ly","sy","tU","KQ","XQ","WQ","_Q","B2","uy","Qy","Uy","oy","va","Fa","ltt","e6","tV","Pt","Tt","Kt","Ct","$t","Ut","Ht","Qt","Nt","e1","Rt","Lt","j1","St","g1","Va","Gp","O6","My","G6","eC","AC","Hy","z6","PC","Y6","K6","rC","iC","fC","DC","uC","QC","UC","X6","oC","LC","sC","yC","lC","QU","hC","W6","cC","wC","gC","dC","_6","BC","vC","FC","Vy","a6","kC","bC","RC","jC","pC","CC","Ey","MC","HC","t4","VC","EC","SC","qC","IC","Ty","$Q","u4","C2","_y","$y","u9","Nf","Ia","$a","ZQ","Vf","T6","h6","aQ","c6","w6","g6","F1","w4","vy","Fy","my","T0","G0","OA","b0","fe","Ke","gA","yV","lV","Ya","Tp","zE","Kp","Xp","Zp","x6","Wp","_p","$p","tC","Gy","Jy","DV","zy","r4","i4","uV","f4","QV","R4","Qtt","T9","F8","QP","UP","tn","h9","xn","en","P6","qp","Ip","xp","Np","Op","V6","Cp","Mp","PV","rV","oE","DE","UE","uE","QE","fE","lr","_f","ht","$f","af","tD","Q6","uM","QM","UM","oM","LM","sM","yM","lM","TM","hM","cM","wM","gM","dM","BM","vM","FM","mM","kM","bM","RM","jM","pM","CM","MM","HM","VM","EM","SM","qM","IM","xM","NM","OM","GM","JM","zM","YM","KM","XM","ZM","WM","_M","$M","aM","tH","eH","AH","PH","rH","iH","fH","DH","uH","QH","UH","oH","LH","sH","yH","lH","TH","hH","cH","wH","gH","dH","BH","vH","FH","mH","kH","bH","RH","jH","pH","CH","MH","HH","VH","EH","SH","qH","IH","xH","NH","OH","GH","KH","eV","AV","_H","nV","ZH","wc","kl","bl","An","qc","NP","k8","O2","G2","ZE","Rl","WE","_E","$E","aE","tS","eS","AS","Tr","nS","OP","J2","jl","xU","PS","oP","pl","rS","NU","iS","OU","fS","GU","b8","JH","zH","Iy","YH","XH","Vt","Et","yn","Rf","hy","bp","cy","M6","H6","Ry","Ep","Sp","Jp","zp","Sf","qf","GC","sU","IP","tM","eM","AM","If","L4","cV","ay","T4","H2","tl","BV","Al","V2","goog","global","addAll","clear","containsAll","removeAll","retainAll","addAtIndex","addAllAtIndex","setAtIndex","subList","compareTo","ordinal","OV","getCanMolecule","getEncodedCoordinates","getEncodedMapping","getFinalRank","getGraphAtoms","getGraphIndexes","hasCIPParityDistinctionProblem","invalidateCoordinates","normalizeEnantiomer","setParities","htt","ctt","wtt","gtt","dtt","getConformerCount","getOneConformerAsMolecule","getPotentialConformerCount","initializeConformers","strategy","maxTorsionSets","use60degreeSteps","Btt","vtt","Ftt","mtt","assessDruglikeness","getDetail","getDruglikenessString","ktt","getTotalEnergy","btt","Rtt","jtt","addAtom","addFragment","addMissingChirality","addOrChangeAtom","addOrChangeBond","addRing","addRingToAtom","addRingToBond","addSubstituent","canonizeCharge","changeAtom","changeAtomCharge","changeBond","convertStereoBondsToSingleBonds","copyAtom","copyBond","copyMoleculeByBonds","copyMoleculeProperties","deleteAtom","deleteAtomOrBond","deleteBond","deleteBondAndSurrounding","deleteMarkedAtomsAndBonds","deleteMolecule","deleteSelectedAtoms","findAlleneCenterAtom","findAlleneEndAtom","findAtom","findBINAPChiralityBond","findBond","findRingSystem","getAbsoluteAtomParity","getAbsoluteBondParity","getAllConnAtomsPlusMetalBonds","getAromaticRingCount","getAtomAbnormalValence","getAtomCIPParity","getAtomColor","getAtomESRGroup","getAtomESRType","getAtomList","getAtomListString","getAtomPi","getAtomQueryFeaturesObject","getAtomRadical","getAtomRingBondCount","getAtomRingCount","getAtomX","getAtomY","getAtomZ","getAverageBondLength","getAverageTopologicalAtomDistance","getBond","getBondAngle","getBondBridgeMaxSize","getBondBridgeMinSize","getBondCIPParity","getBondESRGroup","getBondESRType","getBondLength","getBondOrder","getBondParity","getBondPreferredStereoBond","getBondQueryFeatures","getBondQueryFeaturesObject","getBondRingSize","getBondType","getBondTypeSimple","getBonds","getChiralText","getChirality","getDefaultMaxValenceUncharged","getElectronValenceCorrection","getExcludedNeighbourCount","getFisherProjectionParity","getFragmentAtoms","getFragmentNumbers","getFragments","W4","getFreeValence","getHandleHydrogenMap","getHelperArrayStatus","getImplicitHigherValence","getIndex","getLowestFreeValence","getMaxAtoms","getMaxBonds","getMaxValence","getMaxValenceUncharged","getMetalBondedConnAtoms","getMolecularFormula","getMoleculeColor","getMolweight","getName","getNonHydrogenNeighbourCount","getNumberOfHydrogens","getOccupiedValence","getPathBonds","getPathLength","getRingSet","getRotatableBondCount","getStereoCenterCount","getStereoProblem","getSubstituent","getSubstituentSize","getZNeighbour","invalidateHelperArrays","inventCoordinates","is3D","isAlkaliMetal","isAllylicAtom","isAmideTypeBond","isAtomConfigurationUnknown","isAtomMarkedForDeletion","isAtomParityPseudo","isAtomStereoCenter","isAutoMappedAtom","isBINAPChiralityBond","isBondBackgroundHilited","isBondBridge","isBondForegroundHilited","isBondMarkedForDeletion","isBondParityPseudo","isBondParityUnknownOrNone","isChalcogene","isDelocalizedBond","isEarthAlkaliMetal","isElectronegative","isElectropositive","isFlatNitrogen","isHalogene","isMarkedAtom","isMetalAtom","isNaturalAbundance","isNitrogenFamily","isOrganicAtom","isPseudoRotatableBond","isPurelyOrganic","isRingAtom","isRingBond","isSelectedAtom","isSelectedBond","isSimpleHydrogen","isSmallRingAtom","isSmallRingBond","isStabilizedAtom","isStereoBond","markAtomForDeletion","markBondForDeletion","normalizeAmbiguousBonds","removeAtomColors","removeAtomCustomLabels","removeAtomMarkers","removeAtomSelection","removeBondHiliting","removeQueryFeatures","renumberESRGroups","scaleCoords","setAllAtoms","setAllBonds","setAssignParitiesToNitrogen","setAtomAbnormalValence","setAtomCIPParity","setAtomCharge","setAtomColor","setAtomConfigurationUnknown","setAtomList","setAtomMarker","setAtomParity","setAtomRadical","setAtomSelection","setAtomX","setAtomY","setAtomZ","setBondBackgroundHiliting","setBondCIPParity","setBondESR","setBondForegroundHiliting","setBondOrder","setBondParity","setBondParityUnknownOrNone","setBondQueryFeature","setChirality","setHelperValidity","setHydrogenProtection","setMaxAtoms","setMaxBonds","setMoleculeColor","setName","setParitiesValid","setStereoBondFromAtomParity","setStereoBondFromBondParity","setStereoBondsFromParity","setToRacemate","setUnknownParitiesToExplicitlyUnknown","shareSameFragment","stripIsotopInfo","stripSmallFragments","stripStereoInformation","suggestBondType","supportsImplicitHydrogen","swapAtoms","swapBonds","toIsomericSmiles","createSmarts","includeMapping","kekulizedOutput","toSmarts","toSmiles","translateCoords","validate","zoomAndRotate","zoomAndRotateInit","ptt","Ctt","Mtt","Htt","Vtt","Ett","Stt","qtt","Itt","xtt","Ntt","Ott","Gtt","Jtt","ztt","Ytt","Ktt","Xtt","Ztt","Wtt","_tt","$tt","att","t1t","e1t","A1t","n1t","P1t","r1t","i1t","f1t","D1t","u1t","Q1t","U1t","o1t","L1t","s1t","y1t","l1t","T1t","h1t","c1t","w1t","g1t","d1t","B1t","v1t","F1t","m1t","k1t","b1t","R1t","j1t","p1t","C1t","M1t","H1t","V1t","E1t","S1t","q1t","I1t","x1t","N1t","O1t","G1t","J1t","z1t","Y1t","K1t","X1t","Z1t","W1t","_1t","$1t","a1t","t0t","e0t","A0t","n0t","P0t","r0t","i0t","f0t","D0t","u0t","Q0t","U0t","o0t","L0t","s0t","y0t","l0t","T0t","h0t","c0t","w0t","g0t","d0t","B0t","v0t","F0t","m0t","k0t","b0t","R0t","j0t","p0t","C0t","M0t","H0t","V0t","E0t","S0t","q0t","I0t","x0t","N0t","O0t","G0t","J0t","z0t","Y0t","K0t","X0t","Z0t","W0t","_0t","$0t","a0t","tet","eet","Aet","net","Pet","iet","fet","Det","uet","Qet","Uet","oet","Let","yet","Tet","het","cet","wet","Bet","vet","Fet","met","ket","bet","Ret","jet","pet","Cet","Met","Het","Vet","Eet","qet","Iet","xet","Net","Oet","Get","Jet","zet","Yet","Ket","Xet","Zet","Wet","_et","$et","aet","tAt","eAt","AAt","nAt","PAt","rAt","iAt","fAt","DAt","uAt","QAt","UAt","oAt","LAt","sAt","yAt","lAt","TAt","hAt","cAt","wAt","gAt","dAt","BAt","vAt","FAt","mAt","kAt","bAt","RAt","jAt","pAt","CAt","MAt","HAt","VAt","EAt","SAt","qAt","IAt","xAt","NAt","OAt","GAt","JAt","zAt","YAt","KAt","XAt","ZAt","WAt","_At","$At","aAt","acceptorCount","donorCount","logP","logPString","logS","logSString","polarSurfaceArea","polarSurfaceAreaString","rotatableBondCount","stereoCenterCount","addCatalyst","addCatalystAt","addProduct","addProductAt","addReactant","addReactantAt","getCatalyst","getCatalysts","getHighestMapNo","getMergedCopy","getMolecules","getProduct","getProducts","getReactant","getReactants","getReactionCenterMapNos","isPerfectlyMapped","isReactionLayoutRequired","removeCatalysts","validateMapping","tnt","ent","Ant","nnt","Pnt","rnt","int","fnt","Dnt","unt","Qnt","Unt","setReactant","determineAromaticity","getAtomIndex","getBondIndex","getHeteroPosition","getRingAtoms","getRingBonds","getRingSize","getSharedRing","isAtomMember","isBondMember","isDelocalized","qualifiesAsAmideTypeBond","validateMemberIndex","ont","Lnt","snt","ynt","lnt","getField","getFieldData","getFieldNames","getNextFieldData","getNextMolFile","findFragmentInMolecule","getMatchList","isFragmentInMolecule","setMol","createIndex","getSmartsWarning","parseMolecule","parseReaction","setRandomSeed","assessRisk","Tnt","hnt","cnt","wnt","gnt","dnt","Bnt","vnt","applyTransformation","absoluteWeight","formula","relativeWeight","getGenericEditorArea","toolChanged","Fnt","mnt","knt","bnt","Rnt","jnt","pnt","Cnt","Mnt","Hnt","Vnt","Ent","Snt","qnt","Int","xnt","Nnt","Ont","Gnt","Jnt","znt","Ynt","Knt","Xnt","Znt","Wnt","_nt","$nt","ant","tPt","ePt","APt","nPt","PPt","rPt","iPt","fPt","DPt","uPt","QPt","UPt","build16x16CursorImage","createNativeDialog","createPopupMenu","openChemistryFile","getOrDefault","putIfAbsent","containsValue","keySet","putAll","done","BACKBONE","NORMAL","NOSTEREO","NOSTEREO_TAUTOMER","TAUTOMER","STRATEGY_ADAPTIVE_RANDOM","STRATEGY_LIKELY_RANDOM","STRATEGY_LIKELY_SYSTEMATIC","STRATEGY_PURE_RANDOM","calculate","DRUGLIKENESS_UNKNOWN","MMFF94","MMFF94S","MMFF94SPLUS","HOTSPOT_16","IMAGE_DATA_16","KEY_BACK_SPACE","MODE_DRAWING_OBJECTS","MODE_MARKUSH_STRUCTURE","TableLayoutFill","TableLayoutPreferred","cChainCursor","cDeleteCursor","cFistCursor","cHandCursor","cHandPlusCursor","cInvisibleCursor","cLassoCursor","cLassoPlusCursor","cPointedHandCursor","cSelectRectCursor","cSelectRectPlusCursor","cZoomCursor","CANONIZER_ASSIGN_PARITIES_TO_TETRAHEDRAL_N","CANONIZER_CONSIDER_DIASTEREOTOPICITY","CANONIZER_CONSIDER_ENANTIOTOPICITY","CANONIZER_CONSIDER_STEREOHETEROTOPICITY","CANONIZER_COORDS_ARE_3D","CANONIZER_CREATE_PSEUDO_STEREO_GROUPS","CANONIZER_CREATE_SYMMETRY_RANK","CANONIZER_DISTINGUISH_RACEMIC_OR_GROUPS","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS_WITHOUT_RANKING","CANONIZER_ENCODE_ATOM_SELECTION","CANONIZER_NEGLECT_ANY_STEREO_INFORMATION","CANONIZER_TIE_BREAK_FREE_VALENCE_ATOMS","FISCHER_PROJECTION_LIMIT","FISCHER_PROJECTION_RING_LIMIT","STEREO_ANGLE_LIMIT","VALIDATION_ERRORS_STEREO","VALIDATION_ERROR_AMBIGUOUS_CONFIGURATION","VALIDATION_ERROR_ESR_CENTER_UNKNOWN","VALIDATION_ERROR_OVER_UNDER_SPECIFIED","cAtomCIPParityNone","cAtomCIPParityProblem","cAtomCIPParityRorM","cAtomCIPParitySorP","cAtomColorBlue","cAtomColorDarkGreen","cAtomColorDarkRed","cAtomColorGreen","cAtomColorMagenta","cAtomColorNone","cAtomColorOrange","cAtomColorRed","cAtomLabel","cAtomParity1","cAtomParity2","cAtomParityIsPseudo","cAtomParityUnknown","cAtomQFAny","cAtomQFAromState","cAtomQFAromStateBits","cAtomQFAromStateShift","cAtomQFCharge","cAtomQFChargeBits","cAtomQFChargeShift","cAtomQFDepictedFeatures","cAtomQFENeighbourBits","cAtomQFENeighbourShift","cAtomQFENeighbours","cAtomQFExcludeGroup","cAtomQFFlatNitrogen","cAtomQFHeteroAromatic","cAtomQFHydrogen","cAtomQFHydrogenBits","cAtomQFHydrogenShift","cAtomQFIsNotStereo","cAtomQFIsStereo","cAtomQFMatchStereo","cAtomQFMoreNeighbours","cAtomQFNarrowing","cAtomQFNeighbourBits","cAtomQFNeighbourShift","cAtomQFNeighbours","cAtomQFNewRingSize","cAtomQFNewRingSizeBits","cAtomQFNewRingSizeShift","cAtomQFNoMoreNeighbours","cAtomQFNoOfBits","cAtomQFNot0ENeighbours","cAtomQFNot0Neighbours","cAtomQFNot0PiElectrons","cAtomQFNot1ENeighbour","cAtomQFNot1Neighbour","cAtomQFNot1PiElectron","cAtomQFNot2ENeighbours","cAtomQFNot2Neighbours","cAtomQFNot2PiElectrons","cAtomQFNot2RingBonds","cAtomQFNot3ENeighbours","cAtomQFNot3Neighbours","cAtomQFNot3RingBonds","cAtomQFNot4ENeighbours","cAtomQFNot4Neighbours","cAtomQFNot4RingBonds","cAtomQFNotChain","cAtomQFNotCharge0","cAtomQFNotChargeNeg","cAtomQFNotChargePos","cAtomQFPiElectronBits","cAtomQFPiElectronShift","cAtomQFPiElectrons","cAtomQFRingSize0","cAtomQFRingState","cAtomQFRingStateBits","cAtomQFRingStateShift","cAtomQFRxnParityBits","cAtomQFRxnParityHint","cAtomQFRxnParityInvert","cAtomQFRxnParityRacemize","cAtomQFRxnParityRetain","cAtomQFRxnParityShift","cAtomQFSimpleFeatures","cAtomQFSmallRingSize","cAtomQFSmallRingSizeBits","cAtomQFSmallRingSizeShift","cAtomQFStereoState","cAtomQFStereoStateBits","cAtomQFStereoStateShift","cAtomRadicalState","cAtomRadicalStateD","cAtomRadicalStateNone","cAtomRadicalStateS","cAtomRadicalStateShift","cAtomRadicalStateT","cAtomValence","cBondCIPParityEorP","cBondCIPParityNone","cBondCIPParityProblem","cBondCIPParityZorM","cBondParityEor1","cBondParityNone","cBondParityUnknown","cBondParityZor2","cBondQFAllFeatures","cBondQFAromState","cBondQFAromStateBits","cBondQFAromStateShift","cBondQFAromatic","cBondQFBondTypes","cBondQFBondTypesBits","cBondQFBondTypesShift","cBondQFBridge","cBondQFBridgeBits","cBondQFBridgeMin","cBondQFBridgeMinBits","cBondQFBridgeMinShift","cBondQFBridgeShift","cBondQFBridgeSpan","cBondQFBridgeSpanBits","cBondQFBridgeSpanShift","cBondQFDelocalized","cBondQFDepictedFeatures","cBondQFDouble","cBondQFMatchFormalOrder","cBondQFMatchStereo","cBondQFMetalLigand","cBondQFNarrowing","cBondQFNoOfBits","cBondQFNotAromatic","cBondQFNotRing","cBondQFQuadruple","cBondQFQuintuple","cBondQFRareBondTypes","cBondQFRareBondTypesBits","cBondQFRareBondTypesShift","cBondQFRing","cBondQFRingSize","cBondQFRingSizeBits","cBondQFRingSizeShift","cBondQFRingState","cBondQFRingStateBits","cBondQFRingStateShift","cBondQFSimpleFeatures","cBondQFSingle","cBondQFTriple","cBondTypeCross","cBondTypeDeleted","cBondTypeDelocalized","cBondTypeDouble","cBondTypeDown","cBondTypeIncreaseOrder","cBondTypeMaskSimple","cBondTypeMaskStereo","cBondTypeMetalLigand","cBondTypeQuadruple","cBondTypeQuintuple","cBondTypeSingle","cBondTypeTriple","cChiralityDiastereomers","cChiralityEpimers","cChiralityIsomerCountMask","cChiralityKnownEnantiomer","cChiralityMeso","cChiralityNotChiral","cChiralityRacemic","cChiralityUnknown","cChiralityUnknownEnantiomer","cCommonOxidationState","cDefaultAVBL","cDefaultAllowedPseudoAtoms","cDefaultAtomValence","cESRGroupBits","cESRMaxGroups","cESRTypeAbs","cESRTypeOr","cHelperAll","cHelperBitCIP","cHelperBitIncludeNitrogenParities","cHelperBitParities","cHelperBitRings","cHelperBitRingsSimple","cHelperBitSymmetrySimple","cHelperBitSymmetryStereoHeterotopicity","cHelperBitsStereo","cHelperNone","cHelperParities","cHelperRings","cHelperRingsSimple","cHelperSymmetrySimple","cMaxAtomicNo","cMaxConnAtoms","cMoleculeColorDefault","cMoleculeColorNeutral","cPseudoAtomA","cPseudoAtomAttachmentPoint","cPseudoAtomPolymer","cPseudoAtomR","cPseudoAtomsAGroups","cPseudoAtomsAll","cPseudoAtomsAminoAcids","cPseudoAtomsHydrogenIsotops","getAngle","getAngleDif","getDefaultAverageBondLength","isAtomicNoElectronegative","isAtomicNoElectropositive","setDefaultAverageBondLength","fromMolecules","fromRxn","CATALYST_DELIMITER","INCLUDE_ALL","INCLUDE_CATALYSTS","INCLUDE_DEFAULT","INCLUDE_DRAWING_OBJECTS","INCLUDE_RXN_CODE_ONLY","MOLECULE_DELIMITER","OBJECT_DELIMITER","PRODUCT_IDENTIFIER","_register","MAX_SMALL_RING_SIZE","MODE_SMALL_AND_LARGE_RINGS","MODE_SMALL_AND_LARGE_RINGS_AND_AROMATICITY","MODE_SMALL_RINGS_AND_AROMATICITY","MODE_SMALL_RINGS_ONLY","bitCount","getHexStringFromIndex","getIndexFromHexString","getKeyIDCode","getSimilarityAngleCosine","getSimilarityTanimoto","RISK_HIGH","RISK_LOW","RISK_NAMES","RISK_NO","RISK_UNKNOWN","TYPE_IRRITANT","TYPE_MUTAGENIC","TYPE_REPRODUCTIVE_EFFECTIVE","TYPE_TUMORIGENIC","$isInstance","copyOf","getIdentityHashCode","getNextHash","getObjectIdentityHashCode","toDoubleFromUnsignedInt","dPt","__errFn","__moduleName","__moduleBase","__softPermutationId","__computePropValue","permProps","XE","R8","compatMode","setInterval","clearInterval","jPt","Z0","mS","Resources","TextEncoder","registerFromUrl","pPt","fetch","fromEntries","process","getBuiltinModule","import","meta","dirname","filename","registerFromNodejs","readFileSync","URL","url","href","Lut","sut","yut","lut","Canonizer","Tut","CanonizerUtil","hut","cut","DrugScoreCalculator","wut","DruglikenessPredictor","gut","dut","But","MoleculeProperties","vut","Fut","mut","Reactor","kut","but","RingCollection","Rut","SDFileParser","jut","SSSearcher","SSSearcherWithIndex","Cut","SmilesParser","Mut","ToxicityPredictor","Hut","Transformer","Vut","Util","Eut","applyFragmentLabels","suffix","sssearcher","found","matches","fragmentAtomIndex","moleculeAtomIndex","autoLabelDatabase","raw","autoLabel","MAX_R","combineSmiles","coreSmiles","complexity","core","getCore","rGroups","getRGroups","getComplexity","generate","rGroup","smiles","appendMolecule","mols","newSmiles","currentMol","combinedSmiles","props","nbHAcceptor","nbHDonor","PSA","nbRottable","nbStereoCenter","originalSmiles","updateRPosition","currentChar","currentSubstring","getCamelCase","getParts","currentLabel","parseColumnbProperties","columnProperties","currentColumnName","columnPropery","related","specialType","parseData","headers","header","rawEntries","rawEntry","valueEhnhancer","atomMapping","idcoordinates2D","parseDwar","improveParts","parseDefault","rawData","getAtomsInfo","extra","singleBonds","doubleBonds","tripleBonds","aromaticBonds","cnoHybridation","abnormalValence","cipParity","radical","ringBondCount","allHydrogens","connAtoms","allConnAtoms","implicitHydrogens","isAllylic","isStereoCenter","isRing","isSmallRing","isStabilized","bond","bondOrder","totalBonds","hydrogenOnAtomicNo","labileHydrogen","getImplicitHydrogensCount","allAtoms","getFragmentMF","sortedKeys","toMFString","mfAtom","getCharge","getMolfilesMapping","fromF","toF","fromMoleculeF","toMoleculeF","toMolecule","fromFinalRanks","toFinalRanks","toFrom","fromRank","toRank","getUnsaturation","elementObject","defaultPossibleHints","anyMatches","remarks","getNMRHints","correct","proposed","hints","checkMF","checkUnsaturation","checkStereoAndTautomer","possibleHints","searcherCorrect","searcherAnswer","possibleHint","anyMatch","matchFragment","isMFCorrect","checkSymmetry","hint","hash","getHash","answer","mfCorrect","mfAnswer","unsaturationCorrect","unsaturationAnswer","getNoStereoIDCode","getTautomerIDCode","nbCorrectRanks","nbAnswerRanks","imul","getNextNMRHint","providedHints","providedHint","toxicityPredictor","druglikenessPredictor","getProperties","includeToxicities","includeDruglikeness","moleculeFormula","mutagenic","tumorigenic","irritant","reproductiveEffective","drugLikeness","drugScore","tumurogenic","appendAtomPart","nbOH","carbonyl","hydroxyl","carbonOrHydrogen","neighbour","neighbourAtom","neighbourBond","nbCOOH","nbCHO","nbNH2","amine","nbCN","nbLabileH","toggleHydrogens","toVisualizerMolfile","diastereotopic","highlight","extendedIDs","_atoms","getPathAndTorsion","getPathsInfo","fromLabel","toLabel","withHOSES","fromAtomicNumber","toAtomicNumber","atomsInfo","pathLengthMatrix","getShortestPaths","allShortestPaths","module","this","self","postMessage","IS_PAPA_WORKER","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","chunkSize","chunk","streamer","_config","parseChunk","skipFirstNLines","newline","quoteChar","guessLineEndings","beforeFirstChunk","paused","aborted","preview","workerId","WORKER_ID","finished","complete","_sendError","RemoteChunkSize","_readChunk","_chunkLoaded","stream","XMLHttpRequest","withCredentials","onload","onerror","_chunkError","open","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","status","readyState","responseText","getResponseHeader","statusText","LocalChunkSize","FileReader","webkitSlice","mozSlice","FileReaderSync","readAsText","pause","resume","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","skipEmptyLines","DefaultDelimiter","transformHeader","dynamicTypingFunction","dynamicTyping","code","abort","delimiter","RECORD_SEP","UNIT_SEP","successful","bestDelimiter","delimitersToGuess","getCharIndex","fastMode","escapeChar","BAD_DELIMITERS","linebreak","truncated","renamedHeaders","userError","file","userStep","userChunk","userComplete","terminate","worker","WORKERS_SUPPORTED","NODE_STREAM_INPUT","download","readable","read","File","webkitURL","BLOB_URL","createObjectURL","Blob","Worker","onmessage","config","unparse","quotes","escapeFormulae","BYTE_ORDER_MARK","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","each","attr","files","inputElem","instanceConfig","extend","action","reason","getMoleculeCreators","smarts","smilesParser","defaultCSVOptions","appendCSV","moleculesDB","csv","moleculeCreators","Papa","stats","firstElement","moleculeCreator","moleculeField","isNumeric","lowerField","pushEntry","appendColor","dataLabel","propertyLabel","minHue","maxHue","saturation","lightness","colorLabel","getDB","datum","definedValues","__defProp","__name","segs","joinChar","splitChar","isValidObject","getValue","pathIsArray","pathIsString","separator","hasProp","index_default","appendEntries","idCodePath","indexPath","coordinatesPath","mwPath","smilesPath","molfilePath","keepEmptyMolecules","isUtf8","buf","guessEncoding","decoder","isutf8","getEntriesBoundaries","nextMatch","sdfPart","currentLabels","keep","exclude","include","modifiers","modifiedValue","sdf","mixedEOL","entriesBoundaries","always","statistics","statistic","appendSDF","appendSmilesList","smilesArray","oneSmiles","moleculeInfo","moleculeIDCode","getMoleculeIDCode","molecularFormula","computeProperties","updateStatistics","calculatedStatistics","dataStatistics","stat","pushMoleculeInfo","noWait","resolve","AbortError","getQuery","query","format","search","exactSearch","exactSearchNoStereo","substructureSearch","substructureSearchOR","similaritySearch","processResult","searchAsync","subStructureSearchAsync","queryIDCode","searchResult","candidateMolecule","candidateIDCode","substructureSearchBegin","substructureSearchEnd","queryMW","getMW","queryIndex","searcher","queries","controller","shouldAbort","abortEventListener","signal","performance","queryIdCode","flattenResult","keepMolecule","MoleculesDB","nbMolecules","nbData","calculated","isNumber","getAtomFeatures","currentSphere","rAtomicNumber","getRAtomicNumber","fragmentAcyclicSingleBonds","bonds","order","brokenMolecule","fragmentMap","nbFragments","includeAtom","appendOCLReaction","reactions","newReactions","reaction","rxnCode","oclReaction","checkIfExistsOrAddInfo","processedMolecules","moleculeInfoCallback","asReagent","asProduct","exists","applyOneReactantReactions","tree","currentDepth","maxDepth","maxCurrentDepth","reactants","reactant","todoNextDepth","existsAndInfo","limitReactions","reactor","isMatching","oneReactionProducts","oneReactionProduct","reactionProduct","productExistsAndInfo","needToBeCharged","reactionWithoutOCL","oneReaction","children","getFilteredTrees","nodesToKeep","getNodes","parentMap","getParentMap","currentNode","getValidChildren","trees","nodes","validNodes","node","validChildren","child","getLeaves","leaves","appendLeavesSS","currentBranch","getNodesSS","Reactions","skipProcessed","appendHead","moleculesOrIDCodes","getValidNodes","getFilteredReactions","filteredReactions","clearAsFromProcessedMolecules","todoCurrentLevel","nexts","todo","flat","newNodes","fragmentAcyclicBonds","calculateHoseCodes","parentIDCode","openchemlib_utils_1","getRingsInfo_1","getRingsInfo","ringSet","ringBonds","nbRingForBonds","bondIndex","ringIndex","nbRings","getFragmentableRings","ringsInfo","getRingsInfo_js_1","fragmentableRingBonds","second","end","fragmentRings","getFragmentableRings_js_1","fragmentationResults","rLinks","acyclic","full","fragmentType","acyclicBonds","defaultDatabase","doi","section","description","web","isbn","software","getDatabase","dwar","fullDatabase","defaultDatabase_js_1","getMasses","minDepth","reactionFragmentation","oclMolecule","minIonizations","maxIonizations","minReactions","maxReactions","openchemlib_1","observedMonoisotopicMass","getDatabase_1","reactionDb","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","maybeKey","propName","ref","$$typeof","reactJsxRuntime_production","Fragment","jsx","jsxs","jsxRuntimeModule","REACT_PORTAL_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","MAYBE_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","emptyObject","Component","context","updater","refs","isReactComponent","setState","partialState","forceUpdate","ComponentDummy","PureComponent","pureComponentPrototype","isPureReactComponent","isArrayImpl","ReactSharedInternals","hasOwnProperty","ReactElement","owner","cloneAndReplaceKey","oldElement","newKey","isValidElement","escape","escaperLookup","userProvidedKeyEscapeRegex","getElementKey","noop$1","resolveThenable","thenable","fulfilledValue","mapIntoArray","escapedPrefix","nameSoFar","invokeCallback","_init","_payload","nextNamePrefix","mapChildren","lazyInitializer","payload","_status","ctor","_result","moduleObject","reportGlobalError","reportError","ErrorEvent","event","cancelable","emit","noop","react_production","Children","forEachFunc","forEachContext","only","Profiler","StrictMode","Suspense","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","act","cloneElement","childArray","createContext","defaultValue","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","childrenLength","defaultProps","createRef","forwardRef","render","lazy","memo","compare","startTransition","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","unstable_useCacheRefresh","useCacheRefresh","use","usable","useActionState","permalink","useCallback","deps","useContext","Context","useDebugValue","useDeferredValue","initialValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","passthrough","reducer","useReducer","initialArg","useRef","useState","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useTransition","reactModule","React","formatProdErrorMessage","encodeURIComponent","Internals","findDOMNode","createPortal$1","containerInfo","implementation","getCrossOriginStringAs","reactDom_production","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","createPortal","container","nodeType","flushSync","previousTransition","previousUpdatePriority","preconnect","crossOrigin","prefetchDNS","preinit","integrity","fetchPriority","precedence","nonce","preinitModule","preload","referrerPolicy","imageSrcSet","imageSizes","media","preloadModule","requestFormReset","form","unstable_batchedUpdates","useFormState","useFormStatus","useHostTransitionStatus","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","err","reactDomModule","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","sortIndex","unstable_now","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","localSetTimeout","localClearTimeout","localSetImmediate","advanceTimers","currentTime","timer","startTime","expirationTime","handleTimeout","requestHostCallback","firstTimer","requestHostTimeout","isMessageLoopRunning","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","schedulePerformWorkUntilDeadline","MessageChannel","channel","port","port2","port1","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","task","unstable_continueExecution","unstable_forceFrameRate","fps","unstable_getCurrentPriorityLevel","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","delay","unstable_shouldYield","unstable_wrapCallback","parentPriorityLevel","schedulerModule","Scheduler","ReactDOM","isValidContainer","REACT_LEGACY_ELEMENT_TYPE","REACT_PROVIDER_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_OFFSCREEN_TYPE","REACT_MEMO_CACHE_SENTINEL","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","innerType","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","control","x$0","x$1","catch","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","fiber","getStackByFiberInDevAndProd","workInProgress","return","getNearestMountedFiber","nearestMounted","alternate","flags","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","assertIsMounted","findCurrentFiberUsingSlowPath","parentA","parentB","sibling","didFindChild","child$2","stateNode","findCurrentHostFiberImpl","ReactDOMSharedInternals","sharedNotPendingObject","pending","method","valueStack","createCursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","documentElement","namespaceURI","getOwnHostContext","parentNode","tagName","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","onCommitRoot","root","onCommitFiberRoot","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32Fallback","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","wipLanes","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","finishedLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextTransitionLane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markRootFinished","remainingLanes","spawnedLane","updatedLanes","suspendedRetryLanes","previouslyPendingLanes","expiredLanes","entangledLanes","errorRecoveryDisabledLanes","shellSuspendCounter","entanglements","expirationTimes","hiddenUpdates","index$7","hiddenUpdatesForLane","update","markSpawnedDeferredLane","spawnedLaneIndex","markRootEntangled","rootEntangledLanes","index$8","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","priority","previousPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","getParentSuspenseInstance","getInstanceFromNode","getNodeFromInstance","inst","getResourcesFromRoot","resources","hoistableStyles","hoistableScripts","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","canUseDOM","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","isAttributeNameSafe","attributeName","setValueForAttribute","prefix$10","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","getToStringValue","isCheckable","elem","nodeName","trackValueOnNode","valueField","descriptor","enumerable","setValue","stopTracking","_valueTracker","track","updateValueIfChanged","tracker","lastValue","getActiveElement","doc","activeElement","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","defaultSelected","updateTextarea","initTextarea","setTextContent","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","styleName","isCustomProperty","setProperty","cssFloat","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","passiveBrowserEventsSupported","startText","fallbackText","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","stopPropagation","cancelBubble","persist","isPersistent","EventInterface","eventPhase","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","view","SyntheticUIEvent","lastMovementX","lastMovementY","lastMouseEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","getModifierState","getEventModifierState","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","DragEventInterface","dataTransfer","SyntheticDragEvent","FocusEventInterface","SyntheticFocusEvent","AnimationEventInterface","animationName","elapsedTime","pseudoElement","SyntheticAnimationEvent","ClipboardEventInterface","SyntheticClipboardEvent","CompositionEventInterface","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","KeyboardEventInterface","location","locale","which","SyntheticKeyboardEvent","PointerEventInterface","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticPointerEvent","TouchEventInterface","touches","targetTouches","changedTouches","SyntheticTouchEvent","TransitionEventInterface","propertyName","SyntheticTransitionEvent","WheelEventInterface","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticWheelEvent","ToggleEventInterface","newState","oldState","SyntheticToggleEvent","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","getNativeBeforeInputChars","getFallbackBeforeInputChars","supportedInputTypes","date","datetime","email","month","password","tel","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","listeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$283","isSupported$jscomp$inline_418","element$jscomp$inline_419","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","shallowEqual","objA","objB","keysA","keysB","getLeafNode","getNodeForCharacterOffset","offset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","compareDocumentPosition","getActiveElementDeep","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","contentEditable","restoreSelection","priorSelectionInformation","curFocusedElem","focusedElem","priorSelectionRange","selectionRange","selectionStart","selectionEnd","getSelection","endMarker","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","animation","transition","getVendorPrefixedEventName","prefixMap","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","queue","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","childLanes","_visibility","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","CapturedStacks","createCapturedValueAtFiber","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","memoizedProps","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","popToNextHostParent","popHydrationState","shouldClear","JSCompiler_temp","shouldSetTextContent","getNextHydratable","resetHydrationState","SuspenseException","SuspenseyCommitException","noopSuspenseyCommitThenable","isThenableResolved","noop$3","trackUsedThenable","thenableState","workInProgressRoot","fulfilledThenable","rejectedThenable","suspendedThenable","getSuspendedThenable","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectType","returnFiber","newChild","resolveLazy","lazyType","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deletions","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","pendingProps","createWorkInProgress","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","createFiberFromText","updateElement","elementType","updateFragment","createFiberFromTypeAndProps","updatePortal","portal","createFiberFromPortal","createFiberFromFragment","createChild","readContextDuringReconciliation","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildrenArray","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","reconcileChildrenIterator","reconcileChildFibersImpl","firstChildFiber","createFiberImplClass","reconcileChildFibers","mountChildFibers","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","revealOrder","AbortControllerLocal","AbortController","listener","scheduleCallback$2","NormalPriority","CacheContext","createCache","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","entangleAsyncAction","entangledListeners","requestTransitionLane","pingEngtangledActionScope","chainThenableValue","thenableWithOverride","prevOnStartTransitionFinish","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","currentlyRenderingFiber$1","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","updateQueue","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","checkIfContextChanged","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseState","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","createFunctionComponentUpdateQueue","readContext","useMemoCache","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","pendingQueue","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$54","workInProgressRootRenderLanes","revertLane","hasEagerState","eagerState","workInProgressRootSkippedLanes","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushEffect","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$60","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","stateHook","updateActionStateImpl","currentStateHook","actionQueueHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","refCleanup","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","pendingState","finishedState","thenableForFinishedState","dispatchSetStateInternal","requestUpdateLane","noop$2","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","resetStateQueue","updateId","updateRefresh","refreshCache","provider","createUpdate","root$63","enqueueUpdate","entangleTransitions","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","queueLanes","identifierPrefix","idWithLeadingBit","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","_reactInternals","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","propName$67","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$68","logCaughtError","boundary","onCaughtError","errorBoundary","e$69","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","throwException","rootRenderLanes","propagateParentContextChanges","renderDidSuspendDelayIfPossible","workInProgressRootExitStatus","attachPingListener","transitions","markerInstances","retryQueue","enqueueCapturedUpdate","wrapperError","workInProgressRootConcurrentErrors","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","prepareToReadContext","bailoutOnAlreadyFinishedWork","updateMemoComponent","shouldConstruct","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","nextIsDetached","_pendingVisibility","markRef","deferHiddenOffscreenComponent","cachePool","nextBaseLanes","replayFunctionComponent","updateClassComponent","contextType","initializeUpdateQueue","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","processUpdateQueue","suspendIfUpdateReadFromEntangledAsyncAction","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","hasForceUpdate","cloneUpdateQueue","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","nextInstance","JSCompiler_temp$jscomp$0","overflow","fallback","mountWorkInProgressOffscreenFiber","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","digest","dgst","retryDehydratedSuspenseBoundary","_reactRetry","subtreeFlags","primaryChildren","offscreenProps","createFiberFromOffscreen","scheduleSuspenseWorkOnFiber","propagationRoot","scheduleContextWorkOnParentPath","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","attemptEarlyBailoutIfNoScheduledUpdate","pushProvider","didSuspendBefore","beginWork","lazyComponent","propagateContextChanges","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","canHydrateInstance","canHydrateTextInstance","pooledCacheLanes","valueCursor","currentlyRenderingFiber","lastContextDependency","providerFiber","popProvider","contexts","forcePropagateEntireTree","nextFiber","firstContext","dependency","isInsidePropagationBailout","currentParent","currentDependencies","memoizedValue","readContextForConsumer","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","executionContext","capturedUpdate","newLast","didReadFromEntangledAsyncAction","entangledActionThenable","workInProgress$jscomp$0","instance$jscomp$0","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","callCallback","commitCallbacks","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$112","commitHostMount","autoFocus","src","srcSet","srcset","commitHostUpdate","domElement","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","insertBefore","appendChild","_reactRootContainer","insertOrAppendPlacementNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","shouldFireAfterActiveInstanceBlur","commitBeforeMutationEffects","eventsEnabled","_enabled","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","resolvedPrevProps","__reactInternalSnapshotBeforeUpdate","clearContainerSparingly","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","error$111","commitSuspenseHydrationCallbacks","prevOffscreenSubtreeIsHidden","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","removeChild","prevHostParent","prevHostParentIsContainer","attributes","removeAttributeNode","prevHostParentIsContainer$119","clearSuspenseBoundary","retryIfBlockedOn","getRetryCache","retryCache","_retryCache","attachSuspenseRetryListeners","wakeables","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","querySelector","maybeNodes","getHydratableHoistableCache","rel","content","httpEquiv","charSet","mountHoistable","acquireResource","nextNode","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","_current","recursivelyTraverseDisappearLayoutEffects","parent$jscomp$0","parent$113","before$114","parent$115","before$116","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","accumulateSuspenseyCommitOnFiber","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","FiberNode","resetWorkInProgress","fiberTag","isHostHoistableType","primaryChildInstance","_pendingMarkers","_transitions","detach","attach","pendingChildren","markUpdate","preloadResourceAndSuspendIfNeeded","resource","loading","preloadResource","scheduleRetryEffect","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$131","bubbleProperties","completedWork","didBailout","newChildLanes","child$132","completeWork","pendingContext","queueRecoverableErrors","createElementNS","createTextNode","cache$144","listenToAllSupportedEvents","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootRecoverableErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","rootDoesHavePassiveEffects","rootWithPendingPassiveEffects","pendingPassiveEffectsLanes","pendingPassiveEffectsRemainingLanes","pendingPassiveTransitions","actionScopeLane","suspenseHandler","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","exitStatus","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","didIncludeRenderPhaseUpdate","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","suspendedState","stylesheets","unsuspend","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","index$6","flushSyncWorkAcrossRoots_impl","resetWorkInProgressStack","cancelTimeout","allEntangledLanes","index$4","handleThrow","thrownValue","pushDispatcher","prevDispatcher","pushAsyncDispatcher","prevAsyncDispatcher","shouldYieldForPrerendering","prevExecutionContext","unitOfWork","throwAndUnwindWorkLoop","workLoopSync","thrownValue$164","performUnitOfWork","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","workLoopConcurrent","thrownValue$166","suspendedReason","unwindUnitOfWork","skipSiblings","previousUpdateLanePriority","commitRootImpl","renderPriorityLevel","flushPassiveEffects","callbackNode","callbackPriority","scheduleCallback$1","releaseRootPooledCache","onRecoverableError","root$170","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$172","performSyncWorkOnRoot","shouldAttemptEagerTransition","scheduleTaskForRootDuringMicrotask","index$5","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","scheduleMicrotask","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","FormData","extractEvents$1","maybeTargetInst","formAction","i$jscomp$inline_1439","eventName$jscomp$inline_1440","domEventName$jscomp$inline_1441","capitalizedEvent$jscomp$inline_1442","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","targetFiber","captureName","_instance2","unshift","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","setProp","formEncType","formMethod","formTarget","encType","__html","muted","setPropOnCustomElement","hasSrc","hasSrcSet","propKey","propValue$186","lastProps","lastProp","propKey$203","propKey$219","propKey$224","propKey$229","propKey$234","parentNamespace","dangerouslySetInnerHTML","currentPopstateTransitionEvent","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","suspenseInstance","anyProps","targetInstance","previousSibling","rootContainerInstance","preloadPropsMap","preconnectsSet","previousDispatcher","flushSyncWork","preinitScript","preinitStyle","preinitModuleScript","previousWasRendering","wasRendering","formInst","globalDocument","preconnectAs","limitedEscapedHref","preloadSelector","getStyleKey","getScriptKey","getStylesheetSelectorFromKey","getScriptSelectorFromKey","adoptPreloadPropsForStylesheet","link","reject","insertStylesheet","scripts","async","adoptPreloadPropsForScript","currentProps","styles$242","resource$243","hrefLang","preloadStylesheet","stylesheetPropsFromRawProps","rawProps","preloadProps","styleProps","instance$248","linkInstance","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","hostContext","itemProp","onLoad","onError","matchMedia","onUnsuspend","insertSuspendedStylesheets","commit","stylesheetTimer","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","transitionCallbacks","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedFocus","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queuedExplicitHydrationTargets","accumulateOrCreateContinuousQueuedReplayableEvent","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1686","componentOrElement","internals$jscomp$inline_2165","bundleType","rendererPackageName","currentDispatcherRef","findFiberByHostInstance","reconcilerVersion","hook$jscomp$inline_2166","isDisabled","supportsFiber","inject","reactDomClient_production","createRoot","unstable_strictMode","unstable_transitionCallbacks","hydrateRoot","clientModule","calculatePosition","spacingVertical","spacingHorizontal","calculateInnerBoxSize","calculatePositionSS","childrenBoxSize","anchor","refX","MultilineText","verticalPosition","firstDX","_jsx","_Fragment","Text","horizontalPosition","textAnchor","_jsxs","fontSize","Arrow","headInflectionPoint","markerEnd","getArrows","arrows","getArrowsSS","getLabel","getID","getBoxes","boxes","appendBoxes","prepareTree","prepareTreeSS","nodeRenderer","nodeRendererOptions","shouldSkipBranch","elementAndSize","parents","MarkerDef","markerWidth","markerHeight","refY","orient","SVGBoxesTree","arrowRendererOptions","positionOptions","svgSize","xmlns","viewBox","Rectangle","SVG","moleculeRenderer","topLabel","getTopLabel","getBoxStyle","maxWidth","maxHeight","getMoleculeStyle","svgs","addStyleToSVG","joinSVGs","getPlus","getSVGViewBox","currentWidth","shiftX","shiftY","shiftedSVG","styleObjectToString","styleArray","hasOwn","kebabCaseProperty","svgTag","styleString","styleRectange","taxonomyRenderer","minSize","taxonomy","getTaxonomy","nbTaxonomies","getNbTaxonomies","fontStyle","fontFamily","getStringSize","textWith","positionX","dominantBaseline","tempElement","visibility","getFragmentationSVG","accuracy","maxIntensity","react_tree_svg_1","getPeakInRange","rendererOptions","massAccuracy","fragmentation","cyclic","groupResults","mass_fragmentation_1","oneFragment","allFragments","appendResults","groupFragmentationResults","sortedResults","currentResult","lastFragment","groupedResults","ocl","sequenceToMF","fivePrimeTerminal","threePrimeTerminal","circular","fivePrime","nucleotideType","desoxyNucleotides","oxyNucleotides","complementary","alcohol","monophosphate","triphosphate","furanThreeTerm","nucleotide","furanThreeTerm_js_1","addFiveTerm","fiveTerm","baseLoss_1","baseLoss","mfLosses","baseLoss_js_1","addFiveTermBaseLoss","abcdBaseLoss","loss","addInternalTerm_1","addInternalTerm","ter3","ter5","abw","aby","threeTerm","addThreeTermBaseLoss","wxyzBaseLoss","generateFragments_1","generateFragments","dh2o","zch2","mfparts","addFiveTermBaseLoss_1","addThreeTerm","addThreeTermBaseLoss_1","fromNucleicSequence","sequencesString","mfsArray","sequences","nucleotide_1","fragmentsArray","combined","aminoAcids","pKaC","pKaN","pKa","aa3","aa1","isoElectricPoint","aminoAcids_1","aaObject","calculateCharge","aas","calculateForPh","calculateIEP","combine","calculateChart","yAbs","acid","basic","currentAA","iep","white","splitPeptide","allowNeutralLoss","allowOneNeutralLoss","getAA_1","getAA","chargePeptide_1","chargePeptide","chargeOnePeptide","firstAA","lastAA","sequenceToMF_1","newMF","tmpmf","isOneLetterCode","nTerminal","cTerminal","convertAA1To3","newmf","aa1To3","generatePeptideFragments","maxInternal","minInternal","nTerm","cTerm","addCTerm","iTerm","addNTerm","addITerm","digestPeptide_1","digestPeptide","enzyme","minMissed","maxMissed","minResidue","maxResidue","regexp","getRegexp","nbResidue","__esModule","__createBinding","getColorForIEP","IEP","__importStar","splitPeptide_js_1","__exportStar","fragmentPeptide_1","fragmentPeptide","peptide_1","digestion","protonation","protonationPH","digests","fromPeptidicSequence","originalMFsArray","hasLinked","unlinked","mfsArrayLinked","mf_generator_1","mfsArrayUnlinked","fromRange","rangesString","require","getTypeOf","uint8array","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","pipe","uncompressWorker","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","compressionOptions","unixPermissions","dosPermissions","lie","Uint16Array","_pako","_pakoAction","_pakoOptions","inherits","processChunk","_createPako","transformTo","flush","cleanUp","onData","pako","utf8encode","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","fileRecord","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","registerPrevious","generatedError","lock","generateWorker","_compressWorker","loadAsync","support","defaults","external","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","_read","Buffer","newBufferFrom","allocBuffer","alloc","isBuffer","folder","generateInternalStream","mimeType","checkSupport","generateAsync","generateNodeStream","toNodejsStream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","dataIsReady","_tickScheduled","_tickAndRepeat","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","newBlob","_worker","objectMode","arraybuffer","nodebuffer","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","readAsArrayBuffer","setimmediate","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","_dataBinary","internalStream","_decompressWorker","nodeStream","MutationObserver","WebKitMutationObserver","characterData","onreadystatechange","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","finally","race","immediate","windowBits","memLevel","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","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","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","pending_buf","pending_out","total_out","_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","adler","total_in","insert","ins_h","hash_shift","hash_mask","match_length","_tr_tally","max_lazy_match","last_lit","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","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_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","data_type","_tr_init","deflateInit","deflateReset","deflateResetKeep","hcrc","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","sane","havedict","wbits","ncode","nlen","ndist","have","lens","lendyn","distdyn","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","getPrototypeOf","nextTick","importScripts","args","clearImmediate","fetchArrayBuffer","loadCommercials_1","loadCommercials","jszip_1","__importDefault","fetchArrayBuffer_1","loadingPromises","jsZip","zip","fetchText","mfFromGoogleSheet","papaparse_1","urlReferences","fetchText_js_1","tsv","tsvReferences","formulas","referencesArray","references","modif","infoField","infoFields","ESI","MALDI","loadGoogleSheet_1","loadGoogleSheet","refUUID","uuid","refURL","loadKnapSack_1","loadKnapSack","fileData","emdb","databases","flattenResults","searchMSEM","msem","addBaseline","baselineFct","addNoise","noise","SpectrumGenerator","peakWidthFct","maxPeakHeight","shapeGenerator","assertNumber","assertInteger","addPeaks","addPeak","xPosition","peakFWHM","peakWidth","peakShapeOptions","shapeOptions","widthLeft","widthRight","firstValue","firstPoint","lastPoint","getSpectrum","minPeakHeight","generateSpectrum","generatorOptions","peakOptions","axis2D","peakCoordinates","convertWidthToFWHM","widthData","Spectrum2DGenerator","calculeIntervals","yPosition","xIndex","minMaxZ","minZ","maxZ","generateSpectrum2D","addPeaksOptions","closestPointX","joinX_1","joinX","sortX","maxLines","entryA","entryB","composition","calculateComposition","topY","move","power_1","square","Distribution_1","Distribution","closestPointX_js_1","joinX_js_1","getEmptyCache","emptyCache","multiplyY","setArray","ySorted","xSorted","sortY","relativeValue","power_js_1","distCopy","maxToOne","getDerivedCompositionInfo","shortComposition","isotopeLabel","IsotopicDistribution_1","IsotopicDistribution","spectrum_generator_1","getDerivedCompositionInfo_1","MINIMAL_FWHM","MINIMAL_Y","confidence","partOriginal","cachedDistribution","totalDistribution","newDistribution","isotopicDistribution","absoluteChargeOrOne","deltaNeutrons","finalDistribution","sumBefore","getCSV","getTable","xLabel","yLabel","newPoint","numberXDecimals","numberYDecimals","getMaxY","getSumY","searchSimilarity","flatEntries","auto","isotopic_distribution_1","minSimilarity","experimental","theoretical","experimentalInfo","thereoticalInfo","quantity","_ref","quickSelectMedian","TheilSenRegression","theilSen","slopes","medianSlope","cuts","massShifts","similarities","shifts","ml_regression_theil_sen_1","shiftsPPM","fetchJSON","EMDB","ms_spectrum_1","fromMolecules_js_1","fromNucleicSequence_js_1","search_js_1","searchMSEM_js_1","require$$14","normed","databaseName","forceReload","loadContaminants","loadGoogleSheet_js_1","loadTest","fromArray","loadNeutralTest","maxC","fromArray_js_1","replaceOrAppend","fromRange_js_1","fromPeptidicSequence_js_1","appendFragmentsInfo_js_1","listDatabases","nbEntries","preprocessEARanges_1","preprocessEARanges","targetEA","minCount","mfFromEA","maxTotalError","maxElementError","mfWhile","totalError","mfFromAtomicRatio","sumComposition","relativeComposition","filteredMFs","nbCompositionAtoms","atomicRatio","absError","mfFor","mfAtomicComposition","getMFAtomicComposition","atomicRatios","acc","appendAllDBRefs","allDBRefs","$ref","$id","appendURLs_1","appendURLs","appendAllDBRefs_js_1","collections","force","dbRef","unknowns","searchParams","URLSearchParams","postFetchJSON","includeDBRefs","excludedCollections","baseURL","groupsByCollection","collection","allSettled","addDataForOneCollection","postFetchJSON_js_1","_id","normalizeActivities","activeOrNatural","activities","activityEntry","activity","assay","targetTaxonomies","normalizedActivity","normalizeActivities_js_1","activeOrNaturalDetails","route","fetchActiveOrNatural","includeDBRefs_js_1","appendURLs_js_1","ensureArray","pubmeds","patents","taxonomies","getAllowedEMs_1","getAllowedEMs","allowedEMs","searchWithIonizations_1","searchWithIonizations","fetchJSON_js_1","getAllowedEMs_js_1","parseMasses_js_1","realURL","parseMasses","realMass","activesOrNaturals","prepareSearchParams","searchWithIonizations_js_1","nbMassSpectra","nbPubmeds","nbPatents","noStereoTautomerID","kwTaxonomies","kwActiveAgainst","kwBioassays","kwMeshTerms","kwTitles","minNbMassSpectra","activesOrNaturalsByMF","activesOrNaturals_js_1","nbNaturals","nbBioactives","grouped","naturalProduct","bioactive","groupedArray","compoundsFromMF","titles","getTitles","searchMasses","modifications","modification","massShift","massSpectra_1","massSpectra","searchMasses_js_1","defaultRoutes","routes","allResults","appendAndFilterSimilarity","uniqueMolecules","uniqueMol","mfsFromEMs","compoundsURL","realCompoundsURL","searchParamsCompounds","pubmedCompounds","pubmedID","searchInSilicoSpectraByMF","msComparator","MSComparator","searchInSilicoSpectraByMasses","technique","activesOrNaturalsByMF_js_1","massSpectra_js_1","mfsFromEMs_js_1","searchInSilicoSpectraByMF_js_1","searchInSilicoSpectraByMasses_js_1","OctoChemDB","compoundsFromMF_js_1","activeOrNaturalDetails_js_1","STEMMERS","arabic","armenian","bulgarian","czech","danish","dutch","english","finnish","french","german","greek","hungarian","indian","indonesian","irish","italian","lithuanian","nepali","norwegian","portuguese","romanian","russian","serbian","slovenian","spanish","swedish","tamil","turkish","ukrainian","sanskrit","SPLITTERS","SUPPORTED_LANGUAGES","getLocale","language","baseId","lastId","nano","BigInt","milli","MAX_ARGUMENT_FOR_STACK","safeArrayPush","arr","newArr","newArrLength","sprintf","template","replaceArgs","rawWidth","replacement","formatBytes","bytes","decimals","isInsideWebWorker","WorkerGlobalScope","isInsideNode","release","getNanosecondTimeViaPerformance","formatNanoseconds","getNanosecondsTime","hrtime","bigint","uniqueId","getOwnProperty","sortTokenScorePredicate","intersect","arrays","getDocumentProperties","pathsLength","pathTokens","pathTokensLength","lat","lon","getNested","obj","mapDistanceToMeters","convertDistanceToMeters","distance","createError","removeVectorsFromHits","vectorProperties","hits","lastKey","isAsyncFunction","withIntersection","setIntersection","sets","set1","set2","withUnion","setUnion","union","sleep","SharedArrayBuffer","Atomics","nil","valid","wait","allLanguages","NO_LANGUAGE_WITH_CUSTOM_TOKENIZER","LANGUAGE_NOT_SUPPORTED","INVALID_STEMMER_FUNCTION_TYPE","MISSING_STEMMER","CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY","UNSUPPORTED_COMPONENT","COMPONENT_MUST_BE_FUNCTION","COMPONENT_MUST_BE_FUNCTION_OR_ARRAY_FUNCTIONS","INVALID_SCHEMA_TYPE","DOCUMENT_ID_MUST_BE_STRING","DOCUMENT_ALREADY_EXISTS","DOCUMENT_DOES_NOT_EXIST","MISSING_DOCUMENT_PROPERTY","INVALID_DOCUMENT_PROPERTY","UNKNOWN_INDEX","INVALID_BOOST_VALUE","INVALID_FILTER_OPERATION","SCHEMA_VALIDATION_FAILURE","INVALID_SORT_SCHEMA_TYPE","CANNOT_SORT_BY_ARRAY","UNABLE_TO_SORT_ON_UNKNOWN_FIELD","SORT_DISABLED","UNKNOWN_GROUP_BY_PROPERTY","INVALID_GROUP_BY_PROPERTY","UNKNOWN_FILTER_PROPERTY","INVALID_VECTOR_SIZE","INVALID_VECTOR_VALUE","INVALID_INPUT_VECTOR","WRONG_SEARCH_PROPERTY_TYPE","FACET_NOT_SUPPORTED","INVALID_DISTANCE_SUFFIX","INVALID_SEARCH_MODE","MISSING_VECTOR_AND_SECURE_PROXY","MISSING_TERM","INVALID_VECTOR_INPUT","PLUGIN_CRASHED","PLUGIN_SECURE_PROXY_NOT_FOUND","PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL","ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT","PLUGIN_COMPONENT_CONFLICT","captureStackTrace","formatElapsedTime","formatted","getDocumentIndexId","validateSchema","schema","valueLength","isVectorType","vectorSize","getVectorSize","isArrayType","expectedType","getInnerType","subProp","IS_ARRAY_TYPE","boolean","enum","geopoint","INNER_TYPE","isGeoPointType","createInternalDocumentIDStore","idToInternalId","internalIdToId","save","store","orama","internalDocumentIDStore","internalIdToIdLength","internalIdItem","getInternalDocumentId","internalId","currentId","getDocumentIdFromInternalId","sharedInternalDocumentStore","docs","getMultiple","idsLength","getAll","rawDocument","createDocumentsStore","AVAILABLE_PLUGIN_HOOKS","getAllPluginsByHook","pluginsToRun","pluginsLength","plugins","plugin","OBJECT_COMPONENTS","FUNCTION_COMPONENTS","runSingleHook","hooks","needAsync","runMultipleHook","docsOrIds","runAfterSearch","runBeforeSearch","runAfterCreate","AVLNode","updateHeight","getBalanceFactor","rotateLeft","newRoot","rotateRight","fromJSON","AVLTree","insertCount","rebalanceThreshold","insertNode","insertMultiple","rebalance","rebalanceNode","needRebalance","rebalancedNode","balanceFactor","findNodeByKey","isBalanced","removeNode","removeDocument","successorParent","successor","rangeSearch","greaterThan","inclusive","lessThan","FlatTree","numberToDocumentId","idSet","operation","operationKeys","operationType","resultSet","excludeValues","filterArr","idSets","curr","_boundedLevenshtein","term","word","rowMin","boundedLevenshtein","isBounded","syncBoundedLevenshtein","RadixNode","subWord","updateParent","addDocument","docID","findAllWords","docIDs","docId","wordLength","currentCharacter","childNode","edgeLabel","edgeLabelLength","commonPrefix","newEdgeLabel","newWordLabel","inbetweenNode","newNode","_findLevenshtein","originalTolerance","character","termLength","removeWord","removeDocumentByWord","getCommonPrefix","nodeJson","RadixTree","EARTH_RADIUS","BKDNode","BKDTree","nodeMap","getPointKey","pointKey","existingNode","getDocIDsByCoordinates","removeDocByID","deleteNode","searchByRadius","highPrecision","distanceFn","vincentyDistance","haversineDistance","distA","distB","searchByPolygon","polygon","isInsidePolygon","isPointInPolygon","centroid","calculatePolygonCentroid","buildNodeMap","totalArea","centroidX","centroidY","polygonLength","areaSegment","centroidCoordinate","isInside","coord1","coord2","lat1","lat2","deltaLat","deltaLon","sinU1","cosU1","sinU2","cosU2","prevLambda","iterationLimit","sinSigma","cosSigma","sigma","sinAlpha","cos2Alpha","cos2SigmaM","sinLambda","cosLambda","uSquared","deltaSigma","BoolNode","true","false","bool","BM25","matchingCount","docsCount","fieldLength","averageFieldLength","idf","DEFAULT_SIMILARITY","VectorIndex","vectors","internalDocumentId","Float32Array","magnitude","getMagnitude","whereFiltersIDs","findSimilarVectors","vectorLength","targetVector","targetMagnitude","similarVectors","vectorId","dotProduct","insertDocumentScoreParameters","tokens","avgFieldLength","fieldLengths","frequencies","insertTokenScoreParameters","token","tokenFrequency","tokenOccurrences","removeDocumentScoreParameters","removeTokenScoreParameters","vectorIndexes","searchableProperties","searchablePropertiesWithTypes","insertScalarBuilder","tokenizer","avlRebalanceThreshold","tokenize","schemaType","insertVector","insertScalar","elementsLength","removeScalar","innerSchemaType","calculateResultScores","bm25Relevance","resultsMap","boostPerProperty","keywordMatchesMap","documentIDs","oramaOccurrences","oramaFrequencies","termOccurrences","documentIDsLength","propertyMatches","bm25","searchInProperty","tokenLength","termsFound","termsFoundLength","propertiesToSearch","boost","relevance","keywordsCount","fullMatches","remainingResults","fid","additionalResults","searchByWhereClause","filters","filterKeys","filtersMap","filteredIDs","reqOperation","inside","distanceInMeters","addGeoResult","filteredIDsResults","addFindResult","operationOpt","operationValue","getSearchableProperties","getSearchablePropertiesWithTypes","rawIndexes","rawVectorIndexes","dumpVectorIndexes","savedIndexes","keysLength","innerCreate","sortableDeniedProperties","sorter","enabled","sortableProperties","sortablePropertiesWithTypes","sorts","orderedDocsToRemove","orderedDocs","isSortEnabled","unsortableProperties","ensureOrderedDocsAreDeletedByProperty","ensureIsSorted","ensurePropertyIsSorted","stringSort","localeCompare","numberSort","booleanSort","predicate","orderedDocsLength","ensureOrderedDocsAreDeleted","sortBy","docIds","isDesc","indexOfA","indexOfB","isAIndexed","isBIndexed","getSortableProperties","getSortablePropertiesWithTypes","createSorter","DIACRITICS_CHARCODE_START","DIACRITICS_CHARCODE_END","CHARCODE_REPLACE_MAPPING","replaceChar","replaceDiacritics","stringCharCode","step2List","ational","tional","enci","anci","izer","bli","alli","entli","eli","ousli","ization","ation","ator","alism","iveness","fulness","ousness","aliti","iviti","biliti","logi","step3List","icate","ative","alize","iciti","ical","ful","ness","mgr0","meq1","mgr1","s_v","stemmer","stem","re2","re3","re4","firstch","normalizeToken","withCache","normalizationCache","stopWords","stemmerSkipProperties","tokenizeSkipProperties","splitRule","trimTokens","allowDuplicates","createTokenizer","stemming","validateComponents","components","defaultComponents","rawKey","getComponents","pluginComponents","documentsStore","customTokenizer","internalDocumentStore","beforeInsert","afterInsert","beforeRemove","afterRemove","beforeUpdate","afterUpdate","beforeSearch","afterSearch","beforeInsertMultiple","afterInsertMultiple","beforeRemoveMultiple","afterRemoveMultiple","afterUpdateMultiple","beforeUpdateMultiple","afterCreate","getVersion","sorting","getByID","MODE_FULLTEXT_SEARCH","MODE_HYBRID_SEARCH","MODE_VECTOR_SEARCH","kInsertions","kRemovals","emitWarning","trackInsertion","trackRemoval","skipHooks","errorProperty","asyncNeeded","innerInsertAsync","innerInsertSync","ENUM_TYPE","STRING_NUMBER_TYPE","indexableProperties","indexablePropertiesWithTypes","indexableValues","actualType","validateDocumentProperty","indexAndSortDocument","indexAndSortDocumentSync","sortableValues","batchSize","innerInsertMultipleAsync","innerInsertMultipleSync","processNextBatch","startIndex","batch","processAllBatches","waitTime","hasMoreBatches","remainingTime","innerInsertMultiple","removeAsync","removeSync","removeMultiple","removeMultipleAsync","removeMultipleSync","docIdsForHooks","_removeMultiple","_removeMultipleSync","sortAsc","sortDesc","sortingPredicateBuilder","getFacets","facetsConfig","facets","allIDs","allDocs","facetKeys","facet","rangesLength","allDocsLength","facetValue","propertyType","facetValues","calculateNumberFacetBuilder","alreadyInsertedValues","calculateNumberFacet","calculateBooleanStringOrEnumFacetBuilder","calculateBooleanStringOrEnumFacet","currentFacet","stringFacetDefinition","sortingPredicate","DEFAULT_REDUCE","getInitialValue","ALLOWED_TYPES","getGroups","groupBy","propertiesLength","schemaProperties","returnedCount","maxResult","listOfValues","groupByKey","perValue","keyValue","combinations","calculateCombination","combinationsLength","combination","combinationLength","groupsLength","aggregationValue","arrs","innerFullTextSearch","propertiesToSearchWithTypes","hasFilters","where","uniqueDocsIDs","applyDefault","fullTextSearch","timeStart","performSearchLogic","shouldCalculateFacets","distinctOn","includeVectors","isPreflight","preflight","uniqueDocsArray","docsWithIdAndScore","fetchDocumentsWithDistinct","fetchDocuments","elapsed","executeSearchAsync","defaultBM25Params","innerVectorSearch","vectorIndex","searchVector","facetsResults","vectorProperty","newDoc","timeEnd","innerHybridSearch","fullTextIDs","minMaxScoreNormalization","vectorIDs","hybridWeights","mergeAndRankResults","hybridSearch","uniqueTokenScores","returningResults","extractScore","maxScore","normalizeScore","hybridScoreBuilder","textWeight","vectorWeight","textScore","vectorScore","textResults","vectorResults","maxTextScore","maxVectorScore","hasHybridWeights","getQueryWeights","mergedResults","textResultsLength","hybridScore","normalizedScore","hybridScoreValue","vectorResultsLength","resultId","existingRes","resultIDs","uniqueDocsArrayLength","idAndScore","fullDoc","updateAsync","updateSync","newId","updateMultiple","updateMultipleAsync","updateMultipleSync","docsLength","newIds","ORAMA_SECURE_PROXY_PLUGIN_NAME","AnswerSession","proxy","abortController","lastInteractionParams","chatModel","conversationID","messages","initPromise","initialMessages","generateRandomID","ask","askStream","fetchAnswer","abortAnswer","triggerStateChange","getMessages","clearSession","regenerateLast","isLastMessageAssistant","role","interactionId","sources","translatedQuery","errorMessage","stateIdx","addEmptyAssistantMessage","chatStream","model","findLast","onStateChange","getPlugin","pluginExtras","systemPrompt","pluginParams","chat","getActivitiesDB_1","getActivitiesDB","orama_1","queryFields","activitiesDB","getPatentsDB_1","getPatentsDB","abstractsLimit","abstract","nbCompounds","patent","lastCallback","getPubmedsDB_1","getPubmedsDB","meshHeadings","pubmed","meshHeading","descriptorName","article","compounds","getTaxonomiesDB_1","getTaxonomiesDB","superkingdom","kingdom","phylum","class","family","genus","species","searchActivitiesDB_1","searchActivitiesDB","terms","maxNbEntries","minScore","queryResult","activityDocument","searchPatentsDB_1","searchPatentsDB","patentsDB","boostFields","searchPubmedsDB_1","searchPubmedsDB","pubmedsDB","searchTaxonomiesDB_1","searchTaxonomiesDB","taxonomiesDB","currentTaxonomy","taxonomiesDocument","summarizeEmptyTerms_1","summarizeEmptyTerms","patentsMaxNbEntries","nbCompoundsEntryA","nbCompoundsEntryB","pubmedsMaxNbEntries","activitiesMaxNbEntries","taxonomiesMaxNbEntries","summarize","isInitialized","creatingDB","createDB","taxonomyRanks","taxonomyComparator","field","taxonomyRanks_js_1","createTaxonomyTree","rankLimit","taxonomyRanks_1","reachedRankLimit","branch","cleanEmptyBranches","appendInternals","assignSlot","residues","maxNumberLines","internals","used","residue","paper","usedSlots","appendResidues_1","appendResidues","Peptide","Nucleotide","STATE_BEGIN","STATE_MIDDLE","STATE_END","nextChar","nextNextChar","fromBegin","getModifiedReplacement","alternatives","replacements","getUnknownReplacement","removeStartEndParenthesis","nbOver","nbUnder","unknownResidue","SYMBOLS","replaced","modifiedResidue","residueCode","alternativeOneLetter","ALTERNATIVES","_name","registerMethods","addMethodNames","getOwnPropertyNames","methods$1","getMethodsFor","getMethodNames","names","getPaper_browser","getPaper","svg_js_1","appendResiduesPosition_1","appendResiduesPosition","getPaper_1","leftRightBorders","spaceBetweenResidues","xPos","xOld","textWidth","getTextWidth","setPaper","nbLines","topPosition","bottomPosition","labelFontFamily","labelSize","analysisResult","numberResidues","merge","textColor","similariy","filterResults","minQuantity","showInternals","minRelativeQuantity","appendRows","allResidues","appendRowsInformation","filtered","firstResidue","lastResidue","fromResidue","toResidue","firstIndex","maxNbOver","maxNbUnder","script","drawLabel","plain","drawInternals_1","drawInternals","drawLabel_1","spaceBetweenInternalLines","onmouseover","onmouseout","drawReplacements","drawTerminals_1","drawTerminals","linecap","drawSequence_1","drawSequence","sequenceSVG","analysisResults","parsing","drawOptions","appendResults_1","appendRows_1","appendInternals_1","IDX","HEX","BUFFER","getPeakWidthFct","massOptions","addUniqueKeyToColumns","positiveRows","columnIndexInK","groupColumnsBySign","mapped","cssls","XtX","XtY","Pset","choXtX","luXtX","sortedPset","sortedEset","sortCollectionSet","cols2Solve","vars","initialisation","Fset","setDifference","optimality","maxIter","gradientTolerance","Jset","fullSet","colIndex","notPset","fcnnls","infeasIndex","Hset","hRowColIdx","negRowColIdx","alphaMin","minIdx","idx2zero","newParam","fcnnlsVector","splitMatrix","nonZeroColumns","nonZeroRows","createMatrixIndexes","rowsMapping","columnsMapping","matrices","currentMappingID","processFromACell","appendSubMatrix","submatrix","rowsTodo","nextRow","internalRow","blockFcnnls_1","blockFcnnls","ml_fcnnls_1","ml_matrix_1","splitMatrix_js_1","fullMatrix","originalMatrix","emptyRow","reconstructed","partialReconstructed","appendTarget","mfsDeconvolution","customMFs","getPeakWidthFct_1","getCentroids","newMFs","uuid_1","addIsotopicDistributionAndCheckMF","buildCombined","blockFcnnls_js_1","relativeIntensity","absoluteQuantity","relativeQuantity","matchingScore","getFilteredReconstructed","wClone","filteredReconstructed","getXY","getPeakWidthFct_js_1","reconstruct","EMDBPkg","SpectrumPkg"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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