{"version":3,"file":"obliczeniowo-elementary-math.mjs","sources":["../../../../projects/components/math/elementary-math.ts","../../../../projects/components/math/obliczeniowo-elementary-math.ts"],"sourcesContent":["/* eslint-disable eqeqeq */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { MinMax } from './interfaces/min-max';\n\nexport type Operations = string | number | boolean | Operations[];\nexport class ElementaryMath {\n  /**\n   * Calc modulo of two decimal places numbers\n   */\n  static fmod(value: number, base: number): number {\n    return value - Math.floor(value / base) * base;\n  }\n\n  static radiansToDegrees(angle: number): number {\n    return angle * 180 / Math.PI;\n  }\n\n  static degreesToRadians(angle: number): number {\n    return angle * Math.PI / 180;\n  }\n\n  static minmax(value: number, min: number, max: number): number {\n    return value < min ? min : value > max ? max : value;\n  }\n\n  static getMinMax(array: number[]): MinMax {\n    if (array.length) {\n      const minMax = { min: array[0], max: array[0] };\n\n      array.forEach(v => {\n        if (v > minMax.max) {\n          minMax.max = v;\n        }\n        if (v < minMax.min) {\n          minMax.min = v;\n        }\n      });\n\n      return minMax;\n    }\n    return { min: NaN, max: NaN };\n  }\n\n  /**\n   * Check if string is number\n   * @param n number/string to check if number\n   * @param fully if true will tests if string contain only number format like:\n   *\n   * -1432\n   * -123.45\n   * -123.45e10\n   * -123.45e-10\n   * 123.45e-10\n   * 123.45e10\n   * 123.45\n   * 123\n   *\n   * format 123.45e is not proper number so it is not consider as number, as well as:\n   *\n   * 123 some string\n   * some string 123\n   * 123..\n   * 123.123.\n   * 123e-10e-10\n   *\n   * @returns true if is number (not NaN or infinity)\n   */\n  static isNumeric(n: string | number, fully = false): boolean {\n    if (typeof n === 'number') {\n      return !isNaN(n) && isFinite(n);\n    }\n\n    if (fully) {\n      const reg = /^-?\\d*\\.?\\d*e?-?\\d{1,}$/\n      if (!reg.test(n)) {\n        return false;\n      }\n    }\n\n    return !isNaN(parseFloat(n));\n  }\n\n  static precision(value: number): number {\n    return (value - Math.floor(value)) < 0.5 && Math.floor(value) || Math.ceil(value);\n  }\n\n  static average(values: number[]): number {\n    return values.reduce((p, c) => (p += c, p), 0) / values.length;\n  }\n\n  static standardDeviation(values: number[]): number {\n    const average = ElementaryMath.average(values);\n    return Math.sqrt(values.reduce((p, c) => (p += (c - average) * (c - average), p), 0) / values.length);\n  }\n\n  static averageAndStandardDeviation(values: number[]): {\n    middle: number;\n    standardDeviation: number;\n  } {\n    const middle = ElementaryMath.average(values);\n    return {\n      middle,\n      standardDeviation: Math.sqrt(values.reduce((p, c) => (p += (c - middle) * (c - middle), p), 0) / values.length)\n    };\n  }\n\n  static normalization(values: number[]): number[] {\n    const params = ElementaryMath.averageAndStandardDeviation(values);\n\n    return values.map(value => (value - params.middle) / (params.standardDeviation || 1));\n  }\n\n  /**\n   * Calc how many times each unique value exist in table of numbers\n   * @param values numeric values to count\n   * @returns Map object to collect counted times numeric values as key: value, value: count\n   *\n   * @example\n   *\n   * countUnique([10, 10, 10, 20, 20, 30])\n   *\n   * return: Map(3) { 10 → 3, 20 → 2, 30 → 1 }\n   */\n  static countUnique(values: number[]): Map<number, number> {\n    const map = new Map<number, number>();\n\n    values.forEach(value => {\n      map.set(value, map.has(value) ? (map.get(value) || 1) + 1 : 1)\n    })\n\n    return map;\n  }\n\n  /**\n   * Calc weighted average\n   * @param values values table\n   * @param weights weights table\n   * @returns calculated average if values.length === weights.length, else NaN\n   */\n  static averageWeighted(values: number[], weights: number[]): number {\n    if (values.length !== weights.length) {\n      return NaN;\n    } else if (values.length) {\n      return values.reduce((p, c, index) => (p += c * weights[index], p), 0) / (weights.reduce((p, c) => (p += c, p), 0) || 1);\n    }\n\n    return 0;\n  }\n\n  /**\n   * Pick up n% position of sorted array of numbers\n   * @param percentages table of percentage as for example [10, 20, 30, 40, 50]\n   * @param values table of numeric values [5, 10, 15, 20, 20, 20, 20, 20, 50, 60]\n   * @returns for given above inputs [10, 15, 20, 20, 20]\n   */\n  static percentagesByPosition(percentages: number[], values: number[]): number[] {\n    values = values.sort((a, b) => a - b);\n\n    return percentages.map(percentage => values[Math.floor(values.length * percentage / 100)]);\n  }\n\n  /**\n   * Calc sum of values and divide all elements by it and multiply by multiplier\n   * @param values vector of numbers [100, 200, 300, 400, 1000]\n   * @param multiply by default 100 to get percentages\n   * @returns for given input [5, 10, 15, 20, 50] as percentages\n   */\n  static percentagesBySum(values: number[], multiply: number = 100): number[] {\n    const sum = ElementaryMath.sum(values);\n\n    return values.map(value => value / sum * multiply);\n  }\n\n  /**\n   * Find abs max value in values numbers vector and divide each value by it and multiply by 100\n   * @param values example: [10, 20, 30, 200, 40, 20, -400]\n   * @param multiply multiplier example: 100\n   * @returns [2.5, 5, 7.5, 50, 10, 5, -100]\n   */\n  static percentageByAbsMax(values: number[], multiply: number = 100): number[] {\n    const max = values.reduce((p, c, index) => (p = !index ? c : ElementaryMath.absMax(p, c), p));\n\n    return values.map(value => value / max * multiply);\n  }\n\n  /**\n   * Find max value in values numbers vector and divide each value by it and multiply by 100\n   * @param values example: [10, 20, 30, 200, 40, 20, -400]\n   * @param multiply multiplier example: 100\n   * @returns [5, 10, 15, 100, 20, 10, -200]\n   */\n  static percentageByMax(values: number[], multiply: number = 100): number[] {\n    const max = values.reduce((p, c, index) => (p = !index ? c : Math.max(p, c), p));\n\n    return values.map(value => value / max * multiply);\n  }\n\n  static sum(values: number[]): number {\n    return values.reduce((p, c) => p += c, 0);\n  }\n\n  static absMax(a: number, b: number): number {\n    return Math.abs(a) < Math.abs(b) ? b : a;\n  }\n\n  static calculate<T = string | number | boolean>(val: Operations, variables: { [name: string]: number }): T {\n    if (val instanceof Array) {\n      const rec = val.map(v => ElementaryMath.calculate<any>(v, variables));\n      switch (rec[0]) {\n        case 'get': {\n          return variables[rec[1].toString()] as T;\n        }\n        case '*':\n        case 'multiply': {\n          return (rec.slice(1).reduce((p: number, c: number) => (p *= c, p), 1)) as T;\n        }\n        case '/':\n        case 'divide': {\n          return (rec[1] / rec[2]) as T;\n        }\n        case '+':\n        case 'add': {\n          return (rec.slice(1).reduce((p: number, c: number) => (p += c, p), 0)) as T;\n        }\n        case '-':\n        case 'subtract': {\n          return (rec[1] - rec[2]) as T;\n        }\n        case 'mod': {\n          return (rec[1] % rec[2]) as T;\n        }\n        case 'exp': {\n          return Math.exp(rec[1]) as T;\n        }\n        case 'pow': {\n          return Math.pow(rec[1], rec[2]) as T;\n        }\n        case 'sin': {\n          return Math.sin(rec[1]) as T;\n        }\n        case 'cos': {\n          return Math.cos(rec[1]) as T;\n        }\n        case 'tan': {\n          return Math.tan(rec[1]) as T;\n        }\n        case 'atan': {\n          return Math.atan(rec[1]) as T;\n        }\n        case 'acos': {\n          return Math.acos(rec[1]) as T;\n        }\n        case 'asin': {\n          return Math.asin(rec[1]) as T;\n        }\n        case 'sinh': {\n          return Math.sinh(rec[1]) as T;\n        }\n        case 'cosh': {\n          return Math.cosh(rec[1]) as T;\n        }\n        case 'tanh': {\n          return Math.tanh(rec[1]) as T;\n        }\n        case 'asinh': {\n          return Math.asinh(rec[1]) as T;\n        }\n        case 'acosh': {\n          return Math.acosh(rec[1]) as T;\n        }\n        case 'atanh': {\n          return Math.atanh(rec[1]) as T;\n        }\n        case 'or': {\n          return (rec[1] || rec[2]) as T;\n        }\n        case 'and': {\n          return (rec[1] && rec[2]) as T;\n        }\n        case 'not': {\n          return (!rec[1]) as T;\n        }\n        case '==': {\n          return (rec[1] == rec[2]) as T;\n        }\n        case '!=': {\n          return (rec[1] != rec[2]) as T;\n        }\n        case '<': {\n          return (rec[1] < rec[2]) as T;\n        }\n        case '<=': {\n          return (rec[1] <= rec[2]) as T;\n        }\n        case '>': {\n          return (rec[1] > rec[2]) as T;\n        }\n        case '>=': {\n          return (rec[1] >= rec[2]) as T;\n        }\n        case 'toRadians': {\n          return ElementaryMath.degreesToRadians(rec[1]) as T;\n        }\n        case 'toDegrees': {\n          return ElementaryMath.degreesToRadians(rec[1]) as T;\n        }\n        case 'join': {\n          return rec.slice(1).map(v => v.toString()).join('') as T;\n        }\n        case 'pi': {\n          return Math.PI as T;\n        }\n        case 'e': {\n          return Math.E as T;\n        }\n        case 'if-else': {\n          return rec[1] ? rec[2] : rec[3];\n        }\n        case 'goldenRatio': {\n          return 1.618033988749894 as T;\n        }\n      }\n    }\n    return val as T;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"MAKa,cAAc,CAAA;AACzB;;AAEG;AACH,IAAA,OAAO,IAAI,CAAC,KAAa,EAAE,IAAY,EAAA;AACrC,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;;IAGhD,OAAO,gBAAgB,CAAC,KAAa,EAAA;AACnC,QAAA,OAAO,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;;IAG9B,OAAO,gBAAgB,CAAC,KAAa,EAAA;AACnC,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG;;AAG9B,IAAA,OAAO,MAAM,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;QACnD,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK;;IAGtD,OAAO,SAAS,CAAC,KAAe,EAAA;AAC9B,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;AAE/C,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE;AAClB,oBAAA,MAAM,CAAC,GAAG,GAAG,CAAC;;AAEhB,gBAAA,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE;AAClB,oBAAA,MAAM,CAAC,GAAG,GAAG,CAAC;;AAElB,aAAC,CAAC;AAEF,YAAA,OAAO,MAAM;;QAEf,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;AAG/B;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACH,IAAA,OAAO,SAAS,CAAC,CAAkB,EAAE,KAAK,GAAG,KAAK,EAAA;AAChD,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;;QAGjC,IAAI,KAAK,EAAE;YACT,MAAM,GAAG,GAAG,yBAAyB;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAChB,gBAAA,OAAO,KAAK;;;QAIhB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;IAG9B,OAAO,SAAS,CAAC,KAAa,EAAA;QAC5B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGnF,OAAO,OAAO,CAAC,MAAgB,EAAA;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;;IAGhE,OAAO,iBAAiB,CAAC,MAAgB,EAAA;QACvC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;AAC9C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;;IAGvG,OAAO,2BAA2B,CAAC,MAAgB,EAAA;QAIjD,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7C,OAAO;YACL,MAAM;AACN,YAAA,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;SAC/G;;IAGH,OAAO,aAAa,CAAC,MAAgB,EAAA;QACnC,MAAM,MAAM,GAAG,cAAc,CAAC,2BAA2B,CAAC,MAAM,CAAC;QAEjE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC;;AAGvF;;;;;;;;;;AAUG;IACH,OAAO,WAAW,CAAC,MAAgB,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB;AAErC,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AACrB,YAAA,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChE,SAAC,CAAC;AAEF,QAAA,OAAO,GAAG;;AAGZ;;;;;AAKG;AACH,IAAA,OAAO,eAAe,CAAC,MAAgB,EAAE,OAAiB,EAAA;QACxD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AACpC,YAAA,OAAO,GAAG;;AACL,aAAA,IAAI,MAAM,CAAC,MAAM,EAAE;YACxB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;;AAG1H,QAAA,OAAO,CAAC;;AAGV;;;;;AAKG;AACH,IAAA,OAAO,qBAAqB,CAAC,WAAqB,EAAE,MAAgB,EAAA;AAClE,QAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAErC,OAAO,WAAW,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;;AAG5F;;;;;AAKG;AACH,IAAA,OAAO,gBAAgB,CAAC,MAAgB,EAAE,WAAmB,GAAG,EAAA;QAC9D,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;AAEtC,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,QAAQ,CAAC;;AAGpD;;;;;AAKG;AACH,IAAA,OAAO,kBAAkB,CAAC,MAAgB,EAAE,WAAmB,GAAG,EAAA;AAChE,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE7F,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,QAAQ,CAAC;;AAGpD;;;;;AAKG;AACH,IAAA,OAAO,eAAe,CAAC,MAAgB,EAAE,WAAmB,GAAG,EAAA;AAC7D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhF,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,QAAQ,CAAC;;IAGpD,OAAO,GAAG,CAAC,MAAgB,EAAA;AACzB,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAG3C,IAAA,OAAO,MAAM,CAAC,CAAS,EAAE,CAAS,EAAA;QAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;;AAG1C,IAAA,OAAO,SAAS,CAAgC,GAAe,EAAE,SAAqC,EAAA;AACpG,QAAA,IAAI,GAAG,YAAY,KAAK,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,SAAS,CAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACrE,YAAA,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACZ,KAAK,KAAK,EAAE;oBACV,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAM;;AAE1C,gBAAA,KAAK,GAAG;gBACR,KAAK,UAAU,EAAE;AACf,oBAAA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,CAAS,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;;AAEvE,gBAAA,KAAK,GAAG;gBACR,KAAK,QAAQ,EAAE;oBACb,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;AAEzB,gBAAA,KAAK,GAAG;gBACR,KAAK,KAAK,EAAE;AACV,oBAAA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,CAAS,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;;AAEvE,gBAAA,KAAK,GAAG;gBACR,KAAK,UAAU,EAAE;oBACf,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;gBAEzB,KAAK,KAAK,EAAE;oBACV,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;gBAEzB,KAAK,KAAK,EAAE;oBACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE9B,KAAK,KAAK,EAAE;AACV,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAEtC,KAAK,KAAK,EAAE;oBACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE9B,KAAK,KAAK,EAAE;oBACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE9B,KAAK,KAAK,EAAE;oBACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE9B,KAAK,MAAM,EAAE;oBACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE/B,KAAK,MAAM,EAAE;oBACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE/B,KAAK,MAAM,EAAE;oBACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE/B,KAAK,MAAM,EAAE;oBACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE/B,KAAK,MAAM,EAAE;oBACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE/B,KAAK,MAAM,EAAE;oBACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAE/B,KAAK,OAAO,EAAE;oBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAEhC,KAAK,OAAO,EAAE;oBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAEhC,KAAK,OAAO,EAAE;oBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAEhC,KAAK,IAAI,EAAE;oBACT,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;;gBAE1B,KAAK,KAAK,EAAE;oBACV,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;;gBAE1B,KAAK,KAAK,EAAE;AACV,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;;gBAEjB,KAAK,IAAI,EAAE;oBACT,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;;gBAE1B,KAAK,IAAI,EAAE;oBACT,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;;gBAE1B,KAAK,GAAG,EAAE;oBACR,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;gBAEzB,KAAK,IAAI,EAAE;oBACT,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;;gBAE1B,KAAK,GAAG,EAAE;oBACR,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;gBAEzB,KAAK,IAAI,EAAE;oBACT,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;;gBAE1B,KAAK,WAAW,EAAE;oBAChB,OAAO,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAErD,KAAK,WAAW,EAAE;oBAChB,OAAO,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM;;gBAErD,KAAK,MAAM,EAAE;oBACX,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAM;;gBAE1D,KAAK,IAAI,EAAE;oBACT,OAAO,IAAI,CAAC,EAAO;;gBAErB,KAAK,GAAG,EAAE;oBACR,OAAO,IAAI,CAAC,CAAM;;gBAEpB,KAAK,SAAS,EAAE;AACd,oBAAA,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;gBAEjC,KAAK,aAAa,EAAE;AAClB,oBAAA,OAAO,iBAAsB;;;;AAInC,QAAA,OAAO,GAAQ;;AAElB;;ACrUD;;AAEG;;;;"}